Teilnehmerliste einer AG
AFB I–IIDie 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");
- Geben Sie den Inhalt von
listenach jeder der vier Anweisungen an. - Beschreiben Sie am Beispiel der zweiten und dritten Anweisung den Unterschied zwischen
deleteundsetItem.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
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.
Kurs mit Warteliste
AFB II–IIIEin 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.
- Implementieren Sie die Methode
anmelden(String name): Ist noch ein Platz frei, kommt die Person inteilnehmer, sonst ans Ende derwarteliste. - Erweitern Sie die Klasse um die Methode
abmelden(int platz): Die Person an Indexplatzverlässt den Kurs; wartet jemand, rückt die erste Person der Warteliste nach. - Beurteilen Sie, ob die Warteliste statt als dynamische Reihung auch als Schlange verwaltet werden könnte.
Hinweise
Hinweis zu Aufgabe a)
getLength().Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
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.
