MINT lernen

Abituraufgaben: Reihungen durchlaufen

Zwei Aufgaben im Stil des Abiturs — Wasserverbrauch einer Woche und Laufzeiten beim Sportfest.

Dein Fortschritt:
0 / 0 Aufgaben
1

Wasserverbrauch einer Woche

AFB I–II

Ein digitaler Wasserzähler speichert den Tagesverbrauch einer Familie (in Litern) in einer Reihung v. Die Abbildung zeigt die Werte einer Woche und einen Algorithmus zur Auswertung.

Wasserverbrauch einer Familie in Litern (Montag bis Sonntag)
Index 0 = Montag, Index 6 = Sonntag
  1. Stellen Sie den Ablauf des Algorithmus auswerten für die abgebildete Reihung in einer Tracetabelle mit den Spalten i, v[i], summe, Bedingung und maxTag dar.
  2. Beschreiben Sie, welche Bedeutung die beiden Rückgabewerte im Sachzusammenhang haben, und geben Sie die Ergebnisse für die abgebildete Woche an.
  3. Der durchschnittliche Tagesverbrauch soll als ganze Zahl mit summe / 7 berechnet werden, wobei / bei ganzen Zahlen ganzzahlig dividiert. Wenden Sie diese Berechnung auf die Woche an und bewerten Sie die Abweichung vom exakten Wert.
  4. Implementieren Sie in Java eine Methode int tageUeber(int[] v, int grenze), die zurückgibt, an wie vielen Tagen der Verbrauch über grenze lag.

Hinweise

Hinweis zu Aufgabe a)
Eine Zeile für den Anfangszustand, dann eine Zeile pro Schleifendurchlauf.
Hinweis zu Aufgabe b)
Der zweite Rückgabewert ist ein Index, kein Verbrauch. Welcher Wochentag gehört dazu?
Hinweis zu Aufgabe c)
Den Rest der Division beachten: \(1576 \bmod 7\).
Hinweis zu Aufgabe d)
Muster „Zählen“: Zähler mit 0 starten, bei erfüllter Bedingung um 1 erhöhen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
iv[i]summev[i] > v[maxTag]maxTag
––0–0
0182182falsch0
1205387wahr1
2176563falsch1
3240803wahr3
41981001falsch3
53101311wahr5
62651576falsch5

Bei i = 0 wird v[0] mit sich selbst verglichen: 182 > 182 ist falsch.

Erwartungshorizont zu Aufgabe b)

summe ist der Gesamtverbrauch der Woche: 1576 Liter. maxTag ist der Index des Tages mit dem höchsten Verbrauch: 5, also Samstag mit 310 Litern. Bei gleich hohen Werten liefert der Algorithmus wegen > den ersten dieser Tage.

Erwartungshorizont zu Aufgabe c)

\(1576 / 7 = 225\) (ganzzahlig, Rest 1). Exakt sind es \(1576/7\approx225{,}14\) Liter. Die Abweichung von etwa 0,14 Liter ist hier unerheblich; sie beträgt aber bis zu knapp 1 Liter und wird bei kleinen Werten relativ groß. Für einen genauen Wert muss mit Kommazahlen gerechnet werden (in Java z. B. (double) summe / 7).

Erwartungshorizont zu Aufgabe d)
int tageUeber(int[] v, int grenze) {
    int anzahl = 0;
    for (int i = 0; i < v.length; i++) {
        if (v[i] > grenze) {
            anzahl++;
        }
    }
    return anzahl;
}

Eine for-each-Schleife for (int x : v) ist ebenso richtig, weil nur gelesen wird. Für die abgebildete Woche liefert tageUeber(v, 200) den Wert 4.

2

Laufzeiten beim Sportfest

AFB II–III

Beim 100-m-Lauf eines Sportfests werden die Zeiten (in Sekunden) in einer Reihung zeit gespeichert, z. B. zeit = {13.4, 12.9, 14.1, 12.6, 13.0, 15.2}. Eine Schülerin hat folgenden Algorithmus für die Siegerzeit geschrieben:

bester ← 0
für i von 0 bis Länge von zeit − 1
    wenn zeit[i] < bester dann
        bester ← zeit[i]
gib bester zurück
  1. Analysieren Sie den Algorithmus: Geben Sie an, welchen Wert er für das Beispiel zurückgibt, und begründen Sie, warum er für keine Eingabe eine richtige Siegerzeit liefert.
  2. Verändern Sie den Algorithmus so, dass er korrekt arbeitet und statt der Siegerzeit die Startnummer (Index) des schnellsten Läufers zurückgibt. Stellen Sie das Ergebnis als Struktogramm dar.
  3. Für die Siegerehrung sollen alle Läuferinnen und Läufer gezählt werden, deren Zeit höchstens 5 % über der Siegerzeit liegt. Entwerfen Sie dafür einen Algorithmus als Struktogramm und geben Sie das Ergebnis für das Beispiel an.
  4. Schätzen Sie die Anzahl der Vergleiche zwischen zwei Zeiten ab, die Ihr Algorithmus aus Teil c) bei \(n\) Läufern benötigt. Vergleichen Sie mit einem Verfahren, das für jeden Läufer einzeln alle anderen Zeiten durchgeht, um zu prüfen, ob er der Sieger ist.

Hinweise

Hinweis zu Aufgabe a)
Welche Laufzeiten sind kleiner als 0?
Hinweis zu Aufgabe b)
Startwert und Vergleich ändern: Man merkt sich den Index pos und vergleicht mit zeit[pos].
Hinweis zu Aufgabe c)
Zwei Durchläufe: zuerst die Siegerzeit bestimmen, dann zählen. „Höchstens 5 % mehr“ heißt \(\le 1{,}05\cdot\text{Siegerzeit}\).
Hinweis zu Aufgabe d)
Zählen Sie getrennt für den ersten und den zweiten Durchlauf. Beim Vergleichsverfahren prüft jeder Läufer \(n-1\) andere.Abschätzen: Größenordnung durch begründete Überlegung angeben.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Der Algorithmus gibt 0 zurück. Da alle Zeiten positiv sind, ist die Bedingung zeit[i] < 0 nie erfüllt; bester behält den Startwert 0, der gar keine gemessene Zeit ist. Das gilt für jede Eingabe mit positiven Zeiten, also für alle realen Läufe. Ursache ist der Startwert: Er muss ein Element der Reihung sein, z. B. zeit[0].

Erwartungshorizont zu Aufgabe b)

Für das Beispiel: pos = 3 (12,6 s). Beginnt die Schleife bei 0, ist das ebenfalls richtig, kostet aber einen unnötigen Vergleich.

Erwartungshorizont zu Aufgabe c)

Beispiel: Grenze \(1{,}05\cdot12{,}6=13{,}23\) s. Darunter bzw. gleich: 12,9; 12,6; 13,0 → 3 Personen (die Siegerin bzw. der Sieger zählt mit). Der Aufruf von schnellster aus b) darf auch ausgeschrieben werden.

Erwartungshorizont zu Aufgabe d)

Erster Durchlauf (Minimum): \(n-1\) Vergleiche. Zweiter Durchlauf (Zählen): \(n\) Vergleiche. Zusammen \(2n-1\), also linear in \(n\); bei 1000 Läufern 1999 Vergleiche. Das Vergleichsverfahren braucht für jeden der \(n\) Läufer bis zu \(n-1\) Vergleiche, also bis zu \(n(n-1)\) — bei 1000 Läufern 999 000. Bei doppelter Teilnehmerzahl verdoppelt sich der Aufwand des eigenen Algorithmus nur, der des Vergleichsverfahrens vervierfacht sich ungefähr.