[Novize] Verstehe diese Berechnung nicht ganz!
-
#include <stdio.h> #include <stdlib.h> int main() { int counter = 0; int sequence_length = 0; do { sequence_length += counter++%3 == 0; printf("%d\t%d\n",counter,sequence_length); }while(counter < 5); return 0; }
Habe diesen Part mal aus meinem Lehrbuch entnommen...der Zusammenhang entfällt jetzt zwar aber meine Frage bezieht sich eher auf "sequence_lenght"'s Werte die dazuaddiert werden.
Mein Compiler wirft mir folgendes aus:
E:\C Programming>test.exe 1 1 2 1 3 1 4 2 5 2 E:\C Programming>
Das habe ich mir so ausgeben lassen um das Ganze zu analysieren...
Jedoch verstehe ich noch nicht ganz den logischen Operator == 0 in der Rechnung.
gilt demnach bei counter = 1
sequence_length = sequence_length + count++%3 == 0; // gleich sequence_length = sequence_length + 0 (zero)
Denn die Expression count++%3 == 0 ist ja false also zero also "0"
Somit würde ich die erste Output Line verstehen im compiler.Wieso käme dann beim compilen der Wert 1 für sequence_length heraus
Sorry ich bin leicht verwirrt - Ich kann das Ganze nicht so richtig auslesen.
gruß Charlie
-
Du stolperst imho über die Post-Inkrementierung von counter. Bei der Auswertung in Zeile 11 hat counter immer noch den alten Wert, also beginnend mit 0. Du kannst das Programm ja leicht umschreiben, z.B. bei der Ausgabe einfach counter-1 oder das Postinkrement von counter einfach am Ende der Schleife machen.
-
Beim ersten Durchlauf ist counter = 0.
0 Modulo 3 gibt 0
0 == 0 gibt den Boolschen Ausdruck TRUE, bzw. hier da C 1.Die 1 wird dann zu sequence_length hinzuaddiert.
Diese hat dann von nun an den Wert 1.Im zweiten Durchgang ist counter = 1
0 Module 3 gibt also 1.1 == 0 ergibt false, also 0.
0 + sequencecounter ändert sequencecounter nicht.
Das passiert erst dann wieder, wenn 3 Modulo 3 berechnet wird und
somit eine 0 mit 0 im boolschen ausdruck verglichen wird.0 == 0 ergibt dann 1.
Die wird zu sc addiert und der ist dann 2.Also alles trivial.
-
Kleine Korrektur:
Versteher schrieb:
Im zweiten Durchgang ist counter = 1
1 Module 3 gibt also 1.