# Von dezimal in Bin, Okt, Hex



## Ganja03 (5. Dezember 2004)

Moin Moin,
 ich muss als Hausaufgabe ein C++-Programm schreiben, dass vom Dezimalsystem in die anderen gängigen Systeme umrechnet (Dual, Oktal, Hexadezimal). Ich hab das arrays versucht, aba bei Hexadezimal klappt das nich. Ich schick den code mal:


```
#include <iostream>
  #include <conio.h>
  
  using namespace std;
  
  const int stellen = 16; // Stellen des Arrays "bin".
  int bin[stellen];	   // Array, in dem die Zahlen angezeigt werden soll.
  int eing;			   // Dezimalzahl, die der Benutzer eingibt
  int i;
  
  void rueckschreiben()   // Funktion zum Umdrehen der Zeichen im Array
  {
    bool rueckschreiben = false;
    for (i = stellen - 1;  i >= 0;  i--){
    if (bin[i] > 0)
    rueckschreiben = true;
    if (rueckschreiben == true)
    cout << bin[i];}
  }	
  
  void zuruecksetzen()	// Funktion zum Zurückstezten der Zeichen im Array
  {
    for (i = 0; i < stellen; i++)
    bin[i] = 0;
  }
  
  void binaer()		   // Ausrechnen der Binärzahl
  {
    for ( int zahl = eing, i = 0;  zahl > 0;  zahl /= 2, i++)
    bin[i] = zahl % 2;
  }
  
  void oktal()			// Ausrechnen der Oktalzahl
  {
    for ( int zahl = eing, i = 0;  zahl > 0;  zahl /= 8, i++)
    bin[i] = zahl % 8;
  }
  
  void hexadezimal()	  // Ausrechnen der Hexadezimalzahl
  {
   // ?
  }
  
  int main()			  // Hauptprogramm
  {
    cout << "Bitte eine Dezimalzahl eingeben: ";
    cin >> eing;
    
    cout << "Dezimal: " << eing << endl;
    zuruecksetzen();
  	   
    cout << "Binaer: ";
    binaer();
    rueckschreiben();
    zuruecksetzen(); 
    
    cout << "\nOktal: ";
    oktal();
    rueckschreiben();
    zuruecksetzen();
    
    cout << "\nHexadezimal: ";
    hexadezimal();
    
    getch();
    return 0;
  }
```
 
  Das problem ist, dass es im Hexadezimalsystem Buchstaben gibt (10 = A, 11 = B...)

 Ich sollte noch dazusagen, dass wir keine Manipulatoren benutzen dürfen:

  (z.B.: cout << hex << 12 << endl; )

  Ich bedanke mich schonmal für die antworten

  Mfg
  Ganja


----------



## RedWing (6. Dezember 2004)

Hi, 
dein Ansatz is schon korrekt soweit...
du solltest in deiner hexadezimal Methode ungefähr folgende Abfrage machen:


```
void hexadezimal()      // Ausrechnen der Hexadezimalzahl
  {
   for ( int zahl = eing, i = 0;  zahl > 0;  zahl /= 16, i++){
        
        switch(zahl % 16){   
                case 10: bin[i] = 'A'; break; 
                case 11: bin[i] = 'B'; break; 
                case 12: bin[i] = 'C'; break; 
                case 13: bin[i] = 'D'; break; 
                case 14: bin[i] = 'E'; break; 
                case 15: bin[i] = 'F'; break; 
                default: bin[i] = zahl % 16;
        }
                
  }
  }
```

Und dann kannst du in deiner Output Methode je nachdem ob der Inhalt an der
 aktuelle Position von bin > 9 ist den Inhalt als char ausgeben...
Ungefähr so:


```
if(rueckschreiben == true && bin[i] > 9)
        cout << static_cast<char>(bin[i]);
    else if (rueckschreiben == true)
        cout << bin[i]
```

Oder du arbeitest gleich mit einem string, dann könnte es so aussehen:


```
const int stellen = 16; // Stellen des Arrays "bin".
  char bin[stellen];
   ...
     void hexadezimal()      // Ausrechnen der Hexadezimalzahl
  {
   for ( int zahl = eing, i = 0;  zahl > 0;  zahl /= 16, i++){
        
        switch(zahl % 16){   
                case 10: bin[i] = 'A'; break; 
                case 11: bin[i] = 'B'; break; 
                case 12: bin[i] = 'C'; break; 
                case 13: bin[i] = 'D'; break; 
                case 14: bin[i] = 'E'; break; 
                case 15: bin[i] = 'F'; break; 
                default: bin[i] = zahl % 16 + 48; 48 entsprich laut Ascii '0'
        }
                
  }
  }
....
```

Dann musst du deine anderen Funktionen allerdings auch drauf anpassen...

Gruß

RedWing


----------



## Ganja03 (6. Dezember 2004)

ich danke dir, das mit dem ascii is ne gute idee

 und es klappt auch

 Thx and Mfg
 Ganja


----------

