Scomposizione numero in singole cifre ( C )

di il
2 risposte

Scomposizione numero in singole cifre ( C )

Ciao a tutti,
ho comprato un manuale in quanto ho intenzione di imparare il linguaggio C.
Svolgendo i vari esercizi presenti sul libro sono arrivato a dover scrivere un codice che mi permettesse di scomporre un numero di 5 cifre inserendo uno spazio tra ogni cifra.
Il codice che ho scritto è il seguente:

#include <stdio.h>
#include <stdlib.h>

int main()
{

int numero, numero2, contatore;

printf("Inserisci un numero di cinque cifre:\n");
scanf("%d", &numero);

contatore = 10000;

while ( contatore >= 0){

        numero2 = numero / contatore;
        numero %= contatore;
        printf("%d  ", numero2 );

        contatore /= 10;
}
}
Il programma è funzionante.
Rileggendolo però mi è sorto un dubbio riguardo alla seguente parte di codice:

        numero2 = numero / contatore;
        numero %= contatore;
        printf("%d  ", numero2 );
Il dubbio che ho è il seguente:
avendo la necessità di scomporre un numero intero di 5 cifre dovrò necessariamente usare l'operatore "/", il quale senza l'operatore di resto produrrebbe:
Numero: 12345
Risultato: 1 12 123 1234 12345
Il che è logico dal momento che la variabile numero è un numero intero e di conseguenza i valori dopo la virgola non vengono considerati.

Quindi risulta necessario inserire l'operatore di resto "%" per avere come risultato:
Numero: 12345
Risultato: 1 2 3 4 5

Il dubbio che mi è sorto rileggendo il codice è: in che modo operano i due operatori?
Mi spiego meglio:
Se numero2 = 12345 / 10.000 = 1,2345 ( quindi essendo "numero" intero verranno tagliati i decimali lasciando come risultato 1 )
e numero %= contatore equivale a dire: numero = 12345 % 10.000 = 0,2345, in che modo i due valori lavorano nel "printf"?
E come mai se sposto "numero %= contatore;" da sopra il "printf" a sotto il risultato non cambia? Il programma non legge il codice dall'alto verso il basso?

Spero di essere stato chiaro nel porre la domanda e chiedo scusa se può risultare una domanda banale, ma forse a furia di continuare a leggere il codice mi sto confondendo da solo.
Grazie in anticipo.

2 Risposte

  • Re: Scomposizione numero in singole cifre ( C )

    Credo di aver "ritrovato" la risposta:
    l'errore che commettevo era considerare il resto come 1,2345 quando in realtà il resto è 2345 intero.
    Quindi in realtà il programma dovrebbe funzionare cosi:
    Numero inserito: 12345
    Inizia il ciclo ( contatore = 10000 )
    numero2 = numero / contatore = 1 e taglia i decimali 2345
    numero %= contatore; prende il valore assegnato a "numero" all'inizio del ciclo effettuando l'operazione di resto ottenendo come risultato= 2345.
    Il "printf" stampa = 1.
    Decremento il valore di contatore.
    il ciclo riparte con numero = 2345.
    che viene poi diviso per 1000 = 2
    il resto sarà 345 e il ciclo ripartirà.
    Ecco perchè utilizzare il modulo di resto prima o dopo il "printf" non cambia il risultato, perchè l'operazione di resto viene effettuata dopo la divisione e presa in considerazione all'inizio del ciclo successivo.
    E così via...
  • Re: Scomposizione numero in singole cifre ( C )

    Esatto, il resto viene salvato in numero e viene utilizzato al ciclo successivo per calcolare numero2. Alla printf non cambia niente lavorando col valore di numero2 precedentemente salvato (sarebbe diverso se mettessi numero2=numero/contatore dopo della printf)
Devi accedere o registrarti per scrivere nel forum
2 risposte