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