Esercizio No. 9 Funzioni

Esercizio No. 9 Funzioni

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.
Soluzione:

#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 tastieracout<<“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.

Commento all'articolo