Traccia:
Inserire da tastiera un numero binario terminato con il numero -1.
Ogni cifra inserita deve essere separata con spazio.
Strategia:
E' noto che la conversione in decimale di un numero binario si ottiene sommando le cifre che compongono il numero opportunamente pesate.
Ad esempio:
111010(2) = 1*25 + 1*24 + 1*23 + 0*22 + 1*21 + 0*20 = 32 + 16 + 8 + 0 + 2 + 0 = 58(10)
Osserviamo ora cosa accade se analizziamo il numero binario da sinistra a destra, senza conoscere in partenza da quante cifre è composto il numero.
Partiamo attribuendo un peso provvisorio alla cifra più significativa (la prima a sinistra) corrispondente a 20 (anche se sappiamo che dovrebbe avere un peso di 25).
Il colore rosso è utilizzato per indicare la cifra appena introdotta.
Introduciamo ora la seconda cifra più significativa (sempre contrassegnata in rosso).
Notare che per rettificare il peso e il valore della cifra precedentemente introdotta (in blu) è stato sufficiente moltiplicare per 2.
Introduciamo ora la terza cifra più significativa (sempre contrassegnata in rosso).
Per rettificare il peso e il valore delle cifre precedentemente introdotte (in blu) è sufficiente moltiplicare ciascuna di esse per 2 o, equivalentemente, il TOTALE provvisorio per 2.
Introduciamo ora la quarta cifra più significativa (sempre contrassegnata in rosso).
Per rettificare il peso e il valore delle cifre precedentemente introdotte (in blu) è sufficiente moltiplicare ciascuna di esse per 2.
Introduciamo ora la quinta cifra più significativa (sempre contrassegnata in rosso).
Per rettificare il peso e il valore delle cifre precedentemente introdotte (in blu) è sufficiente moltiplicare ciascuna di esse per 2.
Introduciamo ora la sesta e ultima cifra (sempre contrassegnata in rosso).
Per rettificare il peso e il valore delle cifre precedentemente introdotte (in blu) è sufficiente moltiplicare ciascuna di esse per 2.
Il TOTALE da il valore in base 10 del numero binario di partenza.
Svolgimento:
#include <stdio.h>
int main()
{
int totale=0, cifra;
printf("Inserisci un numero binario separando le cifre con spazio. Terminare con -1\n");
scanf("%d", &cifra);
while (cifra!=-1) {
if (cifra!=0 && cifra!=1){
printf("Il numero inserito e' malformato!\n");
return 1;
}
totale=totale * 2 + cifra;
scanf("%d", &cifra);
}
printf("Il numero binario inserito corrisponde in base 10 a %d\n", totale);
return 0;
}
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 02. Introduzione al C
Paragrafo: 06. Ciclo while
Approfondimento: 02. Es. svolto: numero binario
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Hello World - 02. Variabile di tipo int - 03. Input da tastiera - 04. Controllo condizionale if - 05. Operatori logici - 06. Ciclo while - 07. Operatore modulo - 08. Array - 09. Ciclo for - 10. Ciclo do/while - 11. Variabili di tipo float - 12. Funzione random() - 13. Impostazione del set di caratteri - 14. Definizione di funzioni - 15. Passaggio di parametri: gli array - 16. Variabili: visibilità e durata - 17. Il tipo char - 18. I file - 19. Funzioni matematiche
Indice degli approfondimenti: 01. Es. svolto: media - 02. Es. svolto: numero binario - 03. Es. svolto: menu - 04. Es. svolto: controllo dell'input - 05. Tutorial: integrazione di più funzionalità - 06. Es. svolto: sommare le cifre - 07. Istruzione break: numero primo