i

Strukturierung – Fallunterscheidungen

Problem: Irgendetwas stimmt hier nicht ...

Du hast erfolgreich das Blatt aus dem Bau gebracht und willst nun weitere Aufgaben erledigen. Kara soll sich zweimal um 90° drehen, falls sie/er vor einem Baum steht. Ansonsten soll Kara einfach ein Feld weitergehen. Aber irgendwas klappt einfach nicht!

if: kara.treefront
    kara.turnRight()
kara.turnRight()
else
    kara.move()

Aufgabe 1: Fehler beschreiben

(a) Erkläre, warum das Programm so nicht das gewünschte leistet.

(b) Ändere das Programm so ab, dass es funktioniert.

Die Details klären

Offensichtlich gibt es ein paar Punkte bei Fallunterscheidungen zu beachten. Genau solche Punkte sollen im Folgenden herausgearbeitet und festgehalten werden, damit du dieses wichtige Konzept völlig verstehst.

Aufgabe 2: Fallunterscheidungen vertiefen

(a) Betrachte die folgende Struktur einer Fallunterscheidung. Es sind insgesamt drei Anweisungssequenzen eingetragen. Erkläre, unter welchen Umständen und wann welche dieser Anweisungssequenzen ausgeführt werden.

if [Bedingung]:
    [Anweisungssequenz 1]
else:
    [Anweisungssequenz 2]
[Anweisungssequenz 3]

Es hilft ggf., sich hier ein konkretes einfaches Programm vorzustellen. Also: Unter welchen Umständen und wann werden in diesem Programm die einzelnen Befehle ausgeführt? Beschreibe das erst konkret, also bezogen auf Kara und ein Blatt, und dann allgemein mit Begriffen wie „Bedingung“.

if kara.onLeaf():
    kara.removeLeaf()
else:
    kara.putLeaf()
kara.move()

(b) Es gibt bei Fallunterscheidungen in PythonKara einige Regeln im Quelltext zu beachten – sonst funktioniert das Programm nicht. Solche Regeln, die durch die Programmiersprache vorgegeben werden, nennt man Syntaxregeln. Welche Syntaxregeln für Fallunterscheidungen in PythonKara findest du?

(c) Man unterscheidet zwischen zwei Typen von Fallunterscheidungen. Für beide ist der Aufbau unten beispielhaft dargestellt. Erkläre den Unterschied zwischen einer einseitigen Fallunterscheidung und einer zweiseitigen Fallunterscheidung so, dass man es versteht, wenn man direkt zuvor zum ersten Mal von Fallunterscheidungen gehört hat. Gib jeweils ein konkretes Beispiel (in Alltagssprache oder in PythonKara) an.

Einseitige Fallunterscheidung:

if [Bedingung]:
    [Anweisungssequenz]

Zweiseitige Fallunterscheidung:

if [Bedingung]:
    [Anweisungssequenz]
else:
    [Anweisungssequenz]

Aufgabe 3: Fallunterscheidungen darstellen

Fallunterscheidungen geben verschiedene mögliche Programmabläufe vor. Besonders gut kann das mit einem Programmablaufplan dargestellt werden; solch eine Abbildung nennt man auch Flussdiagramm. Wir betrachten nun verschiedene Versuche für so ein Flussdiagramm. Zeige sie dir erst nach und nach an, damit du nicht direkt schon die letzte Version siehst:

(a) Ada hat einen ersten Versuch unternommen, einen Programmablauf als Diagramm darzustellen. Verstehst du, um welches Programm es sich handelt? Welche Probleme stellst du fest?

(b) Brian hat versucht, die Probleme des ersten Entwurfs auszuräumen. Erkläre kurz, was nun besser ist. Welche Probleme bestehen aber noch immer?

(c) Claudes Entwurf ist noch einmal besser als der von Brian. Erkläre kurz, warum. Hast du weitere Verbesserungsvorschläge?

(d) Donald schlägt noch eine Änderung vor. Erkläre kurz den Unterschied zu Claudes Variante. In der Praxis nutzt man Donalds Version. Kannst du dir erklären, wieso?

(e) Beschreibe, was der Algorithmus leistet, den dieses Flussdiagramm darstellt. Implementiere ihn in PythonKara und teste ihn.

(f) Übe das Erstellen von Flussdiagrammen: Zeichne dafür ein Flussdiagramm für das Programm aus der Erkundung.

Aufgabe 4: Ein Wissensspeicher für Fallunterscheidungen

Halte das Gelernte in folgendem Wissensspeicher fest.

Quellen

Suche

v
6.1.2.4
www.inf-schule.de/imperative-programmierung/kara/fallunterscheidungen/strukturierung-fallunterscheidung
www.inf-schule.de/6.1.2.4
www.inf-schule.de/@/page/HiaQsnY5UKxWHv7I

Rückmeldung geben