Binär- ins Dezimalsystem



  • hoi ich versuche einen Programm zu erstellen das, das Binärsystem ins Dez.System umwandelt. Zurzeit ist es für 3 zahlen gedacht möchte es später aber auf 16 stellen verlängern.Mein problem ist es aber das es irgend ein ergebnis ausgibt und nicht das was ich denke 😞

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int ergebnis = 0,ergebnis1=0, endergebnis;
        int feld[2];
    
        for (int index = 0;index < 2; index++)
        {
        cout<<" Bitte zahl "<<index+1<<" eingeben";
            cin>>feld[index];}
    
               ergebnis= feld[0] * 1;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[1] * 2;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[2] * 4;
         endergebnis=ergebnis+ergebnis1;
    
         cout<<endergebnis;
    
    return 0;
    }
    

    Freue mich auf einen guten ratschlag oder tips,aber natürlich auch über elegantere lösungen als meine,Danke im voraus 🙂



  • chichox schrieb:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int ergebnis = 0,ergebnis1=0, endergebnis;
        int feld[2];
    
        for (int index = 0;index < 2; index++)
        { // Diese Klammer weg.
        cout<<" Bitte zahl "<<index+1<<" eingeben";
            cin>>feld[index];}
    
               ergebnis= feld[0] * 1;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[1] * 2;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[2] * 4;
         endergebnis=ergebnis+ergebnis1;
    
         cout<<endergebnis;
    
    return 0;
    }
    

    Edit: Elegantere Lösung?

    #include <bitset>
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::cout << "Bitte Bits eingeben: ";
        std::string str;
        std::cin >> str;
        std::bitset<16> bits(str);
        std::cout << "Als Zahl: " << bits.to_ulong() << '\n';
    }
    


  • [quote="Nathan"][quote="chichox"]
    [code="cpp"]#include <iostream>
    
    using namespace std;
    
    int main()
    {
        int ergebnis = 0,ergebnis1=0, endergebnis;
        int feld[2];
    
        for (int index = 0;index < 2; index++)
        cout<<" Bitte zahl "<<index+1<<" eingeben";
            cin>>feld[index];
    
               ergebnis= feld[0] * 1;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[1] * 2;
         endergebnis=ergebnis+ergebnis1;
    
               ergebnis= feld[2] * 4;
         endergebnis=ergebnis+ergebnis1;
    
         cout<<endergebnis;
    
    return 0;
    }
    

    so gibt er mir eine fehlermeldung :S



  • Die wäre..?



  • Die Klammer hat schon gepasst. Du hast bloß die schließende übersehen, die durch die furchtbare Formatierung untergegangen ist.



  • Bin ich blind oder wird ergebnis1 nie verändert?



  • EOP schrieb:

    Bin ich blind oder wird ergebnis1 nie verändert?

    Ergebnis1 dient mir zum rechnen.. wen du eine bessere möglichkeit siest nur her damit 😃


  • Mod

    chichox schrieb:

    EOP schrieb:

    Bin ich blind oder wird ergebnis1 nie verändert?

    Ergebnis1 dient mir zum rechnen.. wen du eine bessere möglichkeit siest nur her damit 😃

    So wie du es derzeit benutzt, kannst du es so abkürzen:

    endergebnis=ergebnis+ergebnis1;
         // wird zu
         endergebnis=ergebnis+0;
    

    Ich weiß nicht, ob man das noch weiter vereinfachen kann. Musst du mal einen Mathematiker fragen.



  • chichox schrieb:

    Ergebnis1 dient mir zum rechnen..

    Naja, 0 zu etwas addieren ändert das etwas nicht. Dazu brauche ich nicht rechnen ...



  • hahaa gott manchmal mache ich auch blödes zeug xD naja 😕 hab jetz alle int variablen gelöscht und nochmal ein feld gleicher gröse gemacht und so zugewiesen:

    sumand[0]= feld[0] * 1;
    

    in der hofnung ich wüste wie ich dan

    sumand[0] 
    sumand[1] 
    sumand[2]
    

    subtrahieren kann, hat mir jemand einen guten tipp?



  • Ansonsten greifst Du mit feld[2] eins hinter das Array...
    Und eine andere Möglichkeit wäre strtol() aus0 <cstdlib> .

    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    int main(){
        std::string s;
    	std::cin>>s;
    	char* endptr;
    	long lval =	std::strtol(s.c_str(), &endptr, 2);
    	if(s.size()>0 && *endptr=='\0')
    		std::cout << lval << '\n';
    }
    

Anmelden zum Antworten