Es kommt häufig vor, dass ein Programmteil wiederholt werden muss, in dem selbst schon eine Wiederholung steckt. Wofür das gut ist und wie es geht, zeige ich Dir am besten an ein paar Beispielen.
Kennst Du noch die Bleistifte mit den winzigen Einmaleinstabellen drauf, die in der Grundschule streng verboten sind? Die Einmaleinstabelle sieht so aus:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
Wir wollen ein Programm schreiben, das die Einmaleinstabelle auf dem Bildschirm ausgibt.
Strategie: Divide and conquer (Teile und herrsche)
Oft lässt sich ein Problem nur lösen, indem man es in kleine, beherrschbare Teilprobleme zerlegt. Diese Problemlösestrategie nennt man command and conquer (mehr dazu hier).
Wir denken uns die Einmaleinstabelle in einzelne Zeilen („Einmaleinsreihen“) zerlegt und schreiben zunächst ein Programm, das eine einzelne Einmaleinsreihe ausgibt.
Der Wert der Variable 'e' bestimmt die Einmaleinsreihe, die ausgegeben wird.
Probiere es aus, indem Du die 6
in Zeile 1 abänderst und das Programm neu startest! Führe das Programm auch mal in Einzelschritten aus („Step over“: ) und sieh' Dir im Variablen-Tab an, welche Werte die Variablen e
und i
während des Programmablaufs annehmen!
Um die komplette Einmaleinstabelle auszugeben, müssen wir den obigen Programmteil zuerst für e == 1
ausführen, dann für e == 2
, usw.:
War's das schon?
Eigentlich ist die Aufgabe jetzt schon gelöst: Die Einmaleinstabelle wird korrekt ausgegeben. Trotzdem hoffe ich, dass Ihr mit der gefundenen Lösung genauso unzufrieden seid wie ich:
Es muss doch möglich sein, den Computer anzuweisen, den Programmblock aus dem ersten Beispiel oben einfach 10-mal zu wiederholen!
Schiebe den Geschwindigkeitsregler (neben dem Startbutton) auf ca. 6 Schritte pro Sekunde und führe das Programm aus. Wenn das Programm langsam genug ausgeführt wird, wird die gerade ausgeführte Anweisung jeweils grün hinterlegt.
Die Tabelle sieht noch nicht perfekt aus, weil die Zahlen unterschiedlich breit sind:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
Im Kapitel zur Wenn-Dann-Anweisung werden wir das Programm noch verbessern.
Bisher können wir zwar nur Zeichen auf dem Bildschirm ausgeben (Computergrafik und Spieleprogrammierung kommt auch noch, versprochen!), damit lassen sich aber auch richtig schöne Bilder zeichnen (Stichwort "ASCII-Art", siehe hier). Wir beginnen mit einem einfachen Dreieck.
* ** *** **** ***** ****** ******* ******** ********* ********** *********** ************
1. Ändere das Programm so ab, dass die Pyramide auf dem Kopf steht, also so:
************ *********** ********** ********* ******** ******* ****** ***** **** *** ** *
2. Ändere das Programm so ab, dass die Pyramide zentriert erscheint, also so:
* *** ***** ******* ********* ***********
Tipps:
reihe
soll also nicht die Werte 1, 2, 3, … annehmen, sondern die Werte 1, 3, 5, …Reihe | Anzahl von Sternen | Anzahl von Leerzeichen |
---|---|---|
1 | 1 | 6 |
3 | 3 | 5 |
5 | 5 | 7 |
…
Die Erzeugung von Grafikobjekten lernen wir erst etwas später, trotzdem glaube ich, dass Du das folgende Beispiel bestimmt schon verstehen kannst. Nur so viel:
new Circle(300, 200, 100);
erzeugt ein Kreis-Objekt mit Mittelpunkt $(300,200)$ und Radius 100.