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:ffprg2-2024:refresher [2024/08/25 13:21] – [Strings] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2-2024:refresher [2024/08/26 10:08] (current) – [Arrays] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Refresher ====== | ||
| + | Folgende Aufgaben sollen helfen, die grundlegenden Elemente von JavaScript zu repetieren und zu festigen. | ||
| + | Ziel ist jeweils eine einfache Konsolenausgabe. | ||
| + | |||
| + | Hilfe gibts im [[lehrkraefte: | ||
| + | |||
| + | ===== Loops ===== | ||
| + | Produzieren Sie folgende Ausgabe auf der Konsole: | ||
| + | <code txt> | ||
| + | 10 im Quadrat ist 100 | ||
| + | 11 im Quadrat ist 121 | ||
| + | 12 im Quadrat ist 144 | ||
| + | 13 im Quadrat ist 169 | ||
| + | 14 im Quadrat ist 196 | ||
| + | 15 im Quadrat ist 225 | ||
| + | 16 im Quadrat ist 256 | ||
| + | 17 im Quadrat ist 289 | ||
| + | 18 im Quadrat ist 324 | ||
| + | 19 im Quadrat ist 361 | ||
| + | 20 im Quadrat ist 400 | ||
| + | </ | ||
| + | |||
| + | Produzieren Sie folgende Ausgabe: | ||
| + | <code txt> | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | | ||
| + | +---+---+---+---+---+---+---+---+ | ||
| + | </ | ||
| + | |||
| + | ===== Arrays ===== | ||
| + | * Produzieren Sie ein Array mit $n=20$ Elementen, das die Zahlen 30, | ||
| + | * Produzieren Sie ein Array, das die ersten $n=10$ Zeilen (jeweils als Array) des Pascaldreiecks enthält. Berechnen Sie dazu jeweils eine Zeile aus der vorhergehenden. Bonus für eine schöne dreieckige Ausgabe. | ||
| + | <WRAP round caution> | ||
| + | * Produzieren Sie ein Array, das mit 100 ganzzahligen Zufallszahlen zwischen 0 und mit 99 gefüllt ist. //Hinweise: '' | ||
| + | * Aus einem Array mit zufälligen Zahlen entfernen Sie all jene, die durch 3 oder 5 teilbar sind. //Hinweis: Entweder ein neues Array bauen (push), oder die '' | ||
| + | * Aus zwei Arrays '' | ||
| + | * Programmieren Sie eine Funktion, die ein Array wie folgt zufällig ordnet: Für die erste Stelle wählt man ein beliebiges Element aus (evtl. auch das erste), und vertauscht die beiden Elemente miteinander. Aus den verbleibenden Elementen wählt man ein zufälliges aus und vertauscht es mit dem Element an zweiter Stelle etc. | ||
| + | </ | ||
| + | ===== Funktionen ===== | ||
| + | * Wenn nicht schon so gelöst, schreiben Sie eine Funktion, die einem Pascaldreieck (wie oben) eine neue Zeile hinzufügt. | ||
| + | * Schreiben Sie eine Funktion '' | ||
| + | |||
| + | ===== Strings ===== | ||
| + | <WRAP round caution> | ||
| + | * Zerlegen Sie einen String in ein Array mit den einzelnen Buchstaben. D.h. aus ''" | ||
| + | * Gegeben ist als String eine Zeile mit Zahlen, jeweils durch Leerschläge getrennt. Machen Sie ein Array mit Zahlen (nicht Strings) daraus. Z.B. wird aus dem String ''" | ||
| + | </ | ||
| + | |||
| + | ===== Objects ===== | ||
| + | <WRAP round caution> | ||
| + | <code javascript> | ||
| + | let wardrobes = {" | ||
| + | </ | ||
| + | * Geben Sie die Namen aller Schränke aus, die 4 Türen haben. | ||
| + | * Berechnen Sie die Summe aller Preise. | ||
| + | * Fügen Sie neue Kästen hinzu, die es in allen Kombinationen von 2 bis 5 Türen und 0 bis 8 Schubladen gibt. Der Preis ergibt sich jeweils aus dem Dreissigfachen der Anzahl Türen plus das Zehnfache der Anzahl Schubladen. Die Kästen haben die Nämen " | ||
| + | </ | ||
| + | ===== Lösungen ===== | ||
| + | |||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code javascript> | ||
| + | for (let i=10; i<21; i++) { | ||
| + | console.log(`${i} im Quadrat ist ${i*i}`) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code javascript> | ||
| + | let n=8; | ||
| + | let trenner = " | ||
| + | for (let x=0; x<n; x++) { | ||
| + | | ||
| + | } | ||
| + | trenner += " | ||
| + | feld = trenner; | ||
| + | for (let y=0; y<n; y++) { | ||
| + | feld += " | ||
| + | for (let x=0; x<n; x++) { | ||
| + | feld += ` ${(x+y)%3} |`; | ||
| + | } | ||
| + | feld += " | ||
| + | } | ||
| + | console.log(feld); | ||
| + | |||
| + | </ | ||
| + | <code javascript> | ||
| + | let a = []; | ||
| + | let n = 20; | ||
| + | for (let i=0; i<n; i++) { | ||
| + | | ||
| + | } | ||
| + | console.log(a); | ||
| + | </ | ||
| + | <code javascript> | ||
| + | function addLine(a) { | ||
| + | let last = a[a.length-1]; | ||
| + | let line = []; // Neue Zeile | ||
| + | for (let i=0; i< | ||
| + | if (i==0 || i==last.length) { // Am Rand eine 1 einfügen | ||
| + | line.push(1); | ||
| + | } else { | ||
| + | line.push(last[i-1]+last[i]); | ||
| + | } | ||
| + | } | ||
| + | a.push(line); | ||
| + | } | ||
| + | let pascal = [[1]]; | ||
| + | for (let i=0; i<10; i++) { | ||
| + | | ||
| + | } | ||
| + | console.log(pascal); | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | let a = Array.from({length: | ||
| + | // Alternative: | ||
| + | a = new Array(100).fill(0).map(()=> | ||
| + | |||
| + | // Alternative 2 (ohne fancy Array-Methoden): | ||
| + | a = []; | ||
| + | for (let i=0; i<100; i++) { | ||
| + | a.push(Math.floor(Math.random()*100)); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | // Voraussetzung: | ||
| + | let b = a.filter((e)=> | ||
| + | |||
| + | // Alternative ohne filter: | ||
| + | let b = []; | ||
| + | for (let z of a) { | ||
| + | if (z%3!=0 && z%5!=0) { | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code javascript> | ||
| + | function fortsetzen(folge) { | ||
| + | let paare = 0; | ||
| + | kandidat = folge[folge.length-1]; | ||
| + | while (paare!=1) { | ||
| + | kandidat+=1; | ||
| + | paare = 0; | ||
| + | for (let i=0; i< | ||
| + | for (let j=i+1; j< | ||
| + | if (folge[i]+folge[j]> | ||
| + | if (folge[i]+folge[j]==kandidat) { | ||
| + | paare+=1; | ||
| + | } | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | if (paare> | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | return kandidat; | ||
| + | } | ||
| + | let ulam=[1,2]; | ||
| + | for (let i=0; i<10; i++) { | ||
| + | ulam.push(fortsetzen(ulam)); | ||
| + | } | ||
| + | console.log(ulam); | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | <code javascript> | ||
| + | function jasskarten() { | ||
| + | let farben = [' | ||
| + | let werte = [' | ||
| + | |||
| + | let karten = []; | ||
| + | for (let f of farben) { | ||
| + | for (let w of werte) { | ||
| + | karten.push(`${f} ${w}`); | ||
| + | } | ||
| + | } | ||
| + | return karten | ||
| + | } | ||
| + | |||
| + | // Diese Funktion verändert das Array a direkt! | ||
| + | function mischen(a) { | ||
| + | for (let i=0; i< | ||
| + | let j = Math.floor(Math.random()*(a.length-i)); | ||
| + | // Elemente vertauschen | ||
| + | let temp = a[i]; | ||
| + | a[i] = a[j]; | ||
| + | a[j] = temp; | ||
| + | // Kurzform: | ||
| + | } | ||
| + | return a; | ||
| + | } | ||
| + | console.log(mischen(jasskarten()); | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | let a = " | ||
| + | |||
| + | let zeile = "12 43 65 78"; | ||
| + | // map nimmt als Argument eine Funktion, die für jedes Element (und seinen Index und das Array)) aufgerufen wird. Weil Number nur ein (das erste) Argument nimmt, funktioniert diese Kurzform | ||
| + | let l = zeile.split(" | ||
| + | // Explizite Definition einer anonymen Funktion (Diesmal sicher nur ein Argument) | ||
| + | let l = zeile.split(" | ||
| + | // Alternative ohne map: | ||
| + | let l = [] | ||
| + | for (let z of zeile.split(" | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | function objectHandling() { | ||
| + | let wardrobes = {" | ||
| + | let total = 0; | ||
| + | for (let name in wardrobes) { | ||
| + | total += wardrobes[name].price; | ||
| + | if (wardrobes[name].doors==4) { | ||
| + | console.log(`Kasten ${name} hat 4 Türen`); | ||
| + | } | ||
| + | } | ||
| + | console.log(`Alle Kästen kosten ${total}`); | ||
| + | |||
| + | for (let doors=2; doors< | ||
| + | for (let drawers=0; drawers< | ||
| + | let name = `FlexBox-${doors}-${drawers}`; | ||
| + | wardrobes[name] = {" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | console.log(wardrobes); | ||
| + | } | ||
| + | objectHandling(); | ||
| + | </ | ||
| + | </ | ||