MINT lernen

Übungen: Reihungen durchlaufen

Zehn Übungen zum Durchlaufen von Reihungen — vom Schleifenkopf bis zum Maximum, das es gar nicht gibt.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Zehn Übungen zu Zählschleife, for-each, Summe, Maximum und Zählen — von AFB I bis AFB III. Jede Übung gibt sofort Rückmeldung; wenn Sie nicht weiterkommen, helfen die gestuften Tipps.

A1
Schleifenkopf und Indexfolge
AFB I

Ein Schrittzähler speichert die Werte von acht Tagen: int[] schritte = new int[8]; Ordnen Sie jedem Schleifenkopf die Indizes zu, die i im Rumpf nacheinander annimmt.

Ansatz: Lesen Sie Startwert, Bedingung und Schrittweite getrennt ab.
Weiter: Die Länge ist 8, der letzte gültige Index also 7.
A2
Spendenlauf
AFB I

Beim Spendenlauf erlaufen fünf Klassen diese Beträge (in €): int[] spende = {12, 5, 20, 8, 14};

int s = 0;
for (int x : spende) {
    if (x > 10) {
        s = s + x;
    }
}

Berechnen Sie den Wert von s nach der Schleife.

Tragen Sie das Ergebnis ein — Enter prüft direkt.
Addiert werden nur Beträge über 10: \(12+20+14=46\). Die 5 und die 8 werden übersprungen. Die for-each-Schleife reicht hier, weil nur gelesen wird.
Ansatz: Gehen Sie die fünf Werte einzeln durch und prüfen Sie jeweils die Bedingung.
Weiter: Drei Werte sind größer als 10.
A3
for-each unter der Lupe
AFB I

Eine Wetterstation speichert Niederschläge in double[] regen und durchläuft sie mit for (double w : regen) { … }. Nennen Sie zu jeder Aussage, ob sie stimmt.

5 Aussagen nacheinander. Eine falsche Einschätzung reicht — dann starten Sie die Serie mit „Neue Runde“ neu.
Aussage 1 von 5

Faustregel: for-each zum Lesen von Werten, Zählschleife, sobald der Index gebraucht wird oder geschrieben werden soll.
Ansatz: Überlegen Sie, was w ist: ein Index oder ein Wert?
Weiter: Eine Kopie zu ändern, ändert nicht das Original.
A4
Tracetabelle: weitester Wurf
AFB II

Die Weiten eines Ballwurf-Wettbewerbs (in m): int[] weite = {38, 41, 36, 44, 44, 40};

int max = weite[0];
for (int i = 1; i < weite.length; i++) {
    if (weite[i] > max) {
        max = weite[i];
    }
}

Stellen Sie den Ablauf als Tracetabelle dar: Bedingung (wahr/falsch) und max nach jedem Durchlauf.

Tragen Sie „wahr“ oder „falsch“ und die Zahlen ein und prüfen Sie dann. Enter in einem Feld prüft ebenfalls.
iweite[i]weite[i] > maxmax danach
141
236
344
444
540
Bei i = 4 ist 44 > 44 falsch — ein gleich großer Wert ersetzt das Maximum nicht. Deshalb bliebe bei der Suche nach dem Index des Maximums der erste Treffer (Index 3) stehen.
Ansatz: Vergleichen Sie jeweils mit dem aktuellen max, nicht mit dem Startwert.
Weiter: Achtung bei i = 4: Ist 44 echt größer als 44?
A5
Zählschleife zusammensetzen
AFB II

Das Programm soll zählen, an wie vielen Tagen der Schrittzähler mindestens 10 000 Schritte gemessen hat. Erstellen Sie den Code, indem Sie in jedem Menü den passenden Baustein wählen.

Wählen Sie in jedem Menü den passenden Eintrag und prüfen Sie dann alle auf einmal.

int anzahl = ;

for (int i = ; i < schritte.length; i++) {

  if (schritte[i] 10000) {

     } }

Ein Zähler startet bei 0, und die Schleife muss bei 0 beginnen, weil — anders als beim Maximum — kein Element schon „verbraucht“ ist. „Mindestens“ heißt >=. anzahl = anzahl + schritte[i] wäre die Summe, anzahl = i merkt sich nur einen Index.
Ansatz: Welche der drei Muster Summe, Maximum, Zählen liegt vor?
Weiter: „Mindestens 10 000“ schließt 10 000 selbst mit ein.
A6
Fehlersuche: günstigstes Angebot
AFB II

Tim sucht in int[] angebot (Preise in Cent, alle positiv) das günstigste Angebot. Überprüfen Sie seinen Code — drei Zeilen sind falsch.

In diesem Code stecken Fehler. Klicken Sie genau die falschen Zeilen an — die richtigen müssen stehen bleiben.
Drei typische Fehler auf einmal: falscher Startwert, <= in der Bedingung und Index statt Wert. Wer die Position und den Preis braucht, speichert den Index pos und vergleicht mit angebot[pos].
Ansatz: Prüfen Sie Startwert, Schleifenbedingung und die Zuweisung im if.
Weiter: Was steht nach min = i; in min — ein Preis oder eine Position?
A7
Quizpunkte auswerten
AFB II

Sechs Teams erreichen im Quiz int[] punkte = {17, 23, 9, 20, 14, 12}; Bestimmen Sie die Werte, die ein Java-Programm schrittweise berechnet.

Arbeiten Sie die Kette Schritt für Schritt ab: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. summe aller Punkte
  2. summe / punkte.length (beides int)
  3. (double) summe / punkte.length (zwei Nachkommastellen)
  4. Anzahl der Teams über dem genauen Durchschnitt
\(95/6\) ergibt ganzzahlig \(15\) (Rest 5), genau \(15{,}8\overline{3}\). Über \(15{,}83\) liegen 17, 23 und 20. Mit dem ganzzahligen Schnitt 15 hätte man dieselbe Anzahl erhalten — bei einem Team mit genau 15 Punkten würde sich das Ergebnis aber unterscheiden.
Ansatz: Addieren Sie zuerst alle Werte; dann einmal ganzzahlig und einmal genau teilen.
Weiter: Für den letzten Schritt braucht man einen zweiten Durchlauf mit der Bedingung punkte[i] > schnitt.
A8
Gebühren erhöhen
AFB III Mix

Ein Verein will alle Kursgebühren um 10 % erhöhen. Der Code läuft ohne Fehlermeldung, aber die Reihung bleibt unverändert. Analysieren Sie den Code und korrigieren Sie die beiden fehlerhaften Zeilen, ohne weitere Zeilen hinzuzufügen.

Klicken Sie jede fehlerhafte Zeile an und tragen Sie im aufklappenden Feld die korrigierte Zeile ein. Geprüft werden Auswahl und Korrektur (Leerzeichen sind egal).
In der for-each-Schleife ist g nur eine Kopie des Elements. Schreiben geht nur über den Index (2.1.1): gebuehr[i] = … — und dafür braucht man die Zählschleife.
Ansatz: Welche Variable wird in Zeile 3 verändert — die Reihung oder etwas anderes?
Weiter: Zum Schreiben braucht man gebuehr[i], also einen Index i.
A9
Zustandswechsel zählen
AFB III

Eine Ampel protokolliert jede Sekunde ihren Zustand (0 = rot, 1 = gelb, 2 = grün): int[] ampel = {0, 0, 1, 2, 2, 2, 0, 1, 1};

int wechsel = 0;
for (int i = 0; i < ampel.length - 1; i++) {
    if (ampel[i] != ampel[i + 1]) {
        wechsel++;
    }
}

Ermitteln Sie den Wert von wechsel am Ende.

Tragen Sie das Ergebnis ein — Enter prüft direkt.
Verglichen werden die 8 Nachbarpaare (0|0), (0|1), (1|2), (2|2), (2|2), (2|0), (0|1), (1|1); verschieden sind 4. Die Bedingung i < ampel.length - 1 ist nötig, weil im Rumpf ampel[i + 1] gelesen wird — bei i = 8 gäbe es ampel[9] nicht.
Ansatz: Bei 9 Elementen gibt es 8 Nachbarpaare.
Weiter: Zählen Sie die Stellen, an denen sich die Zahl ändert.
A10
Das Maximum im Minus
AFB III Trick

Vier Konten stehen im Minus: int[] kontostand = {-120, -45, -300, -80};

int max = 0;
for (int i = 0; i < kontostand.length; i++) {
    if (kontostand[i] > max) {
        max = kontostand[i];
    }
}
System.out.println(max);

Geben Sie die Ausgabe des Programms an.

Tragen Sie das Ergebnis ein — Enter prüft direkt.
Kein Kontostand ist größer als 0, also wird max nie überschrieben: Ausgegeben wird 0 — ein Wert, der gar nicht vorkommt. Richtig wäre int max = kontostand[0];, dann erhält man −45.
Ansatz: Führen Sie das Programm genau so aus, wie es dasteht — nicht so, wie es gemeint ist.
Weiter: Ist irgendein Element größer als der Startwert?