edutecnica

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.