lny-interpreter 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.vscode/launch.json +19 -0
  2. package/README.md +96 -0
  3. package/book_ALT/LennySmartIcon1.png +0 -0
  4. package/book_ALT/chapter01.md +141 -0
  5. package/book_ALT/chapter02.md +48 -0
  6. package/book_ALT/chapter03.md +28 -0
  7. package/book_ALT/chapter04.md +19 -0
  8. package/book_ALT/chapter05.md +21 -0
  9. package/book_ALT/chapter06.md +167 -0
  10. package/book_ALT/chapter07.md +232 -0
  11. package/book_ALT/chapter08.md +200 -0
  12. package/book_ALT/chapter09.md +175 -0
  13. package/book_ALT/chapter10.md +196 -0
  14. package/book_ALT/deckblatt.md +60 -0
  15. package/book_ALT/images/Lenny01.png +0 -0
  16. package/book_ALT/images/Lenny02.png +0 -0
  17. package/book_ALT/images/Lenny03.png +0 -0
  18. package/book_ALT/images/Lenny04.png +0 -0
  19. package/book_ALT/images/Lenny05.png +0 -0
  20. package/book_ALT/images/Lenny06.png +0 -0
  21. package/book_ALT/images/Lenny07.png +0 -0
  22. package/book_ALT/images/Lenny08.png +0 -0
  23. package/book_ALT/images/Lenny09.png +0 -0
  24. package/book_ALT/images/Lenny10.png +0 -0
  25. package/book_ALT/images/Lenny11.png +0 -0
  26. package/book_ALT/images/Lenny12.png +0 -0
  27. package/book_ALT/images/Lenny13.png +0 -0
  28. package/book_ALT/images/Lenny14.png +0 -0
  29. package/book_ALT/images/Lenny15.png +0 -0
  30. package/book_ALT/lehrerheft.md +255 -0
  31. package/dist/ast/ast.d.ts +126 -0
  32. package/dist/ast/ast.d.ts.map +1 -0
  33. package/dist/ast/ast.js +3 -0
  34. package/dist/ast/ast.js.map +1 -0
  35. package/dist/browser.d.ts +2 -0
  36. package/dist/browser.d.ts.map +1 -0
  37. package/dist/browser.js +1067 -0
  38. package/dist/browser.js.map +1 -0
  39. package/dist/examples.d.ts +11 -0
  40. package/dist/examples.d.ts.map +1 -0
  41. package/dist/examples.js +65 -0
  42. package/dist/examples.js.map +1 -0
  43. package/dist/i18n/i18n.d.ts +18 -0
  44. package/dist/i18n/i18n.d.ts.map +1 -0
  45. package/dist/i18n/i18n.js +505 -0
  46. package/dist/i18n/i18n.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +31 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interpreter/interpreter.d.ts +40 -0
  52. package/dist/interpreter/interpreter.d.ts.map +1 -0
  53. package/dist/interpreter/interpreter.js +415 -0
  54. package/dist/interpreter/interpreter.js.map +1 -0
  55. package/dist/lexer/lexer.d.ts +87 -0
  56. package/dist/lexer/lexer.d.ts.map +1 -0
  57. package/dist/lexer/lexer.js +425 -0
  58. package/dist/lexer/lexer.js.map +1 -0
  59. package/dist/lny-config.yml +6 -0
  60. package/dist/parser/parser.d.ts +50 -0
  61. package/dist/parser/parser.d.ts.map +1 -0
  62. package/dist/parser/parser.js +605 -0
  63. package/dist/parser/parser.js.map +1 -0
  64. package/dist/repl.d.ts +3 -0
  65. package/dist/repl.d.ts.map +1 -0
  66. package/dist/repl.js +472 -0
  67. package/dist/repl.js.map +1 -0
  68. package/dist/run-file.d.ts +2 -0
  69. package/dist/run-file.d.ts.map +1 -0
  70. package/dist/run-file.js +140 -0
  71. package/dist/run-file.js.map +1 -0
  72. package/dist/test.d.ts +2 -0
  73. package/dist/test.d.ts.map +1 -0
  74. package/dist/test.js +72 -0
  75. package/dist/test.js.map +1 -0
  76. package/dist/world/world.d.ts +103 -0
  77. package/dist/world/world.d.ts.map +1 -0
  78. package/dist/world/world.js +416 -0
  79. package/dist/world/world.js.map +1 -0
  80. package/docs/About.md +19 -0
  81. package/docs/INTERPRETER.md +240 -0
  82. package/docs/README.md +68 -0
  83. package/docs/i18n/README.md +20 -0
  84. package/docs/lny-referenz.md +161 -0
  85. package/docs/lny_ueberblick.md +33 -0
  86. package/examples/00-demo.lny +3 -0
  87. package/examples/01-variable-assignment.lny +4 -0
  88. package/examples/02-conditional.lny +7 -0
  89. package/examples/03-while-loop.lny +6 -0
  90. package/examples/04-for-loop.lny +5 -0
  91. package/examples/05-lenny-movement.lny +10 -0
  92. package/examples/06-procedure.lny +6 -0
  93. package/examples/fuer-range-1.lny +4 -0
  94. package/examples/fuer-range-2.lny +6 -0
  95. package/examples/fuer-range-3.lny +6 -0
  96. package/examples/fuer-range-4.lny +4 -0
  97. package/examples/fuer-range-5.lny +6 -0
  98. package/examples/solange-verschachtelt.lny +12 -0
  99. package/favicon.ico +0 -0
  100. package/index.html +108 -0
  101. package/jest.config.js +7 -0
  102. package/lny-config.yml +6 -0
  103. package/package.json +37 -0
  104. package/settings.json +4 -0
  105. package/src/ast/ast.ts +182 -0
  106. package/src/browser.ts +1274 -0
  107. package/src/examples.ts +68 -0
  108. package/src/i18n/i18n.ts +537 -0
  109. package/src/index.ts +6 -0
  110. package/src/interpreter/interpreter.ts +453 -0
  111. package/src/lexer/lexer.ts +493 -0
  112. package/src/parser/parser.ts +711 -0
  113. package/src/repl.ts +496 -0
  114. package/src/test.ts +71 -0
  115. package/src/world/world.ts +512 -0
  116. package/style.css +315 -0
  117. package/test1.lny +2 -0
  118. package/tests/interpreter.test.ts +42 -0
  119. package/tests/parser.test.ts +18 -0
  120. package/tsconfig.json +19 -0
  121. package/vercel.json +7 -0
  122. package/vscode-lny/.vscode/launch.json +13 -0
  123. package/vscode-lny/.vscodeignore +3 -0
  124. package/vscode-lny/README.md +83 -0
  125. package/vscode-lny/language-configuration.json +19 -0
  126. package/vscode-lny/license.txt +21 -0
  127. package/vscode-lny/lny-language-0.1.0.vsix +0 -0
  128. package/vscode-lny/package.json +41 -0
  129. package/vscode-lny/snippets/lny.json +136 -0
  130. package/vscode-lny/syntaxes/lny.tmLanguage.json +85 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Lny: Aktive Datei ausfuehren",
6
+ "type": "node-terminal",
7
+ "request": "launch",
8
+ "command": "npm run start:repl -- \"${relativeFile}\"",
9
+ "cwd": "${workspaceFolder}"
10
+ },
11
+ {
12
+ "name": "Lny: REPL starten",
13
+ "type": "node-terminal",
14
+ "request": "launch",
15
+ "command": "npm run start:repl",
16
+ "cwd": "${workspaceFolder}"
17
+ }
18
+ ]
19
+ }
package/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # Lenny2
2
+
3
+ Letzte Aktualisierung: **01/04/2026**
4
+
5
+ Interpreter-Implementierung fuer **Lny 1.0** in TypeScript mit:
6
+
7
+ - Lexer + Parser + AST + Evaluator
8
+ - Mehrsprachigen Kernbefehlen (de, en, fr, es, it)
9
+ - Mehrsprachigen Weltbefehlen (LennyWorld)
10
+ - REPL fuer die Konsole
11
+ - Browser-UI (index.html)
12
+
13
+ ## Schnellstart
14
+
15
+ ```bash
16
+ npm install
17
+ npm run build
18
+ npm run test
19
+ npm run start:repl
20
+ # optional: direkt ein Skript starten
21
+ npm run start:repl -- examples/00-demo.lny
22
+ ```
23
+
24
+ ## Installation des npm package
25
+
26
+ ## Installation & Ausführung als npm-Package
27
+
28
+ 1. **Installation (empfohlen):**
29
+ ```bash
30
+ npm install -g lny-interpreter
31
+ ```
32
+
33
+ 2. **Starten der Lny-Konsole (REPL):**
34
+ ```bash
35
+ lny
36
+ ```
37
+
38
+ 3. **Direktes Ausführen eines Skripts:**
39
+ ```bash
40
+ lny examples/00-demo.lny
41
+ ```
42
+
43
+ 4. **Ohne Installation (direkt mit npx):**
44
+ ```bash
45
+ npx lny-interpreter
46
+ ```
47
+
48
+ **Hinweis:**
49
+ Die REPL unterstützt Kommandos wie `:help`, `:echo on|off`, `:lang <de|en|fr|es|it>`, `:state`, `:run <skript.lny>`, `:exit`.
50
+
51
+ ## Projektstruktur
52
+
53
+ - `src/lexer/lexer.ts`: Tokenizer mit sprachuebergreifender Keyword-Erkennung
54
+ - `src/parser/parser.ts`: Parser mit Operator-Prioritaet und Klammerausdruecken
55
+ - `src/interpreter/interpreter.ts`: AST-Interpreter inkl. Kontrollfluss
56
+ - `src/world/world.ts`: LennyWorld + Built-ins (`RUN`, `TURN_LEFT`, ...)
57
+ - `src/i18n/i18n.ts`: Uebersetzungen fuer Befehle und Meldungen
58
+ - `src/repl.ts`: Interaktive Konsolen-REPL
59
+ - `examples/*.lny`: Ausfuehrbare Lny-Skriptdateien (Beispiel: `examples/00-demo.lny`)
60
+ - `index.html`: Browser-Oberflaeche
61
+
62
+ ## Spracheigenschaften
63
+
64
+ - Kernbefehle intern auf Englisch modelliert (Token/AST)
65
+ - Eingabe in einer der unterstuetzten Landessprachen
66
+ - Auswertung von verschachtelten Ausdruecken inkl. Klammern
67
+ - Unterstuetzung fuer:
68
+ - `IF/THEN/ELSE/END`
69
+ - `WHILE/END`
70
+ - `FOR/IN/END`
71
+ - `VAR`, `SET` (per `<=`)
72
+ - `LOG`, `PROC`, `REM`
73
+ - Arithmetik, Vergleich, Logik, Potenz, zusammengesetzte Zuweisungen
74
+
75
+ ## Hinweise
76
+
77
+ - Die REPL unterstuetzt zusaetzlich:
78
+ - `:lang <de|en|fr|es|it>`
79
+ - `:state`
80
+ - `:clear`
81
+ - `:echo on|off`
82
+ - `:run <pfad/zum/skript.lny>`
83
+ - `:help`
84
+ - `:exit`
85
+
86
+ - Konfiguration ueber `lny-config.yml`:
87
+ - `language: de`
88
+ - `field_size: 10x10` (Default)
89
+
90
+ - `.lny`-Skripte ausfuehren:
91
+ - Beim Start: `npm run start:repl -- examples/00-demo.lny`
92
+ - In der REPL: `:run examples/00-demo.lny`
93
+
94
+ - Eine ausfuehrliche Dokumentation liegt in `docs/INTERPRETER.md`.
95
+
96
+
Binary file
@@ -0,0 +1,141 @@
1
+ # Kapitel 1: Willkommen in Lennys Welt
2
+
3
+ Stell dir vor, du hast einen Hund.
4
+
5
+ Er heißt Lenny.
6
+
7
+ Lenny ist schlau.
8
+
9
+ Aber er versteht nur ganz bestimmte Befehle.
10
+
11
+ Und genau hier beginnt Programmieren.
12
+
13
+ ##💡 Was ist ein Programm?
14
+
15
+ Ein Programm ist einfach:
16
+
17
+ Eine Liste von Befehlen, die Schritt für Schritt ausgeführt werden.
18
+
19
+ So wie eine Anleitung
20
+
21
+ ```lny
22
+ LAUF
23
+ LAUF
24
+ DREH_LINKS
25
+ LAUF
26
+ ```
27
+
28
+ Was passiert hier?
29
+
30
+ 👉 Lenny läuft zweimal, dreht sich und läuft weiter.
31
+
32
+ Das ist schon ein Programm.
33
+
34
+ ## 🧩 Was ist ein Befehl?
35
+
36
+ Ein Befehl ist eine Anweisung, die Lenny versteht.
37
+
38
+ Zum Beispiel:
39
+
40
+ - LAUF
41
+ - DREH_LINKS
42
+ - NIMM
43
+
44
+ 👉 Jeder Befehl löst eine Aktion aus.
45
+
46
+ 💡 Wichtig:
47
+
48
+ Lenny macht genau das, was du sagst.
49
+ Nicht mehr. Nicht weniger.
50
+
51
+ ## 🧠 Was macht der Interpreter?
52
+
53
+ Du schreibst den Code.
54
+ Aber wer führt ihn aus?
55
+
56
+ 👉 Das macht der Interpreter.
57
+
58
+ Er liest dein Programm Zeile für Zeile und sagt Lenny:
59
+
60
+ Mach jetzt DAS.
61
+
62
+ 💡 Ohne Interpreter passiert… nichts.
63
+
64
+ ## 📏 Wozu gibt es eine Syntax?
65
+
66
+ Syntax ist wie Grammatik.
67
+
68
+ Wenn du sagst:
69
+
70
+ „Lauf links drehen jetzt“
71
+
72
+ … versteht dich niemand.
73
+
74
+ Wenn du sagst:
75
+
76
+ ```lny
77
+ DREH_LINKS
78
+ ```
79
+
80
+ 👉 Alles klar
81
+
82
+ 💡 Computer sind da streng:
83
+
84
+ falsches Wort → Fehler
85
+
86
+ falsche Reihenfolge → Fehler
87
+
88
+ ## 🤖 Warum versteht der Computer nur „komische Befehle“?
89
+
90
+ Computer funktioneieren anders als wir Menschen.
91
+
92
+ Sie verstehen nicht so etwas wie:
93
+
94
+ Lenny, geh mal ein bisschen nach vorne.
95
+
96
+ Sie verstehen nur:
97
+
98
+ ```lny
99
+ LAUF
100
+ ```
101
+
102
+ oder
103
+
104
+ ```lny
105
+ LAUF 50
106
+ ```
107
+ 👉 Klar, eindeutig, keine Missverständnisse.
108
+
109
+ Die Zahl *50* hat irgendetwas zu bedeuten. Was genau, hängt natürlich von der *Syntax* des Befehls ab. Und diese Syntax mussst Du natürlich kennen.
110
+
111
+ ![images/Lenny03.png](images/Lenny03.png)
112
+
113
+ ## 🚀 KI ändert (fast) alles
114
+
115
+ Früher:
116
+ Computer konnten nur exakte Befehle verstehen.
117
+
118
+ Heute mit KI:
119
+
120
+ - Natürliche Sprache wird verstanden
121
+ - Bilder werden erkannt
122
+ - Texte werden so geschrieben, dass sie auch von einem Menschen stammen könnten
123
+
124
+ 👉 Aber:
125
+ Im Hintergrund läuft trotzdem Code.
126
+
127
+ Auch mit KI werden Programmierer gebraucht, wenngleich sich ihre Aufgaben ändern werden 😉
128
+
129
+ Kann KI auch Lny-Programme schreiben?
130
+
131
+ Selbstverständlich.Das wird auch noch ein Thema dieses Buches sein.
132
+
133
+ Dann muss ich doch eigentlich selber nicht mehr programmieren, oder?
134
+
135
+ Das kommt darauf an. Wenn Du es lernen willst, und das willst Du, dann musst Du den Code auch selber schreiben.
136
+
137
+ Später im Berufsleben wird Dir KI aber sehr viel unter die Arme greifen und sehr viel Code für Dich schreiben.
138
+
139
+ Es wird aber trotzdem sehr wichtig, dass Du den Code verstehts, denn die KI für Dich schreib.
140
+
141
+ Bleib also dran. Es wird Dir mit Sicherheit Spaß machen.
@@ -0,0 +1,48 @@
1
+ # 📦 Variablen – das Gedächtnis des Programms
2
+
3
+ Eine Variable ist wie eine Kiste.
4
+
5
+ Du kannst etwas hineinlegen:
6
+
7
+ ```lny
8
+ VAR x
9
+ SETZE x << 5
10
+ ```
11
+
12
+ 👉 Jetzt merkt sich x die Zahl 5.
13
+
14
+ 🔤 Texte sind etwas Besonderes
15
+
16
+ Zahlen sind einfach:
17
+
18
+ ```lny
19
+ SETZE x << 5
20
+ ```
21
+
22
+ Texte brauchen Anführungszeichen:
23
+
24
+ ```lny
25
+ SETZE name << "Lenny rennt"
26
+ ```
27
+
28
+ oder Apostrophe:
29
+
30
+ ```lny
31
+ SETZE name << 'Lenny rennt'
32
+ ```
33
+
34
+ 🔄 Wie bekommt eine Variable ihren Wert?
35
+
36
+ Durch Zuweisung:
37
+
38
+ ```lny
39
+ SETZE x << 10
40
+ ```
41
+
42
+ 👉 Lies das wie:
43
+
44
+ Setze x auf den Wert 10
45
+
46
+ ## Zusammmenfassung
47
+
48
+ Über eine Variable merkt sich ein Programm einen Wert. Allerdings nur solange wie das Programm "läuft". Danach ist alles wieder vergessen. Damit sich ein Programm einen Wert dauerhaft merken kann, muss es ihn auf einem Speichermedium wie einer Festplatte abspeichern. Das ist bei *lny* aber nicht möglich.
@@ -0,0 +1,28 @@
1
+ # ⚖️ Entscheidungen – wahr oder falsch
2
+
3
+ Computer denken nicht wie wir.
4
+
5
+ Sie kennen nur:
6
+
7
+ - WAHR
8
+ - FALSCH
9
+
10
+ Hier ein Beispiel
11
+
12
+ ```lny
13
+ WENN IST_FREI
14
+ DANN
15
+ LAUF
16
+ SONST
17
+ DREH_LINKS
18
+ ENDE
19
+ ```
20
+
21
+ ![images/Lenny02.png](images/Lenny02.png)
22
+
23
+ 👉 Entweder frei oder nicht.
24
+ Es gibt für den Computer kein „vielleicht“.
25
+
26
+ ## Zusammenfassung
27
+
28
+ Eine Entscheidung ist ein Befehl, der entscheidet, ob ein anderer Befehl (meistens aber mehrere Befehle) ausgeführt wird oder nicht. Für Entscheidungen hat *lny* die Befehle *WENN*, *DANN* und *SONST* im Angebot. Und am Ende muss wieder ein *ENDE* stehen, damit der Interpreter weiß, welche Befehle zur Entscheidung gehören.
@@ -0,0 +1,19 @@
1
+ # 🔁 Wiederholungen – die Superkraft des Computers
2
+
3
+ Computer werden nicht müde (höchstens mal etwas langsammer).
4
+
5
+ Das hier:
6
+
7
+ ```lny
8
+ SOLANGE IST_FREI
9
+ LAUF
10
+ ENDE
11
+ ```
12
+
13
+ 👉 läuft so lange…
14
+ bis es nicht mehr frei ist.
15
+
16
+ Ob 3-mal oder 3 Milliarden Mal: egal.
17
+
18
+ Und wenn das Feld nie frei wird? Dann werden die Befehle ewig wiederholt. Eventuell bis zum Tag des jüngsten Gericht.
19
+
@@ -0,0 +1,21 @@
1
+ # 🗂️ Listen – Variablen mit Schubladen
2
+
3
+ Eine Liste ist wie eine Kommode:
4
+
5
+ ```lny
6
+ VAR zahlen
7
+ SETZE zahlen << [1, 2, 3, 4]
8
+ ```
9
+
10
+ 👉 Eine Variable, mehrere Werte.
11
+
12
+ ## 🔁 Listen durchlaufen mit FUER
13
+
14
+ ```lny
15
+ FUER x IN [1, 2, 3]
16
+ SCHREIB x
17
+ ENDE
18
+ ```
19
+
20
+ 👉 Der Computer geht jeden Wert durch.
21
+
@@ -0,0 +1,167 @@
1
+ # 🔧 Kapitel 6 – Prozeduren
2
+
3
+ ## 💡 Warum Prozeduren?
4
+
5
+ Stell dir vor, du musst immer wieder die gleichen Befehle schreiben.
6
+
7
+ 👉 Das ist mühsam und fehleranfällig.
8
+
9
+ Prozeduren helfen dir dabei:
10
+
11
+ - Code wiederzuverwenden
12
+ - Programme übersichtlicher zu machen
13
+ - Fehler zu vermeiden
14
+
15
+ ---
16
+
17
+ ## 🐾 Erste Prozedur
18
+
19
+ ```lny
20
+ PROZEDUR geheDreiSchritte
21
+ LAUF
22
+ LAUF
23
+ LAUF
24
+ ENDE
25
+ ```
26
+
27
+ 👉 Hier definierst du eine neue Prozedur.
28
+
29
+ ---
30
+
31
+ ## ▶️ Prozedur aufrufen
32
+
33
+ ```lny
34
+ geheDreiSchritte
35
+ ```
36
+
37
+ ---
38
+
39
+ ## 🔁 Mehrfach verwenden
40
+
41
+ ```lny
42
+ geheDreiSchritte
43
+ geheDreiSchritte
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 🔄 Kombination
49
+
50
+ ```lny
51
+ PROZEDUR geheEcke
52
+ LAUF
53
+ DREH_LINKS
54
+ ENDE
55
+
56
+ geheEcke
57
+ geheEcke
58
+ geheEcke
59
+ geheEcke
60
+ ```
61
+
62
+ ---
63
+
64
+ # 🧠 Prozeduren mit Parametern
65
+
66
+ ## 💡 Idee
67
+
68
+ Manchmal soll sich eine Prozedur unterschiedlich verhalten.
69
+
70
+ 👉 Dafür gibt es **Parameter**.
71
+
72
+ ---
73
+
74
+ ## 🐾 Beispiel
75
+
76
+ ```lny
77
+ PROZEDUR geheXSchritte(x)
78
+ SOLANGE x > 0
79
+ LAUF
80
+ SETZE x << x - 1
81
+ ENDE
82
+ ENDE
83
+ ```
84
+
85
+ ---
86
+
87
+ ## ▶️ Aufruf
88
+
89
+ ```lny
90
+ geheXSchritte(3)
91
+ geheXSchritte(5)
92
+ ```
93
+
94
+ 👉 Lenny läuft unterschiedlich weit!
95
+
96
+ ---
97
+
98
+ ## 🔄 Noch ein Beispiel
99
+
100
+ ```lny
101
+ PROZEDUR dreheMehrfach(n)
102
+ SOLANGE n > 0
103
+ DREH_LINKS
104
+ SETZE n << n - 1
105
+ ENDE
106
+ ENDE
107
+
108
+ dreheMehrfach(2)
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 🧠 Vorteil
114
+
115
+ - flexibler Code
116
+ - weniger Wiederholungen
117
+ - mächtiger
118
+
119
+ ---
120
+
121
+ ## ⚠️ Typische Fehler
122
+
123
+ - Parameter vergessen
124
+ - falscher Name
125
+ - Wert wird nicht verändert
126
+
127
+ ---
128
+
129
+ ## 🎯 Aufgabe 1
130
+
131
+ Was macht das?
132
+
133
+ ```lny
134
+ PROZEDUR test(x)
135
+ SCHREIB x
136
+ ENDE
137
+
138
+ test(5)
139
+ ```
140
+
141
+ ---
142
+
143
+ ## 🎯 Aufgabe 2
144
+
145
+ Schreibe:
146
+
147
+ 👉 eine Prozedur, die 4 Schritte läuft
148
+
149
+ (aber mit Parameter!)
150
+
151
+ ---
152
+
153
+ ## 🎯 Aufgabe 3 (Bonus)
154
+
155
+ 👉 Prozedur für ein Quadrat mit Seitenlänge x
156
+
157
+ ---
158
+
159
+ ## 🚀 Fazit
160
+
161
+ Mit Parametern kannst du:
162
+
163
+ - Programme verallgemeinern
164
+ - echte Probleme lösen
165
+ - wie ein Profi programmieren
166
+
167
+ 🐶 Lenny wird immer schlauer – dank dir!