[C] Conversione da decimale a esadecimale

di il
38 risposte

[C] Conversione da decimale a esadecimale

Salve. Non capisco perchè ottengo per alcune corrispondenze da decimale ad esadecimale un doppio valore di stampa...
http://prntscr.com/hc3uv

// ESERCIZIO 4.25: Tabella di equivalenza tra decimali, binari, ottali ed esadecimali.
// Scrivete un programma che stampi una tabella dei valori equivalenti binari, ottali ed esadecimali dei numeri decimali nell'intervallo da 1 a 256. [Potete stampare un intero come un valore ottale o esadecimale rispettivamente con gli specificatori di conversione %o e %X.]

// Codice sorgente:
#include <stdio.h>
#include <math.h>
int main (void) {
    puts( "Questo è un programma che stampa una tabella dei valori equivalenti tra il sistema numerico DECIMALE, BINARIO, OTTALE ed ESADECIMALE, da 1 a 256.\n\n" );
    printf( "%s", "                 Sistema Numerico:" );
    printf( "\n\n%-10s%10s%8s%14s\n", "DECIMALE", "BINARIO", "OTTALE", "ESADECIMALE" );
    int decimale = 1;
    int esadecDue;
    int esadecUno;
    int esadecZero;
    int ottTre;
    int ottDue;
    int ottUno;
    int ottZero;
    int binOtto;
    int binSette;
    int binSei;
    int binCinque;
    int binQuattro;
    int binTre;
    int binDue;
    int binUno;
    int binZero;
    int valBinOtto = 256;
    int valBinSette = 128;        
    int valBinSei = 64;        
    int valBinCinque = 32;        
    int valBinQuattro = 16;        
    int valBinTre = 8;        
    int valBinDue = 4;        
    int valBinUno = 2;  
    int valBinZero = 1;
    int valOttTre = 512;
    int valOttDue = 64;
    int valOttUno = 8;
    int valOttZero = 1;
    int valEsadecDue = 256;
    int valEsadecUno = 16;
    int valEsadecZero = 1;
    while ( decimale <= 256 ) {
        binOtto = decimale / valBinOtto;
        binSette = (decimale % valBinOtto) / valBinSette;
        binSei = ((decimale % valBinOtto) % valBinSette) / valBinSei;
        binCinque = (((decimale % valBinOtto) % valBinSette) % valBinSei) / valBinCinque;
        binQuattro = ((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) / valBinQuattro;
        binTre = (((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) / valBinTre;
        binDue = ((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) / valBinDue;
        binUno = (((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) / valBinUno;
        binZero = ((((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) % valBinUno) / valBinZero;
        ottTre = decimale / valOttTre;
        ottDue = (decimale % valOttTre) / valOttDue;
        ottUno = ((decimale % valOttTre) % valOttDue) / valOttUno;
        ottZero = (((decimale % valOttTre) % valOttDue) % valOttUno) / valOttZero;        
        esadecDue = decimale / valEsadecDue;
        esadecUno = (decimale % valEsadecDue) / valEsadecUno;
        esadecZero = ((decimale % valEsadecDue) % valEsadecUno) / valEsadecZero;
        if ( esadecZero == 10 && esadecUno != 10 && esadecDue != 10 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "A" ); 
        }
        if ( esadecZero == 10 && esadecUno == 10 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "A" ); 
        }    
        if ( esadecZero == 10 && esadecUno == 10 && esadecDue == 10 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "A", "A", "A" ); 
        }        
        if ( esadecZero == 11 && esadecUno != 11 && esadecDue != 11 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "B" ); 
        }
        if ( esadecZero == 11 && esadecUno == 11 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "B", "B" ); 
        }    
        if ( esadecZero == 11 && esadecUno == 11 && esadecDue == 11 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "B", "B", "B" ); 
        }   
        if ( esadecZero == 12 && esadecUno != 12 && esadecDue != 12 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "C" ); 
        }
        if ( esadecZero == 12 && esadecUno == 12 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "C", "C" ); 
        }    
        if ( esadecZero == 12 && esadecUno == 12 && esadecDue == 12 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "C", "C", "C" ); 
        }
        if ( esadecZero == 13 && esadecUno != 13 && esadecDue != 13 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "D" ); 
        }
        if ( esadecZero == 13 && esadecUno == 13 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "D", "D" ); 
        }    
        if ( esadecZero == 13 && esadecUno == 13 && esadecDue == 13 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "D", "D", "D" ); 
        }        
        if ( esadecZero == 14 && esadecUno != 14 && esadecDue != 14 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "E" ); 
        }
        if ( esadecZero == 14 && esadecUno == 14 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "E", "E" ); 
        }    
        if ( esadecZero == 14 && esadecUno == 14 && esadecDue == 14 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "E", "E", "E" ); 
        }   
        if ( esadecZero == 15 && esadecUno != 15 && esadecDue != 15 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "F" ); 
        }
        if ( esadecZero == 15 && esadecUno == 15 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "F", "F" ); 
        }    
        if ( esadecZero == 15 && esadecUno == 15 && esadecDue == 15 ) {
            printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "F", "F", "F" ); 
        } else {     
              printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, esadecZero );     
        }
        ++decimale; 
    }
}

38 Risposte

  • Re: [C] Conversione da decimale a esadecimale

    Beh, succede a causa di tutte quelle (assurde) if. Ad esempio, per il valore 10 viene soddisfatta la prima if ma poi viene eseguita anche l'ultima else.

    Ti consiglio di "buttare" tutte quelle if e pensare ad un'altra soluzione, più semplice...
  • Re: [C] Conversione da decimale a esadecimale

    oregon ha scritto:


    Beh, succede a causa di tutte quelle (assurde) if. Ad esempio, per il valore 10 viene soddisfatta la prima if ma poi viene eseguita anche l'ultima else.

    Ti consiglio di "buttare" tutte quelle if e pensare ad un'altra soluzione, più semplice...
    Ho provato con uno switch ma tutto va bene solo per la terza cifra (esadecZero)... poi arrivato alla penultima (esadecUno) non sono come fare...
    http://prntscr.com/hciyq
    
    // ESERCIZIO 4.25: Tabella di equivalenza tra decimali, binari, ottali ed esadecimali.
    // Scrivete un programma che stampi una tabella dei valori equivalenti binari, ottali ed esadecimali dei numeri decimali nell'intervallo da 1 a 256. [Potete stampare un intero come un valore ottale o esadecimale rispettivamente con gli specificatori di conversione %o e %X.]
    
    // Codice sorgente:
    #include <stdio.h>
    #include <math.h>
    int main (void) {
        puts( "Questo è un programma che stampa una tabella dei valori equivalenti tra il sistema numerico DECIMALE, BINARIO, OTTALE ed ESADECIMALE, da 1 a 256.\n\n" );
        printf( "%s", "                 Sistema Numerico:" );
        printf( "\n\n%-10s%10s%8s%14s\n", "DECIMALE", "BINARIO", "OTTALE", "ESADECIMALE" );
        int decimale = 1;
        int esadecDue;
        int esadecUno;
        int esadecZero;
        int ottTre;
        int ottDue;
        int ottUno;
        int ottZero;
        int binOtto;
        int binSette;
        int binSei;
        int binCinque;
        int binQuattro;
        int binTre;
        int binDue;
        int binUno;
        int binZero;
        int valBinOtto = 256;
        int valBinSette = 128;        
        int valBinSei = 64;        
        int valBinCinque = 32;        
        int valBinQuattro = 16;        
        int valBinTre = 8;        
        int valBinDue = 4;        
        int valBinUno = 2;  
        int valBinZero = 1;
        int valOttTre = 512;
        int valOttDue = 64;
        int valOttUno = 8;
        int valOttZero = 1;
        int valEsadecDue = 256;
        int valEsadecUno = 16;
        int valEsadecZero = 1;
        while ( decimale <= 256 ) {
            binOtto = decimale / valBinOtto;
            binSette = (decimale % valBinOtto) / valBinSette;
            binSei = ((decimale % valBinOtto) % valBinSette) / valBinSei;
            binCinque = (((decimale % valBinOtto) % valBinSette) % valBinSei) / valBinCinque;
            binQuattro = ((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) / valBinQuattro;
            binTre = (((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) / valBinTre;
            binDue = ((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) / valBinDue;
            binUno = (((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) / valBinUno;
            binZero = ((((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) % valBinUno) / valBinZero;
            ottTre = decimale / valOttTre;
            ottDue = (decimale % valOttTre) / valOttDue;
            ottUno = ((decimale % valOttTre) % valOttDue) / valOttUno;
            ottZero = (((decimale % valOttTre) % valOttDue) % valOttUno) / valOttZero;        
            esadecDue = decimale / valEsadecDue;
            esadecUno = (decimale % valEsadecDue) / valEsadecUno;
            esadecZero = ((decimale % valEsadecDue) % valEsadecUno) / valEsadecZero;
            switch ( esadecZero ) {
                case 10:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "A" );   
                  break;
                case 11:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "B" );
                  break;
                case 12:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "C" );  
                  break;
                case 13:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "D" );  
                  break;
                case 14:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "E" ); 
                  break;
                case 15:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "F" );  
                  break;
                default:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, esadecZero );  
                  break;
            }
            ++decimale; 
        }
    }
      
         
            /*
            if ( esadecZero == 10 && esadecUno == 10 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "A" ); 
            }    
            if ( esadecZero == 10 && esadecUno == 10 && esadecDue == 10 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "A", "A", "A" ); 
            }        
    
            if ( esadecZero == 11 && esadecUno == 11 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "B", "B" ); 
            }    
            if ( esadecZero == 11 && esadecUno == 11 && esadecDue == 11 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "B", "B", "B" ); 
            }   
    
            if ( esadecZero == 12 && esadecUno == 12 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "C", "C" ); 
            }    
            if ( esadecZero == 12 && esadecUno == 12 && esadecDue == 12 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "C", "C", "C" ); 
            }
    
            if ( esadecZero == 13 && esadecUno == 13 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "D", "D" ); 
            }    
            if ( esadecZero == 13 && esadecUno == 13 && esadecDue == 13 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "D", "D", "D" ); 
            }        
    
            if ( esadecZero == 14 && esadecUno == 14 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "E", "E" ); 
            }    
            if ( esadecZero == 14 && esadecUno == 14 && esadecDue == 14 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "E", "E", "E" ); 
            }   
    
            if ( esadecZero == 15 && esadecUno == 15 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "F", "F" ); 
            }    
            if ( esadecZero == 15 && esadecUno == 15 && esadecDue == 15 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "F", "F", "F" ); 
            } 
            
    
                    else {     
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, esadecZero );     
            }
           */
    
    
  • Re: [C] Conversione da decimale a esadecimale

    Devo fare un semplice calcolo. Come converti un valore decimale in uno esadecimale?
  • Re: [C] Conversione da decimale a esadecimale

    oregon ha scritto:


    Devo fare un semplice calcolo. Come converti un valore decimale in uno esadecimale?
    Allora: prendi il decimale e lo dividi per la base più alta che t'interessa; prendi il solo il valore intero e questa sarà la cifra più a sinistra cioè la più alta. Il resto di questa operazione la dividi per la base subito inferiore. Il valore intero è la tua seconda cifra da sinistra. Il resto lo dividi per la base ancora inferiore ed il valore intero è la successiva cifra. E' un giochetto di basi posizionali ( 16^0=1, 16^1=16, 16^2=256 non servono altre basi più alte perchè la tabella è fino a 256) divisione / e resto % da dividere
  • Re: [C] Conversione da decimale a esadecimale

    Se lo switch lo faccio con degli if ( esadecZero == 10 && esadecUno == 10 ) then: printf AA... viene bene. Ora devo ampliare i sottocasi nel codice
    http://prntscr.com/hck91
    Come nel codice:
    
    // ESERCIZIO 4.25: Tabella di equivalenza tra decimali, binari, ottali ed esadecimali.
    // Scrivete un programma che stampi una tabella dei valori equivalenti binari, ottali ed esadecimali dei numeri decimali nell'intervallo da 1 a 256. [Potete stampare un intero come un valore ottale o esadecimale rispettivamente con gli specificatori di conversione %o e %X.]
    
    // Codice sorgente:
    #include <stdio.h>
    #include <math.h>
    int main (void) {
        puts( "Questo è un programma che stampa una tabella dei valori equivalenti tra il sistema numerico DECIMALE, BINARIO, OTTALE ed ESADECIMALE, da 1 a 256.\n\n" );
        printf( "%s", "                 Sistema Numerico:" );
        printf( "\n\n%-10s%10s%8s%14s\n", "DECIMALE", "BINARIO", "OTTALE", "ESADECIMALE" );
        int decimale = 1;
        int esadecDue;
        int esadecUno;
        int esadecZero;
        int ottTre;
        int ottDue;
        int ottUno;
        int ottZero;
        int binOtto;
        int binSette;
        int binSei;
        int binCinque;
        int binQuattro;
        int binTre;
        int binDue;
        int binUno;
        int binZero;
        int valBinOtto = 256;
        int valBinSette = 128;        
        int valBinSei = 64;        
        int valBinCinque = 32;        
        int valBinQuattro = 16;        
        int valBinTre = 8;        
        int valBinDue = 4;        
        int valBinUno = 2;  
        int valBinZero = 1;
        int valOttTre = 512;
        int valOttDue = 64;
        int valOttUno = 8;
        int valOttZero = 1;
        int valEsadecDue = 256;
        int valEsadecUno = 16;
        int valEsadecZero = 1;
        while ( decimale <= 256 ) {
            binOtto = decimale / valBinOtto;
            binSette = (decimale % valBinOtto) / valBinSette;
            binSei = ((decimale % valBinOtto) % valBinSette) / valBinSei;
            binCinque = (((decimale % valBinOtto) % valBinSette) % valBinSei) / valBinCinque;
            binQuattro = ((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) / valBinQuattro;
            binTre = (((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) / valBinTre;
            binDue = ((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) / valBinDue;
            binUno = (((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) / valBinUno;
            binZero = ((((((((decimale % valBinOtto) % valBinSette) % valBinSei) % valBinCinque) % valBinQuattro) % valBinTre) % valBinDue) % valBinUno) / valBinZero;
            ottTre = decimale / valOttTre;
            ottDue = (decimale % valOttTre) / valOttDue;
            ottUno = ((decimale % valOttTre) % valOttDue) / valOttUno;
            ottZero = (((decimale % valOttTre) % valOttDue) % valOttUno) / valOttZero;        
            esadecDue = decimale / valEsadecDue;
            esadecUno = (decimale % valEsadecDue) / valEsadecUno;
            esadecZero = ((decimale % valEsadecDue) % valEsadecUno) / valEsadecZero;
            switch ( esadecZero ) {
                case 10:
                  if ( esadecZero == 10 && esadecUno == 10 ) {
                      printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "A" );                           
                          } else {              
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "A" );  
                  }
                  break;
                case 11:
                  if ( esadecZero == 11 && esadecUno == 10 ) {
                      printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "B" );                           
                  } else {            
                      printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "B" );
                  }
                  break;
                case 12:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "C" );  
                  break;
                case 13:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "D" );  
                  break;
                case 14:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "E" ); 
                  break;
                case 15:
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, "F" );  
                  break;
                default:
                    switch ( esadecUno ) {
                        case 10:
                          if ( esadecZero == 10 && esadecUno == 10 ) {
                              printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "A" );                           
                          } else {
                              printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", esadecZero ); 
                          }
                          break;
                        case 11:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "B", esadecZero ); 
                          break;
                        case 12:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "C", esadecZero );   
                          break;
                        case 13:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "D", esadecZero );  
                          break;
                        case 14:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "E", esadecZero ); 
                          break;
                        case 15:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "F", esadecZero );  
                          break;
                        default:
                          printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, esadecZero ); 
                          break;
                }        
                break;
            }
            ++decimale; 
        }
    }
      
         
            /*
            if ( esadecZero == 10 && esadecUno == 10 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "A", "A" ); 
            }    
            if ( esadecZero == 10 && esadecUno == 10 && esadecDue == 10 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "A", "A", "A" ); 
            }        
    
            if ( esadecZero == 11 && esadecUno == 11 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "B", "B" ); 
            }    
            if ( esadecZero == 11 && esadecUno == 11 && esadecDue == 11 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "B", "B", "B" ); 
            }   
    
            if ( esadecZero == 12 && esadecUno == 12 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "C", "C" ); 
            }    
            if ( esadecZero == 12 && esadecUno == 12 && esadecDue == 12 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "C", "C", "C" ); 
            }
    
            if ( esadecZero == 13 && esadecUno == 13 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "D", "D" ); 
            }    
            if ( esadecZero == 13 && esadecUno == 13 && esadecDue == 13 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "D", "D", "D" ); 
            }        
    
            if ( esadecZero == 14 && esadecUno == 14 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "E", "E" ); 
            }    
            if ( esadecZero == 14 && esadecUno == 14 && esadecDue == 14 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "E", "E", "E" ); 
            }   
    
            if ( esadecZero == 15 && esadecUno == 15 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, "F", "F" ); 
            }    
            if ( esadecZero == 15 && esadecUno == 15 && esadecDue == 15 ) {
                printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10s%s%s\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, "F", "F", "F" ); 
            } 
            
    
                    else {     
                  printf( "%-10d%2d%d%d%d%d%d%d%d%d%5d%d%d%d%10d%d%d\n", decimale, binOtto, binSette, binSei, binCinque, binQuattro, binTre, binDue, binUno, binZero, ottTre, ottDue, ottUno, ottZero, esadecDue, esadecUno, esadecZero );     
            }
           */
    
    
  • Re: [C] Conversione da decimale a esadecimale

    Per rimanere nell'ambito del tuo codice (con le variabili che hai usato), per l'esadecimale basterebbe
    
    		esaZero = decimale % 16 + '0'; decimale = decimale / 16;
    		esaUno = decimale % 16 + '0'; decimale = decimale / 16;
    		esaDue = decimale % 16 + '0';
    		if (esaZero > '9') esaZero = esaZero + 7;
    		if (esaUno > '9') esaUno = esaUno + 7;
    		if (esaDue > '9') esaDue = esaDue + 7;
    
    		printf("%c%c%c ", esaDue, esaUno, esaZero);
    
  • Re: [C] Conversione da decimale a esadecimale

    oregon ha scritto:


    Per rimanere nell'ambito del tuo codice (con le variabili che hai usato), per l'esadecimale basterebbe
    
    		esaZero = decimale % 16 + '0'; decimale = decimale / 16;
    		esaUno = decimale % 16 + '0'; decimale = decimale / 16;
    		esaDue = decimale % 16 + '0';
    		if (esaZero > '9') esaZero = esaZero + 7;
    		if (esaUno > '9') esaUno = esaUno + 7;
    		if (esaDue > '9') esaDue = esaDue + 7;
    
    		printf("%c%c%c ", esaDue, esaUno, esaZero);
    
    Io ho risolto ma non riesco ad incollarti il codice sono più di 60000 caratteri:
    http://prntscr.com/hclvc
    http://prntscr.com/hclvk
  • Re: [C] Conversione da decimale a esadecimale

    oregon
    Un doveroso grazie anche se non ho capito come risolvi il problema delle lettere...
  • Re: [C] Conversione da decimale a esadecimale

    Potresti preimpostare una stringa che contenga tutte e sedici le cifre necessarie alla rappresentazione in base esadecimale, nell'ordine da 0 a 15, tipo: kCifre[] = "0123456789ABCDEF";

    A quel punto basta "prelevare" la cifra prelevandola dalla posizione corrispondente usando come indice il valore da rappresentare...
  • Re: [C] Conversione da decimale a esadecimale

    .
  • Re: [C] Conversione da decimale a esadecimale

    Ragazzi,bastano 3 righe di codice...
  • Re: [C] Conversione da decimale a esadecimale

    Questa non dovrebbe essere una gara a chi "non fa capire di più all'op" ...

    Sappiamo tutti che esistono mulle metodi ma è meglio cercare di rimanere più vicini al codice di cui comprende qualcosa ...

    Non ha neanche idea di come usare il codice Ascii ... e gli facciamo shiftare i bit ... A chi serve questo tipo di suggerimento se non solo a chi lo fornisce?
  • Re: [C] Conversione da decimale a esadecimale

    Come dice Oregon, bisogna aiutare l'OP, non affossarlo. In questo caso basta leggere il testo dell'esercizio che in pratica dà la soluzione.
    Se l'OP é partito per la tangente, chi gli risponde deve prima capire il problema e poi riportarlo sulla retta via.
    Come suggerimento all'OP gli chiedo di stampare i numeri da 1 a 256, solo in decimale, poi di rileggersi il testo dell'esercizio e provare a stamparli solo in esadecimale...
  • Re: [C] Conversione da decimale a esadecimale

    Esatto ... Soprattutto direi di concentrarsi sulle ultime parole
Devi accedere o registrarti per scrivere nel forum
38 risposte