Eine Navigations-App
AFB I–IIEine Navigations-App bietet drei Funktionen: (1) eine Liste von Zwischenzielen, in die man unterwegs an beliebiger Stelle einen Tankstopp einfügen kann; (2) einen Zurück-Knopf, der zur zuletzt angezeigten Ansicht wechselt; (3) Verkehrsmeldungen, die in der Reihenfolge ihres Eingangs angesagt werden.
- Ordnen Sie jeder Funktion eine geeignete Datenstruktur zu.
- Erläutern Sie Ihre Zuordnung für die Funktionen (1) und (3).
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
(1) dynamische Reihung, (2) Stapel, (3) Schlange.
Erwartungshorizont zu Aufgabe b)
(1) Zwischenziele werden gezielt an einer Position eingefügt und über ihre Position angesprochen — das kann nur die dynamische Reihung (insertAt, getItem). (3) Die zuerst eingegangene Meldung wird zuerst angesagt (FIFO) — Eingang mit enqueue, Ansage mit dequeue.
Bestellsystem der Cafeteria
AFB II–IIIIn der Schul-Cafeteria werden Bestellungen über Tablets aufgegeben und in der Reihenfolge des Eingangs zubereitet. Jede Bestellung hat eine Nummer. Neu gewünscht ist, dass Bestellungen storniert werden können, solange sie noch nicht zubereitet werden.
- Vergleichen Sie Stapel, Schlange und dynamische Reihung hinsichtlich ihrer Eignung für das Bestellsystem mit Stornierung.
- Entwerfen Sie eine Methode
stornieren(Queue<Integer> q, int nr), die eine Bestellung aus einer Schlange entfernt, ohne die Reihenfolge der übrigen zu ändern. Die Hilfsmethodeanzahldarf verwendet werden. - Beurteilen Sie, ob das System auf eine dynamische Reihung umgestellt werden sollte.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Stapel: ungeeignet, weil die neueste Bestellung zuerst zubereitet würde. Schlange: Reihenfolge passt (FIFO); Stornieren ist nur durch vollständigen Durchlauf mit Wiederanstellen möglich. Dynamische Reihung: Reihenfolge lässt sich nachbilden (append, getItem(0)/delete(0)), Stornieren direkt über Suche und delete(i).
Erwartungshorizont zu Aufgabe b)
public void stornieren(Queue<Integer> q, int nr) {
int n = anzahl(q);
for (int i = 0; i < n; i++) {
int b = q.dequeue();
if (b != nr) {
q.enqueue(b);
}
}
}Erwartungshorizont zu Aufgabe c)
Für die Reihung spricht der direkte Zugriff beim Stornieren und die Möglichkeit, die Position einer Bestellung anzuzeigen. Für die Schlange spricht, dass sie die FIFO-Regel erzwingt: Niemand kann versehentlich vorgezogen werden, der Quelltext zum Zubereiten ist kürzer. Da Stornierungen selten sind und mit einem Durchlauf erledigt werden können, ist die Schlange vertretbar; wird häufig storniert oder die Position angezeigt, ist die Reihung vorzuziehen.
