Notenliste auswerten
AFB I–IIDie Noten einer Klausur (1 bis 6) stehen in einer DynArray noten vom Inhaltstyp Ganzzahl.
- Implementieren Sie
anzahlUnter(noten: DynArray, g: Ganzzahl): Ganzzahl, die die Anzahl der Noten liefert, die schlechter als g sind (also größer als g). - Implementieren Sie
entferneFehlend(noten: DynArray), die alle Einträge 0 (Klausur nicht geschrieben) entfernt. - Begründen Sie mit einem Schreibtischtest für
[0, 0, 3], dass Ihre Lösung zu b) korrekt arbeitet.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
def anzahlUnter(noten, g):
n = 0
for i in range(noten.getLength()):
if noten.getItem(i) > g:
n = n + 1
return nErwartungshorizont zu Aufgabe b)
def entferneFehlend(noten):
i = 0
while i < noten.getLength():
if noten.getItem(i) == 0:
noten.delete(i)
else:
i = i + 1Erwartungshorizont zu Aufgabe c)
| i | getLength() | Inhalt | Aktion |
|---|---|---|---|
| 0 | 3 | [0, 0, 3] | 0 → delete(0) |
| 0 | 2 | [0, 3] | 0 → delete(0) |
| 0 | 1 | [3] | 3 → i = 1 |
| 1 | 1 | [3] | Schleife endet |
Beide Nullen werden entfernt, weil i nach dem Löschen nicht erhöht wird.
Palindrom-Prüfung
AFB II–IIIEin Palindrom liest sich vorwärts und rückwärts gleich, z. B. „RENTNER“. Mit einem Stapel und einer Schlange kann man das prüfen: Jedes Zeichen wird in beide Strukturen eingefügt; danach vergleicht man die Zeichen, die beide Strukturen nacheinander liefern.
- Erläutern Sie, warum dieser Vergleich genau dann nur Übereinstimmungen liefert, wenn das Wort ein Palindrom ist.
- Implementieren Sie
istPalindrom(w: Zeichenkette): Wahrheitswertmit Stack und Queue. - Beurteilen Sie Ihre Lösung im Vergleich zu einer Lösung, die nur Positionen von vorne und hinten vergleicht.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Die Schlange liefert die Zeichen in Originalreihenfolge, der Stapel in umgekehrter. Stimmen alle Paare überein, ist das Wort gleich seiner Umkehrung — also ein Palindrom. Gibt es einen Unterschied, ist es keins.
Erwartungshorizont zu Aufgabe b)
def istPalindrom(w):
s = Stack()
q = Queue()
for i in range(len(w)):
s.push(w[i])
q.enqueue(w[i])
while not s.isEmpty():
if s.pop() != q.dequeue():
return False
return TrueErwartungshorizont zu Aufgabe c)
Der direkte Vergleich von w[i] mit w[Länge − 1 − i] kommt ohne zusätzliche Strukturen aus und braucht nur die Hälfte der Vergleiche. Die Stack-Queue-Lösung braucht zusätzlichen Speicher, zeigt aber die Eigenschaften LIFO und FIFO sehr anschaulich. Für den Einsatz ist der direkte Vergleich effizienter; begründetes Urteil erwartet.
