[C++] Tabella Conversione Dec > Bin > Oct > Hex

di il
3 risposte

[C++] Tabella Conversione Dec > Bin > Oct > Hex

Ragazzi, ho un problema (come al solito, ma sapete, per imparare... ) ho scritto un programma che stampa una tabella con la rappresentazione Binaria, Ottale ed Esadecimale dei numeri Decimali da 1 a 256, il problema è che nel mio calcolo stampo le cifre dalla meno significativa, alla più significativa, cosi mi ritrovo con Binari, Ottali ed Esadecimali invertiti come posso stamparli nella maniera appropriata ?

Premetto che non devo usare gli array.

Ecco il codice:
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    cout << "Table of Decimal Conversion from 0 to 256 in: Binary - Octal - Hexadecimal" << endl;
    cout << endl;

    cout << "Decimal" << setw(18) << "Binary" << setw(16) << "Octal" << setw(22) << "Hexadecimal" << endl;

    for (int decimal = 1; decimal <= 256; decimal++)
    {
        cout << decimal << setw(18);

        int copyDecimalBin = decimal;
        int copyDecimalOct = decimal;
        int copyDecimalHex = decimal;
        int binary;
        int octal;
        int hexadecimal;

        while (copyDecimalBin != 0)
        {
            binary = copyDecimalBin % 2;      // La conversione funziona, ma stampa
            copyDecimalBin /= 2;              // il numero binario al contrario (110 - 011)

            cout << binary;
        }

        cout << setw(18);

        while (copyDecimalOct != 0)
        {
            octal = copyDecimalOct % 8;
            copyDecimalOct /= 8;

            cout << octal;
        }

        cout << setw(20);

        while (copyDecimalHex != 0)
        {
            hexadecimal = copyDecimalHex % 16;
            copyDecimalHex /= 16;

            switch (hexadecimal)
            {
                case 1:
                    cout << '1';
                break;

                case 2:
                    cout << '2';
                break;

                case 3:
                    cout << '3';
                break;

                case 4:
                    cout << '4';
                break;

                case 5:
                    cout << '5';
                break;

                case 6:
                    cout << '6';
                break;

                case 7:
                    cout << '7';
                break;

                case 8:
                    cout << '8';
                break;

                case 9:
                    cout << '9';
                break;

                case 10:
                    cout << 'A';
                break;

                case 11:
                    cout << 'B';
                break;

                case 12:
                    cout << 'C';
                break;

                case 13:
                    cout << 'D';
                break;

                case 14:
                    cout << 'E';
                break;

                case 15:
                    cout << 'F';
                break;

                default:
                    cout << '0';
                break;

                cout << hexadecimal;
            }
        }

        cout << endl;
    }

    return 0;
}

Grazie per la pazienza, come al solito ragazzi

3 Risposte

  • Re: [C++] Tabella Conversione Dec > Bin > Oct > Hex

    Senza scomodare la ricorsione, per valori da 0 a 255, potresti scrivere
    
    	int mask = 128;
    	for(int b=7; b>=0; b--, mask /= 2)
    		cout << ((num & mask)>>b);
    	cout << endl;
    
    P.S. Eliminare quello switch che non si può vedere ...

    P.P.S. Ti consiglio di convertire da 0 a 255 ...
  • Re: [C++] Tabella Conversione Dec > Bin > Oct > Hex

    oregon ha scritto:


    Senza scomodare la ricorsione, per valori da 0 a 255, potresti scrivere
    
    	int mask = 128;
    	for(int b=7; b>=0; b--, mask /= 2)
    		cout << ((num & mask)>>b);
    	cout << endl;
    
    P.S. Eliminare quello switch che non si può vedere ...

    P.P.S. Ti consiglio di convertire da 0 a 255 ...
    Perdona la mia poca dimestichezza, ma non credo di aver capito il tuo coodice, soprattutto la parte del primo cout
  • Re: [C++] Tabella Conversione Dec > Bin > Oct > Hex

    Ti posto una mia vecchia source code alla quale però non imposi limiti di conversione se ricordo bene... comunque potresti ricavarti qualche stringa:
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    int main()
    {
        int n,x;
        char buffer[32];
        cout << "                          Scegli un metodo di conversione" << endl;
        cout << endl << endl;
        cout << "1)Decimale a Binario" << endl;
        cout << "2)Binario a Decimale" << endl;
        cout << "3)Decimale a Ottale" << endl;
        cout << "4)Ottale a Decimale" << endl;
        cout << "5)Decimale a Esadecimale" << endl;
        cout << "6)Esadecimale a Decimale" << endl;
        cin >> x;
        switch (x)
        {
               case (1):
                    cout << "Inserisci un numero decimale da convertire in binario: ";
                    cin >> n;
                    cout << endl << n << " in binario e': " << itoa(n,buffer,2) << endl;
                    break;
               case (2):
                    cout << "Inserisci un numero binario da convertire in decimale: ";
                    cin >> n;
                    cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                    break;
               case (3):
                    cout << "Inserisci un numero decimale da convertire in ottale: ";
                    cin >> n;
                    cout << endl << n << " in ottale e': " << itoa(n,buffer,8) << endl;
                    break;
               case (4):
                    cout << "Inserisci un numero ottale da convertire in decimale: ";
                    cin >> n;
                    cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                    break;
               case (5):
                    cout << "Inserisci un numero decimale da convertire in esadecimale: ";
                    cin >> n;
                    cout << endl << n << " in esadecimale e': " << itoa(n,buffer,16) << endl;
                    break;
               case (6):
                    cout << "Inserisci un numero esadecimale da convertire in decimale: ";
                    cin >> n;
                    cout << endl << n << " in decimale e': " << itoa(n,buffer,10) << endl;
                    break;
        }
        system ("pause");
    }
    Robaccia di terza...
    buon lavoro
Devi accedere o registrarti per scrivere nel forum
3 risposte