edutecnica

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.

import java.util.Scanner;
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

.