Konvertierung zwischen Zahlensystemen



  • Hallo,

    ich möchte bzw soll ein Programm programmieren welches Zahlen zwischen verschiedener Zahlensysteme kovertieren soll.

    Folgendes habe ich schon:

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    
    using namespace std; 
    
    char dezimalBeliebig(unsigned long originalDecimal, int resultBase, int i) 
    { 
         double hilfe=1.0; 
         char result; 
    
         result='0'; 
         if(originalDecimal/i>1.0)result='1'; 
         if(resultBase>2)if(originalDecimal/i>2.0)result='2'; 
         if(resultBase>3)if(originalDecimal/i>3.0)result='3'; 
         if(resultBase>4)if(originalDecimal/i>4.0)result='4'; 
         if(resultBase>5)if(originalDecimal/i>5.0)result='5'; 
         if(resultBase>6)if(originalDecimal/i>6.0)result='6'; 
         if(resultBase>7)if(originalDecimal/i>7.0)result='7'; 
         if(resultBase>8)if(originalDecimal/i>8.0)result='8'; 
         if(resultBase>9)if(originalDecimal/i>9.0)result='9'; 
         if(resultBase>10)if(originalDecimal/i>10.0)result='A'; 
         if(resultBase>11)if(originalDecimal/i>11.0)result='B'; 
         if(resultBase>12)if(originalDecimal/i>12.0)result='C'; 
         if(resultBase>13)if(originalDecimal/i>13.0)result='D'; 
         if(resultBase>14)if(originalDecimal/i>14.0)result='E'; 
         if(resultBase>15)if(originalDecimal/i>15.0)result='F'; 
         return result; 
    } 
    
    unsigned long beliebigDezimal(char original, int originalBase) 
    { 
       int dWert; 
       if(original=='0')return 0; 
       if(original=='1')return 1; 
       if(original=='2')return 2; 
       if(original=='3')return 3; 
       if(original=='4')return 4; 
       if(original=='5')return 5; 
       if(original=='6')return 6; 
       if(original=='7')return 7; 
       if(original=='8')return 8; 
       if(original=='9')return 9; 
       if(original=='A')return 10; 
       if(original=='B')return 11; 
       if(original=='C')return 12; 
       if(original=='D')return 13; 
       if(original=='E')return 14; 
       if(original=='F')return 15; 
    } 
    
    int main(int argc, char *argv[]) 
    { 
        int auswahl; 
        int originalBase, resultBase; 
        char original[33], result[33]; 
        unsigned long originalDecimal, resultDecimal; 
    
        printf("Konvertierung ganzer positiver Zahlen zwischen verschiedenen Zahlensystemen\n"); 
        printf("1 dezimal -------------------------> beliebiges Basis (2-16\n"); 
        printf("2 beliebiges Basis (2-16) ---------> dezimal\n"); 
        printf("3 beliebiges Ausgangsbasis (2-16)--> beliebige Zielbasis (2-16)\n"); 
        scanf("%d", &auswahl); 
        printf("\n"); 
    
        if(auswahl==2 || auswahl==3) 
        { 
           printf("Ausgangsbasis:     "); 
           scanf("%d",&originalBase); 
        } 
        if(auswahl==1 || auswahl==3) 
        { 
           printf("Zielbasis:     "); 
           scanf("%d",&resultBase); 
        } 
    
        printf("Ausgangszahl:   "); 
        if (auswahl==1) 
        { 
           scanf("%u",&originalDecimal); 
        } 
        else 
        { 
           scanf("%s",&original); 
        } 
        printf("\n"); 
    
        if(auswahl==1) 
        { 
           double h=originalDecimal; 
           for(int i=0; i<33; i++) 
           { 
              result[i]=dezimalBeliebig(originalDecimal, resultBase, i); 
              originalDecimal=originalDecimal-result[i]; 
              printf("%c\n",result[i]); 
              if(originalDecimal%resultBase=0)break; 
           } 
           printf("Der Wert der Basis %d betraegt %s\n", resultBase, result);       
        } 
    
        if(auswahl==2) 
        { 
           int n=strlen(&original[1]); 
           unsigned long h; 
           resultDecimal = beliebigDezimal(original[0],originalBase); 
           for(int i=0; i<n; i++) 
           { 
              h= beliebigDezimal(original[i+1],originalBase); 
              resultDecimal=resultDecimal*originalBase+h; 
           } 
           printf("Der Dezimalwert von %s der Basis %d betraegt %u\n", original, originalBase, resultDecimal); 
        }                 
        system("PAUSE"); 
        return EXIT_SUCCESS; 
    }
    

    Nr.2 funktioniert bereits einwand frei. Nur bei Nr.1 weiss ich nicht so recht wie ich es machen soll. Hab zwar mal was versucht wie man sehen kann, funktioniert nur leider nicht so.

    Kann mir jemand helfen? 😃



  • ^^das sieht viel zu umständlich aus. nimm strtoul, sprintf und sowas.
    🙂



  • und wie schaut das dann aus? Damit habe ich leider noch nie gearbeitet.




Log in to reply