Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg1-2024:htmlinteraction [2024/04/05 09:14] – [Zahlenraten] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg1-2024:htmlinteraction [2024/04/05 10:40] (current) – [Einführungsbeispiel] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Interaktion mit HTML ====== | ||
| + | Der HTML-Code einer Webseite kann mit JavaScript komplett kontrolliert werden, d.h. verändert, ergänzt, gelöscht oder erzeugt werden. Auch sind Reaktionen auf Benutzereingaben möglich. | ||
| + | ===== Einführungsbeispiel ===== | ||
| + | <WRAP todo> | ||
| + | * Legen Sie ein neues Verzeichnis an und kopieren Sie folgende Dateien, '' | ||
| + | <code html intro.html> | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | < | ||
| + | Original Text | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <code javascript intro.js> | ||
| + | let anzahl = 0; | ||
| + | function knopfdruck() { | ||
| + | let mydiv = document.getElementById(" | ||
| + | anzahl++; | ||
| + | if (anzahl< | ||
| + | mydiv.innerText = `Danke, dass Du den Knopf ${anzahl} mal gedrückt hast.`; | ||
| + | } else { // inklusive HTML-Code. Es muss auf Sonderzeichen geachtet werden. | ||
| + | mydiv.innerHTML = `${anzahl} mal ist mir <b>zu viel</ | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * Testen Sie die Webseite. Studieren Sie den Code. | ||
| + | |||
| + | |||
| + | **Bonus** Geben Sie an, wie oft der Knopf pro Sekunde gedrückt wurde. Fügen Sie zusätzlich einen «Reset»-Knop ein. Zeitmessung in JavaScript: | ||
| + | <code javascript> | ||
| + | // Aktuelle Zeit speichern. | ||
| + | start = new Date(); | ||
| + | // | ||
| + | // dann irgendwo, irgendwann später: | ||
| + | millisekunden = (new Date())-start; | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Buchstaben verwürfeln ===== | ||
| + | <WRAP todo> | ||
| + | Voraussetzung: | ||
| + | * Legen Sie ein neues Verzeichnis an. Darin speichern Sie folgende HTML-Datei: | ||
| + | <code html index.html> | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <br> | ||
| + | <button onclick=" | ||
| + | < | ||
| + | <div id=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Die JavaScript-Datei '' | ||
| + | <code javascript buchstabensalat.js> | ||
| + | // | ||
| + | // | ||
| + | // Hier fehlt der Code, der einen Text verwürfelt | ||
| + | // | ||
| + | // | ||
| + | function verwuerfeln() { // Wird aufgerufen, wenn der Knopf gedrückt wird. | ||
| + | let eingabe = document.getElementById(" | ||
| + | let ausgabe = document.getElementById(" | ||
| + | ausgabe.innerText = textwuerfeln(eingabe.value); | ||
| + | } | ||
| + | </ | ||
| + | * Vervollständigen Sie die JavaScript-Datei, | ||
| + | * Fügen Sie einen zweiten Knopf hinzu, der den verwürfelten Text in das Eingabe-Feld kopiert. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Zahlenraten ===== | ||
| + | <WRAP todo> | ||
| + | * Legen Sie ein neues Verzeichnis '' | ||
| + | * Kopieren Sie folgende html-Datei: | ||
| + | <code html index.html> | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <p id=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | * Die JavaScript-Datei könnte wie folgt aussehen: | ||
| + | <code javascript raten.js> | ||
| + | // Globale Variablen | ||
| + | let geheim = 0; | ||
| + | let anzahl = 0; | ||
| + | |||
| + | function neueZahl() { | ||
| + | // Zugriff auf globale Variablen | ||
| + | geheim = Math.floor(Math.random()*100); | ||
| + | anzahl = 0; | ||
| + | } | ||
| + | |||
| + | function pruefen() { | ||
| + | let raten = document.getElementById(' | ||
| + | let ergebnis = document.getElementById(' | ||
| + | // Umwandlung in eine Zahl, weil value immer ein String ist. | ||
| + | let zahl = Number(raten.value); | ||
| + | |||
| + | // | ||
| + | // soll eine entsprechende Meldung im «ergbnis» angezeigt werden. | ||
| + | // | ||
| + | |||
| + | } | ||
| + | // Am Anfang eine neue Zufallszahl bestimmen | ||
| + | neueZahl(); | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code javascript raten.js> | ||
| + | // Globale Variablen | ||
| + | let geheim = 0; | ||
| + | let anzahl = 0; | ||
| + | |||
| + | function neueZahl() { | ||
| + | // Zugriff auf globale Variablen | ||
| + | geheim = Math.floor(Math.random()*1000); | ||
| + | anzahl = 0; | ||
| + | } | ||
| + | |||
| + | function pruefen() { | ||
| + | let raten = document.getElementById(' | ||
| + | let ergebnis = document.getElementById(' | ||
| + | // Umwandlung in eine Zahl, weil value immer ein String ist. | ||
| + | let zahl = Number(raten.value); | ||
| + | |||
| + | anzahl++; | ||
| + | |||
| + | if (zahl< | ||
| + | ergebnis.innerText = `Deine Zahl ist zu klein. Anzahl Versuche: ${anzahl}`; | ||
| + | } else if (zahl> | ||
| + | ergebnis.innerText = `Deine Zahl ist zu gross. Anzahl Versuche: ${anzahl}`; | ||
| + | } else { | ||
| + | ergebnis.innerText = `Super! Du hast die Zahl nach ${anzahl} Versuchen gefunden!`; | ||
| + | neueZahl(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | neueZahl(); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | **Bonus** Überlegen Sie sich eine optimale Strategie und berechnen Sie, wie viele Züge höchstens nötig sind, um aus $n$ Zahlen die richtige mit Sicherheit zu finden. | ||
| + | |||
| + | **Hardcore** Berechnen Sie exakt, wie viele Versuche **durchschnittlich** nötig sind, um (mit optimaler Strategie) die korrekte Zahl aus $n$ Zahlen zu erraten. | ||
| + | </ | ||