PDA

Visualizza la versione completa : [c++] convertitore di basi


mica81
18-01-2004, 23:18
salve a tutti. ho provato a compilare un programma in c++ (ambiente dev/c++) che dato un numero binario o decimale lo converte nella base decimale o binaria. ecco il sorgente:

#include <iostream>
int main()
{
int scelta;
unsigned int n ;
unsigned int m ;
unsigned int dim = 8 * sizeof(unsigned int) - 1 ;
cout<<" scegliere il tipo di operazione da effettuare:"<<endl;
cout<<" 1 convertire il numero dato in notazione binaria: \n";
cout<<" 2 convertire il numero binario dato in notazione decimale: \n";
cin>>scelta;
if (scelta ==1){
cout<<"Inserire il numero decimale " ;
cin>>n ;
while ( dim > 0 && (n >> dim) == 0)
dim-- ;
cout<<"La rappresentazione del numero "<<n<<" in base binaria e'\n" ;
for (int i = dim ; i >= 0 ; i--)
cout<<((n>>i)&1) ;
}
else {
int i=0,bin=0;
char c[20];
cout<<"Inserire il numero binario " ;
scanf("%s",c);
while (c[i]!=0)
{
m=c[i]-'0';
bin+=m;
bin*=2;
i++;
}
bin/=2;
cout<<"Il corrispondente decimale e':"<< bin <<'\n';

}

cout<<endl;
system("pause");
return 0;
}

come vedete mi sono appoggiato al c nella parte del programma che converte il valore binario in decimale.
perchè? perchè non mi veniva in mente nulla!
che ci posso mettere al posto di scanf("%s",c)?
grazie.

Xadoom
19-01-2004, 14:49
Credo dovresti fare una cosa del genere


int c[SIZE];//bisogna conoscere a priori le cifre del numero
int letto;

//....
//....
cin >> letto;
int temp = letto;
for(int i=SIZE; i>=0; i--){
c[i] = temp%10;
temp /= 10;
}
//....
//....

In questo modo dovresti avere un array con le singole cifre in ogni posizione.
Non sono sicuro di aver scritto un codice giusto, ma la logica credo lo sia: prendere ogni volta solo l'ultima cifra .
Ciao

mica81
19-01-2004, 19:20
:ciauz:

Loading