Algo Kurs Zum Dart/Flutter Kurs

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.

Eingabe

Der Benutzer gibt Text ein.

Umwandlung

Der Text soll mit int.tryParse zu einer Zahl werden.

Pruefung

Die Zahl muss zwischen 0 und 150 liegen.

Wiederholung

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

Versucht sicher, Text in eine ganze Zahl umzuwandeln.

else if

Prueft den Bereich erst, wenn wirklich eine Zahl vorhanden ist.

8. Deine Algo-Aufgaben

  1. Schreibe den Pseudocode fuer eine Namenseingabe, die nicht leer sein darf.
  2. Erweitere den Alter-Pseudocode so, dass maximal drei Fehlversuche erlaubt sind.
  3. Schreibe ein Struktogramm fuer die Alter-Pruefung.
  4. 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