====== Karteikarten ====== Hans lernt für sein Abitur mit einer Lernkartei und verwendet dabei das folgende Verfahren: Er schreibt die Inhalte auf Karteikarten, so dass jeweils auf der Vorderseite eine Frage und auf der Rückseite die zugehörige Antwort stehen. Um regelmäßige Wiederholungen des Stofft sicherzustellen, verwendet er eine Box mit 5 hintereinander liegenden Fächern und stellt die Karten zunächst in das erste Fach. In jeder Runde verteilt er die Karten eines Fachs neu: Er nimmt die vordere Karte heraus und liest die Frage. Kann er sie korrekt beantworten wird sie als letzte Karte in das nächste Fach gestellt. Ist die Antwort nicht bekannt oder falsch, wird die Karte zurück in das erste Fach gestellt. Richtig bzw. falsch beantwortete Karten stellt Hans in das entsprechende Fach immer hinter die bereits vorhandenen Karten. Das Verfahren wird so lange wiederholt, bis das erste Fach geleert und damit die erste Runde beendet ist. Danach beginnt eine neue Runde mit den Karten aus dem zweiten Fach. Richtig beantwortete Karten werden wieder in das nächste Fach gelegt. Falsch beantwortete Karten kommen grundsätzlich zurück in das erste Fach und warten dort auf die nächste Runde. Jede neue Runde beginnt im vordersten Fach, das Karten enthält, und endet mit der Beantwortung der letzten Frage dieses Fachs. Die Fragen in Fach 5 werden nicht mehr gestellt. Sobald alle Karten im 5. Fach angekommen sind, ist eine Lernsession beendet. Das Vorgehen wird schematisch in der folgenden Abbildung dargestellt: {{ :faecher:informatik:oberstufe:adt:karteikarten:karteikasten.drawio.png |}} Es soll eine Smartphone-App entwickelt werden, die das Erstellen digitaler Karteikarten und die Umsetzung dieses Lernschemas unterstützen soll. {{:aufgabe.png?nolink |}} === (A1) === Hans Kartenkasten ist folgendermaßen gefüllt: {{ :faecher:informatik:oberstufe:adt:karteikarten:besp.drawio.png |}} Er wendet das oben beschriebenen System an und hat gerade mit dem zweiten Fach begonnen. Stelle den Verlauf der Fächerbelegung mit den Fragen 1 bis 3 dar, wenn Hans die nächsten Fragen ''richtig'', ''richtig'', ''falsch'', ''falsch'', ''richtig'', ''falsch'' beantwortet. {{:aufgabe.png?nolink |}} === (A2) === Für die Implementation soll der ADT "Schlange" verwendet werden. Als Grundlage dienst das folgende Implementationsdiagramm: {{ :faecher:informatik:oberstufe:adt:karteikarten:auswahl_088.png |}} * Beschreibe die wesentlichen Eigenschaften des abstrakten Datentyps ''Schlange''. * Erläutere, welche Methoden benutzt werden müssen, um in obigem Modell eine Karte aus einem Fach heraus zu nehmen und in ein anderes Fach zu legen. * Die Methoden ''getAnzahl(): int'' der Klasse ''Fach'' soll die Anzahl der in diesem Fach enthaltenen Karten zurückliefern. Implementierediese Methode auf Basis der gegebenen Klasse ''LinkedList''. Du darfst davon ausgehen, dass alle Methoden der Klasse ''LinkedList'' bereits korrekt implementiert sind. {{:aufgabe.png?nolink |}} === (A3) === Alternativ zur Auswahl der Schlange könnte man zur Modellierung eines Fachs auch den abstrakten Datentyp Stapel verwenden.. * Erläutere die Eigenschaften eines ''Stapels''. * Entwerfe einen Algorithmus, mit dem auch bei einem Stapel (unter Verwendung eines Hilfsstapels) eine Karte hinter den schon in einem Fach vorhandenen Karteikarten eingefügt werden könnte. Notiere den Algorithmus in Pseudocode verständlich, eine Implementation in Java ist nicht gefordert. {{:aufgabe.png?nolink |}} === (A4) === In der Klasse ''Lernbox'' gibt es ein Attribut ''faecher'', das die fünf Fächer der Lernbox speichert. Der Konstruktor der Klasse initialisiert dieses Attribut. Begründe, warum weder Schlange noch Stapel als Datentyp für das Attribut ''faecher'' geeignet sind. Deklariere das Attribut ''faecher'' mit einem geeigneten Datentyp. Implementiere den Konstruktor der Klasse ''Lernbox''. {{:aufgabe.png?nolink |}} === (A5) === Die Methode ''stelleFrage(k: Karteikarte): boolean'' bewirkt, dass dem Nutzer der App die Frage angezeigt und seine Antwort kontrolliert wird. Wurde die Frage korrekt beantwortet, wird ''true'' zurückgegeben, sonst ''false''. Implementiere unter Verwendung der Methode ''stelleFrage(k: Karteikarte): boolean'' die Methode ''kartenAusDemFachAbarbeiten(nr: int)'', die alle Karten des angegebenen Fachs durchgeht, bis das Fach geleert ist. Richtig beantwortete Fragen werden ins nächste, falsch beantwortete Fragen ins erste Fach befördert. Du musst keine Fehlerbehandlung für unzulässige Werte des Parameters ''nr'' implementieren, es wird auf jeden Fall ein gültiges Fach angegeben.