Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - conversione da base decimale ad altre basi
Forum - C/C++ - conversione da base decimale ad altre basi

Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:26
Domenica, 01/02/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++

  1. #include<iostream>
  2. #include<stdlib>
  3. #include<iomanip>
  4. #include<cmath>
  5.  
  6. int functiona()
  7. {
  8.         for(int a=1;a<=256;a++)
  9.         {
  10.                 int Aarray[10];
  11.                 for(int i=0;i<10;i++)
  12.                 {
  13.                         int q;
  14.                         do
  15.                         { q=a/2;
  16.                          Aarray[i]= a%2;
  17.                          a=q;
  18.                         }
  19.                         while(q!=0);
  20.                                 cout<<Aarray[i]<<"\n";
  21.                 }
  22.         }
  23. }
  24. int functionb()
  25. {
  26.         for(int b=1;b<=256;b++)
  27.         {
  28.                 int Barray[10];
  29.                 for(int i=0;i<10;i++)
  30.                 {
  31.                         int q;
  32.                         do
  33.                         {
  34.                                 q=b/8;
  35.                          Barray[i]=b%8;
  36.                          b=q;
  37.                         }
  38.                         while(q!=0);
  39.                                 cout<<Barray[i]<<"\n";
  40.                 }
  41.         }
  42. }
  43. int functionc()
  44. {
  45.         for(int c=1;c<=256;c++)
  46.         {
  47.                 int Carray[10];
  48.                 for(int i=0;i<10;i++)
  49.                 {
  50.                         int q;
  51.                         do
  52.                         {
  53.                          q=c/16;
  54.                          Carray[i]=c%16;
  55.                          c=q;
  56.                          }
  57.                         while(q!=0);
  58.                                 cout<<Carray[i]<<"\n";
  59.                 }
  60.         }
  61. }
  62.  
  63. int main()
  64. {
  65.  
  66.         cout<<"B.decimale"<<setw(20)<<"B.binaria"<<setw(20)<<"B.ottale"<<setw(20)<<"B.esadecimale\n";
  67.  
  68.         for(int j=1;j<=256;j++)
  69.                 {
  70.                 cout<<j<<setw(30)<<functiona()<<setw(20)<<functionb()<<setw(20)<<functionc()<<"\n";
  71.      }
  72.         return 0;
  73. }

:-|

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 19:51
Domenica, 01/02/2009
ciao prova cosi:
Codice sorgente - presumibilmente C#

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define MAX 256
  6.  
  7. void ConvertToBase(int num, int base, char* result);
  8.  
  9. int main()
  10. {
  11.         char p[MAX]={0};
  12.         printf("Dec\t Bin\t Oct\t Hex\n");
  13.  
  14.         for(int i=1;i<MAX;i++)
  15.         {
  16.                 printf("%d\t",i);
  17.                 ConvertToBase(i,2,p); /* converto in base 2*/
  18.                 printf("%s\t",p);
  19.                 ConvertToBase(i,8,p); /* converto in base 8*/
  20.                 printf("%s\t",p);
  21.                 ConvertToBase(i,16,p); /* converto in base 16*/
  22.                 printf("%s\n",p);
  23.         }
  24.  
  25.         return 1;
  26. }
  27.  
  28. void ConvertToBase(int num, int base, char* ris)
  29. {
  30.  
  31.         /* questa funzione converte il valore della variabile num nel
  32.         rispettivo valore contenuto nella variabile base, e restituisce
  33.         il risultato in un array di caratteri (ris)*/
  34.  
  35.  int i=0, len = 1;
  36.  int ArrayList[MAX]={0};
  37.  
  38.         memset(ris,0,MAX);
  39.         while(num >0)
  40.         {
  41.                 ArrayList[i++] = num % base;
  42.                 num /=base;
  43.         }
  44.         /*i valori ottenuti sono al contrario, cioè
  45.         l'array ArrayList va letto dal basso verso l'alto*/
  46.  
  47.         i--;
  48.        
  49.         /* inserisco i valori ottenuti nell'array ris,
  50.         inserendo le lettere al posto dei valori che vanno da
  51.         10 a 15 nel caso di una conversione in base 16*/
  52.  
  53.         for(int y=0;i>=0;i--, y++)
  54.         {
  55.                 switch(ArrayList[i])
  56.                 {
  57.                         case 10:
  58.                                 ris[y] = 'A';
  59.                                 continue;
  60.                         case 11:
  61.                                 ris[y] = 'B';
  62.                                 continue;
  63.                         case 12:
  64.                                 ris[y] = 'C';
  65.                                 continue;
  66.                         case 13:
  67.                                 ris[y] = 'D';
  68.                                 continue;
  69.                         case 14:
  70.                                 ris[y] = 'E';
  71.                                 continue;
  72.                         case 15:
  73.                                 ris[y] = 'F';
  74.                                 continue;
  75.                 }
  76.                 itoa(ArrayList[i],&ris[y],10);
  77.         }      
  78.        
  79. }



ho commentato abbastanza il codice.
Ciao.

PM Quote
Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:16
Lunedì, 02/02/2009
grazie tante!!xò sè possibile vorrei avere kiarimenti su alcuni tratti ke non ho studiato durante il corso...
Codice sorgente - presumibilmente C#

  1. printf("%d\t",i);
  2.         ConvertToBase(i,2,p); /* converto in base 2*/
  3.         printf("%s\t",p);
  4.         ConvertToBase(i,8,p); /* converto in base 8*/
  5.         printf("%s\t",p);
  6.         ConvertToBase(i,16,p); /* converto in base 16*/
  7.         printf("%s\n",p);



e anche
Codice sorgente - presumibilmente Plain Text

  1. memset(ris,0,MAX);


e infine :asd:
Codice sorgente - presumibilmente Plain Text

  1. itoa(ArrayList[i],&ris[y],10);


scusami e grazie ancora!!!!!!!!!!!!!!;)

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 16:37
Venerdì, 06/02/2009
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
PM Quote
Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:45
Venerdì, 06/02/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

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 16:52
Venerdì, 06/02/2009
si forse per la printf() hai ragione, in C++ si utilizza la cout.

PM Quote
Avatar
sweetema (Normal User)
Rookie


Messaggi: 32
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:25
Sabato, 07/02/2009
scusa,stavo cercando di farlo in altro modo,cn cs ke ho studiato!!!ke ne pensi???
Codice sorgente - presumibilmente C#

  1. #include<iostream.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. void convertToBase2(int value);
  6. void convertToBase8(int value);
  7. void convertToBase16(int value);
  8. int y;
  9.  
  10. int main()
  11. {
  12.         cout<<"QUESTO PROGRAMMA PERMETTE DI VISUALIZZARE IN NUMERI IN DIVERSE BASI\n";
  13.         cout<<"inserire il numero da convertire\n";
  14.         cin>>y;
  15.         cout<<"\nDECIMALE\tBINARIA\t\tOTTALE\t\tESADECIMALE\t\t\n";
  16.  
  17.                 cout<<y<<"\t\t";
  18.                 convertToBase2(y);
  19.                 cout<<"\t\t";
  20.                 convertToBase8(y);
  21.                 cout<<"\t\t";
  22.                 convertToBase16(y);
  23.  
  24.         return 0;
  25. }
  26.  
  27. void convertToBase2(int value)
  28. {
  29.                 int ncount=0;
  30.                 int a[ncount];
  31.                 for(int t=0;t<10;t++)
  32.                 {
  33.                         int s=y;
  34.                         do
  35.                         {
  36.                 ncount++;
  37.                                 if(s%2==0)
  38.                                         a[t]=0;
  39.                                 else
  40.                                         a[t]=1;
  41.                         s/=2;
  42.                         }
  43.                         while(s!=0);
  44.                 }
  45.  
  46.          for(int k=ncount;k>=0;k--)
  47.                  {
  48.                  cout<<a[k];
  49.                  }
  50.  
  51. }
  52.  
  53. void convertToBase8(int value)
  54. {
  55.                 int ncount=0;
  56.                         int a[ncount];
  57.                         for(int t=0;t<10;t++)
  58.                         {
  59.                                 int s=y;
  60.                                 do
  61.                                 {
  62.                                         ncount++;
  63.                                         a[t]=s%8;
  64.                                     s/=8;
  65.                                 }
  66.                                 while(s!=0);
  67.                         }
  68.                  for(int k=ncount;k>=0;k--)
  69.                          {
  70.                          cout<<a[k];
  71.                          }
  72.  
  73. }
  74.  
  75. void convertToBase16(int value)
  76. {
  77.         int ncount=0;
  78. int a[ncount];
  79. for(int t=0;t<10;t++)
  80. {
  81.         int s=y;
  82.         do
  83.         {
  84.                 int q=s/16;
  85.                 switch(q)
  86.                      {
  87.                             case 1:
  88.                                 a[t]=1;
  89.                                 break;
  90.                            case 2:
  91.                                         a[t]=2;
  92.                                         break;
  93.                            case 3:
  94.                                         a[t]=3;
  95.                                         break;
  96.                            case 4:
  97.                                         a[t]=4;
  98.                                         break;
  99.                            case 5:
  100.                                         a[t]=5;
  101.                                         break;
  102.                            case 6:
  103.                                         a[t]=6;
  104.                                         break;
  105.                             case 7:
  106.                                         a[t]=7;
  107.                                         break;
  108.                            case 8:
  109.                                         a[t]=8;
  110.                                         break;
  111.                            case 9:
  112.                                         a[t]=9;
  113.                                         break;
  114.                          case 10:
  115.                              a[t]='A';
  116.                              break;
  117.                          case 11:
  118.                                  a[t]='B';
  119.                               break;
  120.                          case 12:
  121.                                  a[t]='C';
  122.                              break;
  123.                          case 13:
  124.                                  a[t]='D';
  125.                              break;
  126.                          case 14:
  127.                                  a[t]='E';
  128.                              break;
  129.                          case 15:
  130.                                  a[t]='F';
  131.                             break;
  132.                          default:
  133.                         a[t]=q;
  134.                          break;
  135.                 }
  136.             s/=16;
  137.         }
  138.         while(s!=0);
  139. }
  140.  
  141.  
  142.  for(int k=ncount;k>=0;k--)
  143.          {
  144.          cout<<a[k];
  145.          }
  146.  
  147.  
  148. }


PM Quote