So gehst du an eine Aufgabe
Prüfungsaufgaben zu Struktogrammen sind selten schwer, aber oft lang: eine halbe Seite Szenario, drei Teilaufgaben, ein vorgegebenes Struktogramm. Wer einfach losschreibt, verliert Punkte an Stellen, die er längst kann. Deshalb ein festes Vorgehen:
- Text lesen und Signalwörter markieren. „Wie viele“ ist ein Zähler, „das größte“ ein Maximum mit Index, „bis die Eingabe gültig ist“ eine fußgesteuerte Schleife, „ob … vorkommt“ eine Suche (Lektion 5). Markiere auch Zahlen: Anzahl der Elemente, Indexbasis, Grenzwerte.
- Variablen und Startwerte notieren. Bevor du zeichnest: Welche Variablen gibt es, welchen Typ haben sie, womit beginnen sie? 0 für Summe und Zähler, das erste Element für Maximum und Minimum, falsch für einen Merker.
- Muster erkennen. Fast jede Aufgabe ist eines der Grundmuster aus Lektion 5 oder eine Kombination aus zweien. Erkennst du das Muster, steht die Form schon fest.
- Form zeichnen. Erst die groben Kästen (Eingabe, Schleife, Ausgabe), dann die Details im Rumpf. Verzweigung mit Dreieck, Schleife mit Balken, Schlüsselwort „solange“ oder „bis“ an der Bedingung.
- Schreibtischtest (Wertetabelle) mit kleinem Beispiel. Drei oder vier Werte reichen. Prüfe besonders den ersten und den letzten Durchlauf und den Fall „kein Treffer“.
- Zeit einteilen. Etwa ein Punkt pro Minute ist ein brauchbarer Richtwert. Bleibst du bei einer Teilaufgabe hängen, mach mit der nächsten weiter; Teilaufgaben werden typischerweise unabhängig voneinander bewertet.
Aufgabe 1: Schreibtischtest und Fehlersuche (25 Punkte)
Zeitempfehlung: 25 Minuten.
Szenario. Ein Getränkehandel prüft jeden Abend, welche Artikel nachbestellt werden müssen. Die Bestände der fünf Artikel stehen in einem Feld (Array) bestand mit fünf Ganzzahlen; das erste Element hat den Index 0, das letzte den Index 4. Der Mindestbestand minimum gilt für alle Artikel und wird eingegeben. Es soll gezählt werden, wie viele Artikel unter dem Mindestbestand liegen, und wie viele Stück insgesamt fehlen, um bei diesen Artikeln den Mindestbestand zu erreichen. Liegt kein Artikel unter dem Mindestbestand, wird „Alles ausreichend“ ausgegeben. Ein Auszubildender hat dazu das folgende Struktogramm entworfen:
Führen Sie einen Schreibtischtest für das Feld bestand = [30, 8, 15, 4, 12] und die Eingabe minimum = 10 durch. Legen Sie eine Tabelle mit den Spalten i, bestand[i], Prüfung, anzahl und fehlmenge an und geben Sie die Ausgabe an.
Musterlösung anzeigen
| Prüfung | i | bestand[i] | anzahl | fehlmenge | Ausgabe |
|---|---|---|---|---|---|
| Start, minimum = 10 | · | · | 0 | 0 | · |
| 8 < 10: ja | 1 | 8 | 1 | 2 | · |
| 15 < 10: nein | 2 | 15 | 1 | 2 | · |
| 4 < 10: ja | 3 | 4 | 2 | 8 | · |
| 12 < 10: nein | 4 | 12 | 2 | 8 | · |
| anzahl == 0: nein, Ausgabe | · | · | 2 | 8 | 2, 8 |
Ausgabe: 2, 8. Zwei Artikel liegen unter dem Mindestbestand (8 und 4), es fehlen 2 + 6 = 8 Stück. Wichtig beim Schreibtischtest: Du führst aus, was da steht, auch wenn dir die Schleifengrenze schon verdächtig vorkommt. Für dieses Feld ändert das nichts am Ergebnis, weil der Artikel mit Index 0 ohnehin über dem Minimum liegt.
Ermitteln Sie die Ausgabe des Struktogramms für bestand = [20, 25, 11, 30, 18] und minimum = 10. Notieren Sie die Prüfungen je Durchlauf.
Musterlösung anzeigen
| Prüfung | i | bestand[i] | anzahl | fehlmenge | Ausgabe |
|---|---|---|---|---|---|
| Start, minimum = 10 | · | · | 0 | 0 | · |
| 25 < 10: nein | 1 | 25 | 0 | 0 | · |
| 11 < 10: nein | 2 | 11 | 0 | 0 | · |
| 30 < 10: nein | 3 | 30 | 0 | 0 | · |
| 18 < 10: nein | 4 | 18 | 0 | 0 | · |
| anzahl == 0: ja, Ausgabe | · | · | 0 | 0 | Alles ausreichend |
Ausgabe: „Alles ausreichend“. Kein Durchlauf erhöht den Zähler, also läuft nach der Schleife der Ja-Zweig. Die 11 ist der knappste Wert, liegt aber nicht unter 10.
Für das Feld bestand = [3, 20, 20, 20, 20] und minimum = 10 gibt das Struktogramm „Alles ausreichend“ aus, obwohl der erste Artikel nur 3 Stück auf Lager hat. Nennen Sie den Fehler im Struktogramm, erklären Sie, warum er bei den Feldern aus a) und b) nicht aufgefallen ist, und korrigieren Sie das Struktogramm. Geben Sie außerdem die richtige Ausgabe für dieses Feld an.
Musterlösung anzeigen
Fehler: Die Zählschleife läuft „für i = 1 bis 4“, das Feld beginnt aber laut Aufgabe beim Index 0. Das erste Element bestand[0] wird nie geprüft; die Schleife hat nur vier statt fünf Durchläufe. Ein typischer Off-by-one-Fehler, der hier daher kommt, dass der Zähler wie gewohnt bei 1 gestartet wurde, ohne die Indexbasis zu prüfen.
Warum er nicht aufgefallen ist: In a) und b) lag der Artikel mit Index 0 (30 bzw. 20) über dem Mindestbestand. Ob er geprüft wird oder nicht, ändert dort nichts an Zähler und Fehlmenge. Erst wenn genau dieser Artikel knapp ist, liefert das Struktogramm ein falsches Ergebnis: „Alles ausreichend“ statt 1, 7.
Korrektur: Schleifenkopf „für i = 0 bis 4“. Gleichwertig: „für i = 0 bis n − 1“ mit n = 5, oder eine kopfgesteuerte Schleife mit i = 0 und „solange i < 5“.
Typisches Bewertungsraster
| Teilaufgabe | Wofür es Punkte gibt | Punkte |
|---|---|---|
| a) | Startzeile mit Initialisierung (1), je Durchlauf Prüfung mit Ergebnis und richtige Werte für anzahl und fehlmenge (4 × 2), Ausgabe nach der Schleife (1) | 10 |
| b) | Vier Prüfungen mit Ergebnis (4 × 1), Ausgabe „Alles ausreichend“ über den Ja-Zweig (1) | 5 |
| c) | Richtige Ausgabe 1, 7 für das Feld aus c) angegeben (2), Fehler benannt: Index 0 wird nie geprüft (3), Begründung, warum er bei a) und b) nicht aufgefallen ist (2), Korrektur des Schleifenkopfs oder gleichwertige Schleife (3) | 10 |
| Summe | Gleichwertig: Tabelle mit einer Zeile je Anweisung statt je Durchlauf; Prüfung als eigene Spalte oder in der Schrittspalte | 25 |
Aufgabe 2: Ergänzen und erweitern (25 Punkte)
Zeitempfehlung: 25 Minuten.
Szenario. Ein Parkhaus rechnet die Parkgebühr am Kassenautomaten ab. Der Automat liest die Parkdauer in Minuten und die Kundenart ein; die Parkdauer beträgt höchstens einen Tag (1440 Minuten). Abgerechnet wird jede angefangene Stunde: 61 Minuten zählen als zwei Stunden, genau 60 Minuten als eine. Der Stundensatz hängt von der Kundenart ab: Kurzparker („K“) zahlen 3 Euro, Dauerparker („D“) 2 Euro, Mitarbeiter („M“) parken kostenlos. Bei einer unbekannten Kundenart wird ein Hinweis ausgegeben und keine Gebühr berechnet. Die Gebühr beträgt höchstens 20 Euro pro Tag (Tagesmaximum). Zum Schluss wird die Gebühr ausgegeben. Das Struktogramm dazu ist an drei Stellen unvollständig:
Ergänzen Sie das Struktogramm an den Stellen (1), (2) und (3). Lücke (1) steht im Kopf der Verzweigung, Lücke (2) im Fall „D“ der Mehrfachauswahl, Lücke (3) im Ja-Zweig der letzten Verzweigung. Prüfen Sie Ihre Lösung mit 125 Minuten als Kurzparker (Ergebnis 9 Euro) und 500 Minuten als Kurzparker (Ergebnis 20 Euro).
Musterlösung anzeigen
(1) minuten MOD 60 > 0: Bleibt bei der Division durch 60 ein Rest, ist eine weitere Stunde angefangen. Gleichwertig: minuten MOD 60 != 0 oder stunden * 60 < minuten. (2) satz = 2, der Stundensatz für Dauerparker. (3) gebuehr = 20: die Deckelung auf das Tagesmaximum.
Probe: 125 Minuten ergeben 125 DIV 60 = 2 und 125 MOD 60 = 5, also 3 angefangene Stunden; als Kurzparker 3 · 3 = 9 Euro, unter 20, Ausgabe 9. 500 Minuten: 500 DIV 60 = 8, Rest 20, also 9 Stunden; 9 · 3 = 27, größer als 20, Ausgabe 20. Und 45 Minuten als Dauerparker: 0 volle Stunden, Rest 45, also 1 Stunde, 2 Euro.
Aufgabe 2 b) Erweitern (10 Punkte). Erweitern Sie das vollständige Struktogramm aus a): Die Parkdauer soll erst weiterverarbeitet werden, wenn sie gültig ist, also mindestens 1 und höchstens 1440 Minuten (ein Tag) beträgt. Bei einer ungültigen Eingabe soll „Ungültige Eingabe“ ausgegeben und die Eingabe wiederholt werden. Zeichnen Sie das erweiterte Struktogramm und wählen Sie die Schleifenart, die zur Situation passt.
Musterlösung anzeigen
Die Eingabe muss stattfinden, bevor sie geprüft werden kann, also fußgesteuert: Rumpf mit Aufforderung, Eingabe und Hinweis, darunter die Abbruchbedingung „bis minuten >= 1 UND minuten <= 1440“. Die Verzweigung für den Hinweis prüft das Gegenteil der Abbruchbedingung, deshalb ODER statt UND. Der Rest des Struktogramms bleibt unverändert. Gleichwertig: eine kopfgesteuerte Schleife „solange minuten < 1 ODER minuten > 1440“ mit einer ersten Eingabe davor; dann kann der Hinweis auch als erste Anweisung im Rumpf stehen und die Verzweigung entfällt.
So wird typischerweise bewertet
- Fußgesteuerte Schleife um die Eingabe (3); gleichwertig kopfgesteuert mit Eingabe vor der Schleife
- Abbruchbedingung mit beiden Grenzen richtig, UND bei „bis“ bzw. ODER bei „solange“ (4)
- Hinweis bei ungültiger Eingabe wird nur bei ungültiger Eingabe ausgegeben (2)
- Schleife ersetzt genau die Eingabe der Minuten, das übrige Struktogramm bleibt unverändert (1)
Schreiben Sie die Mehrfachauswahl aus dem Struktogramm (die Ermittlung des Stundensatzes aus der Kundenart) als Pseudocode.
Musterlösung anzeigen
FALLS kundenart
FALL "K":
satz = 3
FALL "D":
satz = 2
FALL "M":
satz = 0
SONST
AUSGABE "Unbekannte Kundenart"
satz = 0
ENDE FALLSGleichwertig ist eine Verzweigungskette WENN kundenart == "K" … SONST WENN … SONST …, solange alle vier Fälle vorkommen und die unbekannte Kundenart im letzten SONST landet. Die Schreibweise der Schlüsselwörter ist frei, muss aber durchgehend gleich bleiben.
Typisches Bewertungsraster
| Teilaufgabe | Wofür es Punkte gibt | Punkte |
|---|---|---|
| a) | Lücke (1) Bedingung mit MOD oder gleichwertig (4), Lücke (2) Stundensatz 2 (3), Lücke (3) Deckelung auf 20 (3) | 10 |
| b) | Passende Schleifenart (3), Bedingung mit beiden Grenzen und richtiger Logik (4), Hinweis nur bei ungültiger Eingabe (2), Rest unverändert eingebaut (1) | 10 |
| c) | Rahmen FALLS … ENDE FALLS oder gleichwertige Kette (1), drei Fälle mit richtigen Sätzen (3), SONST mit Hinweis (1) | 5 |
| Summe | Gleichwertig: Stunden mit (minuten + 59) DIV 60 in einer Zeile, dann entfällt Lücke (1) und die Punkte gehen auf diese Zeile über | 25 |
Aufgabe 3: Entwerfen (25 Punkte)
Zeitempfehlung: 25 Minuten.
Szenario. Eine Wetterstation speichert die Tageshöchsttemperaturen eines Monats als Ganzzahlen in Grad Celsius im Feld temperaturen mit n Werten; das erste Element hat den Index 1, der Index entspricht dem Tag des Monats. Ein Monat hat 28 bis 31 Tage, es gilt also n >= 1. Ein Frosttag ist ein Tag mit einer Temperatur unter 0 Grad. Es soll ein Unterprogramm entstehen, das die Anzahl der Frosttage liefert, und ein Hauptprogramm, das die Werte einliest, das Unterprogramm nutzt und zusätzlich den wärmsten Tag ausgibt.
Aufgabe 3 a) Funktion (10 Punkte). Entwerfen Sie die Funktion anzahlFrosttage(temperaturen: Feld, n: Ganzzahl): Ganzzahl als Struktogramm. Sie liefert zurück, wie viele der n Werte unter 0 liegen.
Musterlösung anzeigen
Das Zählmuster aus Lektion 5 als Funktion: Zähler ab 0, eine Zählschleife über alle n Elemente, im Rumpf die Verzweigung temperaturen[i] < 0 mit der Erhöhung im Ja-Zweig, und nach der Schleife die Rückgabe. Die Funktion gibt nichts aus, das ist Sache des Hauptprogramms. Genau 0 Grad ist kein Frosttag, deshalb < und nicht <=.
So wird typischerweise bewertet
- Signatur als Titel mit den Parametern temperaturen und n und dem Rückgabetyp Ganzzahl (2)
- Zähler mit 0 initialisiert, vor der Schleife (2)
- Zählschleife über alle n Elemente, Grenzen passend zur Indexbasis 1 (2)
- Verzweigung temperaturen[i] < 0 mit Erhöhung des Zählers im Ja-Zweig (3)
- Rückgabe des Zählers nach der Schleife, keine Ausgabe (1)
- Gleichwertig: kopfgesteuerte Schleife mit eigenem Zähler, anderer Variablenname
Aufgabe 3 b) Hauptprogramm (10 Punkte). Entwerfen Sie das Hauptprogramm als Struktogramm: Es liest zuerst die Anzahl n und dann die n Temperaturen in das Feld ein, ruft die Funktion aus a) auf und gibt die Anzahl der Frosttage aus. Anschließend ermittelt es den wärmsten Tag und gibt dessen Tag (Index) und Temperatur aus. Kommt die höchste Temperatur mehrmals vor, soll der erste dieser Tage ausgegeben werden.
Musterlösung anzeigen
Vier Teile hintereinander: die Anzahl einlesen, die Werte in einer Zählschleife in das Feld einlesen, die Funktion aufrufen und das Ergebnis ausgeben, dann das Maximum mit Index aus Lektion 5. Der Startkandidat ist das erste Element mit Tag 1, die Schleife beginnt beim zweiten. Der Index i ist zugleich der Tag, deshalb reicht tag = i. Die Ausgabe des wärmsten Tags steht nach der zweiten Schleife. Gleichwertig: das Maximum ebenfalls als Funktion auslagern, die den Index zurückgibt, oder beide Ergebnisse erst am Ende ausgeben.
So wird typischerweise bewertet
- Eingabe von n und Einlesen der n Werte in einer Schleife in das Feld (2)
- Aufruf anzahlFrosttage(temperaturen, n) mit Argumenten in Signaturreihenfolge, Ergebnis zugewiesen oder direkt ausgegeben (3)
- Maximum: Startkandidat erstes Element und Tag 1, nicht 0 (2)
- Schleife ab dem zweiten Element mit Vergleich und Aktualisierung von Wert und Tag (2)
- Ausgabe von Tag und Wert nach der Schleife (1)
- Gleichwertig: Schleife ab 1 mit einem überflüssigen Vergleich, Maximum als eigene Funktion
Führen Sie einen Schreibtischtest Ihrer Lösung aus a) und b) für das Feld temperaturen = [3, -2, 5, -1] mit n = 4 durch und geben Sie beide Ausgaben an.
Musterlösung anzeigen
| Prüfung in anzahlFrosttage | i | temperaturen[i] | anzahl |
|---|---|---|---|
| Start | · | · | 0 |
| 3 < 0: nein | 1 | 3 | 0 |
| −2 < 0: ja | 2 | −2 | 1 |
| 5 < 0: nein | 3 | 5 | 1 |
| −1 < 0: ja | 4 | −1 | 2 |
| Rückgabe | · | · | 2 |
| Prüfung im Hauptprogramm | i | temperaturen[i] | max | tag |
|---|---|---|---|---|
| Start: max = temperaturen[1] | · | · | 3 | 1 |
| −2 > 3: nein | 2 | −2 | 3 | 1 |
| 5 > 3: ja | 3 | 5 | 5 | 3 |
| −1 > 5: nein | 4 | −1 | 5 | 3 |
| Schleife beendet, Ausgabe | · | · | 5 | 3 |
Ausgaben: Frosttage: 2 und Wärmster Tag: 3 mit 5 Grad. Hast du in a) oder b) eine andere, gleichwertige Form gewählt, muss dein Schreibtischtest dieser Form folgen und dieselben Ausgaben liefern.
Typisches Bewertungsraster
| Teilaufgabe | Wofür es Punkte gibt | Punkte |
|---|---|---|
| a) | Signatur (2), Initialisierung (2), Schleife über alle Elemente (2), Verzweigung mit Zählung (3), Rückgabe (1) | 10 |
| b) | Einlesen (2), Aufruf mit Verwendung des Ergebnisses (3), Startkandidat für das Maximum (2), Schleife mit Vergleich und Aktualisierung beider Merker (2), Ausgabe nach der Schleife (1) | 10 |
| c) | Schreibtischtest der Funktion mit Ergebnis 2 (2), Schreibtischtest des Maximums mit Tag 3 und 5 Grad (3) | 5 |
| Summe | Gleichwertig: kopfgesteuerte Schleifen, Maximum als zweite Funktion; die Indexbasis 1 ist durch das Szenario festgelegt (Index = Tag) | 25 |
Was jetzt sitzt
Wenn du die drei Aufgaben auf Papier gelöst und mit den Musterlösungen verglichen hast, beherrschst du alles, was Struktogramm-Aufgaben in der AP1 typischerweise verlangen: ein gegebenes Struktogramm mit dem Schreibtischtest sicher lesen, Fehler in Grenzen und Startwerten finden, Lücken sinnvoll füllen, eine Eingabeprüfung als fußgesteuerte Schleife ergänzen, die Grundmuster über ein Feld zeichnen und sie in Funktion und Hauptprogramm aufteilen. Was noch fehlt, ist Routine: Wiederhole die Aufgabe, die dir am schwersten fiel, in einer Woche noch einmal ohne Lösung.
Weiter geht es mit den Übungsprüfungen, in denen Struktogramm-Aufgaben zwischen den anderen Themen der AP1 stehen, so wie in der echten Prüfung. Anwendungsentwickler, die in der AP2 Struktogramme zu Klassendiagrammen zeichnen müssen, finden im UML-Kurs die andere Hälfte: Klassen, Attribute und Methoden, deren Signaturen du hier schon gelesen hast.