Algo Kurs Naechste Algo-Aufgabe

Lektion 02 - Struktogramme

Programmlogik als klare Bloecke darstellen

Ein Struktogramm zeigt den Ablauf eines Programms in verschachtelten Bloecken. Dadurch siehst du sofort, welche Schritte nacheinander passieren, wo entschieden wird und wo etwas wiederholt wird.

1. Was ist ein Struktogramm?

Ein Struktogramm wird auch Nassi-Shneiderman-Diagramm genannt. Es zeigt keinen Ablauf mit Pfeilen wie ein PAP, sondern eine Blockstruktur von oben nach unten. Genau deshalb passt es gut zu echtem Code.

PROGRAMM
+--------------------------------+
| Eingabe lesen                  |
| Wenn Eingabe gueltig?          |
|   Ja: Wert verarbeiten         |
|   Nein: Fehlermeldung ausgeben |
| Ergebnis ausgeben              |
+--------------------------------+

Merke: Struktogramme zeigen Struktur, nicht Pfeilwege.

2. Unterschied zu PAP

Ein Programmablaufplan arbeitet mit Symbolen und Pfeilen. Ein Struktogramm arbeitet mit Bloecken. Beide beschreiben Logik, aber Struktogramme zwingen dich staerker zu sauberer, strukturierter Programmierung.

PAPStruktogramm
Pfeile zeigen RichtungBloecke zeigen Verschachtelung
Gut fuer grobe AblaeufeGut fuer Code-nahe Logik
Entscheidung als RauteEntscheidung als geteilter Block

3. Die wichtigsten Bausteine

BausteinBedeutung
AnweisungEin einzelner Schritt, zum Beispiel Wert berechnen
SequenzMehrere Schritte nacheinander von oben nach unten
AuswahlEntscheidung mit Ja/Nein oder wahr/falsch
WiederholungSchleife, die etwas mehrfach ausfuehrt

4. Sequenz: Schritte nacheinander

Eine Sequenz ist der einfachste Fall. Jeder Schritt wird genau einmal ausgefuehrt. Im Struktogramm stehen diese Schritte untereinander.

Struktogramm-Idee

Start
Name setzen
Begruessung bauen
Begruessung ausgeben
Ende

Dart

String name = 'Welt';
String text = 'Hallo $name!';

print(text);

5. Auswahl: if/else als Block

Eine Auswahl teilt den Ablauf in zwei Moeglichkeiten. Im Code ist das meistens if/else. Im Struktogramm steht die Bedingung oben, darunter die Zweige.

Struktogramm-Idee

Wenn args leer?
+----------------------+----------------------+
| Ja                   | Nein                 |
| "Hallo!" ausgeben    | Name bauen           |
|                      | "Hallo Name!" ausg.  |
+----------------------+----------------------+

Dart

if (args.isEmpty) {
  print('Hallo!');
} else {
  String name = args.join(' ');
  print('Hallo $name!');
}

6. Wiederholung: Schleifen darstellen

Eine Wiederholung zeigt, dass ein Block mehrfach ausgefuehrt wird. Das brauchst du spaeter besonders fuer Eingabepruefung, Wuerfeln und Primzahlen.

Struktogramm-Idee

Solange Eingabe ungueltig ist:
  Frage nach Eingabe
  Pruefe Eingabe

Gueltige Eingabe verwenden

Dart

while (eingabeUngueltig) {
  // Eingabe lesen
  // Eingabe pruefen
}

Jede Schleife braucht eine Bedingung, die irgendwann falsch werden kann.

7. Beispiel: Hello-Aufgabe als Struktogramm

Die Hello-Aufgabe hat eine Sequenz und eine Auswahl. Genau deshalb ist sie ein gutes erstes Beispiel fuer ein Struktogramm.

hello.dart
+------------------------------------------------+
| Start                                          |
| Pruefe Argumente                               |
| +----------------------+---------------------+ |
| | args ist leer        | args ist nicht leer | |
| | "Hallo!" ausgeben    | name = args.join    | |
| |                      | "Hallo name!" ausg. | |
| +----------------------+---------------------+ |
| Ende                                           |
+------------------------------------------------+

8. Mini-Aufgaben

  1. Zeichne ein Struktogramm fuer die Hello-Aufgabe.
  2. Markiere darin Sequenz, Auswahl und Ausgabe.
  3. Schreibe ein Struktogramm fuer: Wenn Punkte mindestens 6 sind, dann bestanden, sonst nicht bestanden.
  4. Schreibe ein Struktogramm fuer eine Eingabe, die solange wiederholt wird, bis sie nicht leer ist.
Weiter zu Algo Vergleichen