Blockbasierte Programmierung
Ein Programm aus Blöcken baust du wie ein Puzzle: Du steckst Teile zusammen und sagst dem Computer genau, was er tun soll, in welcher Reihenfolge, wann er etwas wiederholt und wann er sich entscheiden muss. Du musst dafür keinen einzigen Buchstaben Code tippen. In diesem Abschnitt arbeiten wir mit Scratch, wie du es vielleicht schon aus dem Informatikunterricht kennst. Am Ende kannst du erklären, warum ein Spiel manchmal auf einen Schlag viel zu viele Punkte zählt.
Die drei Grundstrukturen
Erkläre mit eigenen Worten, was die drei Grundstrukturen eines Programms – Sequenz, Schleife und Verzweigung – bewirken, und nenne zu jeder ein Beispiel aus dem Alltag,…
Erkläre mit eigenen Worten, was die drei Grundstrukturen eines Programms – Sequenz, Schleife und Verzweigung – bewirken, und nenne zu jeder ein Beispiel aus dem Alltag, das nichts mit Computern zu tun hat.
Ein Programm besteht aus diesen losen Blöcken: „sage Tschüss!“, „Wenn die Flagge angeklickt wird“, „warte einen Moment“, „sage Hallo!“. Ordne sie zum richtigen Stapel…
Ein Programm besteht aus diesen losen Blöcken: „sage Tschüss!“, „Wenn die Flagge angeklickt wird“, „warte einen Moment“, „sage Hallo!“. Ordne sie zum richtigen Stapel und beschreibe, was beim Ausführen des Programms genau passiert.
Ein Programm hat diesen Stapel: „Wenn die Flagge angeklickt wird“, „sage 3“, „warte einen Moment“, „sage 2“, „warte einen Moment“, „sage 1“, „sage Los!“. Beschreibe…
Ein Programm hat diesen Stapel: „Wenn die Flagge angeklickt wird“, „sage 3“, „warte einen Moment“, „sage 2“, „warte einen Moment“, „sage 1“, „sage Los!“. Beschreibe ausführlich, was der Nutzer vom Klick auf die Flagge bis zum Ende sieht und hört, und erkläre, wozu die Wartezeiten dienen.
Ereignisse, Bewegung und die Bühne
Das Programm in der Abbildung, das aus ineinandergesteckten Blöcken besteht, soll eine Figur das gepunktete Quadrat ablaufen lassen und am Ende eine Meldung ausgeben. In…
Das Programm in der Abbildung, das aus ineinandergesteckten Blöcken besteht, soll eine Figur das gepunktete Quadrat ablaufen lassen und am Ende eine Meldung ausgeben. In der Schleife fehlt jedoch ein Block.
Gib an, welcher Block in der Schleife fehlt, damit die Figur das Quadrat vollständig abläuft, und erkläre, was jeder Teil des Programms bewirkt.
Ereignisblöcke legen fest, wann ein Blockstapel zu laufen beginnt. Erkläre, was jedes dieser drei Ereignisse auslöst: „Wenn die Flagge angeklickt wird“, „Wenn die…
Ereignisblöcke legen fest, wann ein Blockstapel zu laufen beginnt. Erkläre, was jedes dieser drei Ereignisse auslöst: „Wenn die Flagge angeklickt wird“, „Wenn die Leertaste gedrückt wird“ und „Wenn diese Figur angeklickt wird“, und beschreibe, was passieren würde, wenn ein Projekt zwei verschiedene Stapel mit zwei verschiedenen Ereignissen hat.
Diese Aussehen-Blöcke liegen lose vor: „wechsle zum Kostüm Pirat“, „sage Hallo, ich heiße Marco! für 2 Sekunden“, „Wenn die Flagge angeklickt wird“, „warte 1 Sekunde“.…
Diese Aussehen-Blöcke liegen lose vor: „wechsle zum Kostüm Pirat“, „sage Hallo, ich heiße Marco! für 2 Sekunden“, „Wenn die Flagge angeklickt wird“, „warte 1 Sekunde“. Ordne sie so, dass eine Figur vorgestellt wird, die zuerst grüßt und sich dann verkleidet, und beschreibe, was der Zuschauer sieht.
Die Bühne eines blockbasierten Programms funktioniert wie ein Koordinatensystem: „x“ gibt die waagerechte und „y“ die senkrechte Position an, und der Mittelpunkt ist der…
Die Bühne eines blockbasierten Programms funktioniert wie ein Koordinatensystem: „x“ gibt die waagerechte und „y“ die senkrechte Position an, und der Mittelpunkt ist der Punkt $(0|0)$. Erkläre, wo die Figur mit dem Block „gehe zu x: 0, y: 0“ erscheint und in welche Richtung sie sich bewegt, wenn „x“ größer oder „y“ kleiner wird.
Variablen und Schleifen
Es gibt drei Arten von Schleifen: „wiederhole 10-mal“ läuft eine feste Anzahl von Malen, „wiederhole fortlaufend“ läuft ohne Ende, und „wiederhole bis …“ läuft, bis die Bedingung wahr wird. Fortlaufende Schleifen nutzt du zum Beispiel, wenn ein Spiel dauernd etwas prüfen soll. Die Variable und die Verzweigung gehören dabei zusammen: In der Schleife verändert das Programm die Variable, und eine Verzweigung vergleicht sie mit einem Wert, zum Beispiel „falls Punkte = 3“.
Ein Programm soll mit diesen Blöcken von eins bis zehn zählen: „wiederhole 10-mal: sage die Zahl; erhöhe die Zahl um 1“. Beim Ausführen beginnt das Zählen nicht bei eins…
Ein Programm soll mit diesen Blöcken von eins bis zehn zählen: „wiederhole 10-mal: sage die Zahl; erhöhe die Zahl um 1“. Beim Ausführen beginnt das Zählen nicht bei eins und bei jedem erneuten Ausführen beginnt es bei einer anderen Zahl. Erkläre, welcher Block fehlt und wo er platziert werden sollte, und an welcher Stelle im Stapel der Anfangswert der Zahl gesetzt werden muss.
Die Abbildung zeigt zwei Programme, die eine Figur mit zwei verschiedenen Schleifenarten bewegen. Erkläre, welcher Unterschied zwischen den beiden Schleifen besteht,…
Die Abbildung zeigt zwei Programme, die eine Figur mit zwei verschiedenen Schleifenarten bewegen.
Erkläre, welcher Unterschied zwischen den beiden Schleifen besteht, nenne je eine Situation, in der es sinnvoll ist, die eine bzw. die andere zu verwenden, und überlege, was bei der rechten Schleife passieren kann, wenn es das Ziel nicht gäbe.
Die Abbildung zeigt ein Programm mit einer Variablen namens „Punkte“, die eine Schleife steuert. Erstelle eine Ablaufverfolgung (Trace) des Programms: Gib an, wie oft…
Die Abbildung zeigt ein Programm mit einer Variablen namens „Punkte“, die eine Schleife steuert.
Erstelle eine Ablaufverfolgung (Trace) des Programms: Gib an, wie oft die Schleife ausgeführt wird und wie viele Schritte die Figur insgesamt macht. Überlege anschließend, was passieren würde, wenn der Block „setze Punkte auf 0“ statt davor innerhalb der Schleife stünde.
Um eine Figur zu animieren, verwendet man „wiederhole 4-mal: nächstes Kostüm; warte eine halbe Sekunde“. Erkläre, was diese Schleife bewirkt, und berechne, wie lange die…
Um eine Figur zu animieren, verwendet man „wiederhole 4-mal: nächstes Kostüm; warte eine halbe Sekunde“. Erkläre, was diese Schleife bewirkt, und berechne, wie lange die gesamte Animation dauert, wenn jede Wartezeit $0,5\ \text{s}$ beträgt und der Kostümwechsel sofort erfolgt.
In einem Zeitrennspiel soll der Rekord für die kürzeste Zeit zum Absolvieren einer Strecke gespeichert werden. Ein Schüler schreibt beim Erreichen des Ziels diesen Code:…
In einem Zeitrennspiel soll der Rekord für die kürzeste Zeit zum Absolvieren einer Strecke gespeichert werden. Ein Schüler schreibt beim Erreichen des Ziels diesen Code:
„wenn <Spielzeit < Rekord> dann [setze Rekord auf Spielzeit]“
Beim ersten Spielen nach dem Erstellen der Variablen Rekord (die Scratch standardmäßig mit 0 initialisiert) wird der Rekord jedoch nie aktualisiert, egal wie schnell das Auto ist.
- a) Begründe, warum diese Prüfung scheitert, und erkläre den Unterschied bei der Initialisierung zwischen der Suche nach einem Rekord für die höchste Punktzahl und einem für die kürzeste Zeit.
- b) Entwirf die Blockstruktur, die dieses Problem für das erste und alle folgenden Spiele löst, ohne vor dem Klick auf die grüne Flagge von Hand einen fiktiven Anfangswert eintragen zu müssen.
Um die Dauer einer Partie zu messen, wird diese Stoppuhr erstellt: „Wenn die grüne Flagge angeklickt wird: setze Sekunden auf 0 wiederhole fortlaufend: warte 1 s ändere…
Um die Dauer einer Partie zu messen, wird diese Stoppuhr erstellt:
„Wenn die grüne Flagge angeklickt wird:
setze Sekunden auf 0
wiederhole fortlaufend:
warte 1 s
ändere Sekunden um 1“
Beim Vergleich dieses Zählers mit einer echten Uhr nach 10 Minuten intensivem Spielen zeigt die Scratch-Stoppuhr nur 9 Minuten und 35 Sekunden an (eine Abweichung von 25 Sekunden).
- a) Begründe, warum eine Schleife mit dem Block „warte 1 s“ Verzögerung ansammelt, wenn das Spiel viele Figuren und Bewegungen gleichzeitig verarbeitet.
- b) Entwirf eine alternative Stoppuhr mit Blöcken, die den Sensor „Stoppuhr“ und Variablen verwendet, nicht von der Aktualisierungsrate des Spiels abhängt und die verstrichene Zeit in Sekunden mit einer Nachkommastelle anzeigt (zum Beispiel: 14,2 s).
- c) Begründe, warum dein Vorschlag auch bei Verlangsamungen auf dem Bildschirm exakt genau bleibt.
Verzweigungen und Operatoren
Beschreibe mit eigenen Worten die Blöcke eines Programms, das den Nutzer nach seinem Alter fragt und „Du darfst rein“ antwortet, wenn er 14 Jahre oder älter ist, und…
Beschreibe mit eigenen Worten die Blöcke eines Programms, das den Nutzer nach seinem Alter fragt und „Du darfst rein“ antwortet, wenn er 14 Jahre oder älter ist, und andernfalls „Tut mir leid“. Gib an, welche Art von Entscheidungsblock du verwenden würdest und welche Bedingung genau geprüft würde.
In einem Spiel läuft eine Katze über die Bühne und ein Hund jagt sie. Erkläre, wo du den Block „spiele Klang Miau“ platzieren würdest, damit er genau dann ertönt, wenn…
In einem Spiel läuft eine Katze über die Bühne und ein Hund jagt sie. Erkläre, wo du den Block „spiele Klang Miau“ platzieren würdest, damit er genau dann ertönt, wenn der Hund die Katze erreicht, welcher Abfrageblock ihn begleitet und was passieren würde, wenn der Klang außerhalb dieser Abfrage stünde.
Ein Café im Viertel verschenkt einen Espresso nur an Mitglieder und nur vor 10 Uhr morgens. Beschreibe die verschachtelten Entscheidungsblöcke des Programms, das dies…
Ein Café im Viertel verschenkt einen Espresso nur an Mitglieder und nur vor 10 Uhr morgens. Beschreibe die verschachtelten Entscheidungsblöcke des Programms, das dies prüft, und erkläre anhand dieses Beispiels den Unterschied zwischen zwei ineinander verschachtelten „wenn“-Blöcken und zwei aufeinanderfolgenden „wenn“-Blöcken.
Die Operatorblöcke „und“, „oder“ und „nicht“ verknüpfen Bedingungen. Erkläre, was jeder bewirkt, und beschreibe die vollständigen Bedingungen dieser beiden Systeme: eine…
Die Operatorblöcke „und“, „oder“ und „nicht“ verknüpfen Bedingungen. Erkläre, was jeder bewirkt, und beschreibe die vollständigen Bedingungen dieser beiden Systeme: eine Tür, die sich öffnet, wenn die Karte gültig ist und außerdem der Fingerabdruck übereinstimmt, und eine Alarmanlage, die ertönt, wenn das Fenster geöffnet wird oder die Scheibe zerbricht.
Ein Mitschüler hat den Ablauf einer Autoampel (Grün: 10 s; Gelb: 3 s; Rot: 12 s) und einer synchronisierten Fußgängerampel programmiert. Dafür hat er zwei unabhängige…
Ein Mitschüler hat den Ablauf einer Autoampel (Grün: 10 s; Gelb: 3 s; Rot: 12 s) und einer synchronisierten Fußgängerampel programmiert. Dafür hat er zwei unabhängige Programme mit „Wenn die grüne Flagge angeklickt wird“ und „wiederhole fortlaufend“-Schleifen mit Warteblöcken in jedem Objekt erstellt. Nach einer Minute Simulation haben Autos und Fußgänger gleichzeitig Grün.
- a) Begründe, warum diese gefährliche Desynchronisation entsteht, wenn man Schleifen mit unabhängigen Wartezeiten verwendet.
- b) Entwirf eine Lösung mit Blöcken, die garantiert, dass nie beide gleichzeitig Grün haben. Erkläre dabei, ob du Zustandsvariablen oder Nachrichten („sende Nachricht und warte“) verwendest, und gib die genaue Reihenfolge der Lichtwechsel an.
Ein Schüler programmiert die Bewegung eines Balls mit diesem Code: „wiederhole fortlaufend: gehe 10er-Schritte wenn Rand berührt, pralle ab“ Beim Ausführen mit einem…
Ein Schüler programmiert die Bewegung eines Balls mit diesem Code:
„wiederhole fortlaufend:
gehe 10er-Schritte
wenn Rand berührt, pralle ab“
Beim Ausführen mit einem Ball, dessen Kostüm nicht perfekt zentriert ist, stellt er fest, dass der Ball bei bestimmten Winkeln am Bildschirmrand zittert und feststeckt, ohne herauszukommen.
- a) Erkläre Schritt für Schritt, warum diese Blockade entsteht, und beziehe dich dabei darauf, wie Scratch die Kollision mit dem Rand und die Position des Kostümmittelpunkts berechnet.
- b) Wäre das Problem gelöst, wenn man einfach die Reihenfolge der beiden Blöcke in der Schleife vertauscht? Begründe deine Antwort, indem du vorhersagst, was in jedem Durchlauf passieren würde.
- c) Entwirf eine Änderung an den Blöcken, die garantiert, dass sich der Ball vom Rand löst und seine Bahn normal fortsetzt.
Ein Jump-and-Run-Spiel hat dieses Skript in der Spielfigur: „Wenn die grüne Flagge angeklickt wird: setze Leben auf 3 wenn <Leben = 0> dann [stoppe alles] wiederhole…
Ein Jump-and-Run-Spiel hat dieses Skript in der Spielfigur:
„Wenn die grüne Flagge angeklickt wird:
setze Leben auf 3
wenn dann [stoppe alles]
wiederhole fortlaufend:
wenn <Falle berührt?> dann:
ändere Leben um -2
warte 0,5 s“
Das Spiel zeigt zwei Fehler: Die Partie endet nie, auch wenn der Spieler die Falle wiederholt berührt, und wenn ein Spieler mit 1 Leben in die Falle tappt, springt die Anzeige auf -1 Leben, ohne dass das Spiel stoppt.
- a) Begründe, warum die Prüfung auf das Spielende, so wie sie platziert ist, das Spiel zu keinem Zeitpunkt anhält.
- b) Erkläre, warum die strikte Bedingung ein Entwurfsfehler ist, wenn der Schaden mehr als 1 Leben abzieht.
- c) Entwirf die Lösung, indem du die Verzweigungsblöcke neu platzierst und änderst, sodass die Partie genau dann endet, wenn die Leben aufgebraucht sind oder unter null fallen.
Nachrichten zwischen Figuren
In einem Projekt gibt es zwei Figuren: einen Button und einen Zauberer. Beim Klick auf den Button soll der Zauberer erscheinen. Erkläre, wozu die Blöcke „sende…
In einem Projekt gibt es zwei Figuren: einen Button und einen Zauberer. Beim Klick auf den Button soll der Zauberer erscheinen. Erkläre, wozu die Blöcke „sende Nachricht“ und „Wenn ich Nachricht empfange“ dienen, beschreibe die Blockstapel, die jede Figur bekäme, und begründe, warum es nicht genügt, die Blöcke des Zauberers in den Button zu setzen.
In einem Videospiel wurde dieser Block in die „wiederhole fortlaufend“-Schleife der Hauptfigur eingefügt: „wenn <Münze berührt?> dann [ändere Punkte um 1]“ „wenn <Gegner…
In einem Videospiel wurde dieser Block in die „wiederhole fortlaufend“-Schleife der Hauptfigur eingefügt:
-
„wenn dann [ändere Punkte um 1]“
-
„wenn dann [ändere Leben um -1]“
-
„wenn dann [stoppe alles]“
Beim Testen fallen zwei schwere Fehler auf: Beim Berühren einer einzigen Münze springt der Zähler auf einmal um 15 bis 20 Punkte nach oben, und beim Streifen eines Gegners gehen alle 3 Leben sofort verloren.
- a) Begründe technisch, warum das so ist, und berücksichtige dabei die Ausführungsgeschwindigkeit der Schleifendurchläufe pro Sekunde.
- b) Entwirf die nötige Änderung in den Blöcken der Münze und der Figur, um beide Verhaltensweisen zu korrigieren, ohne die allgemeine Bewegung des Spiels anzuhalten (denke an das Verstecken/Löschen von Objekten und an Phasen der Unverwundbarkeit).
In einem Weltraumspiel hat das Objekt „Asteroid“ diese drei Stapel: Stapel 1: „Wenn die grüne Flagge angeklickt wird: wiederhole fortlaufend [warte 2 s; erzeuge Klon von…
In einem Weltraumspiel hat das Objekt „Asteroid“ diese drei Stapel:
Stapel 1: „Wenn die grüne Flagge angeklickt wird: wiederhole fortlaufend [warte 2 s; erzeuge Klon von mir selbst]“
Stapel 2: „Wenn ich Meteoriten_Alarm empfange: erzeuge Klon von mir selbst“
Stapel 3: „Wenn ich als Klon entstehe: zeige dich; wiederhole fortlaufend [ändere y um -5; wenn <y-Position < -170> dann [verstecke dich]]“
Nach ein paar Minuten Spielzeit wird das Spiel stark langsamer, es werden keine Asteroiden mehr erzeugt, und jedes Mal, wenn die Nachricht Meteoriten_Alarm eintrifft, vervielfacht sich die Zahl der Klone unkontrolliert.
- a) Begründe, warum der Block „verstecke dich“ dazu führt, dass das Spiel nicht mehr reagiert und das Klonlimit von Scratch erreicht wird.
- b) Erkläre den Fehler in Stapel 2: Warum verdoppeln die bereits vorhandenen Klone beim Empfang einer Nachricht die Anzahl der Asteroiden?
- c) Entwirf die richtige Lösung mit Blöcken für das Erzeugen, Bewegen und endgültige Löschen der Klone.
Vorhin hast du gefragt, warum ein Spiel auf einen Schlag viel zu viele Punkte zählt: Die Prüfung in der fortlaufenden Schleife läuft viele Male pro Sekunde und zählt bei jedem Durchlauf mit, solange die Münze berührt wird.