Binär zu Dezimal



  • Hallo Leute, ich habe in der Schule die Aufgabe bekommen einen Binärrechner zu programmieren. Diesen habe ich auch fertig, er kann eine dezimale Zahl in eine binäre Zahl umrechnen.
    Nun haben wir heute die Aufgabe bekommen hinzuzufügen, dass man auch eine binäre Zahl in eine dezimale Zahl umrechnen kann. Nur leider blicke ich da einfach nicht durch, ich habe nichtmal einen Ansatz. Ich hoffe, dass mir hier jmd helfen kann.

    Achja, die Binärzahl soll/darf/hat maximal 16 Stellen (haben).

    Hier mal mein aktuelles Programm:

    /********************************************************************
    *  Binärrechner von Dennis                                          *
    *                                                                   *
    ********************************************************************/
    
    #include <cstdlib>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        // ===== DEKLARATION
        int dez;
        int bin[16];
        int i;
        string Beenden;
    
        // ===== BEENDEN AUF "J" SETZEN DAMIT DIE SCHLEIFE DURCHGEFÜHRT WIRD
        Beenden = "j";
    
        // ===== SCHLEIFE MIT HAUPTPROGRAMM
        while(Beenden == "j" || Beenden == "J" ||
              Beenden == "Ja"|| Beenden == "jA"||
              Beenden == "JA"|| Beenden == "ja")
                {
                    // EINGABE DER DEZIMALZAHL
                    cout << "   ################################\n";
                    cout << "   #                              #\n";
                    cout << "   #        Bin\x84 \br-Rechner         #\n";
                    cout << "   #                              #\n";
                    cout << "   ################################\n\n";
                    cout << "   Geben Sie eine dezimale Zahl\n";
                    cout << "   zwischen '0' und '65535' ein,\n";
                    cout << "   welche konvertiert werden soll.\n\n";
                    cout << "   Eingabe:\t\t";
                    cin >> dez;
                    cout << endl;
    
                    // DURCHLAUFEN DER ARRAY FELDER UND HINEINSCHREIBEN EINER
                    // 1 ODER 0 || % --> MODULO
                    for (i=15; i>=0; i--)
                      {
                        bin[i]=dez%2;
                        dez=dez/2;
                      }      
    
                    // AUSGABE DER BINÄRZAHL
                    cout << "   Bin\x84rzahl:\t\t";
    
                    for(i=0;i<16;i++)
                      {
                        cout << bin[i];
                      }
    
                    // LÖSCHEN DES AKTUELLEN BILDSCHIRMINHALTS
                    cout << endl << endl;
                    cout << "   ";
                    system("PAUSE");
                    system("CLS");
    
                    // ABFRAGE OB DAS PROGRAMM BEENDET WERDEN SOLL
                    cout << "   ################################\n";
                    cout << "   #                              #\n";
                    cout << "   #        Bin\x84 \br-Rechner         #\n";
                    cout << "   #                              #\n";
                    cout << "   ################################\n\n";
                    cout << "   Wollen Sie noch eine Zahl umrechnen?\n\n";
                    cout << "   <------------------------------>\n";
                    cout << "   < JA    |  ' j '               >\n";
                    cout << "   <------------------------------>\n";
                    cout << "   < NEIN  |  ' n '               >\n";
                    cout << "   <------------------------------>\n\n";
                    cout << "   Eingabe:\t\t ";
                    cin >> Beenden;
                    system("CLS");
                 }
    
        // ENDE DES PROGRAMMS
        return EXIT_SUCCESS;
    }
    

    Danke schonmal im Voraus für Eure Hilfe 🙂

    LG Dennis



  • Komisch Art eine bestimme Darstellung zu berechnen mit einem int array.. na ja, für die Lösung der Aufgabe liegt dir also wohl wieder ein Array mit Nullen und Einsen vor, daher solltest du dir mal die shift << >> Operatoren angucken. (Und die binären Operatoren & | ^)



  • http://de.wikipedia.org/wiki/Dualsystem
    Du musst also jeweils die einsen mit ihrem Stellenwert potenzieren und alle zusammen addieren.



  • hat zwar nichts mit deinem eigentlichen problem zu tun, aber ich würde in deinem fall von einer while schleife zu einer do-while schleife abweichen.

    do
    {
    //...
    }while(condition);
    

    das würde deinen komischen "hack" oben unnötig machen 🙂

    EDIT:
    wobei ich grade sowieso nicht verstehe, warum "beenden" auf "ja" sein soll, damit die loop weiter läuft? o.O wäre "nein" da nicht wesentlich intuitiever?^^



  • int bin[16];
    // mit einsen und nullen gefüllt...
    
    int ergebnis = 0;
    for(int i = 0; i < 16; ++i) {
        ergebnis += bin[i] * (1 << i);
        // oder je nachdem wie deine reihenfolge ist, also 
        // das niedrigste bit am anderen ende liegt
        ergebnis += bin[i] * (1 << (16-i) );
    }
    

Anmelden zum Antworten