lehrkraefte:blc:informatik:ffprg1-2024:aufgaben-ohne-funktionen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
lehrkraefte:blc:informatik:ffprg1-2024:aufgaben-ohne-funktionen [2024/03/01 11:47] – [Einstiegsaufgaben einfach] Ivo Blöchligerlehrkraefte:blc:informatik:ffprg1-2024:aufgaben-ohne-funktionen [2024/03/08 12:27] (current) – [Primzahlen] Ivo Blöchliger
Line 1: Line 1:
 +====== Einstiegsaufgaben einfach ======
 +<WRAP todo>
 +Schreiben Sie ein Programm, das alle zweistelligen Vielfachen von 7 ausgibt. Versuchen Sie, das Programm ohne ''if'' zu schreiben.
 +
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +for (let i=14; i<100; i+=7) {
 +   console.log(i);
 +}
 +</code>
 +</hidden>
 +</WRAP>
 +
 +<WRAP todo>
 +Schreiben Sie ein Programm, das eine Multiplikationstabelle ausgibt. 
 +Bauen Sie eine Zeile erst als String-Variable auf, bevor Sie diese mit ''console.log'' ausgeben.
 +
 +Damit alle Zahlen schön untereinander dargestellt werden, können Sie die String-Methode [[https://www.w3schools.com/jsref/jsref_string_padstart.asp|padStart]] verwenden:
 +<code javascript>
 +vier = String(6*7).padStart(4,' '); // Liefert den 4 Zeichen langen String "  42", von vorne mit Leerschlägen ge-«padded»
 +</code>
 +Vorgeschlagene Ausgabe:
 +<code txt>
 +                    10
 +          10  12  14  16  18  20
 +        12  15  18  21  24  27  30
 +      12  16  20  24  28  32  36  40
 +    10  15  20  25  30  35  40  45  50
 +    12  18  24  30  36  42  48  54  60
 +    14  21  28  35  42  49  56  63  70
 +    16  24  32  40  48  56  64  72  80
 +    18  27  36  45  54  63  72  81  90
 +  10  20  30  40  50  60  70  80  90 100
 +</code>
 +
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +for (let a=1; a<=10; a++) {
 +  let zeile = "";
 +  for (let b=1; b<=10; b++) {
 +    zeile += String(a*b).padStart(4, ' ')
 +  }
 +  console.log(zeile);
 +}
 +</code>
 +</hidden>
 +</WRAP>
 +
 +====== Einstiegsaufgaben (Teiler und Primzahlen) ======
 +Diese Aufgaben produzieren die Ausgabe nur auf die Konsole.
 +
 +===== foo bar =====
 +<WRAP todo>
 +Diese Aufgabe ist eine klassische Aufgabe bei Einstellungsgesprächen, um jene auszusortieren, die gar keinen Plan von Programmieren haben.
 +
 +Geben Sie die Zahlen von 1 bis 100 aus, aber
 +  * bei Zahlen, die durch 3 teilbar sind, geben Sie ''foo'' anstatt der Zahl aus,
 +  * bei Zahlen, die durch 5 teilbar sind, geben Sie ''bar'' anstatt der Zahl aus,
 +  * bei Zahlen, die sowohl durch 3 wie auch durch 5 teilbar sind, geben Sie ''foo bar'' aus.
 +
 +Hinweis: Teilbarkeit von ''a'' durch ''b'' kann wie folgt überprüft werden:
 +<code javascript>
 +if (a % b == 0) { // Wenn die Ganzzahldivision a/b den Rest 0 hat
 +   console.log(`${a} ist durch ${b} teilbar`);
 +} else {
 +   console.log(`${a} ist nicht durch ${b} ohne Rest teilbar`);
 +}
 +</code>
 +</WRAP>
 +
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +for (let i=1; i<=100; i++) {
 +    if (i%15==0) {
 +        console.log('foo bar');
 +    } else if (i%3==0) {
 +        console.log('foo');
 +    } else if (i%5==0) {
 +        console.log('bar');
 +    } else {
 +        console.log(i);
 +    }
 +}
 +</code>
 +</hidden>
 +
 +===== Teiler =====
 +<WRAP todo>
 +Für die Zahlen von 1 bis 100 produzieren Sie eine Liste mit allen Teilern, z.B. wie folgt:
 +<code txt>
 +1 hat die Teiler 1
 +2 hat die Teiler 1 2
 +3 hat die Teiler 1 3
 +4 hat die Teiler 1 2 4
 +5 hat die Teiler 1 5
 +6 hat die Teiler 1 2 3 6
 +7 hat die Teiler 1 7
 +8 hat die Teiler 1 2 4 8
 +9 hat die Teiler 1 3 9
 +...
 +93 hat die Teiler 1 3 31 93
 +94 hat die Teiler 1 2 47 94
 +95 hat die Teiler 1 5 19 95
 +96 hat die Teiler 1 2 3 4 6 8 12 16 24 32 48 96
 +97 hat die Teiler 1 97
 +98 hat die Teiler 1 2 7 14 49 98
 +99 hat die Teiler 1 3 9 11 33 99
 +100 hat die Teiler 1 2 4 5 10 20 25 50 100
 +</code>
 +</WRAP>
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +for (let i=1; i<=100; i++) {
 +    let zeile = `${i} hat die Teiler`;
 +    for (let t=1; t<=i; t++) {
 +        if (i%t==0) {
 +            zeile += ` ${t}`;   // Kurzform für zeile = zeile + ...
 +        }
 +    }
 +    console.log(zeile);
 +}
 +</code>
 +</hidden>
 +
 +===== Primzahlen =====
 +<WRAP todo>
 +Geben Sie alle Primzahlen bis 1000 als Liste aus:
 +<code javascript>
 +let primes = [];  // Leere Liste
 +// Primzahlen suchen, wenn eine Primzahl p bestimmt worden ist:
 +   primes.push(p)
 +//
 +console.log(primes);
 +</code>
 +</WRAP>
 +
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +let primes = [];
 +for (let i=2; i<1000; i++) {
 +    let isPrime = true;  // Erst mal annehmen i sei prim.
 +    let t=2;
 +    while (t*t<=i) {  // Es reicht bis zur Wurzel zu suchen (Teiler kommen immer in Paaren)
 +        if (i % t == 0) {
 +            isPrime = false;
 +            break;  // While-Schlaufe sofort verlassen (es wird nicht mehr weniger prim)
 +        }
 +        t++;
 +    }
 +    if (isPrime) {  // Kein Teiler gefunden?
 +        primes.push(i);
 +    }
 +}
 +console.log(primes);
 +</code>
 +</hidden>
 +
 +====== Einstiegsaufgaben mit Strings ======
 +===== Tannenbäume =====
 +<WRAP todo>
 +Geben Sie folgende Weihnachstbäume in aufsteigender Grösse aus:
 +<code txt>
 +   ^
 +  / \
 + /   \
 +/     \
 +-------
 +  |||
 +  |||
 +
 +
 +
 +    ^
 +   / \
 +  /   \
 + /     \
 +/       \
 +---------
 +   |||
 +   |||
 +
 +......
 +
 +         ^
 +        / \
 +       /   \
 +      /     \
 +     /       \
 +    /         \
 +   /           \
 +  /             \
 + /               \
 +/                 \
 +-------------------
 +        |||
 +        |||
 +
 +</code>
 +
 +Hinweis: Der Backslash ''\'' und ein Zeilenumbruch kann mit wie folgt einem String hinzugefügt werden:
 +<code javascript>
 +zeile = "Das ist ein Backslash: \\  Und ein Anführungszeichen \" und ein Zeilenumbruch\nneue Zeile\nund noch eine."
 +</code>
 +</WRAP>
 +<hidden Lösungsvorschlag>
 +<code javascript>
 +for (let i=3; i<10; i++) {
 +    let zeile = ""
 +    for (let j=0; j<i; j++) {
 +        zeile += " ";
 +    }
 +    console.log(zeile+"^");    
 +    for (let n=0; n<i; n++) {
 +        zeile = "";
 +        for (let j=0; j<i-n-1; j++) {
 +            zeile += " ";
 +        }
 +        zeile += "/";
 +        for (let j=0; j<1+n*2; j++) {
 +            zeile += " ";
 +        }
 +        console.log(zeile+"\\");
 +    }
 +    zeile = "";
 +    for (let j=0; j<i*2+1; j++) {
 +        zeile+="-";
 +    }
 +    console.log(zeile);
 +    zeile = "";
 +    for (let j=0; j<i-1; j++) {
 +        zeile+=" ";
 +    }
 +    zeile+="|||";
 +    for (let j=0; j<2; j++) {
 +        console.log(zeile);
 +    }
 +    console.log("\n\n");
 +}
 +</code>
 +</hidden>