MINT üben

Reihungen, Suchen, Sortieren

Zehn Aufgaben zum Zusammenhänge-Herstellen — Programme analysieren, Tracetabellen führen, Verfahren vergleichen und Laufzeiten hochrechnen.

Dein Fortschritt:
0 / 0 Aufgaben
2

Aufgabenblock — AFB II

Zehn Aufgaben aus allen Unterkapiteln: Programme analysieren, zweidimensionale Reihungen auswerten, Such- und Sortierverfahren verfolgen und Vergleichszahlen herleiten — mit gestuften Tipps, wenn du nicht weiterkommst.

A1
Weitsprung-Auswertung
AFB II

Beim Sportfest werden die Weiten einer Riege (in cm) ausgewertet:

int[] weite = {412, 385, 450, 398, 471, 405};
int summe = 0;
for (int w : weite) {
    summe = summe + w;
}
int schnitt = summe / weite.length;
int besser = 0;
for (int w : weite) {
    if (w > schnitt) {
        besser++;
    }
}

Analysieren Sie das Programm: Welche Werte haben schnitt und besser am Ende? Beachten Sie den Datentyp von schnitt.

Ansatz: Erst die Summe aller sechs Weiten bilden, dann ganzzahlig durch 6 teilen.
Rechenweg: summe = 2521; 2521 / 6 = 420 Rest 1 — bei int fällt der Rest weg. Dann zählen, welche Weiten echt größer als 420 sind.
Lösung: a) 420 b) 2
Vollständige Lösung
summe = 412 + 385 + 450 + 398 + 471 + 405 = 2521. 2521 / 6 ist eine Division zweier int-Werte, also ganzzahlig: schnitt = 420 (der genaue Mittelwert wäre 420,17). Größer als 420 sind nur 450 und 471: besser = 2. Hinweis: Für den genauen Mittelwert müsste man z. B. (double) summe / weite.length rechnen.
A2
Abstiege zählen
AFB II

Ein Höhenprofil einer Wanderung (in 100 m) wird mit folgendem Programmausschnitt untersucht:

int z = 0;
for (int i = 1; i < h.length; i++) {
    if (h[i] < h[i - 1]) {
        z++;
    }
}

Untersuchen Sie, wie oft der Schleifenrumpf ausgeführt wird und welchen Wert z am Ende hat. Beschreiben Sie für sich in einem Satz, was z zählt.

Ansatz: Die Schleife beginnt bei i = 1, weil immer mit dem Vorgänger h[i − 1] verglichen wird.
Rechenweg: i läuft von 1 bis 6. Paare: (5,9) (9,7) (7,7) (7,3) (3,8) (8,6) — wo ist der rechte Wert kleiner?
Lösung: a) 6 b) 3
Vollständige Lösung
Bei 7 Elementen läuft i von 1 bis 6, also 6 Durchläufe. Ein echter Abstieg liegt bei 9 → 7, 7 → 3 und 8 → 6 vor; 7 → 7 zählt nicht. z = 3 ist die Anzahl der Abschnitte, in denen es bergab geht. Würde die Schleife bei i = 0 starten, gäbe es beim Zugriff h[−1] einen Laufzeitfehler.
A3
Belegung im Kinosaal
AFB II

Ein kleiner Kinosaal hat 4 Reihen mit je 6 Plätzen. saal[r][p] ist 1, wenn der Platz besetzt ist, sonst 0.

saalp = 0p = 1p = 2p = 3p = 4p = 5
r = 0110110
r = 1001111
r = 2100010
r = 3111101

Ein Programm soll mit zwei verschachtelten Schleifen die Anzahl aller besetzten Plätze bestimmen und den Index der Reihe mit den meisten freien Plätzen ausgeben. Werten Sie die Tabelle so aus, wie es das Programm tun würde.

Ansatz: Äußere Schleife über die Reihen r, innere über die Plätze p; für jede Reihe die Nullen zählen.
Rechenweg: Besetzt je Reihe: 4, 4, 2, 5. Frei je Reihe: 2, 2, 4, 1.
Lösung: a) 15 b) Reihe 2
Vollständige Lösung
Besetzt: 4 + 4 + 2 + 5 = 15 von 24 Plätzen. Frei je Reihe: 2, 2, 4, 1 → die meisten freien Plätze hat Reihe mit Index 2 (die dritte Reihe). Programmidee: for (int r = 0; r < saal.length; r++) { int frei = 0; for (int p = 0; p < saal[r].length; p++) { if (saal[r][p] == 0) frei++; } if (frei > maxFrei) { maxFrei = frei; besteReihe = r; } }