Codice non capito

di il
4 risposte

Codice non capito

Salve a tutti ,
volevo chiedere chi mi puoò spiegare le parti di questo codice

#include <stdio.h>

void immissione_dati(void);
void calcolo_conversione(void);
void stampa_conversione(void);

int main(void) {
immissione_dati();
calcolo_conversione();
stampa_conversione();
}

// variabili globali
long numberToConvert;
int base;
int indice;
char convertedDigits[64];

void immissione_dati(void) {
// variabili locali (automaitche)
int mia_var_local;


// legge il numero da convertire e la base di conversione
do {
printf("Numero positivo da convertire: ");
scanf("%ld", &numberToConvert);
}
while (numberToConvert < 0);

do {
printf("Base (2-16): ");
scanf("%i", &base);
}
while (base < 2 || base > 16);
}

void calcolo_conversione(void) {
// static: viene creato solo una volta quando parte il programma
static const char baseDigits[16] = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F' };

// converte il numero nella base specificata
indice = 0;
do { // qua non capisco
convertedDigits[indice++] = baseDigits[numberToConvert % base];
numberToConvert /= base;
}
while (numberToConvert != 0);
}

void stampa_conversione(void) {
// visualizza il risultato in ordine inverso
printf("Numero convertito: ");

for (--indice; indice >= 0; indice--) // qua non capisco
printf("%c", convertedDigits[indice]);

printf("\n");
}

vi ringrazio per il tempo dedicatomi =)

4 Risposte

  • Re: Codice non capito

    ...
  • Re: Codice non capito

    Oltre a ripetere che bisogna utilizzare i tag
     quando si inserisce codice sul forum.. Quel codice calcola il resto della divisione tra la cifra che stai considerando e la base: tale valore è utilizzato come indice per inserire nella parola codice convertita la cifra nella nuova base. Fatto ciò, la variabile indice viene incrementata di uno.(Questa è la parte di codice che tu hai commentato con "non ho capito")
  • Re: Codice non capito

    tuixte ha scritto:


    Oltre a ripetere che bisogna utilizzare i tag [ code ] quando si inserisce codice sul forum.. Quel codice calcola il resto della divisione tra la cifra che stai considerando e la base: tale valore è utilizzato come indice per inserire nella parola codice convertita la cifra nella nuova base. Fatto ciò, la variabile indice viene incrementata di uno.(Questa è la parte di codice che tu hai commentato con "non ho capito")
    @tuxite, un punto di merito perche' hai trovato la scritta qui non capisco che io non avevo visto, ma un punto di demerito perche' la spiegazione e' incomprensibile anche per me che so esattamente che cosa fa quel codice:

    1) le cifre sono '0' ... '9' (per la base 10)
    2) i numeri sono composti da una o piu' cifre

    Una spiegazione piu' semplice e':

    quel pezzetto di codice ha il compito di calcolare le singole cifre, nella base numerica data (immagina che sia 10 per iniziare), del numero considerato, andando da destra a sinistra, quindi iniziando dalle cifre di peso inferiore (in base dieci: unita', decine, centinaia, ...)

    Quindi, ad esempio, se il numero e' 1234 e la base e' 10, il pezzetto di codice esegue i seguenti passi:
    
    ciclo:
        1234 % 10 -> 4    (%: modulo, resto della divisione)
        1234 / 10 -> 123 (/: divisione tra interi, la parte decimale viene troncata)
    ricomincia da 'ciclo' con 123
    
    Nota che la sequenza di cifre generate e': '4', '3', '2', '1'.

    Quindi, non le puoi stampare cosi' come le trovi, perche' scriveresti il numero "4321" e non "1234".

    (Bravo @cryptoprocta_ferox che ha visto anche il SECONDO non capisco !!!!!)
  • Re: Codice non capito

    Ciao, vedo che ci sono due punti in cui hai messo il commento "qua non capisco". Dal momento che al primo ti ha già risposto piuttosto chiaramente @migliorabile, cerco di darti chiarimenti in merito al ciclo for.
    Nel complesso quel ciclo for serve a stampare il contenuto del vettore convertedDigits partendo dalla variabile in ultima posizione per finire con quella in prima posizione. (se hai già fatto degli esercizi di conversione di numeri anche solo su carta, sai che dopo aver fatto il calcolo dei resti devi riscrivere le cifre ordinandole dall'ultima alla prima)
    Nelle condizioni hai
    --indice fa partire la stampa dalla variabile che sta nell'ultima posizione del vettore (scrivere --indice oppure indice-1 è la stessa cosa, ma attenzione che c'è differenza tra --indice e indice--)
    indice >= 0 fa in modo che si esca dal ciclo nel momento in cui la variabile indice assume un valore < 0
    indice-- decrementa di 1 la variabile indice alla fine di ogni ciclo

    Spero di averti aiutato

    PS. La differenza tra --incide e indice-- è che:
    --indice decrementa la variabile e usa il valore decrementato già nell'istruzione in cui si trova, mentre indice-- usa il valore di indice nell'istruzione in cui si trova e ne decrementa di 1 i valore per la prossima istruzione in cui verrà utilizzata la variabile (stessa cosa per ++i e i++)
Devi accedere o registrarti per scrivere nel forum
4 risposte