From c1c8a0331fcdfca72424d0536ad2ae93aea7a292 Mon Sep 17 00:00:00 2001 From: ttbombadil Date: Tue, 6 Oct 2026 10:09:47 +0200 Subject: [PATCH] feat(tutor): focus first, then free mode; richer instructions and template Examples now use afterFocus: free, specific focus objectives, and a few more questions where useful. README gains an authoring template and rules. Compatible UnoSim commit moves to the afterFocus release. Co-Authored-By: Claude Sonnet 5.5 --- .unosim-compatible-commit | 2 +- README.md | 44 ++++++++++++++++--- examples/IT01/it01-01-variable-speichern.ino | 8 ++-- examples/IT01/it01-02-konstante.ino | 11 +++-- .../IT02/it02-01-arithmetische-operatoren.ino | 11 +++-- .../IT02/it02-02-vergleichsoperatoren.ino | 11 +++-- .../IT02/it02-03-boolesche-operatoren.ino | 8 ++-- examples/IT02/it02-04-bitoperatoren.ino | 14 +++--- examples/IT03/it03-01-serielle-ausgabe.ino | 8 ++-- .../it03-02-serielles-zeichen-einlesen.ino | 8 ++-- examples/IT03/it03-03-digitaler-ausgang.ino | 8 ++-- examples/IT03/it03-04-digitaler-eingang.ino | 10 +++-- examples/IT03/it03-05-millis.ino | 8 ++-- examples/IT04/it04-01-analoger-eingang.ino | 8 ++-- examples/IT04/it04-02-messwert-in-volt.ino | 8 ++-- examples/IT04/it04-03-pwm-ausgang.ino | 8 ++-- examples/IT04/it04-04-map.ino | 8 ++-- examples/IT05/it05-01-if.ino | 8 ++-- examples/IT05/it05-02-if-else.ino | 8 ++-- examples/IT05/it05-03-switch.ino | 10 +++-- examples/IT06/it06-01-while.ino | 8 ++-- examples/IT06/it06-02-do-while.ino | 8 ++-- examples/IT06/it06-03-for.ino | 8 ++-- .../IT06/it06-04-verschachtelte-schleifen.ino | 8 ++-- .../IT07/it07-01-funktion-ohne-rueckgabe.ino | 8 ++-- .../IT07/it07-02-funktion-mit-rueckgabe.ino | 8 ++-- examples/IT07/it07-03-call-by-value.ino | 8 ++-- examples/IT07/it07-04-call-by-reference.ino | 8 ++-- .../IT07/it07-05-eindimensionales-array.ino | 12 ++--- .../IT07/it07-06-zweidimensionales-array.ino | 10 +++-- examples/IT08/it08-01-struct.ino | 8 ++-- examples/IT08/it08-02-array-aus-structs.ino | 8 ++-- .../IT08/it08-03-struct-als-parameter.ino | 8 ++-- examples/IT08/it08-04-funktion-auslagern.ino | 8 ++-- examples/IT11/it11-01-matrix-ausgeben.ino | 10 +++-- .../IT11/it11-02-matrix-transponieren.ino | 8 ++-- examples/IT11/it11-03-matrizen-addieren.ino | 8 ++-- 37 files changed, 205 insertions(+), 148 deletions(-) diff --git a/.unosim-compatible-commit b/.unosim-compatible-commit index 7354309..57bf07a 100644 --- a/.unosim-compatible-commit +++ b/.unosim-compatible-commit @@ -1 +1 @@ -5ce3564b2b770e59f48d8bc3b97097bf1f2ab894 +4f4b7e5bc8b781ad193030861f517092c7125db9 diff --git a/README.md b/README.md index de12972..04f1d88 100644 --- a/README.md +++ b/README.md @@ -49,20 +49,50 @@ The effective strategy precedence is: 2. repository `defaultStrategy`, 3. UnoSim `built-in-default`. -For example: +### Writing Tutor instructions for an Example (template) + +Schema 2 lets a teacher say what the Tutor should ask for this Example. The +Tutor works through the `focus` areas in order and then switches to the free +Tutor (`afterFocus: free`, the default). `afterFocus: topics` continues with +the repository Topics instead. ```cpp /* @unosim-tutor -schemaVersion: 1 -topics: - - variables-and-serial -primaryTopic: variables-and-serial +schemaVersion: 2 learningObjectives: - - Die Studierenden sollen erklären können, welche Rolle die Variable im aktuellen Sketch spielt. - - Sie sollen den Zusammenhang zwischen gespeichertem Wert und serieller Ausgabe verstehen. + - "Die Studierenden sollen … erklären können." +afterFocus: free +focus: + - id: kurzer-bezeichner # lower-case, digits, hyphens + title: "Kurzer Titel" + objective: "Was die Studierenden nach diesem Bereich können sollen." + questions: # 1 to 6, asked in this order + - kind: recall # recall | concept | application | prediction | transfer + text: "Welchen Wert besitzt `variable` nach der Deklaration?" + - kind: concept + text: "Warum …?" + - kind: transfer + text: "Wie würdest du … erweitern?" @end-unosim-tutor */ ``` +Rules and recommendations: + +- 2 to 3 focus areas per Example, 1 to 3 questions per area. Keep functions + and parameters to one or two areas; the Tutor does not drift beyond them. +- Put every code term in backticks. Each backticked term must occur in the + sketch outside comments; the quality gate rejects the rest. Refer to + elements by description (for example "das Element mit dem Index 2") and + not by an expression that is not in the code. +- Never name a type or construct the sketch does not use (`long` for an + `unsigned long` sketch). +- Mix question kinds: start with `recall` or `concept`, then `prediction`, + and end with `application` or `transfer`. +- Questions carry no answers and no hints; the Tutor gives feedback. +- A focus area counts as mastered after one answer rated 3 or better. If the + questions are used up without that, the Tutor also switches to the free + mode. + Tutor repository data is normalized didactic data, never a system prompt. ### Deterministic Tutor quality gate diff --git a/examples/IT01/it01-01-variable-speichern.ino b/examples/IT01/it01-01-variable-speichern.ino index 7e942d0..5215527 100644 --- a/examples/IT01/it01-01-variable-speichern.ino +++ b/examples/IT01/it01-01-variable-speichern.ino @@ -38,19 +38,21 @@ schemaVersion: 2 learningObjectives: - "Die Studierenden sollen erklären können, welche Rolle die Variable im aktuellen Sketch spielt." - "Sie sollen den Zusammenhang zwischen gespeichertem Wert und serieller Ausgabe verstehen." -exclusive: true +afterFocus: free focus: - id: wert-und-zuweisung title: "Wert und Zuweisung" - objective: "Die Studierenden sollen den Aspekt \"Wert und Zuweisung\" erklären können." + objective: "Erklären, welchen Wert die Variable nach Deklaration und nach einer neuen Zuweisung besitzt und was mit dem alten Wert geschieht." questions: - kind: recall text: "Welchen Wert besitzt `anzahlTeile` direkt nach der Deklaration?" - kind: prediction text: "Was geschieht mit dem alten Wert von `anzahlTeile`, wenn `anzahlTeile = 5` ausgeführt wird?" + - kind: application + text: "Wie viele Werte kann `anzahlTeile` zu einem Zeitpunkt gleichzeitig speichern?" - id: sichtbare-ausgabe title: "Sichtbare Ausgabe" - objective: "Die Studierenden sollen den Aspekt \"Sichtbare Ausgabe\" erklären können." + objective: "Begründen, warum die Ausgaben genau so und nur einmal erscheinen, und eine Erweiterung planen." questions: - kind: concept text: "Warum erscheint jede Ausgabe von `Serial.println` nur einmal?" diff --git a/examples/IT01/it01-02-konstante.ino b/examples/IT01/it01-02-konstante.ino index 8898137..4b4d238 100644 --- a/examples/IT01/it01-02-konstante.ino +++ b/examples/IT01/it01-02-konstante.ino @@ -34,12 +34,13 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einen Wert mit const als Konstante deklarieren." -exclusive: true + - "Die Studierenden sollen eine Konstante von einer Variablen unterscheiden können." + - "Sie sollen erklären können, warum der Compiler eine nachträgliche Änderung ablehnt." +afterFocus: free focus: - id: konstante-oder-variable title: "Konstante oder Variable" - objective: "Die Studierenden sollen den Aspekt \"Konstante oder Variable\" erklären können." + objective: "Den Unterschied zwischen einer Konstante und einer Variablen erklären und die Folge einer Änderung vorhersagen." questions: - kind: concept text: "Wodurch unterscheidet sich `MAXIMALE_ANZAHL` von einer gewöhnlichen Variablen?" @@ -47,10 +48,12 @@ focus: text: "Was würde der Compiler melden, wenn man später versucht, `MAXIMALE_ANZAHL` einen neuen Wert zuzuweisen, und warum?" - id: const-und-namen title: "const und Namenswahl" - objective: "Die Studierenden sollen den Aspekt \"const und Namenswahl\" erklären können." + objective: "Die Rolle von `const` und die Namenskonvention für Konstanten begründen." questions: - kind: concept text: "Welche Aufgabe hat das Schlüsselwort `const` in der Deklaration?" - kind: concept text: "Warum ist der Name `MAXIMALE_ANZAHL` hier großgeschrieben?" + - kind: transfer + text: "Für welchen weiteren Wert in einem Sketch wäre eine Konstante sinnvoll?" @end-unosim-tutor */ diff --git a/examples/IT02/it02-01-arithmetische-operatoren.ino b/examples/IT02/it02-01-arithmetische-operatoren.ino index 8080632..7b2da4b 100644 --- a/examples/IT02/it02-01-arithmetische-operatoren.ino +++ b/examples/IT02/it02-01-arithmetische-operatoren.ino @@ -43,20 +43,23 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Die Operatoren +, -, *, / und % anwenden." -exclusive: true + - "Die Studierenden sollen die Operatoren +, -, *, / und % anwenden können." + - "Sie sollen das Verhalten der Ganzzahldivision erklären können." +afterFocus: free focus: - id: ganzzahldivision title: "Ganzzahldivision" - objective: "Die Studierenden sollen den Aspekt \"Ganzzahldivision\" erklären können." + objective: "Erklären, warum die Division zweier `int`-Werte ein ganzzahliges Ergebnis liefert." questions: - kind: concept text: "Warum liefert `a / b` bei Variablen vom Typ `int` ein ganzzahliges Ergebnis?" - kind: prediction text: "Welches Ergebnis erwartest du für `a / b`, wenn `a` den Wert 13 und `b` den Wert 5 hat?" + - kind: transfer + text: "Was müsstest du an den Deklarationen ändern, um ein Ergebnis mit Nachkommastellen zu erhalten?" - id: modulo title: "Rest einer Division" - objective: "Die Studierenden sollen den Aspekt \"Rest einer Division\" erklären können." + objective: "Die Bedeutung des Rests erklären und einen Einsatzzweck nennen." questions: - kind: concept text: "Welche Bedeutung hat das Ergebnis von `a % b`?" diff --git a/examples/IT02/it02-02-vergleichsoperatoren.ino b/examples/IT02/it02-02-vergleichsoperatoren.ino index 27bb8bf..d9502d4 100644 --- a/examples/IT02/it02-02-vergleichsoperatoren.ino +++ b/examples/IT02/it02-02-vergleichsoperatoren.ino @@ -41,12 +41,13 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Vergleichsoperatoren anwenden und ihr boolesches Ergebnis beobachten." -exclusive: true + - "Die Studierenden sollen Vergleichsoperatoren anwenden und ihr Ergebnis deuten können." + - "Sie sollen Zuweisung und Vergleich unterscheiden können." +afterFocus: free focus: - id: vergleichsergebnis title: "Ergebnis eines Vergleichs" - objective: "Die Studierenden sollen den Aspekt \"Ergebnis eines Vergleichs\" erklären können." + objective: "Das Ergebnis mehrerer Vergleiche bestimmen und die Darstellung als 1 oder 0 erklären." questions: - kind: prediction text: "Welche der Vergleiche `a == b`, `a != b`, `a < b` und `a >= b` sind mit den aktuellen Werten wahr?" @@ -54,10 +55,12 @@ focus: text: "Wie werden ein wahres und ein falsches Ergebnis in der Ausgabe dargestellt?" - id: zuweisung-oder-vergleich title: "Zuweisung oder Vergleich" - objective: "Die Studierenden sollen den Aspekt \"Zuweisung oder Vergleich\" erklären können." + objective: "Den Unterschied zwischen `=` und `==` erklären und den Ergebnistyp eines Vergleichs nennen." questions: - kind: concept text: "Was ist der Unterschied zwischen `=` und `==`?" - kind: concept text: "Welchen Datentyp hat das Ergebnis eines Vergleichs?" + - kind: prediction + text: "Was würde sich ändern, wenn `b` den Wert 7 hätte?" @end-unosim-tutor */ diff --git a/examples/IT02/it02-03-boolesche-operatoren.ino b/examples/IT02/it02-03-boolesche-operatoren.ino index 53336b9..617c46e 100644 --- a/examples/IT02/it02-03-boolesche-operatoren.ino +++ b/examples/IT02/it02-03-boolesche-operatoren.ino @@ -39,12 +39,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Die Operatoren &&, || und ! auf Wahrheitswerte anwenden." -exclusive: true + - "Die Studierenden sollen UND, ODER und NICHT auf Wahrheitswerte anwenden können." +afterFocus: free focus: - id: verknuepfungen title: "UND und ODER" - objective: "Die Studierenden sollen den Aspekt \"UND und ODER\" erklären können." + objective: "Die Ergebnisse von UND und ODER bei gegebenen Wahrheitswerten bestimmen und begründen." questions: - kind: concept text: "Wann ergibt `schalter1 && schalter2` den Wert `true`?" @@ -52,7 +52,7 @@ focus: text: "Welche Ausgabe erwartest du für `schalter1 || schalter2` mit den aktuellen Werten?" - id: negation title: "Negation" - objective: "Die Studierenden sollen den Aspekt \"Negation\" erklären können." + objective: "Die Wirkung von `!` erklären und eine eigene Verknüpfung formulieren." questions: - kind: concept text: "Welche Wirkung hat der Operator `!` auf `schalter1`?" diff --git a/examples/IT02/it02-04-bitoperatoren.ino b/examples/IT02/it02-04-bitoperatoren.ino index 4e799ea..fca577f 100644 --- a/examples/IT02/it02-04-bitoperatoren.ino +++ b/examples/IT02/it02-04-bitoperatoren.ino @@ -40,23 +40,25 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine Bitmaske mit dem bitweisen UND-Operator anwenden." -exclusive: true + - "Die Studierenden sollen eine Bitmaske mit dem bitweisen UND anwenden können." +afterFocus: free focus: - id: bitmaske title: "Bitmaske" - objective: "Die Studierenden sollen den Aspekt \"Bitmaske\" erklären können." + objective: "Erklären, wie eine Maske einzelne Bits herausfiltert, und das Ergebnis vorhersagen." questions: - kind: concept text: "Warum bleibt bei `wert & MASKE_BIT_2` nur ein gesetztes Bit erhalten?" - kind: prediction text: "Welches Ergebnis erwartest du für `wert & MASKE_BIT_2`, wenn Bit 2 in `wert` nicht gesetzt wäre?" - - id: bitweise-oder-logisch - title: "Bitweise oder logisch" - objective: "Die Studierenden sollen den Aspekt \"Bitweise oder logisch\" erklären können." + - id: darstellung-und-abgrenzung + title: "Darstellung und Abgrenzung" + objective: "Die Binärausgabe deuten und bitweise von logischen Operatoren unterscheiden." questions: - kind: concept text: "Welche Rolle spielt `BIN` in `Serial.println(wert, BIN)`?" - kind: concept text: "Worin unterscheidet sich der bitweise Operator `&` vom logischen UND mit zwei Und-Zeichen?" + - kind: transfer + text: "Wie würdest du prüfen, ob Bit 3 in `wert` gesetzt ist?" @end-unosim-tutor */ diff --git a/examples/IT03/it03-01-serielle-ausgabe.ino b/examples/IT03/it03-01-serielle-ausgabe.ino index 8e2812b..27e80a8 100644 --- a/examples/IT03/it03-01-serielle-ausgabe.ino +++ b/examples/IT03/it03-01-serielle-ausgabe.ino @@ -33,12 +33,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Die serielle Verbindung starten und Text mit print() und println() ausgeben." -exclusive: true + - "Die Studierenden sollen die serielle Verbindung starten und Text ausgeben können." +afterFocus: free focus: - id: print-und-println title: "print und println" - objective: "Die Studierenden sollen den Aspekt \"print und println\" erklären können." + objective: "Den Unterschied zwischen `print` und `println` erklären und die Zeilenzahl der Ausgabe bestimmen." questions: - kind: concept text: "Was unterscheidet `Serial.print` von `Serial.println`?" @@ -46,7 +46,7 @@ focus: text: "Wie viele Zeilen erscheinen im Monitor, und woran erkennst du das im Code?" - id: initialisierung title: "Serielle Verbindung starten" - objective: "Die Studierenden sollen den Aspekt \"Serielle Verbindung starten\" erklären können." + objective: "Begründen, warum die Verbindung vor der ersten Ausgabe gestartet wird und warum der Text nur einmal erscheint." questions: - kind: concept text: "Warum muss `Serial.begin` vor der ersten Ausgabe stehen?" diff --git a/examples/IT03/it03-02-serielles-zeichen-einlesen.ino b/examples/IT03/it03-02-serielles-zeichen-einlesen.ino index defd9b5..e055fbc 100644 --- a/examples/IT03/it03-02-serielles-zeichen-einlesen.ino +++ b/examples/IT03/it03-02-serielles-zeichen-einlesen.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit Serial.available() und Serial.read() ein einzelnes Zeichen empfangen." -exclusive: true + - "Die Studierenden sollen ein einzelnes Zeichen seriell einlesen und ausgeben können." +afterFocus: free focus: - id: zeichen-empfangen title: "Zeichen empfangen" - objective: "Die Studierenden sollen den Aspekt \"Zeichen empfangen\" erklären können." + objective: "Erklären, warum vor dem Lesen geprüft wird, ob ein Zeichen vorliegt, und was `loop` in der Zwischenzeit tut." questions: - kind: concept text: "Warum wird `Serial.available` vor `Serial.read` geprüft?" @@ -48,7 +48,7 @@ focus: text: "Was geschieht in `loop`, solange kein Zeichen gesendet wurde?" - id: datentyp-char title: "Datentyp char" - objective: "Die Studierenden sollen den Aspekt \"Datentyp char\" erklären können." + objective: "Die Rolle von `char` erklären und die Folge eines anderen Datentyps vorhersagen." questions: - kind: concept text: "Welche Rolle spielt der Datentyp `char` für die Variable `zeichen`?" diff --git a/examples/IT03/it03-03-digitaler-ausgang.ino b/examples/IT03/it03-03-digitaler-ausgang.ino index 2a313f7..3465aed 100644 --- a/examples/IT03/it03-03-digitaler-ausgang.ino +++ b/examples/IT03/it03-03-digitaler-ausgang.ino @@ -34,19 +34,21 @@ schemaVersion: 2 learningObjectives: - "Die Studierenden sollen erklären können, wie ein digitaler Ausgang im aktuellen Sketch gesetzt wird." - "Sie sollen den Zusammenhang zwischen Ausgangszustand und beobachtbarer Wirkung beschreiben können." -exclusive: true +afterFocus: free focus: - id: pin-konfigurieren title: "Pin konfigurieren" - objective: "Die Studierenden sollen den Aspekt \"Pin konfigurieren\" erklären können." + objective: "Erklären, wie ein Pin als Ausgang konfiguriert und auf einen Zustand gesetzt wird." questions: - kind: concept text: "Welche Aufgabe hat `pinMode(PIN_LED, OUTPUT)`?" - kind: concept text: "Welche elektrische Bedeutung hat `HIGH` an diesem Pin?" + - kind: prediction + text: "Was würdest du im Simulator beobachten, wenn dort stattdessen der niedrige Pegel gesetzt würde?" - id: programmstruktur title: "Programmstruktur" - objective: "Die Studierenden sollen den Aspekt \"Programmstruktur\" erklären können." + objective: "Begründen, warum `setup` genügt, und eine Erweiterung entwerfen." questions: - kind: concept text: "Warum reicht für dieses Beispiel die Funktion `setup` aus?" diff --git a/examples/IT03/it03-04-digitaler-eingang.ino b/examples/IT03/it03-04-digitaler-eingang.ino index 6baab3e..e0d4efc 100644 --- a/examples/IT03/it03-04-digitaler-eingang.ino +++ b/examples/IT03/it03-04-digitaler-eingang.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einen Eingang mit internem Pullup-Widerstand konfigurieren und lesen." -exclusive: true + - "Die Studierenden sollen einen Eingang mit internem Pullup-Widerstand lesen können." +afterFocus: free focus: - id: eingang-lesen title: "Eingang lesen" - objective: "Die Studierenden sollen den Aspekt \"Eingang lesen\" erklären können." + objective: "Die möglichen Werte von `digitalRead` nennen und den Zweck des Pullups erklären." questions: - kind: recall text: "Welche Werte kann `digitalRead` liefern?" @@ -48,10 +48,12 @@ focus: text: "Welchen Zweck hat `INPUT_PULLUP` für den Pin `PIN_TASTER`?" - id: taster-logik title: "Taster-Logik" - objective: "Die Studierenden sollen den Aspekt \"Taster-Logik\" erklären können." + objective: "Den ausgegebenen Wert bei gedrücktem Taster vorhersagen und die Rolle der Wartezeit erklären." questions: - kind: prediction text: "Welcher Wert wird ausgegeben, solange der Taster gedrückt ist, und warum?" - kind: concept text: "Warum steht in `loop` der Aufruf `delay(500)`?" + - kind: transfer + text: "Wie würdest du eine Meldung nur dann ausgeben, wenn der Taster gedrückt ist?" @end-unosim-tutor */ diff --git a/examples/IT03/it03-05-millis.ino b/examples/IT03/it03-05-millis.ino index ba44b7c..688455b 100644 --- a/examples/IT03/it03-05-millis.ino +++ b/examples/IT03/it03-05-millis.ino @@ -34,11 +34,11 @@ schemaVersion: 2 learningObjectives: - "Die Studierenden sollen erklären können, warum millis() einen Zeitwert liefert." - "Sie sollen den Zeitwert als Grundlage für einen wiederkehrenden Ablauf einordnen können." -exclusive: true +afterFocus: free focus: - id: zeitwert title: "Der Zeitwert" - objective: "Die Studierenden sollen den Aspekt \"Der Zeitwert\" erklären können." + objective: "Die Einheit von `millis()` nennen und das Wachstum des Werts über die Schleifendurchläufe erklären." questions: - kind: concept text: "In welcher Einheit liefert `millis()` die Zeit?" @@ -46,10 +46,12 @@ focus: text: "Wie verändert sich der ausgegebene Wert von einem Schleifendurchlauf zum nächsten?" - id: datentyp title: "Der Datentyp" - objective: "Die Studierenden sollen den Aspekt \"Der Datentyp\" erklären können." + objective: "Begründen, warum ein vorzeichenloser langer Ganzzahltyp für Zeitwerte passt, und das Verhalten über Durchläufe hinweg erklären." questions: - kind: concept text: "Warum eignet sich `unsigned long` für `zeitSeitStart`?" - kind: concept text: "Wird der Zeitwert durch einen erneuten Durchlauf von `loop` zurückgesetzt?" + - kind: transfer + text: "Wie könntest du mit zwei `millis()`-Werten messen, wie lange etwas gedauert hat?" @end-unosim-tutor */ diff --git a/examples/IT04/it04-01-analoger-eingang.ino b/examples/IT04/it04-01-analoger-eingang.ino index 5313cd2..469904b 100644 --- a/examples/IT04/it04-01-analoger-eingang.ino +++ b/examples/IT04/it04-01-analoger-eingang.ino @@ -34,12 +34,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einen Messwert mit analogRead() erfassen." -exclusive: true + - "Die Studierenden sollen einen analogen Messwert einlesen und seinen Wertebereich erklären können." +afterFocus: free focus: - id: wertebereich title: "Wertebereich" - objective: "Die Studierenden sollen den Aspekt \"Wertebereich\" erklären können." + objective: "Den Wertebereich von `analogRead` nennen und aus der Auflösung begründen." questions: - kind: recall text: "Welchen Wertebereich liefert `analogRead` beim Arduino Uno?" @@ -47,7 +47,7 @@ focus: text: "Warum sind für diesen Bereich 10 Bit erforderlich?" - id: pin-und-messwert title: "Pin und Messwert" - objective: "Die Studierenden sollen den Aspekt \"Pin und Messwert\" erklären können." + objective: "Einordnen, wie ein Analogeingang eingerichtet wird, und einen Messwert abschätzen." questions: - kind: concept text: "Muss ein analoger Eingang wie `PIN_SENSOR` mit pinMode() eingerichtet werden?" diff --git a/examples/IT04/it04-02-messwert-in-volt.ino b/examples/IT04/it04-02-messwert-in-volt.ino index 9eef407..9287b7a 100644 --- a/examples/IT04/it04-02-messwert-in-volt.ino +++ b/examples/IT04/it04-02-messwert-in-volt.ino @@ -40,12 +40,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Den digitalisierten Messwert eines Analogeingangs in eine Spannung umrechnen." -exclusive: true + - "Die Studierenden sollen einen Rohwert in eine Spannung umrechnen können." +afterFocus: free focus: - id: umrechnung title: "Umrechnung in Volt" - objective: "Die Studierenden sollen den Aspekt \"Umrechnung in Volt\" erklären können." + objective: "Die Spannung zu einem Rohwert abschätzen und die Rolle der Referenzspannung erklären." questions: - kind: prediction text: "Welche Spannung gehört ungefähr zum Messwert 512?" @@ -53,7 +53,7 @@ focus: text: "Welche Bedeutung hat `REFERENZSPANNUNG` in der Rechnung?" - id: datentyp-float title: "Gleitkommazahlen" - objective: "Die Studierenden sollen den Aspekt \"Gleitkommazahlen\" erklären können." + objective: "Begründen, warum `float` nötig ist, und die Folge einer Ganzzahlrechnung vorhersagen." questions: - kind: concept text: "Warum wird für `spannung` der Datentyp `float` verwendet?" diff --git a/examples/IT04/it04-03-pwm-ausgang.ino b/examples/IT04/it04-03-pwm-ausgang.ino index 4499f06..326a99c 100644 --- a/examples/IT04/it04-03-pwm-ausgang.ino +++ b/examples/IT04/it04-03-pwm-ausgang.ino @@ -39,12 +39,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit analogWrite() unterschiedliche PWM-Tastgrade einstellen." -exclusive: true + - "Die Studierenden sollen mit analogWrite() PWM-Tastgrade einstellen können." +afterFocus: free focus: - id: tastgrad title: "Wertebereich und Tastgrad" - objective: "Die Studierenden sollen den Aspekt \"Wertebereich und Tastgrad\" erklären können." + objective: "Den Wertebereich von `analogWrite` nennen und Werte einem Tastgrad zuordnen." questions: - kind: recall text: "Welchen Wertebereich erwartet `analogWrite`?" @@ -52,7 +52,7 @@ focus: text: "Welchem Tastgrad entspricht ungefähr der Wert `128`?" - id: pwm-pins title: "PWM-Pins" - objective: "Die Studierenden sollen den Aspekt \"PWM-Pins\" erklären können." + objective: "Erklären, warum nicht jeder Pin PWM kann, und die Wirkung unterschiedlicher Werte beschreiben." questions: - kind: concept text: "Warum ist nicht jeder digitale Pin für PWM geeignet?" diff --git a/examples/IT04/it04-04-map.ino b/examples/IT04/it04-04-map.ino index 89d2de6..04ddd07 100644 --- a/examples/IT04/it04-04-map.ino +++ b/examples/IT04/it04-04-map.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit map() die relative Lage eines Wertes auf einen neuen Wertebereich uebertragen." -exclusive: true + - "Die Studierenden sollen map() zur Umrechnung zwischen Wertebereichen anwenden können." +afterFocus: free focus: - id: bereichsgrenzen title: "Bereichsgrenzen" - objective: "Die Studierenden sollen den Aspekt \"Bereichsgrenzen\" erklären können." + objective: "Die vier Bereichsgrenzen deuten und das gerundete Ergebnis erklären." questions: - kind: concept text: "Welche Bedeutung haben die vier Bereichsgrenzen im Aufruf von `map`?" @@ -48,7 +48,7 @@ focus: text: "Warum ist das Ergebnis für 512 nicht exakt 127,5?" - id: datentyp-und-grenzen title: "Datentyp und Grenzen" - objective: "Die Studierenden sollen den Aspekt \"Datentyp und Grenzen\" erklären können." + objective: "Die Rolle des Ergebnistyps erklären und das Verhalten außerhalb des Bereichs vorhersagen." questions: - kind: concept text: "Welche Rolle spielt der Typ `long` für `ausgangswert`?" diff --git a/examples/IT05/it05-01-if.ino b/examples/IT05/it05-01-if.ino index 8f84147..9dfdf28 100644 --- a/examples/IT05/it05-01-if.ino +++ b/examples/IT05/it05-01-if.ino @@ -36,12 +36,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit if einen Programmblock nur bei einer wahren Bedingung ausfuehren." -exclusive: true + - "Die Studierenden sollen mit if einen Block bedingt ausführen können." +afterFocus: free focus: - id: bedingung title: "Die Bedingung" - objective: "Die Studierenden sollen den Aspekt \"Die Bedingung\" erklären können." + objective: "Den Wahrheitswert der Bedingung bestimmen und das Verhalten bei falscher Bedingung beschreiben." questions: - kind: prediction text: "Welchen Wahrheitswert hat `messwert > GRENZWERT` mit den aktuellen Werten?" @@ -49,7 +49,7 @@ focus: text: "Was geschieht, wenn die Bedingung falsch ist?" - id: grenzfall title: "Der Grenzfall" - objective: "Die Studierenden sollen den Aspekt \"Der Grenzfall\" erklären können." + objective: "Den Unterschied zwischen „größer“ und „größer oder gleich“ am Grenzwert erklären." questions: - kind: application text: "Wann unterscheidet sich der Vergleich mit `>` von einem Vergleich mit „größer oder gleich“?" diff --git a/examples/IT05/it05-02-if-else.ino b/examples/IT05/it05-02-if-else.ino index 1085aa3..464d824 100644 --- a/examples/IT05/it05-02-if-else.ino +++ b/examples/IT05/it05-02-if-else.ino @@ -38,12 +38,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit if/else genau einen von zwei Programmzweigen ausfuehren." -exclusive: true + - "Die Studierenden sollen mit if/else genau einen von zwei Zweigen ausführen können." +afterFocus: free focus: - id: zwei-zweige title: "Zwei Zweige" - objective: "Die Studierenden sollen den Aspekt \"Zwei Zweige\" erklären können." + objective: "Erklären, dass genau ein Zweig läuft, und den Grenzfall vorhersagen." questions: - kind: concept text: "Können der `if`-Zweig und der `else`-Zweig in einem Durchlauf beide ausgeführt werden?" @@ -51,7 +51,7 @@ focus: text: "Welcher Zweig wird ausgeführt, wenn `messwert` genau dem Wert von `GRENZWERT` entspricht?" - id: bedingung-formulieren title: "Bedingung formulieren" - objective: "Die Studierenden sollen den Aspekt \"Bedingung formulieren\" erklären können." + objective: "Eine Bedingung für „mindestens“ formulieren." questions: - kind: transfer text: "Wie müsste die Bedingung lauten, damit der Wert mindestens `GRENZWERT` entspricht?" diff --git a/examples/IT05/it05-03-switch.ino b/examples/IT05/it05-03-switch.ino index 58b96f0..5e7a88b 100644 --- a/examples/IT05/it05-03-switch.ino +++ b/examples/IT05/it05-03-switch.ino @@ -43,12 +43,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit switch/case anhand eines Wertes einen Programmzweig auswaehlen." -exclusive: true + - "Die Studierenden sollen mit switch/case anhand eines Wertes einen Zweig auswählen können." +afterFocus: free focus: - id: default-zweig title: "Der default-Zweig" - objective: "Die Studierenden sollen den Aspekt \"Der default-Zweig\" erklären können." + objective: "Erklären, wann `default` greift, und eine Ausgabe vorhersagen." questions: - kind: concept text: "Wann wird der `default`-Zweig ausgeführt?" @@ -56,10 +56,12 @@ focus: text: "Welche Meldung erscheint, wenn `modus` den Wert 7 hat?" - id: break title: "Die Rolle von break" - objective: "Die Studierenden sollen den Aspekt \"Die Rolle von break\" erklären können." + objective: "Die Aufgabe von `break` erklären und das Durchfallen ohne `break` vorhersagen." questions: - kind: concept text: "Welche Aufgabe hat `break` in einem `case`?" - kind: prediction text: "Was geschähe ohne das erste `break` bei `modus` gleich 1?" + - kind: transfer + text: "Wie würdest du einen dritten Modus ergänzen?" @end-unosim-tutor */ diff --git a/examples/IT06/it06-01-while.ino b/examples/IT06/it06-01-while.ino index b7a7e78..d15932e 100644 --- a/examples/IT06/it06-01-while.ino +++ b/examples/IT06/it06-01-while.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einen Anweisungsblock mit while wiederholen, solange eine Bedingung wahr ist." -exclusive: true + - "Die Studierenden sollen eine kopfgesteuerte Schleife mit while schreiben und deuten können." +afterFocus: free focus: - id: bedingungspruefung title: "Bedingungsprüfung" - objective: "Die Studierenden sollen den Aspekt \"Bedingungsprüfung\" erklären können." + objective: "Erklären, wann die Bedingung geprüft wird, und die Zahl der Durchläufe vorhersagen." questions: - kind: concept text: "Wann wird die Bedingung `zaehler < 5` geprüft?" @@ -48,7 +48,7 @@ focus: text: "Wie oft läuft die Schleife, wenn `zaehler` mit dem Wert 5 startet?" - id: zaehler title: "Der Zähler" - objective: "Die Studierenden sollen den Aspekt \"Der Zähler\" erklären können." + objective: "Begründen, warum der Zähler im Block verändert werden muss." questions: - kind: concept text: "Warum muss `zaehler` im Schleifenblock verändert werden?" diff --git a/examples/IT06/it06-02-do-while.ino b/examples/IT06/it06-02-do-while.ino index 3b89be1..ac98046 100644 --- a/examples/IT06/it06-02-do-while.ino +++ b/examples/IT06/it06-02-do-while.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einen Anweisungsblock mit do/while mindestens einmal ausfuehren." -exclusive: true + - "Die Studierenden sollen eine fußgesteuerte Schleife mit do/while deuten können." +afterFocus: free focus: - id: pruefung-am-ende title: "Prüfung am Ende" - objective: "Die Studierenden sollen den Aspekt \"Prüfung am Ende\" erklären können." + objective: "Erklären, wann die Bedingung geprüft wird und wie oft der Block mindestens läuft." questions: - kind: concept text: "Wann wird die Bedingung der `do`/`while`-Schleife geprüft?" @@ -48,7 +48,7 @@ focus: text: "Wie oft wird der Block mindestens ausgeführt?" - id: vergleich-while title: "Vergleich mit while" - objective: "Die Studierenden sollen den Aspekt \"Vergleich mit while\" erklären können." + objective: "Das Verhalten von do/while mit while bei gleichem Startwert vergleichen." questions: - kind: concept text: "Warum entstünde mit einer reinen `while`-Schleife und demselben Startwert keine Ausgabe?" diff --git a/examples/IT06/it06-03-for.ino b/examples/IT06/it06-03-for.ino index ae006f2..4b7fe66 100644 --- a/examples/IT06/it06-03-for.ino +++ b/examples/IT06/it06-03-for.ino @@ -33,12 +33,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine feste Anzahl von Wiederholungen mit for formulieren." -exclusive: true + - "Die Studierenden sollen eine Zählschleife mit for formulieren können." +afterFocus: free focus: - id: schleifenkopf title: "Der Schleifenkopf" - objective: "Die Studierenden sollen den Aspekt \"Der Schleifenkopf\" erklären können." + objective: "Die drei Angaben im Schleifenkopf benennen und die Zahl der Durchläufe bestimmen." questions: - kind: concept text: "Welche drei Angaben stehen im Kopf von `for (byte i = 1; i <= 5; i++)`?" @@ -46,7 +46,7 @@ focus: text: "Wie oft wird der Schleifenblock ausgeführt?" - id: gueltigkeit title: "Gültigkeit und Richtung" - objective: "Die Studierenden sollen den Aspekt \"Gültigkeit und Richtung\" erklären können." + objective: "Den Gültigkeitsbereich der Zählvariablen erklären und die Zählrichtung ändern." questions: - kind: concept text: "Welchen Gültigkeitsbereich hat die Variable `i`?" diff --git a/examples/IT06/it06-04-verschachtelte-schleifen.ino b/examples/IT06/it06-04-verschachtelte-schleifen.ino index 5908e86..b60ed8c 100644 --- a/examples/IT06/it06-04-verschachtelte-schleifen.ino +++ b/examples/IT06/it06-04-verschachtelte-schleifen.ino @@ -36,12 +36,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine innere Schleife fuer jeden Durchlauf einer aeusseren Schleife ausfuehren." -exclusive: true + - "Die Studierenden sollen zwei Schleifen verschachteln können." +afterFocus: free focus: - id: verschachtelung title: "Verschachtelung" - objective: "Die Studierenden sollen den Aspekt \"Verschachtelung\" erklären können." + objective: "Die Gesamtzahl der inneren Durchläufe bestimmen und die Rolle beider Schleifen erklären." questions: - kind: prediction text: "Wie oft wird die innere Schleife insgesamt durchlaufen?" @@ -49,7 +49,7 @@ focus: text: "Welche Schleife bestimmt die Anzahl der Zeilen?" - id: zeilenumbruch title: "Zeilenumbruch" - objective: "Die Studierenden sollen den Aspekt \"Zeilenumbruch\" erklären können." + objective: "Die Stellung des Zeilenumbruchs begründen und das Muster verändern." questions: - kind: concept text: "Warum steht `Serial.println()` außerhalb der inneren Schleife?" diff --git a/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino b/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino index 042ecbe..0742618 100644 --- a/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino +++ b/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino @@ -35,12 +35,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Wiederverwendbare Anweisungen in einer void-Funktion zusammenfassen." -exclusive: true + - "Die Studierenden sollen eine void-Funktion definieren und aufrufen können." +afterFocus: free focus: - id: definition-und-aufruf title: "Definition und Aufruf" - objective: "Die Studierenden sollen den Aspekt \"Definition und Aufruf\" erklären können." + objective: "Definition und Aufruf unterscheiden und erklären, wann der Funktionskörper läuft." questions: - kind: concept text: "Welcher Teil ist die Definition und welcher der Aufruf von `begruessungAusgeben`?" @@ -48,7 +48,7 @@ focus: text: "Wann werden die Anweisungen in der Funktion ausgeführt?" - id: rueckgabetyp title: "Rückgabetyp" - objective: "Die Studierenden sollen den Aspekt \"Rückgabetyp\" erklären können." + objective: "Die Bedeutung von `void` erklären." questions: - kind: concept text: "Welche Bedeutung hat der Rückgabetyp `void`?" diff --git a/examples/IT07/it07-02-funktion-mit-rueckgabe.ino b/examples/IT07/it07-02-funktion-mit-rueckgabe.ino index 6127f1d..4bb4ce3 100644 --- a/examples/IT07/it07-02-funktion-mit-rueckgabe.ino +++ b/examples/IT07/it07-02-funktion-mit-rueckgabe.ino @@ -36,12 +36,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Einer Funktion einen Parameter uebergeben und ihr Ergebnis mit return nutzen." -exclusive: true + - "Die Studierenden sollen Parameter und Rückgabewert einer Funktion unterscheiden können." +afterFocus: free focus: - id: eingabe-und-ergebnis title: "Eingabe und Ergebnis" - objective: "Die Studierenden sollen den Aspekt \"Eingabe und Ergebnis\" erklären können." + objective: "Parameter und Rückgabewert benennen und den Rückgabetyp erklären." questions: - kind: concept text: "Was geht in `quadrat` hinein, und was kommt heraus?" @@ -49,7 +49,7 @@ focus: text: "Welchen Datentyp besitzt der Rückgabewert?" - id: return title: "Die Anweisung return" - objective: "Die Studierenden sollen den Aspekt \"Die Anweisung return\" erklären können." + objective: "Die Wirkung von `return` erklären und ein Ergebnis vorhersagen." questions: - kind: concept text: "Was bewirkt die Anweisung `return`?" diff --git a/examples/IT07/it07-03-call-by-value.ino b/examples/IT07/it07-03-call-by-value.ino index 426ec55..4eeaf1b 100644 --- a/examples/IT07/it07-03-call-by-value.ino +++ b/examples/IT07/it07-03-call-by-value.ino @@ -40,12 +40,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Beobachten, dass Call-by-value in der Funktion mit einer Kopie arbeitet." -exclusive: true + - "Die Studierenden sollen erklären können, dass bei Call-by-value eine Kopie übergeben wird." +afterFocus: free focus: - id: kopie title: "Der Wert wird kopiert" - objective: "Die Studierenden sollen den Aspekt \"Der Wert wird kopiert\" erklären können." + objective: "Erklären, was beim Aufruf kopiert wird und warum das Original unverändert bleibt." questions: - kind: concept text: "Welcher Wert wird beim Aufruf von `erhoehen` kopiert?" @@ -53,7 +53,7 @@ focus: text: "Warum bleibt `zaehler` außerhalb der Funktion unverändert?" - id: gueltigkeit title: "Gültigkeit des Parameters" - objective: "Die Studierenden sollen den Aspekt \"Gültigkeit des Parameters\" erklären können." + objective: "Den Gültigkeitsbereich des Parameters bestimmen." questions: - kind: concept text: "In welchem Bereich ist der Parameter `zahl` gültig?" diff --git a/examples/IT07/it07-04-call-by-reference.ino b/examples/IT07/it07-04-call-by-reference.ino index 8797d62..a172363 100644 --- a/examples/IT07/it07-04-call-by-reference.ino +++ b/examples/IT07/it07-04-call-by-reference.ino @@ -37,12 +37,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine Variable ueber einen Zeiger in einer Funktion veraendern." -exclusive: true + - "Die Studierenden sollen eine Variable über einen Zeiger in einer Funktion verändern können." +afterFocus: free focus: - id: adresse-und-zeiger title: "Adresse und Zeiger" - objective: "Die Studierenden sollen den Aspekt \"Adresse und Zeiger\" erklären können." + objective: "Die Bedeutung von `&` beim Aufruf und `*` in der Funktion erklären." questions: - kind: concept text: "Welche Bedeutung hat `&` beim Aufruf `erhoehen(&zaehler)`?" @@ -50,7 +50,7 @@ focus: text: "Welche Bedeutung hat `*` vor `zahl` in der Funktion?" - id: wirkung title: "Wirkung außerhalb der Funktion" - objective: "Die Studierenden sollen den Aspekt \"Wirkung außerhalb der Funktion\" erklären können." + objective: "Begründen, warum die Änderung erhalten bleibt." questions: - kind: concept text: "Warum bleibt die Änderung nach dem Funktionsaufruf erhalten?" diff --git a/examples/IT07/it07-05-eindimensionales-array.ino b/examples/IT07/it07-05-eindimensionales-array.ino index dc02a0b..65fe72b 100644 --- a/examples/IT07/it07-05-eindimensionales-array.ino +++ b/examples/IT07/it07-05-eindimensionales-array.ino @@ -36,12 +36,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Ein eindimensionales Array deklarieren und ueber seinen Index auslesen." -exclusive: true + - "Die Studierenden sollen ein eindimensionales Array deklarieren und über den Index auslesen können." +afterFocus: free focus: - id: index title: "Der Index" - objective: "Die Studierenden sollen den Aspekt \"Der Index\" erklären können." + objective: "Den Startindex nennen und ein Element über seinen Index bestimmen." questions: - kind: recall text: "Mit welchem Index beginnt das Array `messwerte`?" @@ -49,13 +49,15 @@ focus: text: "Welchen Wert besitzt das Element von `messwerte` mit dem Index 2 zu Beginn?" - id: schleife-und-grenze title: "Schleife und Obergrenze" - objective: "Die Studierenden sollen den Aspekt \"Schleife und Obergrenze\" erklären können." + objective: "Die Schleifenbedingung über das Array begründen." questions: - kind: concept text: "Warum muss die Bedingung `i < ANZAHL_WERTE` lauten und darf nicht „kleiner oder gleich“ sein?" + - kind: prediction + text: "Was geschähe, wenn `ANZAHL_WERTE` größer als die Zahl der gespeicherten Werte wäre?" - id: elementtyp title: "Der Elementtyp" - objective: "Die Studierenden sollen den Aspekt \"Der Elementtyp\" erklären können." + objective: "Die Rolle des Elementtyps erklären." questions: - kind: concept text: "Welche Rolle spielt der Elementtyp `int` des Arrays `messwerte`?" diff --git a/examples/IT07/it07-06-zweidimensionales-array.ino b/examples/IT07/it07-06-zweidimensionales-array.ino index f282d8c..c1525b2 100644 --- a/examples/IT07/it07-06-zweidimensionales-array.ino +++ b/examples/IT07/it07-06-zweidimensionales-array.ino @@ -44,12 +44,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Ein zweidimensionales Array als Tabelle verwenden." -exclusive: true + - "Die Studierenden sollen ein zweidimensionales Array als Tabelle verwenden können." +afterFocus: free focus: - id: zwei-indizes title: "Zwei Indizes" - objective: "Die Studierenden sollen den Aspekt \"Zwei Indizes\" erklären können." + objective: "Die zwei Indizes eines Elements erklären und ein Element bestimmen." questions: - kind: concept text: "Welche zwei Indizes werden für ein Element von `tabelle` benötigt?" @@ -57,8 +57,10 @@ focus: text: "Welchen Wert hat das Element von `tabelle` in der zweiten Zeile und dritten Spalte?" - id: schleifen title: "Die Schleifen" - objective: "Die Studierenden sollen den Aspekt \"Die Schleifen\" erklären können." + objective: "Die Aufgabe beider Schleifen zuordnen." questions: - kind: concept text: "Welche Schleife läuft über die Spalten?" + - kind: transfer + text: "Wie würdest du die Tabelle um eine dritte Zeile erweitern?" @end-unosim-tutor */ diff --git a/examples/IT08/it08-01-struct.ino b/examples/IT08/it08-01-struct.ino index 5798c47..eee0cd4 100644 --- a/examples/IT08/it08-01-struct.ino +++ b/examples/IT08/it08-01-struct.ino @@ -46,12 +46,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Mit struct einen eigenen zusammengesetzten Datentyp definieren." -exclusive: true + - "Die Studierenden sollen mit struct einen zusammengesetzten Datentyp definieren können." +afterFocus: free focus: - id: datentyp-oder-variable title: "Datentyp oder Variable" - objective: "Die Studierenden sollen den Aspekt \"Datentyp oder Variable\" erklären können." + objective: "Zwischen Strukturtyp und Variable unterscheiden und die enthaltenen Datentypen benennen." questions: - kind: concept text: "Ist `Messung` ein Datentyp oder bereits eine Variable?" @@ -59,7 +59,7 @@ focus: text: "Welche Datentypen fasst `Messung` zusammen?" - id: feldzugriff title: "Zugriff auf Felder" - objective: "Die Studierenden sollen den Aspekt \"Zugriff auf Felder\" erklären können." + objective: "Den Punktoperator erklären und den Typ eines Feldes begründen." questions: - kind: concept text: "Welche Aufgabe hat der Punktoperator in `messung.messwert`?" diff --git a/examples/IT08/it08-02-array-aus-structs.ino b/examples/IT08/it08-02-array-aus-structs.ino index 25df5da..7bfa9bd 100644 --- a/examples/IT08/it08-02-array-aus-structs.ino +++ b/examples/IT08/it08-02-array-aus-structs.ino @@ -47,12 +47,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Ein Array verwenden, dessen Elemente Strukturen sind." -exclusive: true + - "Die Studierenden sollen ein Array aus Strukturen verwenden können." +afterFocus: free focus: - id: array-aus-structs title: "Array aus Strukturen" - objective: "Die Studierenden sollen den Aspekt \"Array aus Strukturen\" erklären können." + objective: "Den Typ eines Elements bestimmen und den Zugriff auf ein Feld erklären." questions: - kind: concept text: "Welchen Datentyp besitzt ein einzelnes Element von `messungen`?" @@ -60,7 +60,7 @@ focus: text: "Was bedeutet es, das Feld `messwert` des Elements mit dem Index 1 von `messungen` anzusprechen?" - id: gemischte-typen title: "Gemischte Datentypen" - objective: "Die Studierenden sollen den Aspekt \"Gemischte Datentypen\" erklären können." + objective: "Begründen, warum Felder verschiedene Typen haben dürfen." questions: - kind: concept text: "Warum können die Felder einer `struct` verschiedene Datentypen haben?" diff --git a/examples/IT08/it08-03-struct-als-parameter.ino b/examples/IT08/it08-03-struct-als-parameter.ino index 86c30ed..6f6a937 100644 --- a/examples/IT08/it08-03-struct-als-parameter.ino +++ b/examples/IT08/it08-03-struct-als-parameter.ino @@ -42,12 +42,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine Struktur per Referenz an eine Funktion uebergeben." -exclusive: true + - "Die Studierenden sollen eine Struktur per Zeiger an eine Funktion übergeben können." +afterFocus: free focus: - id: zeiger-uebergabe title: "Übergabe per Zeiger" - objective: "Die Studierenden sollen den Aspekt \"Übergabe per Zeiger\" erklären können." + objective: "Die Rolle von `&` beim Aufruf und `->` in der Funktion erklären." questions: - kind: concept text: "Warum wird beim Aufruf `&messung` verwendet?" @@ -55,7 +55,7 @@ focus: text: "Welche Bedeutung hat der Operator `->`?" - id: kopie-oder-original title: "Kopie oder Original" - objective: "Die Studierenden sollen den Aspekt \"Kopie oder Original\" erklären können." + objective: "Entscheiden, ob Kopie oder Original verändert wird." questions: - kind: concept text: "Wird in `messwertKorrigieren` eine Kopie oder das Original verändert?" diff --git a/examples/IT08/it08-04-funktion-auslagern.ino b/examples/IT08/it08-04-funktion-auslagern.ino index f893c72..7d11342 100644 --- a/examples/IT08/it08-04-funktion-auslagern.ino +++ b/examples/IT08/it08-04-funktion-auslagern.ino @@ -32,12 +32,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Eine eigene Headerdatei mit #include in das Hauptprogramm einbinden." -exclusive: true + - "Die Studierenden sollen eine Funktion in eine Headerdatei auslagern und einbinden können." +afterFocus: free focus: - id: include title: "Die Include-Zeile" - objective: "Die Studierenden sollen den Aspekt \"Die Include-Zeile\" erklären können." + objective: "Die Aufgabe von `#include` erklären und die Implementierung zuordnen." questions: - kind: concept text: "Welche Aufgabe hat die Zeile mit `#include`?" @@ -45,7 +45,7 @@ focus: text: "In welcher Datei ist `addieren` implementiert?" - id: trennung title: "Trennung von Dateien" - objective: "Die Studierenden sollen den Aspekt \"Trennung von Dateien\" erklären können." + objective: "Den Nutzen der Trennung begründen." questions: - kind: concept text: "Welchen Vorteil bietet die Trennung bei größeren Programmen?" diff --git a/examples/IT11/it11-01-matrix-ausgeben.ino b/examples/IT11/it11-01-matrix-ausgeben.ino index b8eda03..b474071 100644 --- a/examples/IT11/it11-01-matrix-ausgeben.ino +++ b/examples/IT11/it11-01-matrix-ausgeben.ino @@ -45,12 +45,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Die Elemente einer 3x3-Matrix zeilen- und spaltenweise ausgeben." -exclusive: true + - "Die Studierenden sollen eine Matrix zeilen- und spaltenweise ausgeben können." +afterFocus: free focus: - id: elementzugriff title: "Elementzugriff" - objective: "Die Studierenden sollen den Aspekt \"Elementzugriff\" erklären können." + objective: "Ein Element über zwei Indizes bestimmen und die Zahl der Schleifen begründen." questions: - kind: prediction text: "Welches Element von `matrix` wird mit den Indizes 1 und 2 angesprochen?" @@ -58,8 +58,10 @@ focus: text: "Warum werden zwei Schleifen benötigt?" - id: ausgabeformat title: "Ausgabeformat" - objective: "Die Studierenden sollen den Aspekt \"Ausgabeformat\" erklären können." + objective: "Die Aufgabe des Tabulators erklären und die Ausgabe verändern." questions: - kind: concept text: "Welche Aufgabe hat das Tabulatorzeichen `\\t`?" + - kind: transfer + text: "Wie würdest du die Matrix transponiert ausgeben?" @end-unosim-tutor */ diff --git a/examples/IT11/it11-02-matrix-transponieren.ino b/examples/IT11/it11-02-matrix-transponieren.ino index bc284e1..10ff4b7 100644 --- a/examples/IT11/it11-02-matrix-transponieren.ino +++ b/examples/IT11/it11-02-matrix-transponieren.ino @@ -51,12 +51,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Beim Transponieren Zeilen- und Spaltenindizes vertauschen." -exclusive: true + - "Die Studierenden sollen eine Matrix transponieren können." +afterFocus: free focus: - id: transponieren title: "Transponieren" - objective: "Die Studierenden sollen den Aspekt \"Transponieren\" erklären können." + objective: "Die vertauschten Indizes und die Hauptdiagonale erklären." questions: - kind: concept text: "Welche beiden Indizes werden beim Transponieren vertauscht?" @@ -64,7 +64,7 @@ focus: text: "Was geschieht mit den Elementen auf der Hauptdiagonalen?" - id: ergebnis title: "Das Ergebnis" - objective: "Die Studierenden sollen den Aspekt \"Das Ergebnis\" erklären können." + objective: "Ein Element der transponierten Matrix vorhersagen." questions: - kind: prediction text: "Welcher Wert steht nach dem Transponieren in `transponiert` an der Position mit den Indizes 1 und 0?" diff --git a/examples/IT11/it11-03-matrizen-addieren.ino b/examples/IT11/it11-03-matrizen-addieren.ino index f1d305b..882a0ca 100644 --- a/examples/IT11/it11-03-matrizen-addieren.ino +++ b/examples/IT11/it11-03-matrizen-addieren.ino @@ -52,12 +52,12 @@ void loop() { /* @unosim-tutor schemaVersion: 2 learningObjectives: - - "Zwei Matrizen elementweise addieren." -exclusive: true + - "Die Studierenden sollen zwei Matrizen elementweise addieren können." +afterFocus: free focus: - id: addition title: "Elementweise Addition" - objective: "Die Studierenden sollen den Aspekt \"Elementweise Addition\" erklären können." + objective: "Erklären, welche Elemente addiert werden und warum gleiche Abmessungen nötig sind." questions: - kind: concept text: "Welche Elemente werden in `summe[zeile][spalte]` miteinander addiert?" @@ -65,7 +65,7 @@ focus: text: "Warum müssen `matrixA` und `matrixB` dieselben Abmessungen besitzen?" - id: ergebnis title: "Das Ergebnis" - objective: "Die Studierenden sollen den Aspekt \"Das Ergebnis\" erklären können." + objective: "Ein Element der Summe vorhersagen." questions: - kind: prediction text: "Welchen Wert hat das Element von `summe` mit den Indizes 2 und 1 im Ausgangsbeispiel?"