From aac49a5f9c0dba8c8b711a7863234fb26e0f6666 Mon Sep 17 00:00:00 2001 From: ttbombadil Date: Mon, 5 Oct 2026 18:34:14 +0200 Subject: [PATCH] feat(tutor): inline teacher focus for all examples Every example now carries schema v2 focus areas with questions derived from its learning questions. All code terms in the questions occur in the sketch, so no question names a type or construct the sketch lacks. Compatible UnoSim commit moves to the inline-focus release. Co-Authored-By: Claude Sonnet 5.5 --- .unosim-compatible-commit | 2 +- examples/IT01/it01-01-variable-speichern.ino | 27 ++++++++++++++---- examples/IT01/it01-02-konstante.ino | 24 ++++++++++++++++ .../IT02/it02-01-arithmetische-operatoren.ino | 24 ++++++++++++++++ .../IT02/it02-02-vergleichsoperatoren.ino | 24 ++++++++++++++++ .../IT02/it02-03-boolesche-operatoren.ino | 24 ++++++++++++++++ examples/IT02/it02-04-bitoperatoren.ino | 24 ++++++++++++++++ examples/IT03/it03-01-serielle-ausgabe.ino | 24 ++++++++++++++++ .../it03-02-serielles-zeichen-einlesen.ino | 24 ++++++++++++++++ examples/IT03/it03-03-digitaler-ausgang.ino | 24 ++++++++++++++-- examples/IT03/it03-04-digitaler-eingang.ino | 24 ++++++++++++++++ examples/IT03/it03-05-millis.ino | 27 ++++++++++++++---- examples/IT04/it04-01-analoger-eingang.ino | 24 ++++++++++++++++ examples/IT04/it04-02-messwert-in-volt.ino | 24 ++++++++++++++++ examples/IT04/it04-03-pwm-ausgang.ino | 24 ++++++++++++++++ examples/IT04/it04-04-map.ino | 24 ++++++++++++++++ examples/IT05/it05-01-if.ino | 24 ++++++++++++++++ examples/IT05/it05-02-if-else.ino | 22 +++++++++++++++ examples/IT05/it05-03-switch.ino | 24 ++++++++++++++++ examples/IT06/it06-01-while.ino | 24 ++++++++++++++++ examples/IT06/it06-02-do-while.ino | 22 +++++++++++++++ examples/IT06/it06-03-for.ino | 24 ++++++++++++++++ .../IT06/it06-04-verschachtelte-schleifen.ino | 24 ++++++++++++++++ .../IT07/it07-01-funktion-ohne-rueckgabe.ino | 22 +++++++++++++++ .../IT07/it07-02-funktion-mit-rueckgabe.ino | 24 ++++++++++++++++ examples/IT07/it07-03-call-by-value.ino | 22 +++++++++++++++ examples/IT07/it07-04-call-by-reference.ino | 22 +++++++++++++++ .../IT07/it07-05-eindimensionales-array.ino | 28 +++++++++++++++++++ .../IT07/it07-06-zweidimensionales-array.ino | 22 +++++++++++++++ examples/IT08/it08-01-struct.ino | 24 ++++++++++++++++ examples/IT08/it08-02-array-aus-structs.ino | 22 +++++++++++++++ .../IT08/it08-03-struct-als-parameter.ino | 22 +++++++++++++++ examples/IT08/it08-04-funktion-auslagern.ino | 22 +++++++++++++++ examples/IT11/it11-01-matrix-ausgeben.ino | 22 +++++++++++++++ .../IT11/it11-02-matrix-transponieren.ino | 22 +++++++++++++++ examples/IT11/it11-03-matrizen-addieren.ino | 22 +++++++++++++++ 36 files changed, 812 insertions(+), 16 deletions(-) diff --git a/.unosim-compatible-commit b/.unosim-compatible-commit index c9cbcf9..7354309 100644 --- a/.unosim-compatible-commit +++ b/.unosim-compatible-commit @@ -1 +1 @@ -5042bd0398271fa4e12f3e7eeb1003a58e382a57 +5ce3564b2b770e59f48d8bc3b97097bf1f2ab894 diff --git a/examples/IT01/it01-01-variable-speichern.ino b/examples/IT01/it01-01-variable-speichern.ino index 960fd83..7e942d0 100644 --- a/examples/IT01/it01-01-variable-speichern.ino +++ b/examples/IT01/it01-01-variable-speichern.ino @@ -34,11 +34,26 @@ void loop() { */ /* @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, welche Rolle die Variable im aktuellen Sketch spielt." + - "Sie sollen den Zusammenhang zwischen gespeichertem Wert und serieller Ausgabe verstehen." +exclusive: true +focus: + - id: wert-und-zuweisung + title: "Wert und Zuweisung" + objective: "Die Studierenden sollen den Aspekt \"Wert und Zuweisung\" erklären können." + 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?" + - id: sichtbare-ausgabe + title: "Sichtbare Ausgabe" + objective: "Die Studierenden sollen den Aspekt \"Sichtbare Ausgabe\" erklären können." + questions: + - kind: concept + text: "Warum erscheint jede Ausgabe von `Serial.println` nur einmal?" + - kind: transfer + text: "Welche weitere Zuweisung und Ausgabe würdest du ergänzen, um einen dritten Wert sichtbar zu machen?" @end-unosim-tutor */ diff --git a/examples/IT01/it01-02-konstante.ino b/examples/IT01/it01-02-konstante.ino index 64a22db..8898137 100644 --- a/examples/IT01/it01-02-konstante.ino +++ b/examples/IT01/it01-02-konstante.ino @@ -30,3 +30,27 @@ void loop() { * 2. Warum meldet der Compiler beim zweiten Experiment einen Fehler? * 3. Warum werden Konstantennamen hier grossgeschrieben? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einen Wert mit const als Konstante deklarieren." +exclusive: true +focus: + - id: konstante-oder-variable + title: "Konstante oder Variable" + objective: "Die Studierenden sollen den Aspekt \"Konstante oder Variable\" erklären können." + questions: + - kind: concept + text: "Wodurch unterscheidet sich `MAXIMALE_ANZAHL` von einer gewöhnlichen Variablen?" + - kind: prediction + 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." + 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?" +@end-unosim-tutor */ diff --git a/examples/IT02/it02-01-arithmetische-operatoren.ino b/examples/IT02/it02-01-arithmetische-operatoren.ino index 0274035..8080632 100644 --- a/examples/IT02/it02-01-arithmetische-operatoren.ino +++ b/examples/IT02/it02-01-arithmetische-operatoren.ino @@ -39,3 +39,27 @@ void loop() { * 2. Welche Bedeutung hat das Ergebnis von 13 % 5? * 3. Bei welchem Experiment darf der Operator % nicht verwendet werden? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Die Operatoren +, -, *, / und % anwenden." +exclusive: true +focus: + - id: ganzzahldivision + title: "Ganzzahldivision" + objective: "Die Studierenden sollen den Aspekt \"Ganzzahldivision\" erklären können." + 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?" + - id: modulo + title: "Rest einer Division" + objective: "Die Studierenden sollen den Aspekt \"Rest einer Division\" erklären können." + questions: + - kind: concept + text: "Welche Bedeutung hat das Ergebnis von `a % b`?" + - kind: application + text: "Wofür könnte man den Rest einer Division in einem Programm nutzen?" +@end-unosim-tutor */ diff --git a/examples/IT02/it02-02-vergleichsoperatoren.ino b/examples/IT02/it02-02-vergleichsoperatoren.ino index 9e1be3e..27bb8bf 100644 --- a/examples/IT02/it02-02-vergleichsoperatoren.ino +++ b/examples/IT02/it02-02-vergleichsoperatoren.ino @@ -37,3 +37,27 @@ void loop() { * 2. Was ist der Unterschied zwischen = und ==? * 3. Welchen Datentyp hat das Ergebnis eines Vergleichs? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Vergleichsoperatoren anwenden und ihr boolesches Ergebnis beobachten." +exclusive: true +focus: + - id: vergleichsergebnis + title: "Ergebnis eines Vergleichs" + objective: "Die Studierenden sollen den Aspekt \"Ergebnis eines Vergleichs\" erklären können." + questions: + - kind: prediction + text: "Welche der Vergleiche `a == b`, `a != b`, `a < b` und `a >= b` sind mit den aktuellen Werten wahr?" + - kind: recall + 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." + questions: + - kind: concept + text: "Was ist der Unterschied zwischen `=` und `==`?" + - kind: concept + text: "Welchen Datentyp hat das Ergebnis eines Vergleichs?" +@end-unosim-tutor */ diff --git a/examples/IT02/it02-03-boolesche-operatoren.ino b/examples/IT02/it02-03-boolesche-operatoren.ino index 76fd5db..53336b9 100644 --- a/examples/IT02/it02-03-boolesche-operatoren.ino +++ b/examples/IT02/it02-03-boolesche-operatoren.ino @@ -35,3 +35,27 @@ void loop() { * 2. Wann ergibt eine ODER-Verknuepfung false? * 3. Welche Wirkung hat der Operator ! auf einen Wahrheitswert? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Die Operatoren &&, || und ! auf Wahrheitswerte anwenden." +exclusive: true +focus: + - id: verknuepfungen + title: "UND und ODER" + objective: "Die Studierenden sollen den Aspekt \"UND und ODER\" erklären können." + questions: + - kind: concept + text: "Wann ergibt `schalter1 && schalter2` den Wert `true`?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Welche Wirkung hat der Operator `!` auf `schalter1`?" + - kind: transfer + text: "Wie würdest du ausdrücken, dass genau einer der beiden Schalter `true` ist?" +@end-unosim-tutor */ diff --git a/examples/IT02/it02-04-bitoperatoren.ino b/examples/IT02/it02-04-bitoperatoren.ino index 1da1ea7..4e799ea 100644 --- a/examples/IT02/it02-04-bitoperatoren.ino +++ b/examples/IT02/it02-04-bitoperatoren.ino @@ -36,3 +36,27 @@ void loop() { * 2. Welchen Dezimalwert hat MASKE_BIT_2? * 3. Worin unterscheiden sich & und &&? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine Bitmaske mit dem bitweisen UND-Operator anwenden." +exclusive: true +focus: + - id: bitmaske + title: "Bitmaske" + objective: "Die Studierenden sollen den Aspekt \"Bitmaske\" erklären können." + 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." + 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?" +@end-unosim-tutor */ diff --git a/examples/IT03/it03-01-serielle-ausgabe.ino b/examples/IT03/it03-01-serielle-ausgabe.ino index a702ccf..8e2812b 100644 --- a/examples/IT03/it03-01-serielle-ausgabe.ino +++ b/examples/IT03/it03-01-serielle-ausgabe.ino @@ -29,3 +29,27 @@ void loop() { * 2. Warum muss Serial.begin() vor der ersten Ausgabe stehen? * 3. Wie oft werden die Texte ausgegeben und warum? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Die serielle Verbindung starten und Text mit print() und println() ausgeben." +exclusive: true +focus: + - id: print-und-println + title: "print und println" + objective: "Die Studierenden sollen den Aspekt \"print und println\" erklären können." + questions: + - kind: concept + text: "Was unterscheidet `Serial.print` von `Serial.println`?" + - kind: application + 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." + questions: + - kind: concept + text: "Warum muss `Serial.begin` vor der ersten Ausgabe stehen?" + - kind: prediction + text: "Wie oft werden die Texte ausgegeben, und warum nicht fortlaufend?" +@end-unosim-tutor */ diff --git a/examples/IT03/it03-02-serielles-zeichen-einlesen.ino b/examples/IT03/it03-02-serielles-zeichen-einlesen.ino index 0757826..defd9b5 100644 --- a/examples/IT03/it03-02-serielles-zeichen-einlesen.ino +++ b/examples/IT03/it03-02-serielles-zeichen-einlesen.ino @@ -31,3 +31,27 @@ void loop() { * 2. Was liefert Serial.read(), wenn kein Zeichen vorhanden ist? * 3. Warum erscheinen bei einer int-Variablen Zahlen statt Zeichen? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit Serial.available() und Serial.read() ein einzelnes Zeichen empfangen." +exclusive: true +focus: + - id: zeichen-empfangen + title: "Zeichen empfangen" + objective: "Die Studierenden sollen den Aspekt \"Zeichen empfangen\" erklären können." + questions: + - kind: concept + text: "Warum wird `Serial.available` vor `Serial.read` geprüft?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Welche Rolle spielt der Datentyp `char` für die Variable `zeichen`?" + - kind: prediction + text: "Was würde sich in der Ausgabe ändern, wenn `zeichen` den Typ `int` hätte?" +@end-unosim-tutor */ diff --git a/examples/IT03/it03-03-digitaler-ausgang.ino b/examples/IT03/it03-03-digitaler-ausgang.ino index 32f2d0e..2a313f7 100644 --- a/examples/IT03/it03-03-digitaler-ausgang.ino +++ b/examples/IT03/it03-03-digitaler-ausgang.ino @@ -30,8 +30,26 @@ void loop() { */ /* @unosim-tutor -schemaVersion: 1 +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. + - "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 +focus: + - id: pin-konfigurieren + title: "Pin konfigurieren" + objective: "Die Studierenden sollen den Aspekt \"Pin konfigurieren\" erklären können." + questions: + - kind: concept + text: "Welche Aufgabe hat `pinMode(PIN_LED, OUTPUT)`?" + - kind: concept + text: "Welche elektrische Bedeutung hat `HIGH` an diesem Pin?" + - id: programmstruktur + title: "Programmstruktur" + objective: "Die Studierenden sollen den Aspekt \"Programmstruktur\" erklären können." + questions: + - kind: concept + text: "Warum reicht für dieses Beispiel die Funktion `setup` aus?" + - kind: transfer + text: "Wie würdest du die LED wieder ausschalten?" @end-unosim-tutor */ diff --git a/examples/IT03/it03-04-digitaler-eingang.ino b/examples/IT03/it03-04-digitaler-eingang.ino index c4d86dd..6baab3e 100644 --- a/examples/IT03/it03-04-digitaler-eingang.ino +++ b/examples/IT03/it03-04-digitaler-eingang.ino @@ -31,3 +31,27 @@ void loop() { * 2. Warum liefert ein gedrueckter Taster bei INPUT_PULLUP normalerweise LOW? * 3. Welchen Zweck hat ein Pullup-Widerstand? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einen Eingang mit internem Pullup-Widerstand konfigurieren und lesen." +exclusive: true +focus: + - id: eingang-lesen + title: "Eingang lesen" + objective: "Die Studierenden sollen den Aspekt \"Eingang lesen\" erklären können." + questions: + - kind: recall + text: "Welche Werte kann `digitalRead` liefern?" + - kind: concept + 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." + 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)`?" +@end-unosim-tutor */ diff --git a/examples/IT03/it03-05-millis.ino b/examples/IT03/it03-05-millis.ino index afd4a8b..ba44b7c 100644 --- a/examples/IT03/it03-05-millis.ino +++ b/examples/IT03/it03-05-millis.ino @@ -30,11 +30,26 @@ void loop() { */ /* @unosim-tutor -schemaVersion: 1 -topics: - - long-values -primaryTopic: long-values +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. + - "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 +focus: + - id: zeitwert + title: "Der Zeitwert" + objective: "Die Studierenden sollen den Aspekt \"Der Zeitwert\" erklären können." + questions: + - kind: concept + text: "In welcher Einheit liefert `millis()` die Zeit?" + - kind: prediction + 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." + 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?" @end-unosim-tutor */ diff --git a/examples/IT04/it04-01-analoger-eingang.ino b/examples/IT04/it04-01-analoger-eingang.ino index ddc9bd6..5313cd2 100644 --- a/examples/IT04/it04-01-analoger-eingang.ino +++ b/examples/IT04/it04-01-analoger-eingang.ino @@ -30,3 +30,27 @@ void loop() { * 2. Warum sind fuer diesen Bereich 10 Bit erforderlich? * 3. Muss ein analoger Eingang mit pinMode() eingerichtet werden? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einen Messwert mit analogRead() erfassen." +exclusive: true +focus: + - id: wertebereich + title: "Wertebereich" + objective: "Die Studierenden sollen den Aspekt \"Wertebereich\" erklären können." + questions: + - kind: recall + text: "Welchen Wertebereich liefert `analogRead` beim Arduino Uno?" + - kind: concept + 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." + questions: + - kind: concept + text: "Muss ein analoger Eingang wie `PIN_SENSOR` mit pinMode() eingerichtet werden?" + - kind: application + text: "Welchen Wert erwartest du für `messwert`, wenn A0 auf halber Referenzspannung liegt?" +@end-unosim-tutor */ diff --git a/examples/IT04/it04-02-messwert-in-volt.ino b/examples/IT04/it04-02-messwert-in-volt.ino index a51239b..9eef407 100644 --- a/examples/IT04/it04-02-messwert-in-volt.ino +++ b/examples/IT04/it04-02-messwert-in-volt.ino @@ -36,3 +36,27 @@ void loop() { * 2. Warum wird fuer spannung der Datentyp float verwendet? * 3. Welche Bedeutung hat die Referenzspannung in der Rechnung? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Den digitalisierten Messwert eines Analogeingangs in eine Spannung umrechnen." +exclusive: true +focus: + - id: umrechnung + title: "Umrechnung in Volt" + objective: "Die Studierenden sollen den Aspekt \"Umrechnung in Volt\" erklären können." + questions: + - kind: prediction + text: "Welche Spannung gehört ungefähr zum Messwert 512?" + - kind: concept + text: "Welche Bedeutung hat `REFERENZSPANNUNG` in der Rechnung?" + - id: datentyp-float + title: "Gleitkommazahlen" + objective: "Die Studierenden sollen den Aspekt \"Gleitkommazahlen\" erklären können." + questions: + - kind: concept + text: "Warum wird für `spannung` der Datentyp `float` verwendet?" + - kind: prediction + text: "Was ändert sich im Ergebnis, wenn bei `1024.0` der Dezimalpunkt entfällt?" +@end-unosim-tutor */ diff --git a/examples/IT04/it04-03-pwm-ausgang.ino b/examples/IT04/it04-03-pwm-ausgang.ino index 48930b3..4499f06 100644 --- a/examples/IT04/it04-03-pwm-ausgang.ino +++ b/examples/IT04/it04-03-pwm-ausgang.ino @@ -35,3 +35,27 @@ void loop() { * 2. Welchem Tastgrad entspricht ungefaehr der Wert 128? * 3. Warum ist nicht jeder digitale Pin fuer PWM geeignet? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit analogWrite() unterschiedliche PWM-Tastgrade einstellen." +exclusive: true +focus: + - id: tastgrad + title: "Wertebereich und Tastgrad" + objective: "Die Studierenden sollen den Aspekt \"Wertebereich und Tastgrad\" erklären können." + questions: + - kind: recall + text: "Welchen Wertebereich erwartet `analogWrite`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Warum ist nicht jeder digitale Pin für PWM geeignet?" + - kind: prediction + text: "Wie unterscheidet sich die Helligkeit einer LED bei `64` und bei `255`?" +@end-unosim-tutor */ diff --git a/examples/IT04/it04-04-map.ino b/examples/IT04/it04-04-map.ino index 9f7e5f9..89d2de6 100644 --- a/examples/IT04/it04-04-map.ino +++ b/examples/IT04/it04-04-map.ino @@ -31,3 +31,27 @@ void loop() { * 2. Warum ist das Ergebnis fuer 512 nicht exakt 127,5? * 3. Begrenzt map() einen Wert automatisch auf den Zielbereich? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit map() die relative Lage eines Wertes auf einen neuen Wertebereich uebertragen." +exclusive: true +focus: + - id: bereichsgrenzen + title: "Bereichsgrenzen" + objective: "Die Studierenden sollen den Aspekt \"Bereichsgrenzen\" erklären können." + questions: + - kind: concept + text: "Welche Bedeutung haben die vier Bereichsgrenzen im Aufruf von `map`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Welche Rolle spielt der Typ `long` für `ausgangswert`?" + - kind: prediction + text: "Begrenzt `map` einen Eingangswert wie 1200 automatisch auf den Zielbereich?" +@end-unosim-tutor */ diff --git a/examples/IT05/it05-01-if.ino b/examples/IT05/it05-01-if.ino index 5bcc912..8f84147 100644 --- a/examples/IT05/it05-01-if.ino +++ b/examples/IT05/it05-01-if.ino @@ -32,3 +32,27 @@ void loop() { * 2. Was geschieht bei einer falschen Bedingung? * 3. Wann unterscheiden sich > und >=? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit if einen Programmblock nur bei einer wahren Bedingung ausfuehren." +exclusive: true +focus: + - id: bedingung + title: "Die Bedingung" + objective: "Die Studierenden sollen den Aspekt \"Die Bedingung\" erklären können." + questions: + - kind: prediction + text: "Welchen Wahrheitswert hat `messwert > GRENZWERT` mit den aktuellen Werten?" + - kind: prediction + 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." + questions: + - kind: application + text: "Wann unterscheidet sich der Vergleich mit `>` von einem Vergleich mit „größer oder gleich“?" + - kind: transfer + text: "Wie würdest du eine zweite Meldung für Werte unterhalb des `GRENZWERT` ergänzen?" +@end-unosim-tutor */ diff --git a/examples/IT05/it05-02-if-else.ino b/examples/IT05/it05-02-if-else.ino index 24068ca..1085aa3 100644 --- a/examples/IT05/it05-02-if-else.ino +++ b/examples/IT05/it05-02-if-else.ino @@ -34,3 +34,25 @@ void loop() { * 2. Welcher Zweig wird bei messwert = 60 ausgefuehrt? * 3. Wie muesste die Bedingung fuer "mindestens 60" lauten? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit if/else genau einen von zwei Programmzweigen ausfuehren." +exclusive: true +focus: + - id: zwei-zweige + title: "Zwei Zweige" + objective: "Die Studierenden sollen den Aspekt \"Zwei Zweige\" erklären können." + questions: + - kind: concept + text: "Können der `if`-Zweig und der `else`-Zweig in einem Durchlauf beide ausgeführt werden?" + - kind: prediction + 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." + questions: + - kind: transfer + text: "Wie müsste die Bedingung lauten, damit der Wert mindestens `GRENZWERT` entspricht?" +@end-unosim-tutor */ diff --git a/examples/IT05/it05-03-switch.ino b/examples/IT05/it05-03-switch.ino index 9e01241..58b96f0 100644 --- a/examples/IT05/it05-03-switch.ino +++ b/examples/IT05/it05-03-switch.ino @@ -39,3 +39,27 @@ void loop() { * 2. Welche Aufgabe hat break? * 3. Was geschieht ohne das erste break bei modus = 1? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit switch/case anhand eines Wertes einen Programmzweig auswaehlen." +exclusive: true +focus: + - id: default-zweig + title: "Der default-Zweig" + objective: "Die Studierenden sollen den Aspekt \"Der default-Zweig\" erklären können." + questions: + - kind: concept + text: "Wann wird der `default`-Zweig ausgeführt?" + - kind: prediction + 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." + 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?" +@end-unosim-tutor */ diff --git a/examples/IT06/it06-01-while.ino b/examples/IT06/it06-01-while.ino index b727e7b..b7a7e78 100644 --- a/examples/IT06/it06-01-while.ino +++ b/examples/IT06/it06-01-while.ino @@ -31,3 +31,27 @@ void loop() { * 2. Warum muss zaehler im Schleifenblock veraendert werden? * 3. Wie oft laeuft die Schleife beim Startwert 5? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einen Anweisungsblock mit while wiederholen, solange eine Bedingung wahr ist." +exclusive: true +focus: + - id: bedingungspruefung + title: "Bedingungsprüfung" + objective: "Die Studierenden sollen den Aspekt \"Bedingungsprüfung\" erklären können." + questions: + - kind: concept + text: "Wann wird die Bedingung `zaehler < 5` geprüft?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Warum muss `zaehler` im Schleifenblock verändert werden?" + - kind: prediction + text: "Welche Zahlen erscheinen im Monitor?" +@end-unosim-tutor */ diff --git a/examples/IT06/it06-02-do-while.ino b/examples/IT06/it06-02-do-while.ino index 21140b8..3b89be1 100644 --- a/examples/IT06/it06-02-do-while.ino +++ b/examples/IT06/it06-02-do-while.ino @@ -31,3 +31,25 @@ void loop() { * 2. Wie oft wird ihr Block mindestens ausgefuehrt? * 3. Warum entsteht beim zweiten Experiment mit Startwert 5 keine Ausgabe? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einen Anweisungsblock mit do/while mindestens einmal ausfuehren." +exclusive: true +focus: + - id: pruefung-am-ende + title: "Prüfung am Ende" + objective: "Die Studierenden sollen den Aspekt \"Prüfung am Ende\" erklären können." + questions: + - kind: concept + text: "Wann wird die Bedingung der `do`/`while`-Schleife geprüft?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Warum entstünde mit einer reinen `while`-Schleife und demselben Startwert keine Ausgabe?" +@end-unosim-tutor */ diff --git a/examples/IT06/it06-03-for.ino b/examples/IT06/it06-03-for.ino index 2d2cf6c..ae006f2 100644 --- a/examples/IT06/it06-03-for.ino +++ b/examples/IT06/it06-03-for.ino @@ -29,3 +29,27 @@ void loop() { * 2. Wie oft wird der Schleifenblock ausgefuehrt? * 3. Welchen Gueltigkeitsbereich hat die Variable i? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine feste Anzahl von Wiederholungen mit for formulieren." +exclusive: true +focus: + - id: schleifenkopf + title: "Der Schleifenkopf" + objective: "Die Studierenden sollen den Aspekt \"Der Schleifenkopf\" erklären können." + questions: + - kind: concept + text: "Welche drei Angaben stehen im Kopf von `for (byte i = 1; i <= 5; i++)`?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Welchen Gültigkeitsbereich hat die Variable `i`?" + - kind: transfer + text: "Wie würdest du die Schleife von 5 bis 1 herunterzählen lassen?" +@end-unosim-tutor */ diff --git a/examples/IT06/it06-04-verschachtelte-schleifen.ino b/examples/IT06/it06-04-verschachtelte-schleifen.ino index 16af4d8..5908e86 100644 --- a/examples/IT06/it06-04-verschachtelte-schleifen.ino +++ b/examples/IT06/it06-04-verschachtelte-schleifen.ino @@ -32,3 +32,27 @@ void loop() { * 2. Welche Schleife bestimmt die Anzahl der Zeilen? * 3. Warum steht println() ausserhalb der inneren Schleife? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine innere Schleife fuer jeden Durchlauf einer aeusseren Schleife ausfuehren." +exclusive: true +focus: + - id: verschachtelung + title: "Verschachtelung" + objective: "Die Studierenden sollen den Aspekt \"Verschachtelung\" erklären können." + questions: + - kind: prediction + text: "Wie oft wird die innere Schleife insgesamt durchlaufen?" + - kind: concept + text: "Welche Schleife bestimmt die Anzahl der Zeilen?" + - id: zeilenumbruch + title: "Zeilenumbruch" + objective: "Die Studierenden sollen den Aspekt \"Zeilenumbruch\" erklären können." + questions: + - kind: concept + text: "Warum steht `Serial.println()` außerhalb der inneren Schleife?" + - kind: transfer + text: "Wie erzeugst du ein Rechteck aus zwei Zeilen und sechs Spalten?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino b/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino index 84a3d92..042ecbe 100644 --- a/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino +++ b/examples/IT07/it07-01-funktion-ohne-rueckgabe.ino @@ -31,3 +31,25 @@ void loop() { * 2. Welche Bedeutung hat der Rueckgabetyp void? * 3. Welcher Teil ist Funktionsdefinition und welcher Funktionsaufruf? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Wiederverwendbare Anweisungen in einer void-Funktion zusammenfassen." +exclusive: true +focus: + - id: definition-und-aufruf + title: "Definition und Aufruf" + objective: "Die Studierenden sollen den Aspekt \"Definition und Aufruf\" erklären können." + questions: + - kind: concept + text: "Welcher Teil ist die Definition und welcher der Aufruf von `begruessungAusgeben`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Welche Bedeutung hat der Rückgabetyp `void`?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-02-funktion-mit-rueckgabe.ino b/examples/IT07/it07-02-funktion-mit-rueckgabe.ino index 2b176ef..6127f1d 100644 --- a/examples/IT07/it07-02-funktion-mit-rueckgabe.ino +++ b/examples/IT07/it07-02-funktion-mit-rueckgabe.ino @@ -32,3 +32,27 @@ void loop() { * 2. Welchen Datentyp besitzt der Rueckgabewert? * 3. Was bewirkt die Anweisung return? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Einer Funktion einen Parameter uebergeben und ihr Ergebnis mit return nutzen." +exclusive: true +focus: + - id: eingabe-und-ergebnis + title: "Eingabe und Ergebnis" + objective: "Die Studierenden sollen den Aspekt \"Eingabe und Ergebnis\" erklären können." + questions: + - kind: concept + text: "Was geht in `quadrat` hinein, und was kommt heraus?" + - kind: concept + 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." + questions: + - kind: concept + text: "Was bewirkt die Anweisung `return`?" + - kind: prediction + text: "Welcher Wert steht nach `quadrat(6)` in `ergebnis`?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-03-call-by-value.ino b/examples/IT07/it07-03-call-by-value.ino index 4d4e507..426ec55 100644 --- a/examples/IT07/it07-03-call-by-value.ino +++ b/examples/IT07/it07-03-call-by-value.ino @@ -36,3 +36,25 @@ void loop() { * 2. Warum bleibt zaehler ausserhalb der Funktion gleich? * 3. In welchem Bereich ist der Parameter zahl gueltig? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Beobachten, dass Call-by-value in der Funktion mit einer Kopie arbeitet." +exclusive: true +focus: + - id: kopie + title: "Der Wert wird kopiert" + objective: "Die Studierenden sollen den Aspekt \"Der Wert wird kopiert\" erklären können." + questions: + - kind: concept + text: "Welcher Wert wird beim Aufruf von `erhoehen` kopiert?" + - kind: concept + 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." + questions: + - kind: concept + text: "In welchem Bereich ist der Parameter `zahl` gültig?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-04-call-by-reference.ino b/examples/IT07/it07-04-call-by-reference.ino index 32163d1..8797d62 100644 --- a/examples/IT07/it07-04-call-by-reference.ino +++ b/examples/IT07/it07-04-call-by-reference.ino @@ -33,3 +33,25 @@ void loop() { * 2. Welche Bedeutung hat * vor zahl in der Funktion? * 3. Warum bleibt die Aenderung nach dem Funktionsaufruf erhalten? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine Variable ueber einen Zeiger in einer Funktion veraendern." +exclusive: true +focus: + - id: adresse-und-zeiger + title: "Adresse und Zeiger" + objective: "Die Studierenden sollen den Aspekt \"Adresse und Zeiger\" erklären können." + questions: + - kind: concept + text: "Welche Bedeutung hat `&` beim Aufruf `erhoehen(&zaehler)`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Warum bleibt die Änderung nach dem Funktionsaufruf erhalten?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-05-eindimensionales-array.ino b/examples/IT07/it07-05-eindimensionales-array.ino index 06a63cd..dc02a0b 100644 --- a/examples/IT07/it07-05-eindimensionales-array.ino +++ b/examples/IT07/it07-05-eindimensionales-array.ino @@ -32,3 +32,31 @@ void loop() { * 2. Welchen Wert besitzt messwerte[2] zu Beginn? * 3. Warum muss die Schleifenbedingung i < ANZAHL_WERTE lauten? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Ein eindimensionales Array deklarieren und ueber seinen Index auslesen." +exclusive: true +focus: + - id: index + title: "Der Index" + objective: "Die Studierenden sollen den Aspekt \"Der Index\" erklären können." + questions: + - kind: recall + text: "Mit welchem Index beginnt das Array `messwerte`?" + - kind: recall + 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." + questions: + - kind: concept + text: "Warum muss die Bedingung `i < ANZAHL_WERTE` lauten und darf nicht „kleiner oder gleich“ sein?" + - id: elementtyp + title: "Der Elementtyp" + objective: "Die Studierenden sollen den Aspekt \"Der Elementtyp\" erklären können." + questions: + - kind: concept + text: "Welche Rolle spielt der Elementtyp `int` des Arrays `messwerte`?" +@end-unosim-tutor */ diff --git a/examples/IT07/it07-06-zweidimensionales-array.ino b/examples/IT07/it07-06-zweidimensionales-array.ino index be927c0..f282d8c 100644 --- a/examples/IT07/it07-06-zweidimensionales-array.ino +++ b/examples/IT07/it07-06-zweidimensionales-array.ino @@ -40,3 +40,25 @@ void loop() { * 2. Welchen Wert liefert tabelle[1][2]? * 3. Welche Schleife laeuft ueber die Spalten? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Ein zweidimensionales Array als Tabelle verwenden." +exclusive: true +focus: + - id: zwei-indizes + title: "Zwei Indizes" + objective: "Die Studierenden sollen den Aspekt \"Zwei Indizes\" erklären können." + questions: + - kind: concept + text: "Welche zwei Indizes werden für ein Element von `tabelle` benötigt?" + - kind: prediction + 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." + questions: + - kind: concept + text: "Welche Schleife läuft über die Spalten?" +@end-unosim-tutor */ diff --git a/examples/IT08/it08-01-struct.ino b/examples/IT08/it08-01-struct.ino index c95befc..5798c47 100644 --- a/examples/IT08/it08-01-struct.ino +++ b/examples/IT08/it08-01-struct.ino @@ -42,3 +42,27 @@ void loop() { * 2. Welche Aufgabe hat der Punktoperator? * 3. Ist Messung ein Datentyp oder bereits eine Variable? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Mit struct einen eigenen zusammengesetzten Datentyp definieren." +exclusive: true +focus: + - id: datentyp-oder-variable + title: "Datentyp oder Variable" + objective: "Die Studierenden sollen den Aspekt \"Datentyp oder Variable\" erklären können." + questions: + - kind: concept + text: "Ist `Messung` ein Datentyp oder bereits eine Variable?" + - kind: concept + 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." + questions: + - kind: concept + text: "Welche Aufgabe hat der Punktoperator in `messung.messwert`?" + - kind: application + text: "Warum ist für das Feld `zeit` der Typ `unsigned long` passend?" +@end-unosim-tutor */ diff --git a/examples/IT08/it08-02-array-aus-structs.ino b/examples/IT08/it08-02-array-aus-structs.ino index ac26592..25df5da 100644 --- a/examples/IT08/it08-02-array-aus-structs.ino +++ b/examples/IT08/it08-02-array-aus-structs.ino @@ -43,3 +43,25 @@ void loop() { * 2. Was bedeutet messungen[1].messwert? * 3. Warum koennen die Felder einer Struktur verschiedene Datentypen haben? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Ein Array verwenden, dessen Elemente Strukturen sind." +exclusive: true +focus: + - id: array-aus-structs + title: "Array aus Strukturen" + objective: "Die Studierenden sollen den Aspekt \"Array aus Strukturen\" erklären können." + questions: + - kind: concept + text: "Welchen Datentyp besitzt ein einzelnes Element von `messungen`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Warum können die Felder einer `struct` verschiedene Datentypen haben?" +@end-unosim-tutor */ diff --git a/examples/IT08/it08-03-struct-als-parameter.ino b/examples/IT08/it08-03-struct-als-parameter.ino index 8aaa4af..86c30ed 100644 --- a/examples/IT08/it08-03-struct-als-parameter.ino +++ b/examples/IT08/it08-03-struct-als-parameter.ino @@ -38,3 +38,25 @@ void loop() { * 2. Welche Bedeutung hat der Operator ->? * 3. Wird in der Funktion eine Kopie oder das Original veraendert? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine Struktur per Referenz an eine Funktion uebergeben." +exclusive: true +focus: + - id: zeiger-uebergabe + title: "Übergabe per Zeiger" + objective: "Die Studierenden sollen den Aspekt \"Übergabe per Zeiger\" erklären können." + questions: + - kind: concept + text: "Warum wird beim Aufruf `&messung` verwendet?" + - kind: concept + 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." + questions: + - kind: concept + text: "Wird in `messwertKorrigieren` eine Kopie oder das Original verändert?" +@end-unosim-tutor */ diff --git a/examples/IT08/it08-04-funktion-auslagern.ino b/examples/IT08/it08-04-funktion-auslagern.ino index 671b534..f893c72 100644 --- a/examples/IT08/it08-04-funktion-auslagern.ino +++ b/examples/IT08/it08-04-funktion-auslagern.ino @@ -28,3 +28,25 @@ void loop() { * 2. In welcher Datei ist addieren() implementiert? * 3. Welchen Vorteil bietet die Trennung bei groesseren Programmen? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Eine eigene Headerdatei mit #include in das Hauptprogramm einbinden." +exclusive: true +focus: + - id: include + title: "Die Include-Zeile" + objective: "Die Studierenden sollen den Aspekt \"Die Include-Zeile\" erklären können." + questions: + - kind: concept + text: "Welche Aufgabe hat die Zeile mit `#include`?" + - kind: concept + 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." + questions: + - kind: concept + text: "Welchen Vorteil bietet die Trennung bei größeren Programmen?" +@end-unosim-tutor */ diff --git a/examples/IT11/it11-01-matrix-ausgeben.ino b/examples/IT11/it11-01-matrix-ausgeben.ino index 53d4ea1..b8eda03 100644 --- a/examples/IT11/it11-01-matrix-ausgeben.ino +++ b/examples/IT11/it11-01-matrix-ausgeben.ino @@ -41,3 +41,25 @@ void loop() { * 2. Warum werden zwei Schleifen benoetigt? * 3. Welche Aufgabe hat das Tabulatorzeichen \t? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Die Elemente einer 3x3-Matrix zeilen- und spaltenweise ausgeben." +exclusive: true +focus: + - id: elementzugriff + title: "Elementzugriff" + objective: "Die Studierenden sollen den Aspekt \"Elementzugriff\" erklären können." + questions: + - kind: prediction + text: "Welches Element von `matrix` wird mit den Indizes 1 und 2 angesprochen?" + - kind: concept + text: "Warum werden zwei Schleifen benötigt?" + - id: ausgabeformat + title: "Ausgabeformat" + objective: "Die Studierenden sollen den Aspekt \"Ausgabeformat\" erklären können." + questions: + - kind: concept + text: "Welche Aufgabe hat das Tabulatorzeichen `\\t`?" +@end-unosim-tutor */ diff --git a/examples/IT11/it11-02-matrix-transponieren.ino b/examples/IT11/it11-02-matrix-transponieren.ino index 20fc94f..bc284e1 100644 --- a/examples/IT11/it11-02-matrix-transponieren.ino +++ b/examples/IT11/it11-02-matrix-transponieren.ino @@ -47,3 +47,25 @@ void loop() { * 2. Was geschieht mit den Elementen auf der Hauptdiagonalen? * 3. Welche Eigenschaft hat das Ergebnis bei einer symmetrischen Matrix? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Beim Transponieren Zeilen- und Spaltenindizes vertauschen." +exclusive: true +focus: + - id: transponieren + title: "Transponieren" + objective: "Die Studierenden sollen den Aspekt \"Transponieren\" erklären können." + questions: + - kind: concept + text: "Welche beiden Indizes werden beim Transponieren vertauscht?" + - kind: concept + 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." + questions: + - kind: prediction + text: "Welcher Wert steht nach dem Transponieren in `transponiert` an der Position mit den Indizes 1 und 0?" +@end-unosim-tutor */ diff --git a/examples/IT11/it11-03-matrizen-addieren.ino b/examples/IT11/it11-03-matrizen-addieren.ino index 2764c58..f1d305b 100644 --- a/examples/IT11/it11-03-matrizen-addieren.ino +++ b/examples/IT11/it11-03-matrizen-addieren.ino @@ -48,3 +48,25 @@ void loop() { * 2. Warum muessen beide Matrizen dieselben Abmessungen besitzen? * 3. Welchen Wert hat summe[2][1] im Ausgangsbeispiel? */ + +/* @unosim-tutor +schemaVersion: 2 +learningObjectives: + - "Zwei Matrizen elementweise addieren." +exclusive: true +focus: + - id: addition + title: "Elementweise Addition" + objective: "Die Studierenden sollen den Aspekt \"Elementweise Addition\" erklären können." + questions: + - kind: concept + text: "Welche Elemente werden in `summe[zeile][spalte]` miteinander addiert?" + - kind: concept + 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." + questions: + - kind: prediction + text: "Welchen Wert hat das Element von `summe` mit den Indizes 2 und 1 im Ausgangsbeispiel?" +@end-unosim-tutor */