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.
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.
int fällt der Rest weg. Dann zählen, welche Weiten echt größer als 420 sind.Vollständige Lösung
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.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.
i = 1, weil immer mit dem Vorgänger h[i − 1] verglichen wird.Vollständige Lösung
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.Ein kleiner Kinosaal hat 4 Reihen mit je 6 Plätzen. saal[r][p] ist 1, wenn der Platz besetzt ist, sonst 0.
| saal | p = 0 | p = 1 | p = 2 | p = 3 | p = 4 | p = 5 |
|---|---|---|---|---|---|---|
| r = 0 | 1 | 1 | 0 | 1 | 1 | 0 |
| r = 1 | 0 | 0 | 1 | 1 | 1 | 1 |
| r = 2 | 1 | 0 | 0 | 0 | 1 | 0 |
| r = 3 | 1 | 1 | 1 | 1 | 0 | 1 |
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.
r, innere über die Plätze p; für jede Reihe die Nullen zählen.Vollständige Lösung
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; } }