Esercizio 9
Scrivi un programma che acquisisca un numero intero da tastiera, lo passi ad una funzione che dovrà ritornarlo al programma chiamante sotto forma di un vettore ad 8 posizioni rappresentativo del numero binario corrispondente all'intero ricevuto (conversione decimale-binario) e poi dovrà stamparlo .
#include<iostream>
using namespace std;
const int n=10;
void decbin(int j,int L[n]);//prototipo
main(){
int i,q, T[n]={0,0,0,0,0,0,0,0,0,0};
bool h=false;
//acquisizione del numero intero decimale da tastiera
cout<<"Inserisci numero intero:";cin>>q;
if(q>511)cout<<"Conversione impossibile";
else{
decbin(q,T);//invocazione della funzione
//converte in binario il numero iniziale
//stampo T dalla prima cifra !=0 partendo da sn
for(i=0;i<n;i++)
if(T[i]||h){
cout<<T[i];
h=true;
}
cout<<" versione binaria di "<<q;
}//fine else se q<511
}//fine main
void decbin(int j,int L[n]){
int i=1,pos;
if(j<0) j=j*(-1);
do{
L[n-i]=j%2;
j=j/2;
i++;
}while(j!=0);
}//fine decbin
Qui si è deciso per una funzione void 'decbin'
che riceve come parametri il numero da convertire 'q'
passato per valore e il vettore 'T' che comunque
viene passato per indirizzo; lo dimostra il fatto che pur non ritornando
alcun valore specifico la 'decbin' modifica implicitamente
il vettore T (i vettori vengono sempre e comunque
passati per riferimento alle funzioni) . L'algoritmo per la stampa di T
è condizionato dall'esigenza di non stampare gli zeri superflui che si trovano
nella parte sinistra di T. La variabile binaria h
è inizializzata a false, il ciclo for inizia la sua scansione partendo da
sinistra nel vettore l'elemento attuale del vettore può essere stampato
solo se T[i]=1 oppure se h=true;
la prima ricorrenza uguale a 1 trovata nel vettore viene stampata, in quel
momento h viene posta a true e da lì in poi tutti
i numeri successivi contenuti nel vettore vengono stampati, sia che siano
0 o 1.