MINT lernen

Abituraufgaben: Statische Reihungen

Zwei Aufgaben im Stil des Abiturs — Fächer einer Paketstation und Sitzplätze im Fernbus.

Dein Fortschritt:
0 / 0 Aufgaben
1

Eine Paketstation verwalten

AFB I–II

Eine Paketstation hat zwölf Fächer, die für die Kundschaft mit den Nummern 1 bis 12 beschriftet sind. Die Steuerung speichert in einer Reihung belegt mit 12 Wahrheitswerten, ob ein Fach belegt ist. Das Fach mit dem Schild 1 gehört zum Index 0.

Beim Start werden folgende Anweisungen ausgeführt:

boolean[] belegt = new boolean[12];
belegt[4] = true;
belegt[11] = true;
Paketstation am Bahnhof (Vorderansicht)
123456789101112Schild = Fachnummer für die Kundschaft (1 bis 12) · orange = belegt
Im Programm: boolean[] belegt mit 12 Elementen
  1. Beschreiben Sie, welchen Zustand die Reihung nach diesen drei Anweisungen hat und welche Fächer (Schildnummern) belegt sind.
  2. Anschließend werden belegt[0] = true;, belegt[4] = false; und belegt[7] = belegt[11]; ausgeführt. Stellen Sie den Inhalt der Reihung danach als Kästchenfolge mit Indizes dar.
  3. Ein Kollege schreibt für das Fach mit dem Schild 12 die Anweisung belegt[12] = true;. Erläutern Sie, was beim Ausführen passiert, und geben Sie allgemein an, wie man aus einer Schildnummer nr den Index erhält.
  4. Implementieren Sie eine Methode boolean istFrei(boolean[] belegt, int nr), die für eine Schildnummer nr zurückgibt, ob das Fach frei ist. Für ungültige Nummern (kleiner als 1 oder größer als die Anzahl der Fächer) soll false zurückgegeben werden.

Hinweise

Hinweis zu Aufgabe a)
Welchen Standardwert haben die Plätze einer boolean-Reihung nach new?
Hinweis zu Aufgabe b)
Arbeiten Sie die drei Anweisungen der Reihe nach ab; die dritte liest einen Wert und schreibt ihn an einen anderen Platz.
Hinweis zu Aufgabe c)
Vergleichen Sie Schildnummer und Index an Fach 1 und an Fach 12.Erläutern: nachvollziehbar und verständlich machen, mit Beispiel.
Hinweis zu Aufgabe d)
Zuerst die ungültigen Nummern abfangen, dann belegt[nr - 1] auswerten. „Frei“ ist das Gegenteil von „belegt“.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

new boolean[12] erzeugt 12 Plätze mit dem Standardwert false (frei). Danach sind belegt[4] und belegt[11] true, alle anderen false. Belegt sind also die Fächer mit den Schildern 5 und 12 (Index + 1), wie in der Abbildung.

Erwartungshorizont zu Aufgabe b)

Index 0 bis 11: true, false, false, false, false, false, false, true, false, false, false, true. belegt[0] wird belegt (Schild 1), belegt[4] wieder frei, belegt[7] erhält den Wert von belegt[11], also true (Schild 8). Belegt: Schilder 1, 8 und 12. Darstellung als 12 Kästchen mit Indizes 0 bis 11 unter den Kästchen.

Erwartungshorizont zu Aufgabe c)

Die Reihung hat die Indizes 0 bis 11; belegt[12] liegt außerhalb. Das Programm übersetzt, bricht aber beim Ausführen mit einer ArrayIndexOutOfBoundsException ab. Weil die Zählung der Kundschaft bei 1 und die der Indizes bei 0 beginnt, gilt allgemein: Index = nr − 1. Richtig ist belegt[11] = true;.

Erwartungshorizont zu Aufgabe d)
boolean istFrei(boolean[] belegt, int nr) {
    if (nr < 1 || nr > belegt.length) {
        return false;
    }
    return !belegt[nr - 1];
}

Bewertet werden: Prüfung beider Grenzen mit belegt.length (nicht fest 12), Umrechnung nr − 1, Rückgabe der Negation. Eine Lösung mit if (belegt[nr - 1]) return false; else return true; ist gleichwertig.

2

Sitzplätze im Fernbus

AFB II–III

Ein Fernbus hat 52 Sitzplätze. Für jede Fahrt speichert das Buchungssystem in einer Reihung sitz mit 52 ganzen Zahlen die Kundennummer der Person, die den Platz gebucht hat; 0 bedeutet frei. Der Platz mit der Nummer p (1 bis 52) hat den Index p − 1.

Ein Auszubildender testet das System mit diesem Pseudocode (Index ab 0):

sitz ← neue Reihung mit 52 ganzen Zahlen, alle 0
sitz[0] ← 4711
sitz[1] ← 815
reserve ← sitz
reserve[1] ← 0
sitz[2] ← reserve[0] + 1
  1. Analysieren Sie den Pseudocode: Geben Sie den Inhalt von sitz[0], sitz[1] und sitz[2] am Ende an und erklären Sie das Ergebnis für sitz[1].
  2. Eine ganze Zahl belegt 4 Byte. Schätzen Sie den Speicherbedarf für die Sitzplatzreihungen aller Fahrten eines Jahres ab, wenn das Unternehmen täglich 120 Fahrten anbietet.
  3. Entwerfen Sie ein Struktogramm für einen Algorithmus umbuchen(sitz, von, nach), der die Buchung vom Platz von auf den Platz nach (Platznummern 1 bis 52) verlegt. Er soll wahr zurückgeben, wenn das gelungen ist, und falsch, wenn eine Platznummer ungültig ist, von frei ist oder nach schon belegt ist.
  4. Das Unternehmen möchte zusätzlich eine Warteliste für ausgebuchte Fahrten führen und dafür ebenfalls eine statische Reihung verwenden. Erörtern Sie diesen Vorschlag.

Hinweise

Hinweis zu Aufgabe a)
Was bewirkt die Zuweisung reserve ← sitz bei Reihungen — Kopie der Werte oder zweiter Name?
Hinweis zu Aufgabe b)
Plätze pro Fahrt · Byte pro Platz · Fahrten pro Tag · Tage pro Jahr. Runden Sie sinnvoll.Abschätzen: Größenordnung durch begründete Überlegung angeben.
Hinweis zu Aufgabe c)
Erst alle Fehlerfälle prüfen (Verzweigungen mit „gib falsch zurück“), dann umbuchen: Wert kopieren, alten Platz auf 0 setzen.
Hinweis zu Aufgabe d)
Wovon hängt die Länge einer Warteliste ab, und was passiert, wenn die Reihung voll ist? Nennen Sie Argumente für und gegen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

reserve ← sitz legt keine zweite Reihung an; beide Namen verweisen auf dieselbe Reihung. Daher setzt reserve[1] ← 0 auch sitz[1] auf 0 — die Buchung von Kunde 815 ist gelöscht. Am Ende: sitz[0] = 4711, sitz[1] = 0, sitz[2] = 4712.

Erwartungshorizont zu Aufgabe b)

Pro Fahrt \(52\cdot4=208\) Byte. Pro Jahr \(120\cdot365=43\,800\) Fahrten, also \(43\,800\cdot208=9\,110\,400\) Byte \(\approx 9\) MB. Der Bedarf wächst linear mit der Zahl der Fahrten; für heutige Rechner ist er gering. (Zusätzlicher Verwaltungsaufwand pro Reihung darf vernachlässigt werden.)

Erwartungshorizont zu Aufgabe c)

Wichtig: Gültigkeit der Nummern vor dem ersten Zugriff prüfen; Reihenfolge kopieren → alten Platz freigeben (umgekehrt ginge die Kundennummer verloren). Gleichwertige Lösungen mit nacheinander geprüften Fehlerfällen sind zulässig.

Erwartungshorizont zu Aufgabe d)

Dafür: Reihungen sind einfach, der Zugriff über den Index ist schnell; eine Obergrenze (z. B. 20 Plätze) lässt sich betrieblich begründen. Dagegen: Die Länge einer Warteliste ist vorher unbekannt; ist die Reihung zu klein, müssen Interessenten abgewiesen oder muss eine größere Reihung angelegt und umkopiert werden, ist sie zu groß, bleibt Speicher ungenutzt. Beim Nachrücken der ersten Person müssten alle anderen Einträge um einen Platz verschoben werden. Fazit: Für die Sitzplätze passt die feste Länge, für die Warteliste eignet sich eine Struktur mit veränderlicher Länge (dynamische Reihung oder Schlange, Kapitel 4) besser. Bewertet wird die begründete Abwägung, nicht das Ergebnis.