From b21be6c1d1be8f2bad36316a25a4c00679266811 Mon Sep 17 00:00:00 2001 From: Philippe Torrel Date: Mon, 2 Nov 2026 13:02:29 +0100 Subject: [PATCH] --- .../uebungen/u01_bibverwaltung/index.html | 70 +++++ .../uebungen/u02_extraction/index.html | 70 +++++ 07_js-debug/uebungen/u03_dry/index.html | 49 ++++ .../u04_dry-benutzerzugang/index.html | 246 ++++++++++++++++++ .../uebungen/u05_error-format-date/index.html | 27 ++ .../uebungen/u06_error-benutzer/index.html | 51 ++++ .../uebungen/u07_check-temperature/index.html | 37 +++ .../uebungen/u08_benutzer-anzeigen/index.html | 57 ++++ .../uebungen/u09_parse-user-data/index.html | 32 +++ .../uebungen/u10_einkaufspreis/index.js | 40 +++ .../uebungen/u11_calculate-avg-error/index.js | 8 + .../u11_calculate-avg-error/solution.js | 0 .../uebungen/u12_find-maximum-error/index.js | 14 + .../u12_find-maximum-error/solution.js | 0 .../u13_temp-converter/assets/js/main.js | 17 ++ .../u13_temp-converter/assets/js/preset.js | 45 ++++ .../uebungen/u13_temp-converter/index.html | 32 +++ 07_js-debug/uebungen/uebungen-01-13-debug.zip | Bin 0 -> 20640 bytes .../unterricht/tag41/06_demo-form-bug.zip | Bin 3901 -> 0 bytes 19 files changed, 795 insertions(+) create mode 100644 07_js-debug/uebungen/u01_bibverwaltung/index.html create mode 100644 07_js-debug/uebungen/u02_extraction/index.html create mode 100644 07_js-debug/uebungen/u03_dry/index.html create mode 100644 07_js-debug/uebungen/u04_dry-benutzerzugang/index.html create mode 100644 07_js-debug/uebungen/u05_error-format-date/index.html create mode 100644 07_js-debug/uebungen/u06_error-benutzer/index.html create mode 100644 07_js-debug/uebungen/u07_check-temperature/index.html create mode 100644 07_js-debug/uebungen/u08_benutzer-anzeigen/index.html create mode 100644 07_js-debug/uebungen/u09_parse-user-data/index.html create mode 100644 07_js-debug/uebungen/u10_einkaufspreis/index.js create mode 100644 07_js-debug/uebungen/u11_calculate-avg-error/index.js create mode 100644 07_js-debug/uebungen/u11_calculate-avg-error/solution.js create mode 100644 07_js-debug/uebungen/u12_find-maximum-error/index.js create mode 100644 07_js-debug/uebungen/u12_find-maximum-error/solution.js create mode 100644 07_js-debug/uebungen/u13_temp-converter/assets/js/main.js create mode 100644 07_js-debug/uebungen/u13_temp-converter/assets/js/preset.js create mode 100644 07_js-debug/uebungen/u13_temp-converter/index.html create mode 100644 07_js-debug/uebungen/uebungen-01-13-debug.zip delete mode 100644 07_js-debug/unterricht/tag41/06_demo-form-bug.zip diff --git a/07_js-debug/uebungen/u01_bibverwaltung/index.html b/07_js-debug/uebungen/u01_bibverwaltung/index.html new file mode 100644 index 0000000..5ca7b90 --- /dev/null +++ b/07_js-debug/uebungen/u01_bibverwaltung/index.html @@ -0,0 +1,70 @@ + + + + + + Exercise: Nested If-Statements + + +

Exercise: Nested If-Statements

+ + + + diff --git a/07_js-debug/uebungen/u02_extraction/index.html b/07_js-debug/uebungen/u02_extraction/index.html new file mode 100644 index 0000000..5ca7b90 --- /dev/null +++ b/07_js-debug/uebungen/u02_extraction/index.html @@ -0,0 +1,70 @@ + + + + + + Exercise: Nested If-Statements + + +

Exercise: Nested If-Statements

+ + + + diff --git a/07_js-debug/uebungen/u03_dry/index.html b/07_js-debug/uebungen/u03_dry/index.html new file mode 100644 index 0000000..8c49d10 --- /dev/null +++ b/07_js-debug/uebungen/u03_dry/index.html @@ -0,0 +1,49 @@ + + + + + + Exercise: Don't Repeat Yourself (DRY) + + +

Exercise: Don't Repeat Yourself (DRY)

+ + + + diff --git a/07_js-debug/uebungen/u04_dry-benutzerzugang/index.html b/07_js-debug/uebungen/u04_dry-benutzerzugang/index.html new file mode 100644 index 0000000..147d1a1 --- /dev/null +++ b/07_js-debug/uebungen/u04_dry-benutzerzugang/index.html @@ -0,0 +1,246 @@ + + + + + + Advanced If-Else Statements (Enhanced Nesting) + + +

Advanced If-Else Statements (Enhanced Nesting)

+ + + + diff --git a/07_js-debug/uebungen/u05_error-format-date/index.html b/07_js-debug/uebungen/u05_error-format-date/index.html new file mode 100644 index 0000000..6b5b78a --- /dev/null +++ b/07_js-debug/uebungen/u05_error-format-date/index.html @@ -0,0 +1,27 @@ + + + + + + Übung 05: FormatDate Fehler + + + +
+
+

Übung 05: FormatDate Fehler

+
+
+ + + diff --git a/07_js-debug/uebungen/u06_error-benutzer/index.html b/07_js-debug/uebungen/u06_error-benutzer/index.html new file mode 100644 index 0000000..9261022 --- /dev/null +++ b/07_js-debug/uebungen/u06_error-benutzer/index.html @@ -0,0 +1,51 @@ + + + + + + Übung 6: Benutzer erstellen + + + +
+
+

Übung 6: Benutzer erstellen

+
+
+ + + diff --git a/07_js-debug/uebungen/u07_check-temperature/index.html b/07_js-debug/uebungen/u07_check-temperature/index.html new file mode 100644 index 0000000..6e37278 --- /dev/null +++ b/07_js-debug/uebungen/u07_check-temperature/index.html @@ -0,0 +1,37 @@ + + + + + + Übung 7: checkTemperature Fehler + + + +
+
+

Übung 7: checkTemperature Fehler

+

Versuche, den Code auszuführen, den Fehler zu identifizieren und ihn zu beheben.

+
+
+ + + diff --git a/07_js-debug/uebungen/u08_benutzer-anzeigen/index.html b/07_js-debug/uebungen/u08_benutzer-anzeigen/index.html new file mode 100644 index 0000000..ab63182 --- /dev/null +++ b/07_js-debug/uebungen/u08_benutzer-anzeigen/index.html @@ -0,0 +1,57 @@ + + + + + + Übung 8: Benutzer anzeigen + + + +
+
+

Übung 8: Benutzer anzeigen

+

+ Der folgende Code enthält mehrere Referenzfehler, die über verschiedene Teile des Codes verteilt sind. Deine + Aufgabe ist es, alle Referenzfehler zu identifizieren und zu beheben, um sicherzustellen, dass der Code + korrekt läuft. +

+
+
+ + + diff --git a/07_js-debug/uebungen/u09_parse-user-data/index.html b/07_js-debug/uebungen/u09_parse-user-data/index.html new file mode 100644 index 0000000..0d4a6b4 --- /dev/null +++ b/07_js-debug/uebungen/u09_parse-user-data/index.html @@ -0,0 +1,32 @@ + + + + + + Übung 9: parseUserData Fehler + + + +
+
+

Übung 9: parseUserData Fehler

+

Die Kommentare zeigen das erwartete Ergebnis.

+
+
+ + + diff --git a/07_js-debug/uebungen/u10_einkaufspreis/index.js b/07_js-debug/uebungen/u10_einkaufspreis/index.js new file mode 100644 index 0000000..d140439 --- /dev/null +++ b/07_js-debug/uebungen/u10_einkaufspreis/index.js @@ -0,0 +1,40 @@ +function calculateTotalPrice(items) { + let total = 0; + items.forEach((item) => { + total += item.price; + }); + return total.toFixed(2); +} + +const shoppingCart = [ + { name: 'Laptop', price: 999.99 }, + { name: 'Smartphone', price: '599.99' }, + { name: 'Headphones', cost: 199.99 }, +]; + +const totalPrice = calculateTotalPrice(shoppingCart); +console.log('Total Price:', totalPrice); + +function displayUserProfile(user) { + console.log(`Name: ${user.name}`); + console.log(`Age: ${user.age}`); + console.log(`Email: ${user.email.toLowerCase()}`); +} + +const userProfile = { + name: 'Sarah', + age: 'twenty-five', + email: 'SARAH@EXAMPLE.COM', +}; + +displayUserProfile(userProfile); + +function getFirstItemName(items) { + return items[0].name.toUpperCase(); +} + +console.log('First Item:', getFirstItemName(shoppingCart)); // => LAPTOP + +const numberList = '1,2,3,4,5'; +const sum = numberList.reduce((acc, num) => acc + Number(num), 0); +console.log('Sum:', sum); // => 15 diff --git a/07_js-debug/uebungen/u11_calculate-avg-error/index.js b/07_js-debug/uebungen/u11_calculate-avg-error/index.js new file mode 100644 index 0000000..5f360da --- /dev/null +++ b/07_js-debug/uebungen/u11_calculate-avg-error/index.js @@ -0,0 +1,8 @@ +function calculateAverage(numbers) { + const total = numbers.reduce((sum, num) => sum + num, 10); + const average = total / numbers; + return average; +} + +console.log(calculateAverage([10, 20, 30])); // => 20 +console.log(calculateAverage([5, 15, 25, 35])); // => 20 diff --git a/07_js-debug/uebungen/u11_calculate-avg-error/solution.js b/07_js-debug/uebungen/u11_calculate-avg-error/solution.js new file mode 100644 index 0000000..e69de29 diff --git a/07_js-debug/uebungen/u12_find-maximum-error/index.js b/07_js-debug/uebungen/u12_find-maximum-error/index.js new file mode 100644 index 0000000..16d8a6f --- /dev/null +++ b/07_js-debug/uebungen/u12_find-maximum-error/index.js @@ -0,0 +1,14 @@ +// logical error +function findMaximum(a, b, c) { + if (a > b && a > c) { + return a; + } else if (b > a && b > c) { + return b; + } else { + return c; + } +} + +console.log(findMaximum(1, 2, 3)); // => 3 +console.log(findMaximum(102, 59, 18)); // => 102 +console.log(findMaximum(532, 532, 345)); // => 532 diff --git a/07_js-debug/uebungen/u12_find-maximum-error/solution.js b/07_js-debug/uebungen/u12_find-maximum-error/solution.js new file mode 100644 index 0000000..e69de29 diff --git a/07_js-debug/uebungen/u13_temp-converter/assets/js/main.js b/07_js-debug/uebungen/u13_temp-converter/assets/js/main.js new file mode 100644 index 0000000..a9e0d8d --- /dev/null +++ b/07_js-debug/uebungen/u13_temp-converter/assets/js/main.js @@ -0,0 +1,17 @@ +'use strict'; + +(() => { + // === DOM & VARS ======= + const DOM = {}; + + // === INIT ============= + const init = () => {}; + + // === EVENTHANDLER ===== + + // === XHR/FETCH ======== + + // === FUNCTIONS ======== + + init(); +})(); diff --git a/07_js-debug/uebungen/u13_temp-converter/assets/js/preset.js b/07_js-debug/uebungen/u13_temp-converter/assets/js/preset.js new file mode 100644 index 0000000..c5ee928 --- /dev/null +++ b/07_js-debug/uebungen/u13_temp-converter/assets/js/preset.js @@ -0,0 +1,45 @@ +'use strict'; + +(() => { + // ===== DOM ===== + const DOM = { + temperatureForm: document.querySelector('#temperatureForm'), + celsiusInput: document.querySelector('#celsius'), + result: document.querySelector('#result'), + }; + + // ===== INIT ===== + const init = () => { + DOM.temperatureForm.addEventListener('submit', handleFormSubmit); + }; + + // ===== EVENT HANDLERS ===== + function handleFormSubmit(e) { + const celsius = DOM.celsiusInput.value; + + if (!isNaN(celsius)) { + alert('Please enter a valid number'); + return; + } + + const fahrenheit = convertToFahrenheit(celsius); + + displayResult(fahrenheit); + + DOM.temperatureForm.reset(); + } + + // ===== FUNCTIONS ===== + function convertToFahrenheit(celsius) { + if (typeof celsius === 'string') return 0; + + return (celsius * 9) / 5 + 32; + } + + function displayResult(result) { + DOM.result.textContent = result.toFixed(2); + } + + // ===== CALL INIT ===== + init(); +})(); diff --git a/07_js-debug/uebungen/u13_temp-converter/index.html b/07_js-debug/uebungen/u13_temp-converter/index.html new file mode 100644 index 0000000..dd8ec54 --- /dev/null +++ b/07_js-debug/uebungen/u13_temp-converter/index.html @@ -0,0 +1,32 @@ + + + + + + Temperature Converter + + + + +
+

Temperature Converter

+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
Result: °F
+
+ + diff --git a/07_js-debug/uebungen/uebungen-01-13-debug.zip b/07_js-debug/uebungen/uebungen-01-13-debug.zip new file mode 100644 index 0000000000000000000000000000000000000000..df3e7d7958a2777d8a400fc007ccd0c5a96f1d5a GIT binary patch literal 20640 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 Vl&qjS0I(kXOfv((jt$VSzX72wRQvz{