Slides: 2022_algorithmen_i.pdf
Definition Algorithmus:
Analogie: Algorithmus ist wie ein (sehr klares) Kochrezept
Algorithmus für die Herstellung von Karamell-Bonbon formuliert auf drei verschiedenen Arten/Sprachen:
100 g Zucker und 2 EL Wasser in Pfanne geben. Bei mittlerer Hitze erwärmen, bis der Zucker goldbraun ist. Das Caramel auf geölte Alufolie geben und auskühlen lassen.
Pseudocode ähnelt höheren Programmiersprachen (wie z.B. Python), gemischt mit natürlicher Sprache und mathematischer Notation. Damit kann er nicht von einem Computer ausgeführt werden.
topf.input(sugar(100,g),water(2,es)) platte.on(.75) while not(topf.inhalt.getcolor() == "goldbraun") warte(1000,ms) alufolie.input(topf.inhalt ()) platte.off() while not(alufolie.inhalt.gettempdeg() < 20) warte(10000,ms)
Struktogramme bieten eine Möglichkeit, um Algorithmen zu formulieren. Sie weisen Elemente, die typischerweise in Programmiersprachen vorkommen, beinhalten aber auch normale (menschliche) Sprache.
Wir verwenden für unsere Struktogramme die folgenden drei Elemente:
Wandle das Flussdiagramm mit dem Algorithmus zur Herstellung von Karamell-Bonbons in ein Struktogramm um.
Der 'Computer' spiele gegen eine Spieler:in. Schreibe den Algorithmus, mit dem der Computer das Subtraction Game spielen soll, als Struktogramm für drei verschiedene Versionen:
In den nächsten Lektionen wollen wir einige mathematischen Algorithmen anschauen und selber schreiben. Zum Beispiel können wir ein Struktogramm schreiben, bei welchem man eine Zahl eingeben kann und welches dann bestimmt, ob es sich …
Eine Eingabe notieren wir wie folgt:
Die eingegebene Zahl muss irgendwie gespeichert werden. Dazu verwenden wir Variablen. Hier hat die Variable den Namen x gespeichert werden soll. Natürlich kann man auch andere Variablennamen verwenden, es können auch Wörter sein. Mit dem Ausdruck in der Klammer geben wir an, ob man eine Zahl oder Text (resp. String, siehe unten) eingeben soll.
Einer Variablen kann man auch direkt und ohne Eingabe einen Wert zuweisen:
Im ersten Beispiel weisen wir der Variablen x
die Zahl 42 zu. Im zweiten Beispiel wird der Variablen name
Text zugewiesen - in der Informatik spricht man dabei von einem String. Beachte, dass wir für String Anführungs- und Schlusszeichen verwenden, um zwischen Variablen und Text zu unterscheiden:
Beachte, dass das Einzelgleich (=) ein Zuweisungsoperator ist. Mit diesem weist man einer Variablen auf der linken Seite den Wert auf der rechten Seite zu. Folgende Anweisungen machen deshalb also keinen Sinn:
3 = i
Problem: Variable steht rechts2*i = 3
Problem: Variable links steht nicht alleine
Um etwas auszugeben, zum Beispiel ein Resultat, schreiben wir:
In Solange-Schleifen und Falls-Verzweigungen werden immer Bedingungen überprüft, zum Beispiel 'Solange x kleiner als 7' oder 'Falls alter gleich 27'. Um dies etwas mathematischer auszudrücken, verwenden wir Vergleichsoperatoren:
Beachte, dass wir das Doppelgleich == schreiben, um in einer Bedingung Gleichheit zu überprüfen. Zur Erinnerung: Das Einzelgleich = wird bereits als Zuweisungsoperator verwendet!
Beispiel: Die folgenden beiden Notationen sind gleichwertig:
Schreibe das Struktogramm für einen einfachen Taschenrechner, der zwei Zahlen addieren kann. Die Benutzer:in soll zuerst nacheinander die beiden Zahlen eingeben können, das Resultat wird dann ausgegeben.
Ähnlich wie die vorherige Aufgabe, nur soll der neue Code neben der Addition auch die Subtraktion beherrschen. Die Benutzer:in muss neben den beiden Zahlen also auch eingeben, welche Operation sie ausführen möchte (z.B. 'a' für Addition und 's' für Subtraktion). Achtung, Operatoren (wie +,−,∗,/ können nicht in Variablen gespeichert werden, op=+ geht also nicht.
Zusatzaufgabe:
Erweitere das Struktogramm so, dass auch noch Multipliziert und Dividiert werden kann.
Die Benutzer:in soll ihr Alter eingeben. Das Struktogramm sagt ihr dann, welche Getränke (Sirup, Bier, Schnapps) sie in der Schweiz legal trinken darf.
Die Benutzer:in soll eine positive ganze Zahl eingeben. Das Struktogramm soll dann einen Countdown, startend bei der eingegebenen Zahl, ausgeben.
Beispiel: Wird 5 eingegeben, gibt das Struktogramm aus: 54321Los!
Zusatzaufgabe: Die Aufgabe macht nur Sinn, wenn die Benutzer:in auch wirklich eine positive ganze Zahl eingibt. Der Code hat ein Problem, wenn man z.B. −5 (negativ) eingibt. Erweitere deinen Code nun wie folgt: Überprüfe zuerst die Eingabe und lasse den Countdown code nur dann laufen, wenn die Eingabe in Ordnung ist. Falls nicht, gibst du eine enstsprechende Rückmeldung (z.B. „Eingabe nicht zulässig, kein Countdown möglich!“) und der Code wird abgebrochen.
Schreibe ein Struktogramm für ein Ratespiel, in dem die Benutzer:in dein Lieblingsessen (oder etwas anderes Lieblings…) erraten soll. Das Spiel soll solange wiederholt werden, bis die richtige Antwort erraten wurde.
Betrachten wir ein einfaches Struktogramm:
Das folgende Struktogramm macht genau das:
Code im Detail:
Um eine Algorithmus in Form eines Struktogramms genau zu verstehen, evaluieren wir diesen Schritt-für-Schritt in einer Tabelle:
Dabei gilt:
Erstelle das Struktogramm des Algorithmus und evaluiere dieses für 1-2 Beispiele wie oben gelernt in Tabellen:
Maximum: Zwei Zahlen sollen eingegeben und die grössere der beiden Zahlen ausgegeben werden.
Sortieren: Drei Zahlen sollen eingegeben werden und danach in absteigender Reihenfolge der Grösse ausgegeben werden.
2er Potenzen: Es soll eine (positive ganze) Zahl eingegeben. Es sollen dann die ersten Zweierpotenzen ausgegeben werden und zwar genau so viele, wie die eingegebene Zahl. Beispiele:
Schreibe das Struktogramm für ein Ratespiel: Eine geheime Zahl wird in einer Variablen gespeichert. Die Spieler:in versucht solange, die geheime Zahl zu erraten, bis sie erfolgreich ist.
Erweiterungen: