MINT lernen

Übung — AFB II (Zusammenhänge herstellen)

Zehn Sachaufgaben von Nachtbus bis Wetterstation: Bausteine des Kapitels kombinieren und Schritt für Schritt simulieren.

Dein Fortschritt:
0 / 0 Aufgaben
2

Aufgabenblock — AFB II

Zehn Sachaufgaben aus Alltag und Schule: Fahrplan, Kasse, Passwortprüfung, Notenverwaltung, Wetterstation. Jede Aufgabe verbindet mehrere Themen des Kapitels — etwa Schleife und mod, Operation und globale Variable, Zeichenkette und ASCII. Übersetze zuerst die Situation, simuliere dann Schritt für Schritt (am besten mit Tracetabelle) und trage beide Ergebnisse ein. Wenn es hakt, helfen dir die drei gestuften Tipps.

A1
Nachtbus — Uhrzeit mit mod
AFB II

Eine Fahrplan-App speichert Uhrzeiten als Minuten seit Mitternacht (0 bis 1439). Der Nachtbus fährt um 23:38 Uhr ab und ist 107 Minuten unterwegs. Die App rechnet:

Pseudocode
start ← 23 · 60 + 38
t ← (start + 107) mod 1440
h ← t / 60
m ← t mod 60
Ausgabe: h, ":", m

a) Welche Stunde h zeigt die App als Ankunftszeit an? b) Welche Minute m?

Uhr
min
Ansatz: Zuerst die Abfahrt in Minuten umrechnen, die Fahrzeit addieren und mit mod 1440 über Mitternacht springen. Danach zerlegen / und mod die Minuten in Stunden und Minuten.
Rechenweg: start = 1380 + 38 = 1418; 1418 + 107 = 1525; 1525 mod 1440 = 85. Dann 85 / 60 und 85 mod 60.
Lösung: a) h = 1 b) m = 25 — Ankunft 1:25 Uhr.
Vollständige Lösung

start = 23 · 60 + 38 = 1418 Minuten. Mit Fahrzeit: 1418 + 107 = 1525. Ein Tag hat 24 · 60 = 1440 Minuten, also t = 1525 mod 1440 = 85 (der Bus kommt nach Mitternacht an). h = 85 / 60 = 1, m = 85 mod 60 = 25.

Antwort: Der Bus kommt um 1:25 Uhr an. Hinweis: Ohne mod 1440 käme h = 25 heraus — eine Uhrzeit, die es nicht gibt.

A2
Wechselgeld — möglichst wenige Münzen
AFB II

Ein Kassenautomat in der Mensa soll 4,68 € Rückgeld mit möglichst wenigen Münzen auszahlen. Er rechnet in Cent und geht die Münzwerte vom größten zum kleinsten durch:

Pseudocode
rest ← 468
muenzen ← 0
für jeden wert in [200, 100, 50, 20, 10, 5, 2, 1] wiederhole
  anzahl ← rest / wert
  muenzen ← muenzen + anzahl
  rest ← rest mod wert
ende für
Ausgabe: muenzen

a) Wie viele Münzen gibt der Automat insgesamt aus? b) Welchen Wert hat rest direkt nach dem Durchlauf mit dem Münzwert 50?

Münzen
ct
Ansatz: Führe eine Tracetabelle mit den Spalten wert, anzahl und rest. In jedem Durchlauf: wie oft passt der Münzwert in den Rest (/), was bleibt übrig (mod)?
Rechenweg: 468 / 200 = 2, Rest 68 → 68 / 100 = 0 → 68 / 50 = 1, Rest 18 → 18 / 20 = 0 → 18 / 10 = 1, Rest 8 → 5: 1, Rest 3 → 2: 1, Rest 1 → 1: 1, Rest 0.
Lösung: a) 7 Münzen b) rest = 18 ct
Vollständige Lösung
wertanzahlrest
200268
100068
50118
20018
1018
513
211
110

Summe der Spalte anzahl: 2 + 0 + 1 + 0 + 1 + 1 + 1 + 1 = 7 Münzen (2 × 2 €, 50 ct, 10 ct, 5 ct, 2 ct, 1 ct). Nach dem 50-ct-Durchlauf ist rest = 18.

Hinweis: Wer in Euro mit Kommazahlen rechnet, bekommt Rundungsfehler — deshalb rechnen Kassen intern in ganzen Cent.

A3
Passwortprüfung per ASCII
AFB II

Ein Anmeldeformular bewertet Passwörter mit der folgenden Operation. ascii(z) liefert den ASCII-Wert eines Zeichens.

Pseudocode
Operation staerke(pw)
  z ← 0
  g ← 0
  für i von 0 bis länge(pw) − 1 wiederhole
    a ← ascii(pw[i])
    wenn a ≥ 48 und a ≤ 57 dann
      z ← z + 1
    ende wenn
    wenn a ≥ 65 und a ≤ 90 dann
      g ← g + 1
    ende wenn
  ende für
  zurück länge(pw) + 2 · z + 3 · g

Ein Nutzer gibt das Passwort "Kiwi7Saft2023" ein. a) Welchen Wert hat z am Ende der Schleife? b) Welchen Wert liefert staerke zurück?

Punkte
Ansatz: Übersetze die ASCII-Bereiche: 48–57 sind die Ziffern, 65–90 die Großbuchstaben. z zählt Ziffern, g zählt Großbuchstaben.
Rechenweg: Kiwi7Saft2023: Ziffern 7, 2, 0, 2, 3; Großbuchstaben K und S; Länge 13 Zeichen. Rückgabe: 13 + 2 · 5 + 3 · 2.
Lösung: a) z = 5 b) Rückgabe = 29
Vollständige Lösung

Das Passwort hat 13 Zeichen (Positionen 0 bis 12). Ziffern (ASCII 48–57): 7, 2, 0, 2, 3 → z = 5. Großbuchstaben (ASCII 65–90): K, S → g = 2. Kleinbuchstaben (97–122) zählen in keiner der beiden Bedingungen.

Rückgabe: 13 + 2 · 5 + 3 · 2 = 13 + 10 + 6 = 29.

Hinweis: Die zwei getrennten einseitigen Verzweigungen sind hier richtig — ein Zeichen kann nie gleichzeitig Ziffer und Großbuchstabe sein.

A4
Kursnote — ganzzahliger Durchschnitt
AFB II

Eine Notenverwaltung speichert Punkte (0 bis 15) als int. Lina hat in Informatik die Klausur- und Mitarbeitsnoten 11, 8, 13, 9 und 12 Punkte. Das Programm rechnet:

Java
int summe = 11 + 8 + 13 + 9 + 12;
int anzahl = 5;
int schnitt = summe / anzahl;
int gerundet = (2 * summe + anzahl) / (2 * anzahl);

a) Welcher Wert steht in schnitt? b) Welcher Wert steht in gerundet?

Punkte
Punkte
Ansatz: Beide Zeilen teilen zwei int-Werte — in Java ist das eine Ganzzahldivision, die Nachkommastellen fallen weg.
Rechenweg: summe = 53. schnitt = 53 / 5 = 10 (statt 10,6). gerundet = (106 + 5) / 10 = 111 / 10.
Lösung: a) schnitt = 10 b) gerundet = 11
Vollständige Lösung

summe = 53, der echte Durchschnitt ist 10,6. 53 / 5 schneidet ab: schnitt = 10. Die zweite Formel addiert vor dem Teilen die halbe Anzahl (in doppelter Genauigkeit): (2 · 53 + 5) / (2 · 5) = 111 / 10 = 11 — das ist korrekt gerundet.

Hinweis: Lina hätte durch die Ganzzahldivision einen Punkt verloren. In Python liefert 53 / 5 dagegen 10.6; ganzzahlig teilt dort nur //.

A5
Tombola — Spiegelzahl per Tracetabelle
AFB II

Bei einer Schul-Tombola gewinnt jedes Los, dessen Nummer rückwärts gelesen gleich bleibt. Das Prüfprogramm dreht die Losnummer mit / und mod um:

Pseudocode
Eingabe: n
r ← 0
solange n > 0 wiederhole
  r ← r · 10 + n mod 10
  n ← n / 10
ende solange
Ausgabe: r

Geprüft wird das Los mit der Nummer 4718. a) Welchen Wert hat r nach dem zweiten Schleifendurchlauf? b) Welcher Wert wird ausgegeben?

Ansatz: n mod 10 liefert die letzte Ziffer, n / 10 schneidet sie ab. r wird bei jedem Durchlauf um eine Stelle nach links geschoben (· 10) und bekommt die Ziffer angehängt.
Rechenweg: 1. Durchlauf: r = 0 · 10 + 8 = 8, n = 471. 2. Durchlauf: r = 8 · 10 + 1 = 81, n = 47. Weiter bis n = 0.
Lösung: a) r = 81 b) r = 8174
Vollständige Lösung
Durchlaufrn
Start04718
18471
28147
38174
481740

Nach vier Durchläufen ist n = 0, die Bedingung n > 0 ist falsch. Ausgabe: 8174. Da 8174 ≠ 4718, ist das Los keine Gewinnnummer.

Hinweis: Weil n in der Schleife verändert wird, muss sich das Programm die Originalnummer vorher in einer zweiten Variablen merken, um sie mit r vergleichen zu können.

A6
Spiele-Shop — globale Variable und Seiteneffekt
AFB II

In einem Lernspiel verwaltet ein Python-Programm die Münzen des Spielers in einer globalen Variablen:

Python
muenzen = 20

def kaufe(preis):
    global muenzen
    if preis <= muenzen:
        muenzen = muenzen - preis
        return 1
    return 0

def bonus(muenzen):
    muenzen = muenzen + 15
    return muenzen

k = kaufe(8) + kaufe(9) + kaufe(5)
x = bonus(muenzen)

a) Welchen Wert hat k? b) Welchen Wert hat die globale Variable muenzen, nachdem alle Zeilen ausgeführt wurden?

Käufe
Münzen
Ansatz: kaufe ändert wegen global die globale Variable (Seiteneffekt). In bonus ist muenzen dagegen ein Parameter, also eine lokale Variable.
Rechenweg: kaufe(8): 8 ≤ 20 → muenzen = 12, Rückgabe 1. kaufe(9): 9 ≤ 12 → muenzen = 3, Rückgabe 1. kaufe(5): 5 ≤ 3 falsch → Rückgabe 0. bonus(3) rechnet nur lokal.
Lösung: a) k = 2 b) muenzen = 3
Vollständige Lösung

Die drei Aufrufe laufen von links nach rechts: 1 + 1 + 0 = 2 erfolgreiche Käufe, danach sind noch 3 Münzen übrig. bonus(muenzen) bekommt eine Kopie des Werts 3 in den Parameter; das lokale muenzen wird 18 und zurückgegeben, also x = 18. Die globale Variable bleibt 3.

Hinweis: Der Bonus ist ein typischer Fehler — gleicher Name, aber anderer Speicherplatz. Richtig wäre muenzen = bonus(muenzen).

A7
Benutzername vereinheitlichen
AFB II

Die Schulplattform speichert Benutzernamen nur in Kleinbuchstaben und legt zusätzlich eine zweistellige Prüfsumme an. Für die Eingabe "MaxI" läuft:

Pseudocode
Operation normiere(name)
  neu ← ""
  für i von 0 bis länge(name) − 1 wiederhole
    a ← ascii(name[i])
    wenn a ≥ 65 und a ≤ 90 dann
      a ← a + 32
    ende wenn
    neu ← neu + zeichen(a)
  ende für
  zurück neu

Operation pruefsumme(s)
  summe ← 0
  für i von 0 bis länge(s) − 1 wiederhole
    summe ← summe + ascii(s[i])
  ende für
  zurück summe mod 100

a) Bei wie vielen Zeichen von "MaxI" ist die Bedingung der Verzweigung wahr? b) Welchen Wert liefert pruefsumme(normiere("MaxI"))?

Zeichen
Ansatz: Großbuchstaben liegen bei 65–90; + 32 macht daraus den passenden Kleinbuchstaben. Beim geschachtelten Aufruf wird zuerst normiert, dann die Prüfsumme gebildet.
Rechenweg: M (77) → m (109), a (97) bleibt, x (120) bleibt, I (73) → i (105). Summe: 109 + 97 + 120 + 105 = 431, dann 431 mod 100.
Lösung: a) 2 Zeichen b) Prüfsumme = 31
Vollständige Lösung

Nur M (77) und I (73) liegen im Bereich 65–90 → 2 Zeichen werden umgewandelt: normiere("MaxI") = "maxi".

Prüfsumme: 109 + 97 + 120 + 105 = 431; 431 mod 100 = 31.

Hinweis: Weil vor der Summe normiert wird, erhalten „MaxI“, „maxi“ und „MAXI“ dieselbe Prüfsumme — genau das ist gewollt.

A8
Wetterstation — Regentage und längste Serie
AFB II

Eine Wetterstation speichert das Wetter von zehn Tagen als Zeichenkette: S = sonnig, W = wolkig, R = Regen. Heute lautet sie "SSRWSRRRSW". Ein Auswertungsalgorithmus:

Pseudocode
anzahl ← 0
serie ← 0
laengste ← 0
für i von 0 bis länge(tage) − 1 wiederhole
  wenn tage[i] = "R" dann
    anzahl ← anzahl + 1
    serie ← serie + 1
    wenn serie > laengste dann
      laengste ← serie
    ende wenn
  sonst
    serie ← 0
  ende wenn
ende für

a) Welchen Wert hat anzahl am Ende? b) Welchen Wert hat laengste am Ende?

Tage
Tage
Ansatz: Bestimme die Rollen: anzahl ist ein Zähler, serie zählt die aktuelle Regenfolge und wird bei jedem anderen Wetter auf 0 gesetzt, laengste ist ein Merker für das Maximum.
Rechenweg: Positionen der R: 2, 5, 6, 7. serie: bei 2 → 1, bei 3 zurück auf 0, bei 5, 6, 7 → 1, 2, 3, bei 8 wieder 0.
Lösung: a) anzahl = 4 b) laengste = 3
Vollständige Lösung
itage[i]anzahlserielaengste
0S000
1S000
2R111
3W101
4S101
5R211
6R322
7R433
8S403
9W403

Es gab 4 Regentage, die längste Regenserie dauerte 3 Tage (Positionen 5 bis 7).

Hinweis: Ohne serie ← 0 im sonst-Zweig würde serie einfach alle R zählen — dann wäre laengste fälschlich 4.

A9
Schulkiosk — wann wird nachbestellt?
AFB II

Der Schulkiosk startet mit 100 Eis am Stiel. In jeder Pause wird ein Viertel des aktuellen Bestands verkauft (ganzzahlig, der Rest bleibt im Kühlfach). Nachbestellt wird, sobald weniger als 30 Eis übrig sind. Das Struktogramm rechts simuliert das.

a) Nach wie vielen Pausen muss nachbestellt werden? b) Wie viele Eis sind dann noch im Kühlfach?

Eis
Ansatz: Kopfgesteuerte Schleife: Vor jeder Pause wird geprüft, ob bestand ≥ 30 ist. verkauf ← bestand / 4 ist eine Ganzzahldivision.
Rechenweg: Pause 1: 100 / 4 = 25 → 75. Pause 2: 75 / 4 = 18 → 57. Pause 3: 57 / 4 = 14 → 43. Weiter, bis der Bestand unter 30 fällt.
Lösung: a) 5 Pausen b) 25 Eis
Vollständige Lösung
pverkaufbestandbestand ≥ 30?
0–100wahr
12575wahr
21857wahr
31443wahr
41033wahr
5825falsch

Nach der 5. Pause ist bestand = 25 < 30, die Bedingung ist falsch, die Schleife endet. Ausgabe: 5 Pausen, 25 Eis.

Hinweis: Mit Kommazahlen (100 · 0,75⁵ ≈ 23,7) käme ein anderer Bestand heraus — die Ganzzahldivision bildet ab, dass nur ganze Eis verkauft werden.

bestand ← 100p ← 0solange bestand ≥ 30verkauf ← bestand / 4bestand ← bestand − verkaufp ← p + 1Ausgabe: p, bestand
Struktogramm der Kiosk-Simulation
A10
Referatsthemen auslosen
AFB II

Für 28 Referatsthemen lost ein Java-Programm eine Nummer aus. Die Themen 1–4 gehören zum Block 1, 5–8 zum Block 2 usw.

Java
int nr = (int) (Math.random() * 28) + 1;
int block = (nr - 1) / 4 + 1;

Beim Ziehen liefert Math.random() den Wert 0.4817. a) Welche Themennummer nr wird gezogen? b) Zu welchem block gehört sie?

Ansatz: Math.random() liefert eine Kommazahl von 0 bis unter 1. Der Cast (int) schneidet die Nachkommastellen ab — er rundet nicht. In der zweiten Zeile ist / eine Ganzzahldivision.
Rechenweg: 0.4817 · 28 = 13.4876 → (int) liefert 13 → nr = 14. block = (14 − 1) / 4 + 1 = 13 / 4 + 1 = 3 + 1.
Lösung: a) nr = 14 b) block = 4
Vollständige Lösung

0.4817 · 28 = 13.4876; (int) schneidet ab → 13; + 1 → nr = 14. Die Formel liefert nr immer zwischen 1 (bei 0.0) und 28 (bei Werten knapp unter 1).

block = (14 − 1) / 4 + 1 = 13 / 4 + 1 = 3 + 1 = 4. Kontrolle: Block 4 umfasst die Themen 13–16. Hinweis: Das „− 1 … + 1“ ist nötig, weil die Themen bei 1 beginnen; ohne es läge Thema 4 fälschlich in Block 2.