Die vorliegenden Materialien wurden von Daniel Hoherz und André Tempel erstellt. Sollten andere Editoren die Materialien erstellt haben, werden diese explizit genannt.
Wir werden zunächst mit der grafischen Programmierumgebung Scratch 3 programmieren lernen.. Du kannst es unter diesem Link aufrufen und direkt in deinem Browser nutzen (was wir aber jetzt nicht machen werden!).
Ähnliche wie in OpenRoberta Lab lassen sich auch hier die Blöcke in den mittleren Bereich ziehen und aneinderkleben. Durch das Ausführen des Programms wird die Figur oben rechts in Aktion gebracht.
In jeder Programmiersprache gibt es die Kontrollstrukturen. Sie sorgen dafür, dass das Programm so abläuft wie wir es wollen. Insgesamt werden vier Kontrollstrukturen unterschieden. Wir betrachten hier zunächst nur Anweisung und Sequenz.
Anweisungen sind einfach Befehle, wie das gehe 10er Schritte in Scratch. Eine Sequenz sind nun mehrere dieser Anweisungen hintereinander.
Beginnen wir damit ein solches Programm nur mit Anweisungen und Sequenzen zu entwickeln.
- Zunächst kümmern wir uns um die Programmierumgebung und die Grundlagen, wo was zu finden ist.
Öffnen Sie zunächst Scratch und machen Sie sich mit der Programmoberfläche vertraut. Klicke die einzelnen Bereiche an und untersuche, was man auswählen und einstellen kann. Zum Beispiel können Sie die Sprache auf Deutsch stellen. Die Beschriftung an der obigen Skizze ist eine erste Orientierung.
Schreiben Sie ein erstes Programm, indem Sie die Katze so programmieren, dass diese beim Drücken einer Taste immer ein kleines Stück nach rechts
und beim Drücken einer anderen Taste nach links geht. Der Block mit der grünen Flagge startet ein Programm.
Halten Sie sich an die Vorgabe, dass es immer nur einen Startblock pro Programm gibt. Hilfreiche Blöcke sind:
Setzen Sie nun auch entsprechend die Bewegung nach oben und unten um.
Speichern Sie Ihr Projekt unter einem sinnvollen Namen ab.
Ihnen wird wahrscheinlich aufgefallen sein, dass die Katze immer nach rechts schaut.
Das sieht natürlich nicht gut aus, wenn sie nach links gehen soll.
Um dieses Problem zu beheben, schauen wir uns den Bereich Kostüme ein wenig genauer an.
Um Figuren nach Bedarf anzuzeigen, sie zu verstecken oder Kostüme zuzuweisen, helfen die folgenden Blöcke aus dem Bereich Aussehen:
Setzen Sie Ihre Lösung aus c) mit Hilfe der folgenden Blöcke anstelle der „ändere x bzw. y um…“-Blöcke um:
- Wir werden nun eine Spur hinterlassen, damit wir wissen, wo die Katze entlang gelaufen ist.
Zunächst müssen Sie unten links im Fenster eine „Erweiterung hinzufügen“ (1.) und anschließend die Erweiterung „Malstift“ anwählen (2.). Nun gibt es im Bereich „Malstift“ Zeichenoptionen (3).
Löschen Sie Ihr altes Skript. Wir brauchen ein leeres Skript.
Beim Anklicken der grünen Flagge soll die Katze ein Quadrat ablaufen und dabei eine Linie hinterlassen.
Entwickeln Sie mit den Anweisungen gehe ...er Schritte und drehe dich um ...Grad ein Programm, dass das macht.
Erweitern Sie Ihr Programm, dass auch nach dem Quadrat ein Dreieck gezeichnet wird und dann noch ein Sechseck.
In Aufgabe 2b und c haben Sie geometrische Figuren gezeichnet.
Beschreiben Sie Auffälligkeiten bei der Implementierung der Programme.
Verändern Sie Ihr Programm so, dass beim erneuten Anklicken der grünen Flagge die Katze an eine zufällige Position der Bühne gesetzt wird und dort dann die Figur zeichnet und jede Figur soll an einer anderen zufälligen Stelle auf der Bühne gezeichnet werden.
In dem Ergebnis von Aufgabe 2 aus dem vorherigen Kapitel haben wir gesehen, dass sich die Anweisungen mit dem Bewegen und dem Drehen entsprechend oft wiederholen. Weiterhin haben wir gesehen, dass das Programm zunehmend länger wurde, je mehr Ecken wir haben. Dafür muss eine bessere Lösung geben. Wir haben beim Dreieck drei Wiederholungen der Bewegung und der Drehung, bei dem Viereck vier Wiederholungen und bei dem Sechseck sechs Wiederholungen. An den Stellen wird eine fest Anzahl oft etwas wiederholt. Dafür gibt es in Programmiersprachen eine weitere Kontrollstruktur.
Neben den Anweisungen und Sequenzen gibt noch weitere Kontrollstrukturen. Die Schleifen sind Kontrollstrukturen, die dazu da sind, dass Anweisungen mehrmals wiederholt ausgeführt werden, sodass man sie nicht jedes mal neu schreiben muss. Es gibt insgesamt drei Formen von Schleifen. Wir betrachten zunächst die Endlosschleife.
Diese führt die Anweisungen solange aus, bis das Programm gestoppt wird. Sie hat kein definiertes Ende – eben endlos.
Daneben gibt es noch die Zählschleife. Zählschleifen wiederholen die Anweisungen eine bestimmte Anzahl oft. Hier wird Ihnen wohlmöglich auffallen, dass wir für unser Figurenzeichnen auch Anweisungen eine bestimmte Anzahl oft wiederholt haben.
- Nehmen Sie sich Ihr Programm aus der Aufgabe 2c aus dem vorherigen Kapitel.
Verändern Sie Ihr Programm, sodass Sie statt der Anweisungen passende Zählschleifen verwenden.
Erweitern Sie Ihr Programm, sodass das Zeichnen eines Quadrats, eines Dreiecks, einer Sechsecks zufällig oft wiederholt wird. Zufallszahlen können Sie mit dem Block Zufallszahl von ... bis ... erzeugen.
-
Nehmen Sie Ihr Programm aus der vorherigen Aufgabe.
Im Bereich „Fühlen“ finden Sie den Block „frage… und warte“. Dieser Block fragt den Benutzer etwas und wartet, bis dieser etwas eingetippt hat und die Eingabe des Benutzers wird in dem Block „Antwort“ (auch Bereich „Fühlen“) gespeichert.
Der Benutzer soll nun aufgefordert werden, zu entscheiden, wie oft ein Vieleck gezeichnet werden soll. Dazu wird er nach der Anzahl der Vielecke (Drei-, Vier, Sechseck, etc.) gefragt und gibt eine Zahl ein. Entsprechen der Eingabe soll das Programm dann so viele Vielecke zeichnen.
Verändern Sie Ihr Programm entsprechend.Entwickeln Sie ein Programm, wo der Benutzer eingibt, wie viele Ecken das Vieleck haben soll und entsprechend der Eingabe wird das entsprechende Vieleck gezeichnet. Hinweis: wenn man 360 durch die Anzahl der Ecken teilt, erhält den passenden Winkel, um den gedreht werden muss.
Im Internet wird man auf manchen Social-Media-Seiten nach seinen Alter gefragt. Dann gibt man das Alter ein und entweder man ist alt genug oder nicht. Genau so etwas soll nun programmiert werden. Der Benutzer wird nach seinem Alter gefragt und wenn er älter als 15 ist, wird angezeigt, dass man sich anmelden kann, sonst wird die Anmeldung verweigert.
Die bedingten Anweisungen sind auch Kontrollstrukturen. Wir unterscheiden zwei Arten von bedingten Anweisungen. Die (einfache) bedingte Anweisung prüft, ob eine Bedingung erfüllt ist und wenn sie das ist (true/wahr), dann wird ein bestimmter Codeblock ausgeführt. Bei einer Verzweigung gibt es verschiedene Codeblöcke, die ausgeführt werden, jenachdem, ob die Bedingung wahr oder falsch ist – beide „Wege“ sind definiert.
- Im Folgenden sollen Sie ein kleines Quizspiel entwickeln. Wählen Sie eine der beiden Varianten aus.
Dem Benutzer werden ja/nein Fragen gestellt und je nach seiner Eingabe, erhält er die Rückmeldung, ob das korrekt war oder nicht. Machen Sie mindestens drei Fragen.
Dem Benutzer werden Fragen gestellt und drei Antwortmöglichkeiten vorgegeben. Der Benutzer gibt dann seine Antwort ein (eine Zahl oder Buchstabe) und der Computer überprüft dann, ob die Antwort korrekt ist. Machen Sie mindestens drei Fragen.
- Im Folgenden programmieren Sie eine kleine Interaktion.
Der Benutzer wird aufgefordert auszuwählen, ob die Katze einfach wild umherlaufen soll, dabei aber am Rand abdrehen soll oder der Maus folgt.
Dem Benutzer wird zunächst aufgefordert seinen Namen einzugeben und dann wird er gefragt sein Alter einzugeben. Nachdem er beides gemacht hat, soll eine Ausgabe erzeugt werden, die Name und Alter anzeigt und dann, ob man volljährig ist oder nicht.
An dem Beispiel mit der Ausgabe von mehreren Informationen wird, deutlich, dass sich ein Computer auch häufiger etwas „merken“ muss. Er benötigt eine Art Gedächtnis.
Um dem Computer eine Art Gedächtnis zu geben, werden Variablen genutzt. Sehr vereinfacht kannst du dir vorstellen, dass der Speicher eines Computersystems wie ein Schrank mit verschiedenen Schubladen ist.
Wenn man eine Variable erstellt, fachsprachlich nennt man das deklariert, muss dem Computer immer ein Datentyp und der Name der Variable gegeben werden.
Ein Datentyp sagt dem Computer, welche Art von Daten unter dem Namen der Variablen gespeichert werden darf. Für unser Beispiel ist die Variable eine Zahl, da wir etwas damit zählen lassen müssen. Und unsere Variable soll den Namen anzahl bekommen.
Jetzt sucht der Computer eine noch freie Schublade und schreibt sowohl den Datentyp, wie auch den Namen der Variablen auf diese Schublade.
Jeder in Scratch deklarierten Variablen wird ein Startwert zugewiesen. Diesen Vorgang nennt man initialisieren. Der Computer öffnet nun die entsprechende Schublade und legt den Startwert, bei uns 0, hinein.
Nun sagen wir dem Computer, dass er den Wert der Variablen anzahl auf 2 setzen soll. Dazu sucht der Computer sucht die Schublade auf der anzahl steht, öffnet diese und legt die Zahl 2 hinein. Anschließend schließt der die Schublade wieder.
Achtung: Das Beispiel mit dem Setzen der Variablen anzahl auf den Wert 2 funktioniert nur, weil „2“ eine Zahl ist.
Würde man versuchen der Variablen anzahl ein einzelnes Zeichen, z. B. ‚a‘, oder eine Zeichenkette, z. B. „Hallo Computer!“, als neuen Wert zuweisen, funktioniert das nicht. Der Computer sucht nämlich nicht nur die Schublade mit dem Namen anzahl, sondern er überprüft auch, ob der Datentyp auf der Schublade zum übergebenen Wert passt.
Variablen legen Sie in Scratch so an (siehe 1. und 2.):
Die Variable können Sie dann wie einen Block nutzen (siehe 3.).
- Nutzen Sie Ihr Ergebnis aus der letzten Aufgabe und Ihr neuerworbenes Wissen über Variablen, um das Problem zu lösen.
- Im Folgenden programmieren wir ein kleines Ratespiel. Der Computer erzeugt eine zufällige Zahl und der Benutzer muss diese erraten. Wenn der Rateversuch über der gesuchte Zahl liegt, wird das auch zurückgemeldet. Erst wenn die gesuchte Zahl gleich dem Rateversuch ist, ist das Spiel vorbei.
Implementieren Sie das obere Spiel. Hinweis: Sie werden eine bedingte Schleife (wiederhol bis…) verwenden müssen.
Es soll mitgezählt werden, wie oft der Benutzer geraten hat. Dafür brauchen Sie eine Variable.
Erweitern Sie Ihr Programm.
Der Benutzer soll nun nur noch drei Rateversuche zur Verfügung haben.
Verändern Sie Ihr Programm entsprechend.
Stellen wir uns mal vor, wir sind in einem AquaPark. In diesem gibt es zahlreiche Anzeigetafeln mit Informationen über Attraktionen, Neuigkeiten und über die aktuellen Bestellungen.
Es soll eine Darstellung sein, in der die aufgegebenen Bestellungen zeilenweise mit Name, Gericht und Anzahl zu sehen sind. Die zeitliche Reihenfolge soll eingehalten werden.
Eine Bestellung, die weiter oben steht, wurde auch früher aufgegeben als eine weiter unten stehende Bestellung.
Für die Realisierung der Anzeige der Bestellungen werden zwei Varianten vorgeschlagen:
| Variante 1 (Mehrere einzelne Variablen) | Variante 2 (Listen) |
|---|---|
Bühne:
|
Bühne:
|
Umsetzung:
|
Umsetzung:
|
- Betrachten Sie die beiden Varianten und tauschen Sie sich mit Ihrer benachbarten Person über deren Funktionsweise aus.
- Beschreiben Sie, wie die jeweilige Variante die Anzeige umsetzt. Gehen Sie hierbei auch auf die Nutzung von Variablen ein und wie sich diese unterscheiden.
- (Einzelarbeit) Bevor Sie fortfahren, probieren Sie zunächst grundlegende Algorithmen mit einer Liste aus. Hierfür müssen Sie keinen vollständigen, zusammenhängenden Algorithmus implementieren. Die einzelnen Aufgabenteile können jeweils mit den dafür notwendigen Blöcken umgesetzt werden. Eine Liste erstellen Sie im Bereich „Variablen“.
- Jana hat ihre Bestellung abgeholt und die Bestellung muss nun entfernt werden. Die restlichen Bestellungen rücken je eine Position weiter nach oben.
- David hat gerade beim Imbissroboter sechs Burger für seine Freunde bestellt.
- Hassans Schwester möchte nun doch noch eine Pommes haben und wurde bisher nicht berücksichtigt.
- Bestellungen des Personals sollen ganz oben eingefügt werden können. Die Mitarbeiterin Jenny möchte schnell einen Salat bestellen.
-
Die Leiterin der Restaurants des AquaParks schreibt eine Nachricht an den Imbissroboter
und möchte die folgenden Dinge wissen:
- Wie viele oEene Bestellungen sind vorhanden?
- Hat ihre Tochter Shirin 3 Salate bestellt, wie sie es tun sollte.
- Zu Stoßzeiten am Mittag, muss ein zweiter Imbissroboter eingesetzt werden. In dieser Zeit kommen sehr viele Bestellungen rein.
Erstellen Sie in einem neuen Programm zwei Listen mit den Namen „Name“ und „Essen“. Für die folgenden Aufgaben empfiehlt es sich, jeweils einen „lösche alles“-Block für beide Listen in den Programmierbereich zu ziehen.
Fügen Sie jeweils fünf verschiedene Namen in die Liste „Name“ und fünf verschiedene Gerichte in die Liste „Essen“ ein.
Tauschen Sie die Einträge an der zweiten Position (Index 2) der Listen aus:
Ersetzen Sie den Eintrag in „Name“ durch „Theo“ und den Eintrag in „Essen“ durch „Pommes“.
Verwenden Sie hierfür den Block „ersetze Element x von y durch“.
Entfernen Sie die Einträge an der vierten Position (Index 4) beider Listen.
Lassen Sie das Objekt auf der Bühne alle Einträge beider Listen für jeweils eine Sekunde ansagen.
Nutzen Sie hierfür die beiden folgenden Varianten zur Ausgabe.
| Variante 1 | Variante 2 |
|---|---|
|
|
Überprüfen Sie mit einer bedingten Anweisung (z. B. „wenn-dann“-Block), ob in den Listen am Index 2 die Einträge „Samira“ (in der Liste „Name“) und „Pommes“ (in der Liste „Essen“) stehen.
Falls dies nicht der Fall ist, ändern Sie beide Listen an dieser Position entsprechend ab.
Lassen Sie sich die Länge der beiden Listen für zwei Sekunden ansagen.
Erstellen Sie eine Variable mit dem Namen „index“ und initialisieren Sie diese mit dem Wert 1.
Nutzen Sie eine „wiederhole bis“-Schleife in Kombination mit der Variable, sodass in jedem Schleifendurchlauf das aktuelle Element der Liste „Name“, beginnend mit dem ersten Eintrag (Index 1), für eine Sekunde ausgegeben wird.
Hinweis: Folgende Blöcke könnten hilfreich sein:
Passen Sie Ihre Lösung aus Aufgabe h) so an, dass die Liste „Name“ von unten nach oben (d. h. vom letzten zum ersten Element) ausgegeben wird.
Tipp: Nutzen Sie die Länge der Liste als Startwert für die Variable „index“ und verringern Sie diese schrittweise.
Modifizieren Sie Ihre Lösung aus Aufgabe h) so, dass nur jede zweite Bestellung der Liste „Name“ ausgegeben wird.
Untersuchen Sie – ohne die beiden Varianten für die Anzeigetafel konkret zu implementieren – wie die folgenden Situationen mit der jeweiligen Variante umgesetzt werden könnten.
Gehen Sie dabei konkret darauf ein, welche Änderungen an den jeweiligen Variablen oder Datenstrukturen notwendig wären.
Nützliche Blöcke für die beiden Varianten sind:
| Variante 1 | Variante 2 |
|---|---|
|
|
| Positionsveränderungen der Variablen müssen zusätzlich betrachtet werden. |
Hinweise: Bei „füge … zu Name hinzu“ wird immer am Ende der Liste eingefügt. Bei „füge … bei … in Name ein“ wird an der genannten Stelle der Liste eingefügt. Die bisher dort stehende Bestellung und alle anderen Bestellungen werden eine Position nach unten verschoben. Bei „lösche … aus Name“ werden die darunter stehenden Einträge nach oben verschoben. |

