Frage zu for in while



  • Hallo,

    das Script läuft bei mir unter X-Code nicht. Ist es C oder C++
    trotzdem schon mal vielen Dank



  • Ist natürlich ganz normales C++.

    Aber es geht ja sowieso nur um die Schleife:

    for(int i=0, x=1; i <= 20; i += ++x)
    {
    }
    

    In dieser Schleife wird i bei jedem Durchgang um x erhöht, wobei x bei jedem Schleifendurchgang stets um 1 erhöht wird.



  • Hallo, vielen Dank, die Schleife sieht jetzt so aus und funktioniert.

    for (int i=1, x = 2; x*x <= trigonal; i += ++x)  		// Der Erhöher ist dynamisch
    		cout << "Zaehler = " << zaehler << " trigonal = " << trigonal << " xq = " << x*x <<  endl;
    

    Kann ich in den cout Befehl ein if einbauen. Ich will nähmlich, daß sie nur ausgibt, wenn die Trigonalzahl gleich einer Quadratzahl ist.

    Weißt Du, wie man auf dem xCode-Debugger die Schrift grösser macht?

    Danke



  • for (int i=1, x = 2; x*x <= trigonal; i += ++x)          // Der Erhöher ist dynamisch
            if(...)
                   cout << "Zaehler = " << zaehler << " trigonal = " << trigonal << " xq = " << x*x <<  endl;
    

    ? 🙄



  • {
    	int zaehler = 0;
    	int trigonal = 0;
    	printf("beginn \n");
    	while (zaehler < 36)
    	{
    trigonal = trigonal+zaehler;
    printf("Zaehler %d \n", zaehler);
    printf("trigonal %d \n", trigonal);
    for (int i=1, x = 2; x*x <= trigonal; i += ++x)  		// Der Erhöher muss dynamisch werden
    	if (trigonal=x*x)
    		cout << "Zaehler = " << zaehler << " trigonal = " << trigonal << " xq = " << x*x <<  endl;
    
    		zaehler++;		
    	}
    	return 0;
    }
    

    Er bleibt jetzt immer bei 4 7 4 stehen, siehe Auszug:
    aehler 3
    trigonal 6
    Zaehler = 3 trigonal = 4 xq = 4
    Zaehler 4
    trigonal 8
    Zaehler = 4 trigonal = 4 xq = 4
    Zaehler 5
    trigonal 9
    Zaehler = 5 trigonal = 4 xq = 4
    Zaehler 6
    trigonal 10
    Zaehler = 6 trigonal = 4 xq = 4
    Zaehler 7
    trigonal 11
    Zaehler = 7 trigonal = 4 xq = 4
    Zaehler 8
    trigonal 12
    Zaehler = 8 trigonal = 4 xq = 4
    Zaehler 9
    trigonal 13
    Zaehler = 9 tr

    Er sollte eigentlich bei 8: 36 = 36 drucken.

    Ich muß wohl den Quadrierer auch wachsen lassen.



  • '=' ist der Zuweisungsoperator.
    '==' ist der Vergleichsoperator.

    if(trigonal = x*x)
    {} // Hier prüfst du NICHT ob trigonal gleich x*x ist
       // sondern du weist trigonal den Wert von x*x zu!
    
    if (trigonal == x*x)
    {} // So muss es richtig heißen!
    


  • Danke, funktioniert einwandfrei. Kann man auch ein Tab in den Cout - Befehl einbauen...?



  • Tabs werden mit der Escape-Sequenz "\t" dargestellt.

    cout << "A\tB" << endl; // Zwischen A und B wir ein Tab ausgegeben.
    cout << "A" << "\t" << "B" << endl; // Das selbe hier auch.
    


  • Der Ausdruck sieht so aus: Es scheint auch ein mathematischen Problem vorzuliegen, oder er rechnet nicht richtig.

    beginn
    Zaehler= 1 Sum= 1 xq = 1 Sqrt = 1
    Zaehler= 8 Sum= 36 xq = 36 Sqrt = 6
    Zaehler= 49 Sum= 1225 xq = 1225 Sqrt = 35
    Zaehler= 288 Sum= 41616 xq = 41616 Sqrt = 204
    Zaehler= 1681 Sum= 1413721 xq = 1413721 Sqrt = 1189
    Zaehler= 9800 Sum= 48024900 xq = 48024900 Sqrt = 6930
    Zaehler= 57121 Sum= 1631432881 xq = 1631432881 Sqrt = 40391
    Zaehler= 131072 Sum= 65536 xq = 65536 Sqrt = 256
    Zaehler= 131528 Sum= 59938564 xq = 59938564 Sqrt = 7742
    Zaehler= 132113 Sum= 137053849 xq = 137053849 Sqrt = 11707
    Zaehler= 134033 Sum= 392554969 xq = 392554969 Sqrt = 19813
    Zaehler= 135816 Sum= 633126244 xq = 633126244 Sqrt = 25162
    Zaehler= 139392 Sum= 1125199936 xq = 1125199936 Sqrt = 33544
    Zaehler= 141537 Sum= 1426497361 xq = 1426497361 Sqrt = 37769
    Endet mit Zähler 200000

    Bei sqrt geht er bis 40391 nach oben, danach fällt er irgenwie wieder ab. Wie kann das sein?



  • Du arbeitest mit ints? Versuch long longs. Irgendwann ist halt Schicht im Schacht.



  • Dann sieht die Ausgabe so aus... Was bedeutet das?

    run
    [Switching to process 3013 local thread 0x2d03]
    Running…
    Beginn
    Zaehler= 1 Sum= 1 xq = 1 Sqrt = 1
    Zaehler= 8 Sum= 36 xq = 36 Sqrt = 6
    Zaehler= 49 Sum= 1225 xq = 1225 Sqrt = 35
    Zaehler= 288 Sum= 41616 xq = 41616 Sqrt = 204
    Zaehler= 1681 Sum= 1413721 xq = 1413721 Sqrt = 1189
    Zaehler= 9800 Sum= 48024900 xq = 48024900 Sqrt = 6930
    Zaehler= 57121 Sum= 1631432881 xq = 1631432881 Sqrt = 40391
    kill
    quit



  • Keine Ahnung. Kenne deinen Code ja auch nicht.



  • Also, die Rechnung ist Okay, aber, warum bricht er mit "kill" und "quit" ab, die Befehle hab ich nicht programmiert, und er schreibt die Enzweile nicht, wie damals, als er noch weiterrechnete, aber wahrscheinlich falsch..

    #include <iostream>
    using namespace std;
    int main (int argc, char * const argv[])
    {
    	int zaehler = 0;
    	long long trigonal = 0;
    	printf("Beginn \n");
    	while (zaehler < 200000)
    	{
    trigonal = trigonal+zaehler;
    for (long long i=1, x = 1; x*x <= trigonal; i += ++x)  		// Der Erhöher muss dynamisch werden
    	if (trigonal== x*x)
    		cout << "Zaehler=\t " << zaehler  <<"\t" <<" Sum= \t " << trigonal  << "\tt" << " xq = \t " << x*x <<  "\t" << "Sqrt = \t " << x <<    endl;
    
    		zaehler++;		
    	}
    	printf("Das programm endet mit Zähler %d\n", zaehler);
    	return 0;
    }
    


  • Benutz mal cpp-Tags.



  • Ich weiss gar nicht, was das ist...



  • brak schrieb:

    Ich weiss gar nicht, was das ist...

    [cpp] statt [code]


Anmelden zum Antworten