Ganzzahldivision
Die Division in C++ hat einen Haken. Rate, was diese Anweisung ausgibt:
std::cout << 7 / 2 << "\n";Das gibt aus:
3Nicht 3.5, sondern 3. Wenn du zwei Ganzzahlen teilst, ist auch das Ergebnis eine Ganzzahl: C++ wirft den Nachkommateil weg. Es rundet nicht, es schneidet ihn einfach ab, deshalb ist 19 / 10 gleich 1 und 2 / 3 gleich 0. Das nennt man Ganzzahldivision.
Die Ganzzahldivision funktioniert wie das Teilen mit Rest aus der Grundschule: Wie oft passt eine Zahl in eine andere? Den Rest liefert der Operator % (das Prozentzeichen, das Programmierer Modulo nennen):
std::cout << 7 / 2 << "\n";
std::cout << 7 % 2 << "\n";
std::cout << 10 % 5 << "\n";Das gibt aus:
3
1
0Die Zwei passt dreimal in die Sieben (3 × 2 = 6), und 1 bleibt übrig. Geht die Division genau auf, ist der Rest 0. So erkennt man gerade Zahlen: Eine gerade Zahl durch zwei geteilt lässt den Rest 0, eine ungerade den Rest 1. Der Operator % funktioniert nur mit Ganzzahlen.
Willst du ein Ergebnis mit Nachkommastellen, muss mindestens eine der Zahlen eine Dezimalzahl sein:
std::cout << 7.0 / 2 << "\n";
std::cout << 7 / 2.0 << "\n";
std::cout << 10.0 / 3 << "\n";Das gibt aus:
3.5
3.5
3.33333std::cout gibt Dezimalzahlen mit höchstens 6 signifikanten Stellen aus, deshalb siehst du 3.33333.
Ein typischer Fehler ist zu glauben, es genüge, das Ergebnis in einem double zu speichern:
double haelfte = 7 / 2;
std::cout << haelfte << "\n";Das gibt aus:
3C++ berechnet zuerst 7 / 2. Beide Zahlen sind ganz, also ist das Ergebnis 3, und erst dann wird diese 3 in haelfte gespeichert. Der Typ der Variablen links von = spielt keine Rolle.
Und wenn du zwei Variablen vom Typ int teilst? Wandle eine davon mit static_cast<double>(...) in eine Dezimalzahl um:
int punkte = 7;
int spiele = 2;
std::cout << static_cast<double>(punkte) / spiele << "\n";Das gibt aus:
3.5static_cast<double>(punkte) nimmt den Wert von punkte als Dezimalzahl. Die Variable selbst bleibt ein int.
So schreibst du es:
Anweisungen
- 1
Vier Freunde haben Pizzen bestellt, die insgesamt in 18 Stücke geschnitten sind. Wie viele ganze Stücke bekommt jeder von ihnen? Berechne es aus den Variablen und gib aus:
Stücke pro Person: 4 - 2
Wie viele Stücke bleiben übrig? Berechne es mit
%und gib es in der nächsten Zeile aus:Stücke übrig: 2 - 3
Die Rechnung beträgt 50 EUR, und die Freunde teilen sie gleichmäßig auf. Gib in der nächsten Zeile aus, wie viel jeder von ihnen zahlt. Mit der Ganzzahldivision käme nur 12 heraus, und 2 EUR würden fehlen:
Jeder zahlt: 12.5 EUR