Probleme bei einer for schleife



  • Hallo alle zusammen, habe folgendes Problem.

    ICH SAG JETZT SCHON ICH BIN EIN C++ ANFÄNGER..................

    Also mein Code sieht folgendermaßen aus

    string s1 = "101";
    	string s2 = "0";
    	string s3 = "0";
    for (int i = 0; i < s1.length(); i++)								
    	{
    
    		auto result1 = bitset<1>(s1.at(0)) ^ bitset<1>(s2); //s1 erste Ziffer mit s2 "Xor"
    		auto result2 = result1 ^ bitset<1>(s3); // das Ergebnis von result1 mit s3 Xor
    		auto result3 = bitset<1>(s1.at(0)) ^ bitset<1>(s3); //S1 erste Ziffer mit s3 Xor
    
    		auto result4 = bitset<1>(s1.at(1)) ^ bitset<1>(s2);//s1 zweite Ziffer mit s2 "Xor"
    		auto result5 = result4 ^ bitset<1>(s3); // das Ergebnis von result4 mit s3 Xor
    		auto result6 = bitset<1>(s1.at(1)) ^ bitset<1>(s3); //S1 zweite Ziffer mit s3 Xor
    
    		auto result7 = bitset<1>(s1.at(2)) ^ bitset<1>(s2); //s1 dritte Ziffer mit s2 "Xor"
    		auto result8 = result7 ^ bitset<1>(s3); // das Ergebnis von result7 mit s3 Xor
    		auto result9 = bitset<1>(s1.at(2)) ^ bitset<1>(s3);//S1 dritte Ziffer mit s3 Xor
    
    cout << result2 << result3 << result5 << result6 << result8 << result9 << endl;
    		system("pause");
    
    }
    

    ich bekomme mit diesem oberen Code zwar die richtige Ergebnisse heraus, aber ich hatte es anfangs wie folgt :

    Der eigentliche Code sah vorher so aus:

    string s1 = "101";
    	string s2 = "0";
    	string s3 = "0";
    
    for (int i = 0; i < s1.length(); i++)
    	{
    
    		auto result1 = bitset<1>(s1.at(i)) ^ bitset<1>(s2); //hier und bei result 3 soll bei jedem durchgang das i erhöht werden so dass ich jede Ziffer von s1 einzeln mit  s2 und s3 berechnen kann
    		auto result2 = result1 ^ bitset<1>(s3);
    		auto result3 = bitset<1>(s1.at(i)) ^ bitset<1>(s3);
    
    cout << result2 << result3 << endl; //bei der Ausgabe bekomme ich leider immer die falsche Ergebniss heraus
    		system("pause");
    
    }
    

    Mit dieser Berechnung unten bekomme ich immer die falschen Ergebnisse raus, weil bei jedem Durchgang result2 und result3 erneut überschrieben werden. (glaube ich zumindest) wie kann ich denn dieses Problem lösen.

    zudem wollte ich später "s1" so ändern dass der Benutzer die Zahl eingibt. deshalb muss ich die Variation mit dem "s1.at(i)" können.

    Könnt Ihr mir bitte helfen, wenn ihr das Problem nicht verstanden habt, einfach nachfragen.

    Ich versuche mein bestes um dazuzulernen

    Grüße

    Bence



  • Ja, in deiner Schleife definierst du in jeder Runde neue Variablen.

    Die eine Schleife liefert drei mal dasselbe Ergebnis, die andere berechnet drei Unterschiedliche. Und was soll das Ganze nun machen?



  • ich brauche den unteren Fall, aber mit den gleichen Ergebnissen wie bei den Oberen.

    Kann man das irgendwie mit Befehlen machen ?



  • Entweder du formulierst eine sinnvolle Frage oder kommst selber klar.



  • string s1 = "101";
        string s2 = "0";
        string s3 = "0";
    
    for (int i = 0; i < s1.length(); i++)
        {
    
            auto result1 = bitset<1>(s1.at(i)) ^ bitset<1>(s2); //hier und bei result 3 soll bei jedem durchgang das i erhöht werden so dass ich jede Ziffer von s1 einzeln mit  s2 und s3 berechnen kann
            auto result2 = result1 ^ bitset<1>(s3);
            auto result3 = bitset<1>(s1.at(i)) ^ bitset<1>(s3);
    
    cout << result2 << result3 << endl; //bei der Ausgabe bekomme ich leider immer die falsche Ergebniss heraus
            system("pause");
    
    }
    

    Ich verstehe nicht wie ich hier die Variabeln hochzähle, so dass ich wie bei dem anderen Fall, verschiedene Ergebnisse bekomme.



  • Dein Frage ist und bleibt sinnlos. Vielleicht nimmst du erst mal das system("pause"); raus.



  • Hat sich so eben erledigt



  • manni66 schrieb:

    Dein Frage ist und bleibt sinnlos. Vielleicht nimmst du erst mal das system("pause"); raus.

    WARTE MAL

    DU hast RECHT 😮 😮 😮 😮 😮

    Vielen dank^^



  • ICh habe da noch eine Frage, falls du kurz Zeit hast.

    Ich bekomme bei dem oberen code

    110011
    

    raus

    und bei dem unteren Code

    11
    00
    11
    

    heraus.

    wie kann ich den Code so konstruieren, so dass unten auch das Ergebnis wie oben

    nebeneinander steht ?



  • Nimm das endl in der Schleife raus.



  • manni66 schrieb:

    bencemanyak schrieb:

    wie kann ich den Code so konstruieren, so dass unten auch das Ergebnis wie oben nebeneinander steht ?

    Nimm das endl in der Schleife raus.

    Bei der Qualität dieser Frage kommt bei mir die Frage auf: "Wo hast du diesen Code denn kopiert?" Fang lieber erst mal mit einem hello world programm an...



  • Habe "Hello World" schon durchgemacht ^^

    War für einen "C-Programmierer" etwas umständlich^^ aber es klappt mit der Zeit, lerne viel dazu.

    danke an manni66 👍


Anmelden zum Antworten