Altklausur
-
Hallo leute,
neue Aufgabe neues Problem :). Bei diesem guten Stück hier bin ich an einer Stelle ganz durcheinander gekommen.
# include<iostream> using namespace std; class myClass { private: int ii; public: myClass (int y) { ii=0; for (int i=1; i<=y; i++) if ( ! (i%2)) ii += i*i; } int get_ii (void) {return ii;} }; int ii=10; int main() { while (ii>0) { myClass x(ii); cout<<x.get_ii()<<endl; ii --; } system("pause"); return 0; }Ausgabe :
220 120 120 56 56 20 20 4 4 0und hier mein Problem :
{ ii=0; for (int i=1; i<=y; i++) if ( ! (i%2)) ii += i*i; }if ( ! (i%2))Verstehe ich das richtig. i zählt hoch und dabei das Modul "berechnet". Davor ist aber der Operator !, falls also das Modulo 1 ist, wird die schleife nicht ausgeführt, wegen dem !. Falls sie 0 ergibt, dann schon ?
for (int i=1; i<=y; i++)könnt ihr erkennen was die Grenze y ist ? habs nirgends gefunden
-
if ( ! (i%2))!0 ergibt 1
!alles_andere ergibt 0.D.h. du kommst nur dann in die if, wenn i%2 0 ergibt, i also eine gerade Zahl ist.
-
Rück es vernünftig ein, dann sieht man auch, was passiert:
for (int i=1; i<=y; i++) if ( ! (i%2)) ii += i*i;Die Schleife wird abgearbeitet. In der Schleife steht das if und wird also für jedes i angesehen. Ist die Bedingung des if wahr, dann wird
ii += i*i;ausgeführt. Man erhält also die Summe der Quadrate aller i von 1 bis y mit! (i%2).i%2ist wahr, wenn i nicht glatt durch 2 teilbar ist (also ungerade ist).!kehrt diese Aussage um. Also die Summe der Quadrate aller geraden Zahlen: 0, 4, 20, 56, … Solltest du in der Ausgabe wiedererkennen.könnt ihr erkennen was die Grenze y ist ? habs nirgends gefunden
Direkt darüber:
myClass (int y)
Wieder schadet die unübersichtliche Schreibweise der Lesbarkeit.
-
vatan89 schrieb:
if ( ! (i%2))Verstehe ich das richtig. i zählt hoch und dabei das Modul "berechnet". Davor ist aber der Operator !, falls also das Modulo 1 ist, wird die schleife nicht ausgeführt, wegen dem !. Falls sie 0 ergibt, dann schon ?
Im Prinzip schon, allerdings wird ist die von dem if gesteuerte Anweisung keine Schleife (und das if selbst auch nicht.) Es hilft auch, wenn man sich klar macht, was Modulo bedeutet: i%2 ist genau dann 0, wenn die Division durch 2 ohne Rest aufgeht, wenn also i eine gerade Zahl ist.
for (int i=1; i<=y; i++)könnt ihr erkennen was die Grenze y ist ? habs nirgends gefunden
y ist ein Funktionsparameter. In dem Fall ist die Funktion ein Konstruktor, du musst also gucken wo das Objekt erzeugt wird.
-
Danke, Problem gelöst 1A !