Esercizio 10
Scrivi un programma che esegua la conversione di un numero decimale in un numero binario usando un vettore di interi rappresentativo di 1 byte=8 bit.
In questo esercizio bisogna automatizzare la procedura
per convertire un numero decimale in un numero binario. Per questioni di
praticità useremo un solo byte che è costituito da 8 bit, dunque, il numero
decimale assegnato in input non deve essere negativo e non deve essere superiore
a 255 che è il massimo numero che può essere immagazzinato in un byte.
Questa acquisizione può essere ottenuta con le istruzioni .
do{
System.out.print("ins.n:");
n=in.nextInt();
}while(n>255 || n<0);
per memorizzare il numero binario da rappresentare
in output usiamo un vettore di interi con otto posizioni
int []T={0,0,0,0,0,0,0,0};
Possiamo automatizzare la procedura solo se già
la sappiamo eseguire manualmente, ad esempio se vogliamo convertire il numero
19 da sistema numerico decimale a sistema numerico binario useremo un procedimento
di divisioni successive per 2 come descritto nel seguente schema:
questo procedimento può essere eseguito con qualsiasi altro numero intero.
L'unica difficoltà, come si vede, è che nella scrittura del numero in output
bisogna partire dal primo numero di resto ottenuto. Per questa ragione il
vettore che abbiamo predisposto deve essere caricato partendo dall'ultimo
elemento a destra nel vettore.
Il contatore che indicizza la posizione di partenza nel vettore deve essere
posizionato su quell'elemento:
int i=T.length-1;
si nota poi che nel ciclo do-while che esegue la scansione
del vettore il contatore viene decrementato
i--;
in questo modo 'camminando al contrario' si carica progressivamente
il vettore con i resti delle divisioni ottenute.
class decbin{
public static void main (String args[]){
Scanner in=new Scanner(System.in);
int n=0;
int []T={0,0,0,0,0,0,0,0};
int i=T.length-1;
do{
System.out.print("ins.n:");
n=in.nextInt();
}while(n>255 || n<0);
do{
//resto della divisione per 2 di n nell'i-esimo elemento del //vettore
T[i]=n%2;
//il nuovo valore di n è n/2 (ad es. 15/2->7)
n=n/2;
//decremento i:il vettore viene composto da dx a sn
i--;
//continua a ciclare finchè il valore di n!=0
}while(n!=0);
//stampo il vettore rapp.il num.binario
for(i=0;i<T.length;i++) System.out.print(T[i]);
}//fine main
}// fine classe
.