MINT lernen

Die dynamische Reihung

Zwei Abituraufgaben zur dynamischen Reihung — mit Hinweisen und Erwartungshorizont.

Dein Fortschritt:
0 / 0 Aufgaben
1

Teilnehmerliste einer AG

AFB I–II

Die Teilnehmerliste der Robotik-AG wird als dynamische Reihung verwaltet. Zu Beginn gilt liste = [Mia, Jonas, Lea, Tim] (Index 0 links). Anschließend werden nacheinander ausgeführt:

liste.insertAt(2, "Ole");
liste.delete(0);
liste.setItem(1, "Pia");
liste.append("Mia");
  1. Geben Sie den Inhalt von liste nach jeder der vier Anweisungen an.
  2. Beschreiben Sie am Beispiel der zweiten und dritten Anweisung den Unterschied zwischen delete und setItem.

Hinweise

Hinweis zu Aufgabe a)
Schreiben Sie die Reihung nach jeder Zeile neu auf und markieren Sie, welche Elemente dabei ihren Index ändern.
Hinweis zu Aufgabe b)
Achten Sie auf die Länge der Reihung und auf die Indizes der übrigen Elemente.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

[Mia, Jonas, Ole, Lea, Tim] → [Jonas, Ole, Lea, Tim] → [Jonas, Pia, Lea, Tim] → [Jonas, Pia, Lea, Tim, Mia]

Je Zeile 1 BE; wichtig: nach delete(0) steht Ole an Index 1, deshalb ersetzt setItem(1, …) Ole.

Erwartungshorizont zu Aufgabe b)

delete(0) entfernt Mia; alle folgenden Elemente rücken eine Position nach vorn, die Länge sinkt von 5 auf 4. setItem(1, "Pia") ersetzt nur den Inhalt an Index 1 (Ole wird zu Pia); kein Element verschiebt sich, die Länge bleibt 4.

2

Kurs mit Warteliste

AFB II–III

Ein Volkshochschulkurs hat höchstens 12 Plätze. Die Klasse Kurs besitzt zwei Attribute vom Typ DynArray<String>: teilnehmer und warteliste. Beide sind zu Beginn leer.

  1. Implementieren Sie die Methode anmelden(String name): Ist noch ein Platz frei, kommt die Person in teilnehmer, sonst ans Ende der warteliste.
  2. Erweitern Sie die Klasse um die Methode abmelden(int platz): Die Person an Index platz verlässt den Kurs; wartet jemand, rückt die erste Person der Warteliste nach.
  3. Beurteilen Sie, ob die Warteliste statt als dynamische Reihung auch als Schlange verwaltet werden könnte.

Hinweise

Hinweis zu Aufgabe a)
Die Anzahl der belegten Plätze liefert getLength().
Hinweis zu Aufgabe b)
Erst löschen, dann prüfen, ob die Warteliste leer ist. Die nachrückende Person steht an Index 0 der Warteliste.
Hinweis zu Aufgabe c)
Kriterien: Reihenfolge des Nachrückens — und was passiert, wenn sich jemand von der Warteliste abmeldet oder seinen Platz auf der Liste erfragt.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
public void anmelden(String name) {
    if (teilnehmer.getLength() < 12) {
        teilnehmer.append(name);
    } else {
        warteliste.append(name);
    }
}
Erwartungshorizont zu Aufgabe b)
public void abmelden(int platz) {
    if (platz >= 0 && platz < teilnehmer.getLength()) {
        teilnehmer.delete(platz);
        if (!warteliste.isEmpty()) {
            teilnehmer.append(warteliste.getItem(0));
            warteliste.delete(0);
        }
    }
}

Die Indexprüfung verhindert einen Laufzeitfehler bei ungültigem Platz.

Erwartungshorizont zu Aufgabe c)

Für das Nachrücken passt eine Schlange sehr gut: Wer sich zuerst auf die Warteliste setzt, rückt zuerst nach (FIFO, enqueue/dequeue). Soll sich aber jemand von der Warteliste abmelden oder seine Position erfahren, muss man mitten auf die Liste zugreifen. Das ist mit einer Schlange nur durch vollständiges Umladen möglich, mit der dynamischen Reihung direkt über den Index. Urteil: Schlange geeignet, solange nur nachgerückt wird; mit Abmeldungen und Positionsauskunft ist die dynamische Reihung die bessere Wahl.