Skip to content

Commit de6f103

Browse files
Web 0.15.6: VisuBot – Grundlagen kleinschrittig (#263)
Sechs neue Roboter-Lektionen für Anfänger (de/en): Zählen und Summieren, Feste Werte mit final, Nah, mittel oder weit? (else if), Der größte Wert, Ein Merker mit boolean, Zustände (Robo-Ampel). Je mit Spiel, Fehler-Übung, Checkliste und Wissenstest; neue Welten platz-1/platz-2. Claude-Session: https://claude.ai/code/session_01Ugz28V6JpBRe9Vepxtw51t Co-authored-by: Claude <noreply@anthropic.com>
1 parent 16d2f08 commit de6f103

70 files changed

Lines changed: 8020 additions & 1224 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog.
88

99
### Changed
1010

11+
- **Web 0.15.6, VisuBot: structured programming basics, step by step:** six new beginner robot lessons (de/en), inserted by file name without renaming (the series now has 33 lessons): „Zählen und Summieren“ after do-while (counter and sum pattern, exercises „Schritte bis zur Wand“ in three worlds and Java „Spirale mit Strecke“), „Feste Werte mit final“ after the ultrasonic sensor (constants, `const`/`final`, „Wand mit Konstante“, Java „Quadrat mit Konstante“), „Nah, mittel oder weit?“ (three cases, `else if`, order of conditions; „Tempo nach Abstand“, Java „Tag oder Nacht?“), „Der größte Wert“ after colours (maximum with desk-check table, new worlds `platz-1`/`platz-2`, „Wo ist am meisten Platz?“, Java „Die Richtung merken“), „Ein Merker mit boolean“ after the light sensor („Wurde es dunkel?“, Java „Wurde geklatscht?“) and „Zustände: Was mache ich gerade?“ after stopwatch/battery (state machine, Robo-Ampel with switch, Java with String states and `.equals`). Each lesson has competencies, a game, a „Warum läuft das nicht?“ exercise, a checklist and a quiz. Glossary: Merker/flag, Zustandsautomat/state machine.
1112
- **Web 0.15.5, small lesson fixes from the second review:** the free tasks „Einheitenrechner“ (after L36) and „Würfeln mit MVC“ (after L41) get a list „Du bist fertig, wenn …“ with things you can see in the window and console. L38 „Viele Knöpfe, ein Zuhörer“: Ludwig's tip in the task „Zahlenschloss“ talked about the calculator; it now helps with the task (count wrong attempts, `setEnabled(false)`, stars with a separate `eingabe`). Steps „Profiwissen: …“ in L23, L29, L31, L36 and L37 lose the prefix (Holger: no separate Profiwissen), L39 refers to the step by name. L5 Angeberwissen no longer mentions the coffee-cup logo. de/en/pt. New test: no step title starts with „Profiwissen“.
1213
- **Web 0.15.4, lesson 1 split in two:** VisuStruct lesson 1 „Was ist ein Struktogramm?“ was very long (15 steps). It now covers algorithm, reading a structure chart, the three building blocks, „Erst die Struktur, dann der Code“, the game „Welcher Baustein?“, checklist and quiz. The new lesson 2 „PAP und Pseudocode“ (`01-weitere-darstellungen.md`) takes the flowchart part (PAP elements, exercise „Kuchen backen als PAP“, jumps/GOTO/spaghetti code, pseudocode and comparison) with its own Kompetenzen, a new game „Welche Darstellung?“ (structure chart, flowchart or pseudocode, eight rounds), checklist and quiz (de/en/pt). VisuStruct now numbers lessons like VisuBot: in file order, so the new lesson keeps file number 01 and no file is renamed (progress stays). All later lessons move up by one; „Lektion N“ in texts and `nach:` in tasks are renumbered automatically. Saved step positions in lesson 1 may point to a later step than before. New test checks the split and the renumbered references.
1314
- **Web 0.15.3, VisuBot orange like visucode.de:** the VisuBot theme in the app used #e07000 (buttons, selection, focus) and #f08a00 („Bot“ in the title bar), the visucode.de start page uses #c2410c with the gradient #ea580c → #c2410c (css/visucode.css, MARKE.md). The app now uses the same values; white text on the accent goes from 3.2 : 1 to 5.2 : 1. The command group „Fahren“ (stripe and dot) moves from the old VisuBot orange #d96a00 to #c2410c as well.

‎web/lessons/de/begriffe.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ Eine Variable, die in einer Schleife mitzählt, meistens i.
115115
auch: Endlosschleifen
116116
Eine Schleife, deren Bedingung nie falsch wird. Sie hört nie von selbst auf.
117117

118+
### Merker
119+
Eine Variable vom Typ boolean, die mit false anfängt und auf true gesetzt wird, sobald etwas passiert ist.
120+
121+
### Zustandsautomat
122+
auch: Zustandsautomaten, Zustandsvariable, Zustandsvariablen
123+
Ein Programm, das immer in genau einem Zustand ist und nach festen Regeln in den nächsten Zustand wechselt, z. B. eine Ampel.
124+
118125
### Array
119126
auch: Arrays
120127
Eine Reihe von Fächern mit einem gemeinsamen Namen und demselben Datentyp. Im Lehrplan heißt es auch Feld.
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
---
2+
titel: Zählen und Summieren
3+
bereich: Sensoren und Entscheidungen
4+
kurz: Mit einer Variablen mitzählen und Werte zusammenzählen.
5+
---
6+
7+
## Diese Kompetenzen erwerbe ich jetzt
8+
9+
::: kompetenzen
10+
- eine Zählvariable anlegen und in einer Schleife hochzählen
11+
- in einer Schleife eine Summe bilden
12+
- das Ergebnis nach der Schleife auf dem Bildschirm zeigen
13+
:::
14+
15+
## Mitzählen
16+
17+
Wie viele Schritte fährt der mBot2 bis zur Wand? Das weißt du vorher nicht, die Welt ist jedes Mal anders. Der mBot2 soll deshalb **mitzählen**. Dafür brauchst du drei Kästen:
18+
19+
1. **Vor** der Schleife: `int schritte = 0`. Am Anfang ist noch nichts gezählt.
20+
2. **In** der Schleife: `schritte = schritte + 1`. Nach jedem Schritt eins mehr.
21+
3. **Nach** der Schleife: das Ergebnis zeigen, zum Beispiel mit `mbot.showText("Schritte: " + schritte)`.
22+
23+
Lies `schritte = schritte + 1` von rechts nach links: Nimm den alten Wert von `schritte`, zähle 1 dazu und speichere das Ergebnis wieder in `schritte`. So eine Variable heißt **Zählvariable** oder kurz Zähler.
24+
25+
> Achtung: Steht `int schritte = 0` **in** der Schleife, fängt der Zähler bei jedem Durchgang wieder bei 0 an. Am Ende steht dann immer 1 da.
26+
27+
::: angeberwissen
28+
Dein Handy zählt deine Schritte genau so: Bei jedem Schritt rechnet es `schritte = schritte + 1`. Ich zähle lieber meine Grashalme. Ich bin bei 4 Millionen.
29+
:::
30+
31+
::: übung vb-schritte-welt
32+
titel: Schritte bis zur Wand
33+
auftrag: Baue ein Struktogramm: Der mBot2 fährt vor, solange der Abstand größer als 15 ist. Dabei zählt er seine Schritte mit. Danach zeigt er zum Beispiel **Schritte: 3** auf dem Bildschirm. Es gibt drei Welten.
34+
welt: wand-kurz -> screen "Schritte: 3"
35+
welt: wand-mittel -> screen "Schritte: 7"
36+
welt: wand-lang -> screen "Schritte: 12"
37+
braucht: whileSchleife
38+
tipp: Der erste Kasten ist `int schritte = 0`. Danach kommt die While-Schleife mit `mbot.getDistance() > 15`.
39+
tipp: In der Schleife stehen **fahre vor** und `schritte = schritte + 1`. Nach der Schleife steht `mbot.showText("Schritte: " + schritte)`.
40+
lösung: vb-schritte-welt-loesung.visustruct
41+
:::
42+
43+
## Zusammenzählen
44+
45+
Ein Zähler wächst immer um 1. Eine **Summe** wächst um verschiedene Werte. Der mBot2 fährt eine Spirale: erst 10 cm, dann 20, dann 30, dann 40. Wie weit ist er insgesamt gefahren?
46+
47+
| Durchgang | `seite` | `gesamt` danach |
48+
|---|---|---|
49+
| vorher | 10 | 0 |
50+
| 1 | 10 | 0 + 10 = 10 |
51+
| 2 | 20 | 10 + 20 = 30 |
52+
| 3 | 30 | 30 + 30 = 60 |
53+
| 4 | 40 | 60 + 40 = 100 |
54+
55+
Das Muster ist dasselbe wie beim Zählen. Nur steht statt der 1 jetzt der Wert, der dazukommt: `gesamt = gesamt + seite`.
56+
57+
## Jetzt in Java: Spirale mit Strecke
58+
59+
::: übung vb-java-spirale-strecke
60+
titel: Spirale mit Strecke
61+
code: java
62+
auftrag: Schreibe in Java: Lege `int seite = 10` und `int gesamt = 0` an. Fahre viermal: `seite` cm vor, rechts drehen, `seite` zu `gesamt` dazuzählen, `seite` um 10 größer machen. Zeige danach **Strecke: 100 cm** auf dem Bildschirm.
63+
fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight
64+
befehle: showText "Strecke: 100 cm"
65+
braucht: forSchleife
66+
tipp: In der For-Schleife stehen vier Zeilen: `mbot.forward(seite);`, `mbot.turnRight();`, `gesamt = gesamt + seite;` und `seite = seite + 10;`.
67+
tipp: Nach der Schleife steht `mbot.showText("Strecke: " + gesamt + " cm");`.
68+
lösung: vb-java-spirale-strecke-loesung.visustruct
69+
:::
70+
71+
::: übung vb-fehler-05-zaehlen-und-summieren
72+
titel: Warum läuft das nicht?
73+
code: java
74+
auftrag: Ludwig hat „Spirale mit Strecke“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen.
75+
start: vb-fehler-05-zaehlen-und-summieren-start.visustruct
76+
fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight
77+
befehle: showText "Strecke: 100 cm"
78+
tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Variable dort, wo sie angelegt wird? Java unterscheidet Groß- und Kleinschreibung.
79+
tipp: Richtig heißt es `gesamt = gesamt + seite`.
80+
lösung: vb-java-spirale-strecke-loesung.visustruct
81+
:::
82+
83+
## Spiel: Was steht am Ende in der Variablen?
84+
85+
::: spiel frage
86+
titel: Spiel: Was steht am Ende in der Variablen?
87+
intro: Ludwig hat kleine Programme geschrieben. Rechne im Kopf mit. Fünf Runden.
88+
89+
runde:
90+
frage: `int z = 0`, dann dreimal `z = z + 1`. Was ist `z`?
91+
- 1
92+
- [x] 3
93+
- 0
94+
> Jeder Durchgang zählt 1 dazu: 1, 2, 3.
95+
96+
runde:
97+
frage: `int summe = 0`, dann `summe = summe + 5` und `summe = summe + 7`. Was ist `summe`?
98+
- 7
99+
- [x] 12
100+
- 5
101+
> 0 + 5 = 5, dann 5 + 7 = 12.
102+
103+
runde:
104+
frage: Eine Schleife läuft viermal. In ihr stehen `int z = 0` und `z = z + 1`. Was ist `z` am Ende?
105+
- 4
106+
- [x] 1
107+
- 0
108+
> Der Zähler wird in jedem Durchgang wieder auf 0 gesetzt. Er gehört vor die Schleife.
109+
110+
runde:
111+
frage: `int gesamt = 0`. Der mBot2 fährt 20, 20 und 30 cm und zählt jedes Mal dazu. Was ist `gesamt`?
112+
- 30
113+
- 20
114+
- [x] 70
115+
> 20 + 20 + 30 = 70.
116+
117+
runde:
118+
frage: `int schritte = 10`, dann zweimal `schritte = schritte + 1`. Was ist `schritte`?
119+
- 2
120+
- [x] 12
121+
- 11
122+
> Der Zähler fängt hier bei 10 an, nicht bei 0.
123+
:::
124+
125+
## Checkliste
126+
127+
Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.
128+
129+
::: checkliste
130+
- Ich kann eine Zählvariable anlegen und in einer Schleife hochzählen. → Mitzählen
131+
- Ich kann in einer Schleife eine Summe bilden. → Zusammenzählen
132+
- Ich kann das Ergebnis nach der Schleife auf dem Bildschirm zeigen. → Jetzt in Java: Spirale mit Strecke
133+
:::
134+
135+
## Wissenstest
136+
137+
::: quiz
138+
? Wo legst du die Zählvariable `int schritte = 0` an?
139+
→ Mitzählen
140+
- [x] Vor der Schleife
141+
- [ ] In der Schleife
142+
- [ ] Nach der Schleife
143+
> In der Schleife würde sie bei jedem Durchgang wieder 0.
144+
? Was macht `schritte = schritte + 1`?
145+
→ Mitzählen
146+
- [ ] Es vergleicht schritte mit schritte + 1.
147+
- [x] Es nimmt den alten Wert, zählt 1 dazu und speichert das Ergebnis.
148+
- [ ] Es setzt schritte auf 1.
149+
? Wie zählst du die Seitenlänge `seite` zur Summe `gesamt` dazu?
150+
→ Zusammenzählen
151+
- [ ] `gesamt = seite`
152+
- [ ] `seite = gesamt + seite`
153+
- [x] `gesamt = gesamt + seite`
154+
:::
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
titel: Feste Werte mit final
3+
bereich: Sensoren und Entscheidungen
4+
kurz: Eine Konstante anlegen, damit eine wichtige Zahl nur an einer Stelle steht.
5+
---
6+
7+
## Diese Kompetenzen erwerbe ich jetzt
8+
9+
::: kompetenzen
10+
- erklären, was eine Konstante ist
11+
- eine Konstante im Struktogramm und in Java anlegen
12+
- eine Konstante in einer Bedingung und in einem Befehl benutzen
13+
:::
14+
15+
## Eine Zahl an vielen Stellen
16+
17+
Ludwig hat ein Programm für den Flur geschrieben: Der mBot2 fährt bis 20 cm vor die Wand, dreht sich um und fährt bis 20 cm vor die andere Wand.
18+
19+
::: diagramm vb-l06k-ohne.visustruct
20+
Hin und zurück. Die Zahl 20 steht an zwei Stellen.
21+
:::
22+
23+
Jetzt soll der mBot2 schon bei 30 cm anhalten. Ludwig muss jede 20 suchen und ändern. Vergisst er eine, hält der mBot2 einmal bei 30 und einmal bei 20 cm. In langen Programmen passiert so etwas schnell.
24+
25+
::: angeberwissen
26+
Profis nennen eine Zahl, die einfach so im Programm steht, eine **magische Zahl**. Magisch, weil niemand mehr weiß, was sie bedeutet. Ich mag nur magische Grashalme.
27+
:::
28+
29+
## Eine Konstante anlegen
30+
31+
Besser ist eine **Konstante**. Das ist eine Variable, deren Wert nach dem Festlegen gleich bleibt. Du legst sie einmal ganz oben an und benutzt danach nur noch ihren Namen.
32+
33+
| | Struktogramm | Java |
34+
|---|---|---|
35+
| anlegen | `const int ABSTAND = 20` | `final int ABSTAND = 20;` |
36+
| benutzen | `mbot.getDistance() > ABSTAND` | `mbot.getDistance() > ABSTAND` |
37+
38+
Im Struktogramm schreibst du `const` davor, in Java `final`. Beides heißt: Dieser Wert ändert sich nicht mehr. Namen von Konstanten schreibt man in **Großbuchstaben**, dann erkennt man sie sofort.
39+
40+
::: diagramm vb-l06k-mit.visustruct
41+
Dasselbe Programm mit der Konstanten ABSTAND. Für 30 cm änderst du nur die erste Zeile.
42+
:::
43+
44+
::: übung vb-konstante-wand
45+
titel: Wand mit Konstante
46+
auftrag: Lege die Konstante `ABSTAND` mit dem Wert 20 an. Der mBot2 fährt vor, solange der Abstand größer als `ABSTAND` ist. Danach spielt er einen Ton. Es gibt drei Welten.
47+
welt: wand-kurz -> tone
48+
welt: wand-mittel -> tone
49+
welt: wand-lang -> tone
50+
braucht: whileSchleife
51+
tipp: Der erste Kasten ist eine Anweisung mit `const int ABSTAND = 20`. Darunter kommt eine While-Schleife.
52+
tipp: Die Bedingung der Schleife ist `mbot.getDistance() > ABSTAND`. In der Schleife steht **fahre vor**, nach der Schleife **spiele Ton**.
53+
lösung: vb-konstante-wand-loesung.visustruct
54+
:::
55+
56+
## Jetzt in Java: Quadrat mit Konstante
57+
58+
Eine Konstante passt auch in einen Befehl. Mit `final int SEITE = 30;` fährt `mbot.forward(SEITE);` genau 30 cm. Soll das Quadrat größer werden, änderst du nur die eine Zeile.
59+
60+
::: übung vb-java-konstante-seite
61+
titel: Quadrat mit Konstante
62+
code: java
63+
auftrag: Schreibe in Java: Lege die Konstante `SEITE` mit dem Wert 30 an. Fahre dann mit einer For-Schleife ein Quadrat mit der Seitenlänge `SEITE`.
64+
fahrt: 4 x (forward 30, turnRight)
65+
braucht: forSchleife
66+
tipp: Die erste Zeile ist `final int SEITE = 30;`. Danach kommt `for (int i = 0; i < 4; i++) { … }`.
67+
tipp: In der Schleife stehen `mbot.forward(SEITE);` und `mbot.turnRight();`.
68+
lösung: vb-java-konstante-seite-loesung.visustruct
69+
:::
70+
71+
::: übung vb-fehler-06-konstanten-final
72+
titel: Warum läuft das nicht?
73+
code: java
74+
auftrag: Ludwig hat „Quadrat mit Konstante“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen.
75+
start: vb-fehler-06-konstanten-final-start.visustruct
76+
fahrt: 4 x (forward 30, turnRight)
77+
tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Konstante dort, wo sie angelegt wird? Konstanten schreibt man in Großbuchstaben.
78+
tipp: Richtig heißt es `mbot.forward(SEITE)`.
79+
lösung: vb-java-konstante-seite-loesung.visustruct
80+
:::
81+
82+
## Spiel: Konstante oder Variable?
83+
84+
::: spiel frage
85+
titel: Spiel: Konstante oder Variable?
86+
intro: Ludwig sortiert Werte. Bleibt der Wert im ganzen Programm gleich, ist er eine Konstante. Ändert er sich, ist er eine Variable. Sechs Runden.
87+
frage: Konstante oder Variable?
88+
antworten: Konstante | Variable
89+
90+
runde:
91+
frage: Die Anzahl der Ecken eines Quadrats
92+
richtig: Konstante
93+
> Ein Quadrat hat immer vier Ecken.
94+
95+
runde:
96+
frage: Der Abstand, den der Ultraschallsensor gerade misst
97+
richtig: Variable
98+
> Fährt der mBot2, ändert sich der Abstand ständig.
99+
100+
runde:
101+
frage: Der Mindestabstand, bei dem der mBot2 immer anhalten soll
102+
richtig: Konstante
103+
> Du legst ihn einmal fest, zum Beispiel `final int ABSTAND = 20;`.
104+
105+
runde:
106+
frage: Die Zahl der Schritte, die der mBot2 schon gefahren ist
107+
richtig: Variable
108+
> Nach jedem Schritt wird sie um 1 größer.
109+
110+
runde:
111+
frage: Die Tonhöhe des Warntons, immer 440 Hz
112+
richtig: Konstante
113+
> Der Warnton klingt immer gleich.
114+
115+
runde:
116+
frage: Der Akkustand in Prozent
117+
richtig: Variable
118+
> Der Akku wird beim Fahren langsam leer.
119+
:::
120+
121+
## Checkliste
122+
123+
Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt.
124+
125+
::: checkliste
126+
- Ich kann erklären, was eine Konstante ist. → Eine Konstante anlegen
127+
- Ich kann eine Konstante im Struktogramm und in Java anlegen. → Eine Konstante anlegen
128+
- Ich kann eine Konstante in einer Bedingung und in einem Befehl benutzen. → Jetzt in Java: Quadrat mit Konstante
129+
:::
130+
131+
## Wissenstest
132+
133+
::: quiz
134+
? Was ist eine Konstante?
135+
→ Eine Konstante anlegen
136+
- [ ] Eine Variable, die sich in jedem Durchgang ändert
137+
- [x] Eine Variable, deren Wert nach dem Festlegen gleich bleibt
138+
- [ ] Ein Sensor, der immer denselben Wert misst
139+
> Eine Konstante legst du einmal fest. Danach benutzt du nur ihren Namen.
140+
? Wie legst du in Java die Konstante `ABSTAND` mit dem Wert 20 an?
141+
→ Eine Konstante anlegen
142+
- [ ] `const ABSTAND = 20;`
143+
- [x] `final int ABSTAND = 20;`
144+
- [ ] `int final = 20;`
145+
> In Java steht `final` vor dem Datentyp. Im Struktogramm schreibst du `const`.
146+
? Warum ist eine Konstante besser als die Zahl 20 an vielen Stellen?
147+
→ Eine Konstante anlegen
148+
- [ ] Weil das Programm dann schneller fährt
149+
- [x] Weil du den Wert nur an einer Stelle ändern musst
150+
- [ ] Weil der Sensor dann genauer misst
151+
:::

0 commit comments

Comments
 (0)