Forum - C/C++
- conversione da base decimale ad altre basi
sweetema (Normal User)
Rookie
Messaggi: 32
Iscritto: 28/01/2009
ciao,dovrei scrivere un programma ke visualizza una tabella che contiene la rappresentazione binaria,ottale,esadecimale dei numeri compresi tra 1 e 256.io ho pensato erroneamente di fare csì...qualke aiutino??
Codice sorgente - presumibilmente C++
#include<iostream>
#include<stdlib>
#include<iomanip>
#include<cmath>
int functiona( )
{
for ( int a= 1 ; a<= 256 ; a++ )
{
int Aarray[ 10] ;
for ( int i= 0 ; i< 10 ; i++ )
{
int q;
do
{ q= a/ 2 ;
Aarray[ i] = a% 2 ;
a= q;
}
while ( q! = 0) ;
cout << Aarray[ i] << "\n " ;
}
}
}
int functionb( )
{
for ( int b= 1 ; b<= 256 ; b++ )
{
int Barray[ 10] ;
for ( int i= 0 ; i< 10 ; i++ )
{
int q;
do
{
q= b/ 8 ;
Barray[ i] = b% 8 ;
b= q;
}
while ( q! = 0) ;
cout << Barray[ i] << "\n " ;
}
}
}
int functionc( )
{
for ( int c= 1 ; c<= 256 ; c++ )
{
int Carray[ 10] ;
for ( int i= 0 ; i< 10 ; i++ )
{
int q;
do
{
q= c/ 16 ;
Carray[ i] = c% 16 ;
c= q;
}
while ( q! = 0) ;
cout << Carray[ i] << "\n " ;
}
}
}
int main( )
{
cout << "B.decimale" << setw( 20 ) << "B.binaria" << setw( 20 ) << "B.ottale" << setw( 20 ) << "B.esadecimale\n " ;
for ( int j= 1 ; j<= 256 ; j++ )
{
cout << j<< setw( 30 ) << functiona( ) << setw( 20 ) << functionb( ) << setw( 20 ) << functionc( ) << "\n " ;
}
return 0 ;
}
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
ciao prova cosi:
Codice sorgente - presumibilmente C#
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 256
void ConvertToBase( int num, int base , char * result) ;
int main( )
{
char p[ MAX] = { 0} ;
printf( "Dec\t Bin\t Oct\t Hex\n " ) ;
for ( int i= 1 ; i< MAX; i++ )
{
printf( "%d\t " ,i) ;
ConvertToBase( i,2,p) ; /* converto in base 2*/
printf( "%s\t " ,p) ;
ConvertToBase( i,8,p) ; /* converto in base 8*/
printf( "%s\t " ,p) ;
ConvertToBase( i,16,p) ; /* converto in base 16*/
printf( "%s\n " ,p) ;
}
return 1 ;
}
void ConvertToBase( int num, int base , char * ris)
{
/* questa funzione converte il valore della variabile num nel
rispettivo valore contenuto nella variabile base, e restituisce
il risultato in un array di caratteri (ris)*/
int i= 0, len = 1 ;
int ArrayList[ MAX] = { 0} ;
memset( ris,0,MAX) ;
while ( num > 0)
{
ArrayList[ i++ ] = num % base;
num /= base;
}
/*i valori ottenuti sono al contrario, cioè
l'array ArrayList va letto dal basso verso l'alto*/
i--;
/* inserisco i valori ottenuti nell'array ris,
inserendo le lettere al posto dei valori che vanno da
10 a 15 nel caso di una conversione in base 16*/
for ( int y= 0 ; i>= 0 ; i-- , y++ )
{
switch ( ArrayList[ i] )
{
case 10 :
ris[ y] = 'A' ;
continue;
case 11 :
ris[ y] = 'B' ;
continue;
case 12 :
ris[ y] = 'C' ;
continue;
case 13 :
ris[ y] = 'D' ;
continue;
case 14 :
ris[ y] = 'E' ;
continue;
case 15 :
ris[ y] = 'F' ;
continue;
}
itoa( ArrayList[ i] ,& ris[ y] ,10) ;
}
}
ho commentato abbastanza il codice.
Ciao.
sweetema (Normal User)
Rookie
Messaggi: 32
Iscritto: 28/01/2009
grazie tante!!xò sè possibile vorrei avere kiarimenti su alcuni tratti ke non ho studiato durante il corso...
Codice sorgente - presumibilmente C#
printf( "%d\t " ,i) ;
ConvertToBase( i,2,p) ; /* converto in base 2*/
printf( "%s\t " ,p) ;
ConvertToBase( i,8,p) ; /* converto in base 8*/
printf( "%s\t " ,p) ;
ConvertToBase( i,16,p) ; /* converto in base 16*/
printf( "%s\n " ,p) ;
e anche
Codice sorgente - presumibilmente Plain Text
e infine
Codice sorgente - presumibilmente Plain Text
itoa(ArrayList[i],&ris[y],10);
scusami e grazie ancora!!!!!!!!!!!!!!
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
credo che avresti bisogno di qualche chiarimento riguardo la programmazione.
allora ConvertToBase() che mi permette di nel nostro caso di convertire (se cosi si può dire) un numero da base 10 a un altra base a nostro piacimento.
Io ho utilizzato un ciclo for, dove l'indice i(variabile del ciclo) assume i valori imposti. la variabile i quindi è il nostro numero in base 10, che passiamo alla funzione ConvertToBase che ci ritorna il suo rispettivo valore nella base che vogliamo quindi 2, 8 16.
Con la pritf() stampiamo questo valore.
La memset() invece inizializza un area di memoria(il primo parametro della funzione) con un valore(il secondo parametro passato alla funzione) per una certa lunghezza(terzo parametro della funzione)
La itoa() invece converte un valore da int a ad alfanumerico quindi char[]
Ultima modifica effettuata da Overflow il 06/02/2009 alle 16:39
sweetema (Normal User)
Rookie
Messaggi: 32
Iscritto: 28/01/2009
grazie 1000!!!non è colpa mia, sn cs ke il mio libro di testo non cita prpr(printf,memset,itoa)..xò sei stat esauriente!!!baci
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
si forse per la printf() hai ragione, in C++ si utilizza la cout.
sweetema (Normal User)
Rookie
Messaggi: 32
Iscritto: 28/01/2009
scusa,stavo cercando di farlo in altro modo,cn cs ke ho studiato!!!ke ne pensi???
Codice sorgente - presumibilmente C#
#include<iostream.h>
#include <stdio.h>
void convertToBase2( int value) ;
void convertToBase8( int value) ;
void convertToBase16( int value) ;
int y;
int main( )
{
cout<< "QUESTO PROGRAMMA PERMETTE DI VISUALIZZARE IN NUMERI IN DIVERSE BASI\n " ;
cout<< "inserire il numero da convertire\n " ;
cin>> y;
cout<< "\n DECIMALE\t BINARIA\t \t OTTALE\t \t ESADECIMALE\t \t \n " ;
cout<< y<< "\t \t " ;
convertToBase2( y) ;
cout<< "\t \t " ;
convertToBase8( y) ;
cout<< "\t \t " ;
convertToBase16( y) ;
return 0 ;
}
void convertToBase2( int value)
{
int ncount= 0 ;
int a[ ncount] ;
for ( int t= 0 ; t< 10 ; t++ )
{
int s= y;
do
{
ncount++;
if ( s% 2== 0)
a[ t] = 0 ;
else
a[ t] = 1 ;
s/= 2 ;
}
while ( s!= 0) ;
}
for ( int k= ncount; k>= 0 ; k-- )
{
cout<< a[ k] ;
}
}
void convertToBase8( int value)
{
int ncount= 0 ;
int a[ ncount] ;
for ( int t= 0 ; t< 10 ; t++ )
{
int s= y;
do
{
ncount++;
a[ t] = s% 8;
s/= 8 ;
}
while ( s!= 0) ;
}
for ( int k= ncount; k>= 0 ; k-- )
{
cout<< a[ k] ;
}
}
void convertToBase16( int value)
{
int ncount= 0 ;
int a[ ncount] ;
for ( int t= 0 ; t< 10 ; t++ )
{
int s= y;
do
{
int q= s/ 16 ;
switch ( q)
{
case 1:
a[ t] = 1 ;
break;
case 2:
a[ t] = 2 ;
break;
case 3:
a[ t] = 3 ;
break;
case 4:
a[ t] = 4 ;
break;
case 5:
a[ t] = 5 ;
break;
case 6:
a[ t] = 6 ;
break;
case 7:
a[ t] = 7 ;
break;
case 8:
a[ t] = 8 ;
break;
case 9:
a[ t] = 9 ;
break;
case 10 :
a[ t] = 'A' ;
break;
case 11 :
a[ t] = 'B' ;
break;
case 12 :
a[ t] = 'C' ;
break;
case 13 :
a[ t] = 'D' ;
break;
case 14 :
a[ t] = 'E' ;
break;
case 15 :
a[ t] = 'F' ;
break;
default :
a[ t] = q;
break;
}
s/= 16 ;
}
while ( s!= 0) ;
}
for ( int k= ncount; k>= 0 ; k-- )
{
cout<< a[ k] ;
}
}