Aufgaben

== Aufgaben
  1. Schreibe das Programm Einmaleins, das für eine beliebige Zahl das kleine Einmaleins ausgibt. Lösung

. Schreibe das Programm _Einmaleins_, das für eine beliebige Zahl das kleine Einmaleins ausgibt. <<tags_a,Lösung>>
  1. Schreibe das Programm Teiler, das zu einer Zahl alle enthaltenen Teiler ausgibt. Lösung

[start=2] . Schreibe das Programm _Teiler_, das zu einer Zahl alle enthaltenen Teiler ausgibt. <<tags_b,Lösung>>
  1. Schreibe das Programm BIM-BAM, das das Läuten einer Kirchturmuhr steuert:

    Um 1h00 wird ein Mal BAM ausgegeben, um 1h15 BAM-BIM, um 1h30 BAM-BIM-BIM, um 4h45 BAM-BAM-BAM-BAM-BIM-BIM-BIM.

    Das Programm soll alle Turmschläge von 0h15 bis 12h00 ausgeben. Lösung

[start=3] . Schreibe das Programm _BIM-BAM_, das das Läuten einer Kirchturmuhr steuert: + Um 1h00 wird ein Mal BAM ausgegeben, um 1h15 BAM-BIM, um 1h30 BAM-BIM-BIM, um 4h45 BAM-BAM-BAM-BAM-BIM-BIM-BIM. + Das Programm soll alle Turmschläge von 0h15 bis 12h00 ausgeben. <<tags_c,Lösung>>
  1. Erweitere Programm Teiler zum Programm Primzahlen so, dass alle Primzahlen zwischen 2 und 1000 ausgegeben werden. Lösung

[start=4] . Erweitere Programm _Teiler_ zum Programm _Primzahlen_ so, dass alle Primzahlen zwischen 2 und 1000 ausgegeben werden. <<tags_d,Lösung>>

Einmaleins

int zahl = 7;

for (int i = 1; i <= 10; i++) {
    System.out.println(i * zahl);
}
Java
== Einmaleins [source,java,indent=0] ---- int zahl = 7; for (int i = 1; i <= 10; i++) { System.out.println(i * zahl); } ----

Teiler

int zahl = 72;
for (int i = 1; i <= zahl; i++) { (1)
    if (zahl % i == 0) { (2)
        System.out.println(i);
    }
}
== Teiler [indent=0] ---- int zahl = 72; for (int i = 1; i <= zahl; i++) { //<1> if (zahl % i == 0) { //<2> System.out.println(i); } } ----
1 Lass das i von 1 in Einserschritten bis zur Zahl selbst laufen
2 Wenn die zu untersuchende Zahl zahl durch das aktuelle i ohne Rest teilbar ist, dann gib das entsprechende i aus, da es sich dabei um einen Teiler von zahl handeln muss
<1> Lass das `i` von 1 in Einserschritten bis zur Zahl selbst laufen <2> Wenn die zu untersuchende Zahl `zahl` durch das aktuelle `i` ohne Rest teilbar ist, dann gib das entsprechende `i` aus, da es sich dabei um einen Teiler von `zahl` handeln muss

BIMBAM

for (int s = 1; s <= 12; s++) { (1)
    for (int m = 0; m < 4; m++) { (2)
        for (int t = 0; t < s; t++) { (3)
            System.out.print("BAM");
            if (t != s - 1) {  (4)
                System.out.print("-");
            }
        }
        for (int u = 0; u < m; u++) { (5)
            System.out.print("-BIM");
        }
        System.out.println("");
    }
}
== BIMBAM [indent=0] ---- for (int s = 1; s <= 12; s++) { //<1> for (int m = 0; m < 4; m++) { //<2> for (int t = 0; t < s; t++) { //<3> System.out.print("BAM"); if (t != s - 1) { //<4> System.out.print("-"); } } for (int u = 0; u < m; u++) { //<5> System.out.print("-BIM"); } System.out.println(""); } } ----
1 In s ist die aktuelle Stundenzahl gespeichert
2 In m ist gespeichert, die wie vielte Viertelstunde gerade aktuell ist (0 für xx:00, 1 für xx:15, 2 für xx:30 und 3 für xx:45)
3 Gib so oft "BAM" aus, wie in s steht …​
4 …​ und danach ein "-", außer es ist das letzte BAM
5 Gib so oft "-BIM" aus, wie es in m steht
<1> In `s` ist die aktuelle Stundenzahl gespeichert <2> In `m` ist gespeichert, die wie vielte Viertelstunde gerade aktuell ist (0 für xx:00, 1 für xx:15, 2 für xx:30 und 3 für xx:45) <3> Gib so oft "BAM" aus, wie in `s` steht ... <4> ... und danach ein "-", außer es ist das letzte BAM <5> Gib so oft "-BIM" aus, wie es in `m` steht

Primzahlen von 2 bis 1000

for (int zahl = 2; zahl <= 1000; zahl++) { (1)
    int teilerZaehler = 0; (2)
    for (int i = 1; i <= zahl; i++) { (3)
        if (zahl % i == 0) { (4)
            teilerZaehler++; (5)
        }
    }
    if (teilerZaehler == 2) { (6)
        System.out.println(zahl);
    }
}
== Primzahlen von 2 bis 1000 [indent=0] ---- for (int zahl = 2; zahl <= 1000; zahl++) { //<1> int teilerZaehler = 0; //<2> for (int i = 1; i <= zahl; i++) { //<3> if (zahl % i == 0) { //<4> teilerZaehler++; //<5> } } if (teilerZaehler == 2) { //<6> System.out.println(zahl); } } ----
1 Durchlaufe mit der Variable zahl alle Werte von 2 bis 1000. zahl ist jeweils die zu untersuchende Zahl
2 Die Variable teileZaehler zählt, wie viele Teiler die aktuelle Zahl zahl hat und wird für jede neue Zahl auf 0 zurückgesetzt
3 Nun soll die Anzahl unterschiedlicher Teiler gezählt werden. Dazu überprüfen wir zahl auf Teilbarkeit durch alle Werte zwischen 1 und dem Wert von zahl selbst.
4 Ist zahl durch i teilbar, dann …​
5 …​ erhöhe den Wert von teilerZaehler um 1
6 Wenn teilerZaehler den Wert 2 enthält, hat die Zahl genau zwei Teiler, so dass die Zahl ausgegeben werden kann.

Beachte, dass die Definition

"Eine Zahl ist eine Primzahl, wenn sie durch 1 und durch sich selbst teilbar ist"

falsch ist. Mit dieser Festlegung wäre auch die 1 eine Primzahl.

Richtig ist die Definition

"Eine Zahl ist eine Primzahl, wenn sie genau zwei unterschiedliche Teiler hat",

die auch im Programm verwendet wurde.

<1> Durchlaufe mit der Variable `zahl` alle Werte von 2 bis 1000. `zahl` ist jeweils die zu untersuchende Zahl <2> Die Variable `teileZaehler` zählt, wie viele Teiler die aktuelle Zahl `zahl` hat und wird für jede neue Zahl auf 0 zurückgesetzt <3> Nun soll die Anzahl unterschiedlicher Teiler gezählt werden. Dazu überprüfen wir `zahl` auf Teilbarkeit durch alle Werte zwischen 1 und dem Wert von `zahl` selbst. <4> Ist `zahl` durch `i` teilbar, dann ... <5> ... erhöhe den Wert von `teilerZaehler` um 1 <6> Wenn `teilerZaehler` den Wert 2 enthält, hat die Zahl genau zwei Teiler, so dass die Zahl ausgegeben werden kann. [WARNING] ==== Beachte, dass die Definition "Eine Zahl ist eine Primzahl, wenn sie durch 1 und durch sich selbst teilbar ist" falsch ist. Mit dieser Festlegung wäre auch die 1 eine Primzahl. Richtig ist die Definition "Eine Zahl ist eine Primzahl, wenn sie genau zwei unterschiedliche Teiler hat", die auch im Programm verwendet wurde. ====

Zurück zu den Aufgaben

<<tags_@, Zurück zu den Aufgaben>>