Processing math: 100%

Inhaltsverzeichnis

Algorithmen I: Einfache Algorithmen und Struktogramme LEGACY

Slides: 2022_algorithmen_i.pdf

1. Einführung Algorithmen

Definition

Definition Algorithmus:

Analogie: Algorithmus ist wie ein (sehr klares) Kochrezept

Beispiel

Algorithmus für die Herstellung von Karamell-Bonbon formuliert auf drei verschiedenen Arten/Sprachen:

1) Menschliche Sprache

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.

2) Pseudocode

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) 

3) Flussdiagramm

Aufgaben A

Aufgabe A1 (Wasserhahn)

Aufgabe A2 (Subtraction Game)

2. Struktogramme

Grundlagen

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:

  1. Anweisungen: einfache Befehle, pro Befehl eine Zeile / ein Rechteck
  2. Solange-Schleife: Wiederholt die darin enthaltenen Anweisungen solange, wie die Bedingung erfüllt ist.
  3. Verzweigungen: Je nach dem, ob die Bedingung erfüllt ist oder nicht, werden andere Befehle ausgeführt.

Aufgaben B

Aufgabe B1 (Wasserhahn revisited)

Tipps

Aufgabe B2 (Karamell-Bonbons revisited)

Wandle das Flussdiagramm mit dem Algorithmus zur Herstellung von Karamell-Bonbons in ein Struktogramm um.

Aufgabe B3 (Subtraction Game revisited)

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:

  1. Der Computer soll immer beginnen und natürlich immer das Spiel gewinnen.
  2. Diesmal soll die Spieler:in beginnen. Der Computer soll gewinnen, sobald die Spieler:in einen Fehler macht.
  3. Erweitere dein Struktogramm aus 2., so dass beide Fälle (Computer beginnt (nicht)) abgedeckt sind.

Variablen, Eingaben und Ausgaben

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:

Um etwas auszugeben, zum Beispiel ein Resultat, schreiben wir:

Zuweisungsoperator und Vergleichsoperatoren

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:

Aufgaben C (Ein- & Ausgabe)

Aufgabe C1 (Taschenrechner I)

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.

Aufgabe C2 (Taschenrechner II)

Ä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.

Aufgabe C3 (Sirup, Bier oder Schnapps)

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.

Aufgabe C4 (Countdown)

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.

Aufgabe C5 (Quiz)

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.

Evaluation von Struktogrammen

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:

Aufgaben D

Aufgabe D1 (Struktogramme evaluieren & verstehen)

  1. Evaluiere den Algorithmus mit den angegebenen Werten in einer Tabelle.
  2. Beschreibe in einem Satz, was der Algorithmus genau macht.
Teil i)

Teil ii)

Aufgabe D2 (Struktogramme aufschreiben)

Erstelle das Struktogramm des Algorithmus und evaluiere dieses für 1-2 Beispiele wie oben gelernt in Tabellen:

Teil i)

Maximum: Zwei Zahlen sollen eingegeben und die grössere der beiden Zahlen ausgegeben werden.

Teil ii)

Sortieren: Drei Zahlen sollen eingegeben werden und danach in absteigender Reihenfolge der Grösse ausgegeben werden.

Teil iii)

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:

Aufgabe D3 (Zusatzaufgabe: Ratespiel)

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:

Lösungen Aufgaben

Lösungen Aufgaben A

Lösungen Aufgaben B

Lösungen Aufgaben C

Lösungen Aufgaben D