Inhaltsverzeichnis

Algorithmen I

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 alufolie.inhalt.gettempdeg() > 25
    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.

Eingabe und Ausgabe in Struktogrammen

Struktogramme kann man auch verwenden, um mathematische Algorithmen darzustellen. Ein einfaches Beispiel wäre:

Eine Eingabe notieren wir wie folgt: Diese bedeutet, dass eine Zahl eingegeben und in einer Variablen mit Name $x$ gespeichert werden soll. Natürlich kann man auch andere Variablennamen verwenden.

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

Das Beispiel von oben (Zahl eingeben, alle Zahlen bis zu dieser ausgeben) können wir dann wie folgt umsetzen:

Code im Detail:

Evaluation von Struktogrammen

Um eine Algorithmus in Form eines Struktogramms genau zu verstehen, evaluieren wir diesen Schritt-für-Schritt in einer Tabelle: Dabei gilt:

Aufgaben C

Aufgabe C1 (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 C2 (Struktogramme aufschreiben)

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

Teil i)

Summe: Zwei Zahlen sollen eingegeben und die Summe dieser Zahlen ausgegeben werden.

Teil ii)

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

Teil iii)

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

Aufgabe C3 (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:

Aufgabe C4 (Zusatzaufgabe: Teilertest)

Schreibe das Struktogramm für einen Algorithmus, der den Teilertest durchführt: zwei Zahlen a und b werden als Eingabe eingelesen. Die Ausgabe soll True sein, falls b ein Teiler von a ist (Beispiel: a = 9 und b = 3), sonst False.

Hinweis

Aufgabe C5 (Zusatzaufgabe: Primzahltest)

Schreibe das Struktogramm für einen Algorithmus, das herausfindet, ob eine eingegebene Zahl eine Primzahl ist.

  1. Definiere Primzahl.
  2. Überlegt in Zweiergruppen, wie der Algorithmus funktionieren könnte. Könnte der Teilertest von C4 helfen?
  3. Schreibe den Algorithmus als Struktogramm.

Käfer-Struktogramme

Du siehst jeweils abgebildet ein Struktogramm sowie zwei Situationen, in denen dieser Algorithmus angewendet wird. Zeichne den Weg ein, den der Käfer zurücklegt.

Beispiel:

Algorithmus:

Situation 1: Situation 2:

Aufgabe D1:

Algorithmus:

Situationen:

Aufgabe D2:

Algorithmus:

Situationen:

Lösungen Aufgaben

Lösungen Aufgaben A

Lösungen Aufgaben B

Lösungen Aufgaben C