/** * 📝 IHK TRACE-TABELLEN-TRAINER 📝 * ================================= * Interaktiver Wertetabellen-Trainer für AP1 (Lernfeld 5 Programmierung): * - Schrittweiser Algorithmen-Durchlauf * - Zeilenweises Befüllen der Variablenzustände * - Automatische Validierung & Erklärungen */ class TraceTableTrainer { constructor(containerId) { this.container = document.getElementById(containerId); this.currentExerciseIndex = 0; this.exercises = [ { title: "Aufgabe 1: Schleifenakkumulator mit Bedingung", code: `GANZZAHL a = 3 GANZZAHL b = 10 GANZZAHL summe = 0 SOLANGE a < b TUE WENN a MOD 2 == 1 DANN summe = summe + a ENDE_WENN a = a + 2 ENDE_SOLANGE AUSGABE summe`, variables: ["Durchlauf", "Bedingung (a < b)", "a", "b", "summe"], rows: [ { Durchlauf: "Start", "Bedingung (a < b)": "-", a: "3", b: "10", summe: "0" }, { Durchlauf: "1", "Bedingung (a < b)": "wahr", a: "5", b: "10", summe: "3" }, { Durchlauf: "2", "Bedingung (a < b)": "wahr", a: "7", b: "10", summe: "8" }, { Durchlauf: "3", "Bedingung (a < b)": "wahr", a: "9", b: "10", summe: "15" }, { Durchlauf: "4", "Bedingung (a < b)": "wahr", a: "11", b: "10", summe: "24" }, { Durchlauf: "Ende", "Bedingung (a < b)": "falsch", a: "11", b: "10", summe: "24" } ], finalOutput: "24" }, { title: "Aufgabe 2: Lineare Maximum-Suche im Array", code: `FELD zahlen = [12, 45, 8, 92, 34] GANZZAHL max = zahlen[0] GANZZAHL i = 1 SOLANGE i < 5 TUE WENN zahlen[i] > max DANN max = zahlen[i] ENDE_WENN i = i + 1 ENDE_SOLANGE AUSGABE max`, variables: ["Schritt i", "zahlen[i]", "Vergleich (> max)", "max"], rows: [ { "Schritt i": "Start", "zahlen[i]": "-", "Vergleich (> max)": "-", max: "12" }, { "Schritt i": "1", "zahlen[i]": "45", "Vergleich (> max)": "wahr", max: "45" }, { "Schritt i": "2", "zahlen[i]": "8", "Vergleich (> max)": "falsch", max: "45" }, { "Schritt i": "3", "zahlen[i]": "92", "Vergleich (> max)": "wahr", max: "92" }, { "Schritt i": "4", "zahlen[i]": "34", "Vergleich (> max)": "falsch", max: "92" } ], finalOutput: "92" } ]; this.init(); } init() { if (!this.container) return; this.render(); } render() { const ex = this.exercises[this.currentExerciseIndex]; this.container.innerHTML = `
${ex.code}
| ${v} | `).join('')}|
|---|---|
| ${row[v]} | `; } return ``; }).join('')} |
Endgültige Bildschirmausgabe nach dem Durchlauf: ${ex.finalOutput}
`; resBox.classList.add("active"); } solve() { const ex = this.exercises[this.currentExerciseIndex]; const inputs = this.container.querySelectorAll(".trace-cell"); inputs.forEach(input => { const rIdx = parseInt(input.dataset.row, 10); const varName = input.dataset.var; input.value = ex.rows[rIdx][varName]; input.style.borderColor = "#38bdf8"; input.style.background = "rgba(56, 189, 248, 0.1)"; }); } } window.TraceTableTrainer = TraceTableTrainer;