For-Anweisung, mal wieder!



  • Huhu!

    habe hier folgenden block:

    for (int i = 0; i < Additions_Zahlen.size(); i++) {
        int j = i+1;
        Additions_Zahlen[i]+Additions_Zahlen[j]; 
    	};
    

    Soweit alles gut! Wenn ich den Code aber jetzt so verändere:

    for (int i = 0; i < Additions_Zahlen.size(); i++) {
        int j = i+1;
        Additions_Zahlen[i]+Additions_Zahlen[j] = ergebnisAddition; 
    	};
    

    bekomme ich eine Compiler-Fehlermeldung Wie kann ich den Fehler beheben?

    PS.: Additions_Zahlen ist ein vektor in den vorher Zahlen eingelesen wurden die jetzt addiert und in ergebnisAddition gespeichert werden sollten!



  • ergebnisAddition = Additions_Zahlen[i]+Additions_Zahlen[j];
    

    Die Variable der etwas zugewiesen werden soll, muss links stehen.



  • OMG xD
    danke hab mich mal weider seltendämlich angestellt 😃
    danke nochmal!
    [Edith: Boah is das peinlich :)]



  • Denkanstoss:

    Annahme: Vektor hat die Grösse 5.
    Letzter Schleifendurchlauf: i hat Wert 4 -- j hat Wert 5
    Worauf greifst du nun mit Additions_Zahlen[j] zu? 😃



  • huhu
    ach verdammt xD
    ja bin schon etwas müde und das auf 15 min hinbatzen dabei kommt sowas raus 😉
    aber ich wüsst jetzt ausm stehgreif keine lösung... höchstens ne 2. for schleife... mit j als variable >:D
    bin ja noch Neuling
    Prog_mux



  • Im letzten Durchlauf ist Additions_Zahlen[j] out of bounds.

    edit: ok, vorm beantworten von schon länger geöffneten Threads nochmal auf f5 drücken...



  • @ prog_mux du musst einfach die Schleife bis size -1 laufen lassen.



  • huhu
    Ja klar aber hab ich dann nich das problem das ich dann pracktisch immer das gleiche plus nehm? also zb:
    Additions_Zahlen[1] + Additions_Zahlen[1]
    das will ich ja nich 🙂
    sorry nochmal wenn ich mich grad blöd anstell wie gesagt 😃
    Mux



  • for (int i = 0; i < Additions_Zahlen.size(); i++) {
        int j = i+1;
        Additions_Zahlen[i]+Additions_Zahlen[j] = ergebnisAddition; 
    	};
    
    1. Gewöhne dir das Präinkrement an. Ein Präinkrement ist bei user-defined types schneller.
    2. Der Block einer for-Schleife muss nicht mit einem Semikolon abgeschlossen werden.
    3. Spare dir die temporäre Zwischenvariable j und schreibe stattdessen direkt:
    ergebnisAddition = Additions_Zahlen[i]+Additions_Zahlen[i+1];
    
    1. Gewöhne dir an, Namen von Objekten mit einem Kleinbuchstaben beginnen zu lassen. Das liest sich dann viel leichter.
    2. Gewöhne dir an, auf Englisch zu programmieren. Wenn schon Deutsch, dann vergib sinnvollere Namen als "Additions_Zahlen" (Welcher übrigens besser als "additions_zahlen" oder "additionsZahlen" geschrieben wird).
    3. Geschwungene Klammern haben ihre eigene Zeile verdient. -> Lesbarkeit

    Meine Lösung mit einer Schleife würde dann wohl so aussehen:

    int sum = numbers.front();
    for(std::vector<int>::iterator iter = numbers.begin() + 1; iter != numbers.end(); ++iter)
    	sum += *iter + *(iter - 1);
    

    Edit: Keine Ahnung, was deine Schleife eigentlich bringt, hab das mal so auf die Schnelle runtergetippt. Keine Garantie auf Fehlerfreiheit.



  • huhu
    also erstmal danke für deine tipps, bin für sowas immer offen 🙂
    aber wegen der namen, es is ein taschenrechner das hielt ich das für angebracht^^
    Mux



  • Mal etwas grundlegendes: Im Kopf einer for-Schleife for(...;...;...) verwendet man nur Dinge, die beim Einstieg in die Schleife bereits bekannt sind. Sonst verwendet man besser eine while-Schleife. 🕶 Ich möchte deinen Code ungern nachvollziehen! 😮



  • berniebutt schrieb:

    Mal etwas grundlegendes: Im Kopf einer for-Schleife for(...;...;...) verwendet man nur Dinge, die beim Einstieg in die Schleife bereits bekannt sind. Sonst verwendet man besser eine while-Schleife. 🕶 Ich möchte deinen Code ungern nachvollziehen! 😮

    Worauf bezieht sich das?



  • hab ich mich auch grad gefragt 😃
    ja der code is wirklcih etwas durcheinander 😉



  • An meinem Code ist nichts durcheinander, eine normale for-Schleife über einen Container.

    C++0x ist da super:

    for(auto& elem : container)
    	do_something_with_elem;
    


  • nein meiner 😉 deiner is ja gut 😃



  • ich dachte da spontan an <algorithm> .. google liefert sowas http://stackoverflow.com/questions/3221812/sum-of-elements-in-a-stdvector


Anmelden zum Antworten