====== Beschreibung von Abläufen durch Algorithmen ======
Wir haben in Jahrgangsstufe 6 die Grundbegriffe der Objektorientierung kennengelernt und kennen die Punktschreibweise zur Veränderung von Attributwerten und zum Aufruf von Methoden, z.B. für ein Kreis-Objekt mit dem Bezeichner ''k'':
k.setFüllfarbe(rot)
k.setRadius(20)
k.verschieben(10, -20);
Was aber, wenn wir den Kreis 200-mal jeweils nur um einen Pixel verschieben wollen, damit die Animation flüssig erscheint? Oder wenn wir 50 Kreise verschieben wollen? \\ \\
Wir brauchen eine Möglichkeit, den Computer anzuweisen
* "Mach' das jetzt 50-mal!"
* "Mach das nur, wenn der Kreis rot ist!"
usw.
Darum soll es in diesem Kapitel gehen.
===== Algorithmus =====
Ein **Algorithmus** (benannt nach dem arabischen [[https://de.wikipedia.org/wiki/Al-Chwarizmi|Mathematiker al-Chwarizmi]]) ist eine Handlungsvorschrift, die so präzise formuliert ist, dass eine Maschine sie ausführen kann.
====== Robot Karol ======
{{ :ablaufstrukturen:pasted:20250218-064426.png}}
Karol ist ein Objekt mit Attributen und Methoden:
{{ :ablaufstrukturen:pasted:20250218-064405.png?200 }}
===== 1. Sequenz =====
Eine Folge nacheinander auszuführender Anweisungen heißt **Sequenz**. \\ \\
**Beispiel:**
hinlegen
schritt
hinlegen
schritt
hinlegen
schritt
===== 2. Wiederholung mit fester Anzahl =====
**Beispiel:** Reihe mit 10 Steinen
wiederhole 10 mal
hinlegen
schritt
*wiederhole
Struktogramm:
{{ :ablaufstrukturen:pasted:20250218-064802.png?400 }}
==== Aufgabe 1 ====
* a) Erstelle ein möglichst kurzes Programm, das die folgende Zickzackreihe legt.
* b) Zeichne das zugehörige Struktogramm!
{{ :ablaufstrukturen:pasted:20250218-065000.png?300 }}
[[.aufgabe1:loesung|Lösung]]
==== Aufgabe 2 ====
* Erstelle ein möglichst kurzes Programm, das das nachfolgend dargeestellte Quadrat erzeugt.
* Zeichne das zugehörige Struktogramm.
{{ :ablaufstrukturen:pasted:20250219-064403.png?300 }}
[[.aufgabe2:loesung|Lösung]]
===== 3. Die bedingte Wiederholung =====
{{ :ablaufstrukturen:pasted:20250219-065046.png?200}}
Vor Karol steht ein Stapel Ziegel. Schreibe ein Programm, das Karol dazu bringt, den Stapel Ziegel abzubauen und das bei jeder möglichen Stapelhöhe funktioniert!
**Lösung:**
{{ :ablaufstrukturen:pasted:20250219-065253.png?300 }}
Eine Bedingung (anderes Fachwort: eine Aussage) ist ein Term, der nur die Werte **wahr** oder **falsch** haben kann. \\ \\
**Beispiele:**
* In Ingolstadt scheint die Sonne.
* $3\cdot x<10$
* Das Christoph-Scheiner-Gymnasium hat 950 Schüler/-innen.
In Robot Karol gibt es folgende Bedingungen:
* **IstWand** hat genau dann den Wert wahr, wenn Karol unmittelbar **vor** einer Wand steht.
* **IstZiegel** hat genau dann den Wert wahr, wenn auf dem Feld unmittelbar **vor** Karol mindestens ein Ziegel liegt.
* **IstMarke** hat genau dann den Wert wahr, wenn Karol auf einer Marke steht.
* **NichtIstWand** hat genau dann den Wert wahr, wenn **IstWand** den Wert falsch hat.
* **NichtIstZiegel** hat genau dann den Wert wahr, wenn **IstZiegel** den Wert falsch hat.
* **NichtIstMarke** hat genau dann den Wert wahr, wenn **IstMarke** den Wert falsch hat.
===== Aufgabe 3 =====
Karol soll (unabhängig davon, wo er gerade steht) geradeaus bis zur nächsten Wand laufen und dort einen Turm der Höhe 3 bauen:
{{ :ablaufstrukturen:pasted:20250219-070523.png?500 }}
[[.aufgab3:loesung|Lösung]]
===== Aufgabe 4 =====
Vor Karol steht ein Ziegelstapel **unbekannter Höhe**. Karol soll den Ziegelstapel ein Feld nach rechts versetzen, also:
{{ :ablaufstrukturen:pasted:20250219-070906.png?500 }}
Erstelle **schriftlich auf Papier** ein geeignetes Programm und zeichne das dazugehörige Struktogramm!
[[.aufgabe5:loesung|Lösung]]
===== Aufgabe 5 =====
Karol steht zwischen zwei Ziegelstapeln. Er soll beide Stapel nacheinander abbauen. Das Programm soll immer funktionieren, egal wie hoch die Stapel sind und wie weit sie auseinander stehen.
Erstelle **schriftlich auf Papier** ein geeignetes Programm und zeichne das dazugehörige Struktogramm!
{{ :ablaufstrukturen:pasted:20250226-073800.png?300 }}
===== Aufgabe 6 =====
Karol steht etwas entfernt zu einer Wand mit Blick hin zur Wand.
Erstelle ein Programm, das bewirkt, dass Karol eine Treppe bis zur Wand baut. Das Programm soll immer funktionieren, egal wie weit Karol ursprünglich von der Wand entfernt war. \\
Erstelle auch ein Struktogramm!
{{ :ablaufstrukturen:pasted:20250402-062059.png }}
{{ :ablaufstrukturen:pasted:20250402-062124.png }}
[[.treppeloesung:start|Lösung]]
====== Die bedingte Anweisung ======
{{ :ablaufstrukturen:pasted:20250402-062634.png?150}}
Vor Karol steht eine unterbrochene Reihe mit Ziegeln. Er soll auf jeden Ziegel eine Marke legen.
Wir müssen ihm auftragen: \\
**Wenn** vor Dir ein Ziegel liegt \\
**dann** gehe einen Schritt vorwärts und lege eine Marke.
**ansonsten** gehe einen Schritt vorwärts.
===== Lösung: =====
wiederhole solange NichtIstWand
wenn IstZiegel dann
schritt
markeSetzen
sonst
schritt
*wenn
*wiederhole
Das Struktogramm dazu sieht so aus:
{{ :ablaufstrukturen:pasted:20250402-062935.png?400 }}
Die bedingte Anweisung wird
verwendet, um abhängig von einer
Bedingung zwei verschiedene Sequenzen
auszuführen. Sie hat die Form
{{ :ablaufstrukturen:pasted:20250402-063048.png?400 }}
===== Aufgabe 5 =====
{{ :ablaufstrukturen:pasted:20250402-063357.png?200}}
Karol steht ein Stück von einer Wand entfernt und blickt zur Wand hin. Er soll bis zur Wand eine unterbrochene Reihe mit Ziegeln legen, wie im Bild dargestellt. \\
Erstelle ein geeignetes Programm und zeichne das Struktogramm. \\
**Wichtig:** Das Programm darf nicht mit einem Laufzeitfehler enden!
[[.unterbrochen:start|Lösung]]
===== Aufgabe 6 =====
{{:ablaufstrukturen:pasted:20250402-063806.png?300}}
Karol steht in einer Ecke des Raums. Rechts von ihm und hinter ihm ist je eine Wand (siehe Bild). Schreibe ein Programm, das bewirkt, dass Karol den ganzen Raum voller Ziegel legt, egal, wie groß der Raum ist!
\\ Zeichne auch ein Struktogramm!