Aufgabe Vorschlag AJ · Abitur Hessen Informatik GK 2022

Thema: Sortieren, Suchen und Laufzeit · Aus der Prüfung GK (2022)

Aufgabenstellung

Ausleihsystem StadtRad

Eine Großstadt hat ein Ausleihsystem namens StadtRad für Fahrräder eingeführt. Nach dem Motto „Aufsteigen und losfahren“ soll für die Bürgerinnen und Bürger an zahlreichen Leihstationen im gesamten Stadtgebiet die Möglichkeit bestehen, ein Rad auszuleihen und dieses wieder an derselben oder einer anderen Station zurückzugeben. Jede Station verfügt dabei über Stellplätze, an denen die Räder angeschlossen werden. Die Anzahl der Stellplätze ist an jeder Station gleich.

Zur Verwaltung des StadtRad-Ausleihsystems

erhalten die Stationen eine eindeutige Stationsnummer,

muss jeder Kunde im System registriert sein; er ist dann über seine Kundennummer zu identifizieren,

verfügt jedes Rad über eine eindeutige Radnummer, die bei der Ausleihe beim Kunden eingetragen wird. Ist ein Rad gerade nicht verliehen, ist die Radnummer beim Stellplatz eingetragen, an dem das Rad angeschlossen ist.

Den Kunden wird eine App zur Verfügung gestellt, mit der sie sich im System registrieren, die Verfügbarkeit von Rädern an einer Station überprüfen sowie deren Ausleihe und Rückgabe durchführen können.

Material 1

GUI der StadtRad-App

Material 2

Klassendiagramm der Klasse Station

Material 3

Methode zurückgeben(...) der Klasse Verwaltung

01 public boolean zurückgeben(int KundenNr, int StationsNr) {

02 Kunde einKunde = gibKunde(KundenNr);

03 Station eineStation = gibStation(StationsNr);

04 if (einKunde != null && eineStation != null) {

05 int RadNr = einKunde.getAusgeliehenesRad();

06 if (eineStation.abstellen(RadNr) == true) {

07 einKunde.setAusgeliehenesRad(0);

08 einKunde.setEndzeit();

09 einKunde.berechneGebühren();

10 return true;

11 }

12 }

13 return false;

14 }

Material 4

Methoden suche(...) und suche2(...)

01 public int suche(String Nachname, String Vorname) {

02 return suche2(0, AnzahlKunden - 1, Nachname, Vorname);

03 }

04

05 private int suche2(int a, int b, String Nachname, String Vorname) {

06 if (b < a)

07 return 0;

08 int m = (a + b) / 2;

09 if (Kunden[m].getNachname().equals(Nachname) &&

10 Kunden[m].getVorname().equals(Vorname))

11 return Kunden[m].getKundenNr();

12 if (Kunden[m].getNachname().compareTo(Nachname) > 0 ||

13 Kunden[m].getNachname().equals(Nachname) &&

14 Kunden[m].getVorname().compareTo(Vorname) > 0)

15 return suche2(a, m - 1, Nachname, Vorname);

16 else

17 return suche2(m + 1, b, Nachname, Vorname);

18 }

4

Für die Kundenbetreuung sollen die Kunden nach den Nachnamen sortiert werden. Bei gleichem Nachnamen soll als zusätzliches Sortierkriterium der Vorname hinzugenommen werden. Implementieren Sie einen Sortieralgorithmus für die im Feld Kunden der Klasse Verwaltung gespeicherten Kunden.

Programmierhinweis

public int compareTo(String anotherString)

String1.compareTo(String2) vergleicht String1 mit String2. Das Ergebnis ist kleiner als 0, falls String1 lexikographisch vor String2 kommt, und größer als 0, falls String1 lexikographisch nach String2 kommt. Falls die beiden Strings gleich sind, ist das Ergebnis 0.

5

Analysieren Sie die in Material 4 dargestellten Methoden zum Suchen.

Aufgabenstellung: Aufgabe Vorschlag AJ · Abitur Hessen Informatik GK 2022

Lösung

Nach den offiziellen Korrekturhinweisen

4. Implementieren Sie einen Sortieralgorithmus für die im Feld Kunden der Klasse Verwaltung gespeicherten Kunden.

Lösung: ```java public void sortieren() { for (int i = 0; i < AnzahlKunden - 1; i++) { int minIndex = i; for (int j = i + 1; j < AnzahlKunden; j++) { if (Kunden[minIndex].getNachname().compareTo(Kunden[j].getNachname()) > 0 || Kunden[minIndex].getNachname().equals(Kunden[j].getNachname()) && Kunden[minIndex].getVorname().compareTo(Kunden[j].getVorname()) > 0) { minIndex = j; } } Kunde Tausch = Kunden[i]; Kunden[i] = Kunden[minIndex]; Kunden[minIndex] = Tausch; } } ```

5. Analysieren Sie die in Material 4 dargestellten Methoden zum Suchen.

Lösung: Die öffentliche Methode `suche(...)` wird mit den Parametern `Nachname` und `Vorname` vom Datentyp `String` aufgerufen. Sie ruft die private Methode `suche2(...)` mit den Parametern 0, `AnzahlKunden - 1`, `Nachname` und `Vorname` auf und gibt den Rückgabewert von `suche2(...)` mittels return zurück. Die private Methode `suche2(...)` wird mit den zwei int-Parametern `a` und `b`, sowie einem Nach- und Vornamen aufgerufen. Gilt `b < a`, so wurde der Kundenname nicht im Kundenfeld gefunden und deshalb wird die Suche mit der Rückgabe 0 beendet. Andernfalls wird der ganzzahlige Mittelwert von `a` und `b` berechnet. Stimmen Nach- und Vorname des Kunden an der Stelle `m` mit den gegebenen Nach- und Vornamen überein, wird die Kundennummer zurückgegeben und die Suche beendet. Kommt der Nachname des Kunden an der Stelle `m` alphabetisch nach dem gesuchten Nachnamen oder bei gleichem Nachnamen der Vorname des Kunden an der Stelle `m` alphabetisch nach dem gesuchten Vornamen, so wird `suche2(...)` rekursiv im Bereich `a` bis `m - 1` des Kundenfeldes aufgerufen, anderenfalls im Bereich `m + 1` bis `b` und das Ergebnis des jeweiligen Funktionsaufrufs zurückgegeben. Es handelt sich um eine rekursive binäre Suche einer Kundennummer zu gegebenem Nach- und Vornamen im sortierten Kundenfeld.

Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium

Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.

Aufgabe Vorschlag AJ - Aufgabe 4.3 - Sortieren · GK 2021 ›

Mehr Aufgaben zu Sortieren, Suchen und Laufzeit