Vom Problem über den Algorithmus zum Programm
Der Unterricht im Lernbereich Praktische Informatik hat drei wesentliche Schwerpunkte:
Einstiegsbeispiel
Ein Mensch und ein Computer spielen miteinander Würfeln.
Das Problem spezifizieren
- Wie soll das Würfelspiel ablaufen?
- Der Mensch
- benutzt einen realen Spielwürfel, mit dem die Augenzahlen 1 bis 6 gewürfelt werden können und
- teilt dem Computer seine gewürfelte Augenzahl mit.
- Der Computer
- simuliert einen Spielwürfel, mit dem die Augenzahlen 1 bis 6 gewürfelt werden können und
- vergleicht die gewürfelten Augenzahlen, ermittelt den Sieger oder ob es unentschieden steht.
- Je nach Belieben können der Mensch und der Computer das Würfelspiel wiederholen.
- Der Mensch
- Damit der Mensch und der Computer miteinander Würfeln spielen können, benötigt der Computer ein Programm, dem wiederum ein Algorithmus zugrunde liegt.
Den Algorithmus entwerfen
- Entworfen wird ein Algorithmus, der das Problem löst.
- Der Algorithmus wird unabhängig von der Programmiersprache entworfen,
in der er implementiert wird.
- Der Vorteil besteht darin, dass beim Entwerfen nicht auf die Besonderheiten der Programmiersprache (z. B. Vokabular, Syntax …) geachtet werden muss.
- Insbesondere für Anfänger ist es sehr schwer, Algorithmen sofort in einer Programmiersprache zu entwerfen.
- Der Algorithmus kann verbal beschrieben werden.
Die verbale Beschreibung
- Der Algorithmus beginnt damit, dass die Variable »wuerfeln« den Startwert "ja" zugewiesen bekommt.
- Es folgt eine kopfgesteuerte Schleife (Wiederholung). Solange im Kopf der Schleife
die Bedingung erfüllt (wahr) ist, dass die Variable »wuerfeln« den Wert "ja" hat,
wird der Schleifenkörper wiederholt ausgeführt:
- Der Mensch gibt seine gewürfelte Augenzahl ein, wodurch die Variable »augenzahlMensch« die eingegebene ganze Zahl als Wert erhält.
- Die Variable »augenzahlComputer« bekommt eine (ganze) Zufallszahl zwischen 1 und 6 zugewiesen.
- Der Wert der Variablen »augenzahlComputer« wird ausgegeben, sodass der Mensch erfährt, welche Augenzahl der Computer "gewürfelt" hat.
- Es folgt eine Verzeigung (Auswahl) mit der Bedingung »augenzahlMensch > augenzahlComputer«.
- Ist die Bedingung erfüllt, dann folgt im wahr-Zweig die Ausgabe "Du hast gewonnen!". D. h., dass der Mensch gewonnen hat.
- Ist die Bedingung nicht erfüllt, dann folgt im falsch-Zweig eine weitere Verzweigung
(Auswahl) mit der Bedingung »augenzahlMensch < augenzahlComputer«:
- Ist die Bedingung erfüllt, dann folgt im wahr-Zweig die Ausgabe "Der Computer hat gewonnen!".
- Ist die Bedingung nicht erfüllt, dann folgt im falsch-Zweig die Ausgabe "Unentschieden!".
- Zum Schluss folgt im Schleifenkörper die Eingabe des Menschen mit »ja«
oder »nein«.
D. h., dass er noch einmal spielen oder das Würfelspiel beenden möchte.
Hat die Variable den Wert »wuerfeln« den Wert »ja«, dann wird wiederholt.
Hat die Variable den Wert »wuerfeln« den Wert »nein«, dann wird die Schleife beendet.
- Der Algorithmus ist zu Ende.
- Hinweis:
- Je komplexer ein Algorithmus ist, umso schwieriger wird es, den Algorithmus verbale zu beschreiben.
- Der Algorithmus kann auch auf verschiedene Weise grafisch dargestellt werden.
Die grafische Darstellung in einem Struktogramm
- Das Struktogramm ist eine grafische Darstellung des verbal
beschriebenen Algorithmus.
Abb.: Struktogramm - Das Struktogramm wurde mit dem Structorizers erstellt.
Die grafisch Darstellung in einem Programmablaufplan (PAP)
- Der Programmablaufplan ist ebenfalls eine grafische Darstellung
des verbal beschriebenen Algoritmus.
- Wert von wuerfeln ist eine Zeichenkette
- Werte von augenzahlMensch und augenzahlComputer sind ganze Zahlen
Abb.: PAP - Der Programmablaufplan wurde mit dem Diagramm Editor erstellt.
- Das Struktogramm ist eine grafische Darstellung des verbal
beschriebenen Algorithmus.
Den Algorithmus testen
Bevor der Algorithmus in einem Programm umgesetzt wird, muss in einem sogenannten Trockentest geprüfen werden, ob der Algorithmus korrekt entworfen wurde.
- Einfachheitshalber kann beim Trockentest davon ausgegangen werden, dass der Mensch die gewürfelte Augenzahl korrekt eingibt.
- Im Trockentest müssen alle mögliche Fälle berücksichtigt werden, die im
Algorithmus auftreten können. So kann z. B. der Trockentest mit den Werten der
Variablen »augenzahlMensch«, »augenzahlComputer« und
»wuerfeln« durchgeführt werden, die in der folgenden Tabelle angegeben sind.
Beispiel eines Trockentests
wuerfeln augenzahlMensch augenzahlComputer Ausgabe ja Eingabe 4 Zufallszahl 1 Du hast gewonnen! Eingabe ja Eingabe 3 Zufallszahl 5 Der Computer hat gewonnen! Eingabe ja Eingabe 2 Zufallszahl 2 Unentschieden! Eingabe nein
Das Programm erstellen
Der Algorithmus des Würfelspiels wird in einem Programm implementiert, d. h., in einer Programmiersprache codiert.
- Exemplarisch sind drei verschieden Implementierungen des Algorithmus gegeben. Dabei
ist interessant, wie unterschiedlich die Programmcodes ein und desselben Algorithmus sind.
Programmcode in Python
- Der folgende Programmcode ist in der imperativen, hybriden
Programmiersprache Python geschrieben.
Abb.: Python-Code - In Python sind die Variablen »wuerfeln«, »augenzahlMensch« und »augenzahlComputer« an keinen bestimmten Datentyp gebunden.
- Erläuterung des Programmcodes:
Zeile(n) Erläuterung 3 Die Variable »wuerfeln« bekommt den Startwert »ja« zugewiesen. 4 – 14 Die »while«-Schleife wird solange wiederholt, bis die Variable »wuerfeln« den Wert »nein« hat. 5 Der Variablen »augenzahlMensch« wird per Eingabe des Menschen die gewürfelte Augenzahl zugewiesen. 6 Die Variable »augenzahlComputer« bekommt eine der Zufallszahlen 1 bis 6 von der Funktion »randint(1,6)« zugewiesen. 7 Ein Text und eine Zahl werden ausgeben. 8 – 13 Mit Hilfe der »if-elif-else«-Verzweigung (Auswahl) erfolgt eine vollständige Fallunterscheidung. 8 Der Fall, dass die Augenzahl des Menschen größer der des Computers ist. 9 Ein Text wird ausgegeben. 10 Der Fall, dass die Augenzahl des Menschen kleiner als die Augenzahl des Computers ist. 11 Ein Text wird ausgegeben. 12 Der Fall, dass die Augenzahl des Menschen gleich der Augenzahl des Computers st. /td> 13 Ein Text wird ausgegeben. 14 Der Variablen »wuerfeln« wird per Eingabe des Menschen entweder der Wert »ja« oder »nein« zugewiesen.
Wird der Variable »wuerfeln« der Wert »ja« zugewiesen, dann wird die »while«-Schleife erneut ausgeführt, ansonsten beendet. - Eine Entwicklungsumgebung zum Programmieren mit Python ist die Python IDLE.
Programmcode in Object Pascal
- Der folgende Code ist als „Einfaches Programm“ in der
imperativen, hybriden Programmiersprache Object Pascal geschrieben.
Abb.: Object Pascal-Code - Entwicklungsumgebungen zum Programmieren mit Object Pascal sind Delphi und Lazarus.
Programmcode in Java
- Der folgende Code ist als „Application“ in der imperativen,
objektorientierten Programmiersprache Java geschrieben.
Abb.: Java-Code - Erläuterung des Programmcodes:
Zeile(n) Erläuterung 12 Die Variable »wuerfeln« bekommt den Startwert »ja« zugewiesen. 13 – 29 Die »while«-Schleife wird solange wiederholt, bis die Variable »wuerfeln« den Wert »nein« 14 Ein Text wird ausgegeben. 15 Der Variablen »augenzahlMensch« wird per Eingabe des Menschen die gewürfelte Augenzahl zugewiesen. 16 Die Variable »augenzahlComputer« bekommt eine der Zufallszahlen 1 bis 6 durch den Ausdruck
»1 + zufall.nextInt(6)« mit der Funktion »zufall.nextInt(6)« zugewiesen.17 Ein Text und eine Zahl werden ausgeben. 18 – 26 Mit Hilfe der »if-else-if-else«-Verzweigungen erfolgt eine vollständige Fallunterscheidung. 18 Der Fall, dass die Augenzahl des Menschen größer der des Computers ist. 19 Ein Text wird ausgegeben. 21 Der Fall, dass die Augenzahl des Menschen kleiner als die Augenzahl des Computers ist. 22 Ein Text wird ausgegeben. 24 Der Fall, dass die Augenzahl des Menschen gleich der Augenzahl des Computers ist. 25 Ein Text wird ausgegeben. 27 Ein Text wird ausgegeben. 28 Der Variablen »wuerfeln« wird per Eingabe des Menschen entweder der Wert »ja« oder »nein« zugewiesen.
Bekommt die Variable »wuerfeln« den Wert »ja« zugewiesen, dann wird die »while«-Schleife erneut ausgeführt,
ansonsten beendet. - Entwicklungsumgebungen zum Programmieren mit Java sind u. a. NetBeans und Eclipse.
- Der folgende Programmcode ist in der imperativen, hybriden
Programmiersprache Python geschrieben.
- Das Programm muss durch mehrere Programmläufe getestet werden, ob der Algorithmus korrekt in der Programmiersprache codiert wurde.