MezData-Logo

Do-While-Schleife Eingabe bis Null Summe bilden, Mittelwert bilden, Type-Cast

Problem:

Summiere solange positive ganze Zahlen von der Eingabe auf, solange die Zahlen grösser 0 sind.

Gebe dann die Summe aus.

Analyse:

Man muss immer wieder eine Eingabe verlangen, solange die letzte Eingabe n > 0 war.
Wir brauchen ein Konstrukt das dies ermöglicht:

do{
  Eingabe n
} while (n>0);

Lösung:

int n,sum;
cout << "Summenrechner";
sum = 0;
do{
  cout << "\nGeben Sie Zahlen > 0 ein, sonst ist Eingabe beendet.";  
  cin >> n;
  sum = sum + n;
}while (n>0);
cout << "Summe ist: " << sum;

Job: Implementieren Sie die Lösung und erstellen Sie ein Struktogramm!

Allgemeine Do-While-Schleife

do{
  Verarbeitung
}while (Bedingung);

Aufgabe: Bilden Sie den Mittelwert der eingegebenen Zahlen und geben Sie ihn aus (Struktogramm)!
Tip: Beachten Sie folgendes Kapitel!

Type Cast

Wenn Sie ein Problem mit der richtigen Ausgabe (z.B. Mittelwert 3.5) haben, bedenken Sie, das der Datentyp Integer keine Kommazahlen verarbeiten kann!

Abhilfe schafft der Datentyp double, betrache aber folgendes Programm:

int i = 7, j = 2;
double m;
m = i/j;
cout << m;

Die Ausgabe ist nicht 3.5 sondern liegt eher bei 3, was ist die Ursache?

Der Ausdruck (Expression) i/j besteht nur aus Integer-Variablen, daher verarbeitet der Compiler die Berechnung als Integer, was zum Abschneiden der Nachkommastellen führt!

Mögliche Lösungen:

int i = 7;
double j = 2.0,m;
m = i/j;
cout << m;

Hier ist bei der Berechnung ein double-Wert beteiligt, der Compiler berechnet den Ausdruck i/j als double und die Nachkommastellen bleiben erhalten.

int i = 7, j = 2;
double m;
m = (double) i/j;  // Type Cast
cout << m;

Hier wird der Wert der Variablen i in einen double-Wert gewandelt, somit rechnet der Compiler mit double.

Hinweis: Type-Casts funktionieren nur bei einfach umzuwandelnden Datentypen, nicht z.B. zwischen Zahl und String!

Hinweis für Java: Anders als in C werden nicht kompatible Typen-Zuweisungen nicht als Warnung angezeigt sondern führen zu einem Fehler, daher sind Type-Casts in diesem Fall obligatorisch!