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 snfor(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