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
    0
    

    und 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.


  • Mod

    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%2 ist 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 !


Anmelden zum Antworten