Modulo Operator % in einer if bedingung?



  • Ich bin dabei c++ zu lernen. Bin bei der for schleife.

    Nun habe ich ein kleines Programm im Rahmen eines Buches mit dem ich lerne erstellt, das per FOR-Schleife die Quadratzahlen berechnene kann.

    Ja ich weiß, nix Weltbewegendes. 🙂 Soweit passt auch alles. Nun schreibt der Autor das es möglich wäre "mithilfe des Modulo-Operators % kann man mit einer einzigen if-Bedingung elegant feststellen, ob es sich bei dem aktuellen Schleifendurchgang um ein vielfaches von 10 handelt"

    Die Aufgabe ist es ein Programm zu erstellen das per for-schleife die ersten hundert Quadratzahlen ausgibt. Nach jeder zehnten Quadratzahl soll das Programm anhalten und warten bis der Anwender die RETURN Taste drückt.

    Meine Fragen sind wie ich A: Den Modulo Operator hier nutzen kann und B: wie ich den Anwender nach jeder 10 Quadratzahl zum RETURN drücken auffordern kann?

    Viele Grüße
    Helge



  • Zu A:
    Wenn eine Zahl ein Vielfaches von 10 ist, welcher Wert kommt dann beim Modulo raus?
    Die Bedingung musst du in die if-Abfrage schreiben.
    Zu B:
    Nun, die Enterabfrage in dem Sinn ist kein Bestandteil vom Standard, du kannst aber tricksen, indem du std::cin.get() aufrufst. Dadurch wird das Programm pausiert, bis eine Eingabe getätigt wird, die beim Drücken von Enter abgeschlossen ist.


  • Mod

    Schreib doch mal X modulo 10 auf für X von 0 bis 100. Fällt dir was auf?



  • a % b gibt dir den Rest der ganzzahligen Division a/b. Der Rest ist genau dann Null, wenn die Division aufgeht, d.h. du kannst mit der Bedingung zaehler%10 == 0 testen, ob zaehler durch 10 teilbar ist.



  • Nathan schrieb:

    Zu A:
    Wenn eine Zahl ein Vielfaches von 10 ist, welcher Wert kommt dann beim Modulo raus?

    Was beim Modulo herauskommt, hängt einzig und allein von den Operanden ab.



  • Danke für die Tipps.

    Wie kann ich das im Programm umsetzen.

    Im Moment sieht mein Programm so aus:

    //FOR-Schleife - Quadratzahlen berechnen
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int loop;
    	int quadr;
    	for(loop= 1; loop <=100; ++loop)
    	{
    		quadr = loop * loop;
    		cout << "Das Quadrat von" << loop << "ist: " << quadr << endl;
    
    	}
    	cin.get();
    	return 0;
    }
    


  • Eine Möglichkeit:

    for(unsigned i = 1; i <= 100; ++i)
        {
            std::cout << "Quadrat von " << i << " = " << i * i << '\n'; // evtl. sqr()
            if(i % 10 == 0 && i != 0)
            {
                std::cout << "<Enter> druecken, um fortzufahren...\n";
                std::string str;
                std::getline(cin, str);
            }
        }
    

    % 10 == 0 überprüft, ob Vielfaches von 10.
    getline nimmt sich eine zeile und steckt sie von cin in den string. Du sagst "Zeile zu ende", indem du Enter drückst...

    Glaub 0 ist auch ne Quadratzahl, aber was solls...

    LG



  • hardware schrieb:

    Eine Möglichkeit:

    for(unsigned i = 1; i <= 100; ++i)
        {
            std::cout << "Quadrat von " << i << " = " << i * i << '\n'; // evtl. sqr()
            if(i % 10 == 0 && i != 0)
            {
                std::cout << "<Enter> druecken, um fortzufahren...\n";
                std::string str;
                std::getline(cin, str);
            }
        }
    

    % 10 == 0 überprüft, ob Vielfaches von 10.
    getline nimmt sich eine zeile und steckt sie von cin in den string. Du sagst "Zeile zu ende", indem du Enter drückst...

    Glaub 0 ist auch ne Quadratzahl, aber was solls...

    LG

    Zu lahm und suboptimal 👎



  • helge90 schrieb:

    Danke für die Tipps.

    Wie kann ich das im Programm umsetzen.

    Im Moment sieht mein Programm so aus:

    //FOR-Schleife - Quadratzahlen berechnen
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int loop;
    	int quadr;
    	for(loop= 1; loop <=100; ++loop)
    	{
    		quadr = loop * loop;
    		cout << "Das Quadrat von" << loop << "ist: " << quadr << endl;
    
    	}
    	cin.get();
    	return 0;
    }
    

    '\n' statt endl.

    deklariere die zählervariable im Kopf der schleife, nenne sie am Besten i für "index"

    for(int i = 1; i <= 100; ++i)



  • Das gleiche gilt für die variable quadr..

    Sorry für die ganzen Posts Leute, habt erbarmen 🙄


Anmelden zum Antworten