Lektion 04 - Algo Aufgabe mit Pseudocode
Eingabe pruefen, bis sie gueltig ist
In dieser Aufgabe trainierst du den wichtigsten Gedanken fuer viele Programme:
Ein Wert wird solange abgefragt, bis er brauchbar ist. Du planst zuerst in
Pseudocode und uebertraegst die Logik danach in Dart.
1. Problemstellung
Schreibe die Logik fuer ein Programm, das nach einem Alter fragt. Das Alter ist nur
gueltig, wenn es eine ganze Zahl zwischen 0 und 150 ist. Solange die Eingabe ungueltig
ist, soll erneut gefragt werden.
EingabeBewertung
25Gueltig
-4Ungueltig, weil kleiner als 0
180Ungueltig, weil groesser als 150
abcUngueltig, weil keine ganze Zahl
Ungueltig, weil leer
2. Erst denken: Welche Schritte?
Bevor du Code schreibst, klaerst du die Daten und Bedingungen. Das verhindert,
dass du mitten im Code die eigentliche Logik suchen musst.
EingabeDer Benutzer gibt Text ein.
UmwandlungDer Text soll mit int.tryParse zu einer Zahl werden.
PruefungDie Zahl muss zwischen 0 und 150 liegen.
WiederholungBei Fehlern wird erneut gefragt.
3. Warum int.tryParse?
int.parse kann bei falscher Eingabe einen Fehler werfen.
int.tryParse ist fuer Eingabepruefung besser: Wenn die Umwandlung nicht
klappt, kommt null zurueck.
int? alter = int.tryParse(eingabe);
if (alter == null) {
print('Das ist keine ganze Zahl.');
}
4. Pseudocode
Der Pseudocode beschreibt die Logik ohne Dart-Syntaxdruck. Genau so sollst du
Algo-Aufgaben ab jetzt immer starten.
Setze alter auf keinen Wert
Solange alter nicht gueltig ist:
Frage nach dem Alter
Lies die Eingabe als Text
Versuche den Text in eine ganze Zahl umzuwandeln
Wenn die Umwandlung fehlschlaegt:
Gib aus: "Bitte eine ganze Zahl eingeben"
Sonst wenn die Zahl kleiner als 0 oder groesser als 150 ist:
Gib aus: "Alter muss zwischen 0 und 150 liegen"
Sonst:
Speichere die Zahl als gueltiges Alter
Gib aus: "Gueltiges Alter: ALTER"
5. Struktogramm-Idee
Das Struktogramm zeigt dieselbe Logik als Blockstruktur: Eine Schleife enthaelt eine
Eingabe, eine Umwandlung und eine mehrstufige Entscheidung.
Alter pruefen
+------------------------------------------------+
| alterGueltig = false |
| Solange alterGueltig == false |
| +--------------------------------------------+ |
| | Eingabe lesen | |
| | zahl = int.tryParse(eingabe) | |
| | +---------------+------------------------+ | |
| | | zahl == null | Fehlermeldung Zahl | | |
| | +---------------+------------------------+ | |
| | | ausserhalb | Fehlermeldung Bereich | | |
| | +---------------+------------------------+ | |
| | | gueltig | alterGueltig = true | | |
| | +---------------+------------------------+ | |
| +--------------------------------------------+ |
| Gueltiges Alter ausgeben |
+------------------------------------------------+
6. Dart-Loesung als Orientierung
Nutze diesen Code erst, nachdem du den Pseudocode verstanden hast. Der Code ist nur
die Uebersetzung deiner geplanten Schritte.
import 'dart:io';
void main() {
int? alter;
while (alter == null) {
print('Bitte Alter eingeben:');
String? eingabe = stdin.readLineSync();
int? zahl = int.tryParse(eingabe ?? '');
if (zahl == null) {
print('Bitte eine ganze Zahl eingeben.');
} else if (zahl < 0 || zahl > 150) {
print('Alter muss zwischen 0 und 150 liegen.');
} else {
alter = zahl;
}
}
print('Gueltiges Alter: $alter');
}
7. Zeile fuer Zeile verstehen
int? alter;Das Alter ist am Anfang noch nicht vorhanden, also nullable.
while (alter == null)Die Schleife laeuft, solange noch kein gueltiges Alter gespeichert wurde.
eingabe ?? ''Falls die Eingabe null ist, wird ein leerer Text als Ersatz genutzt.
int.tryParseVersucht sicher, Text in eine ganze Zahl umzuwandeln.
else ifPrueft den Bereich erst, wenn wirklich eine Zahl vorhanden ist.
8. Deine Algo-Aufgaben
- Schreibe den Pseudocode fuer eine Namenseingabe, die nicht leer sein darf.
- Erweitere den Alter-Pseudocode so, dass maximal drei Fehlversuche erlaubt sind.
- Schreibe ein Struktogramm fuer die Alter-Pruefung.
- Uebersetze deinen Pseudocode danach in Dart.
Regel fuer weitere Lektionstage: Bei Algo-Aufgaben zuerst Pseudocode, dann optional
Struktogramm oder PAP, danach erst Dart-Code.
Weiter zu JSON Speicherlogik