MINT lernen

Abituraufgaben: Division, mod und Zufall

Zwei Abituraufgaben zu Ganzzahldivision, Rest und Zufallszahlen — mit Hinweisen und Erwartungshorizont.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Sitzplatznummer im Theater

AFB I–II

Ein Schultheater vergibt für jede Aufführung Eintrittskarten mit fortlaufenden Nummern ab 0. Jede Reihe hat 18 Plätze. Karte 0 gehört zu Reihe 1, Platz 1; Karte 17 zu Reihe 1, Platz 18; Karte 18 zu Reihe 2, Platz 1. Das Ticketprogramm soll aus der Kartennummer Reihe und Platz berechnen.

  1. Ermitteln Sie Reihe und Platz für die Kartennummern 35, 36 und 250.
  2. Implementieren Sie eine Operation sitzplatz(nr), die zu einer Kartennummer den Text „Reihe r, Platz p“ zurückgibt.
  3. Erläutern Sie, welcher Fehler entsteht, wenn man in Python für die Reihe nr / 18 + 1 schreibt.

Hinweise

Hinweis zu Aufgabe a)
Wie viele volle Reihen liegen vor der Karte, und an welcher Stelle der angefangenen Reihe steht sie?
Hinweis zu Aufgabe b)
Die Nummerierung beginnt bei 0, Reihen und Plätze beginnen bei 1 — an beiden Stellen braucht es + 1.
Hinweis zu Aufgabe c)
Welchen Datentyp liefert der Operator / in Python?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Reihe = nr / 18 + 1, Platz = nr mod 18 + 1.

nrnr / 18nr mod 18ReihePlatz
35117218
362031
25013161417
Erwartungshorizont zu Aufgabe b)
Java
String sitzplatz(int nr) {
  int reihe = nr / 18 + 1;
  int platz = nr % 18 + 1;
  return "Reihe " + reihe + ", Platz " + platz;
}
Python
def sitzplatz(nr):
    reihe = nr // 18 + 1
    platz = nr % 18 + 1
    return "Reihe " + str(reihe) + ", Platz " + str(platz)

Da Kartennummern nicht negativ sind, liefern Java-% und Python-% denselben Rest.

Erwartungshorizont zu Aufgabe c)

In Python liefert / stets eine Kommazahl: 250 / 18 + 1 ≈ 14,89. Ausgegeben würde „Reihe 14.88…“, also keine ganze Reihennummer; schon bei Karte 9 stünde „Reihe 1.5“. Die Nachkommastellen müssen wegfallen — das leistet die Ganzzahldivision // (oder int(nr / 18)).

2

Ein fairer Würfel?

AFB II–III

Für ein Brettspiel-Programm schlagen drei Schülerinnen verschiedene Java-Ausdrücke vor, die einen Würfelwurf simulieren sollen. Math.random() liefert eine gleichverteilte Kommazahl z mit 0 ≤ z < 1.

Java
int a = (int) (Math.random() * 6) + 1;
int b = (int) (Math.random() * 7);
long c = Math.round(Math.random() * 5) + 1;
  1. Geben Sie für jeden der drei Ausdrücke an, welche Werte er liefern kann.
  2. Beurteilen Sie, welcher Ausdruck einen fairen Würfel simuliert, bei dem jede Augenzahl mit der Wahrscheinlichkeit 1/6 fällt.
  3. Entwerfen Sie einen Algorithmus, der 6000 Würfe simuliert und ausgibt, wie oft eine Sechs und wie oft eine gerade Augenzahl gefallen ist.

Hinweise

Hinweis zu Aufgabe a)
Bestimme für jeden Ausdruck den kleinsten und den größten möglichen Wert von Math.random() · Faktor.
Hinweis zu Aufgabe b)
Frage für jede Augenzahl: Für welches Teilintervall von z entsteht sie, und wie lang ist dieses Intervall?
Hinweis zu Aufgabe c)
Zwei Zähler, eine Zählschleife, im Rumpf ein Wurf und zwei Bedingungen — „gerade“ prüft man mit mod.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

a: 0 ≤ z · 6 < 6, abgeschnitten 0 bis 5, plus 1: Werte 1 bis 6. b: 0 ≤ z · 7 < 7, abgeschnitten 0 bis 6: Werte 0 bis 6 (sieben Werte, auch 0). c: 0 ≤ z · 5 < 5, gerundet 0 bis 5, plus 1: Werte 1 bis 6.

Erwartungshorizont zu Aufgabe b)

Nur a ist fair: Jede Augenzahl k gehört zu einem Intervall der Länge 1/6 für z. b hat sieben mögliche Ergebnisse, darunter 0 — kein Würfel. c liefert zwar 1 bis 6, aber ungleich oft: Die 1 entsteht nur für 0 ≤ z · 5 < 0,5, also z < 0,1 (Wahrscheinlichkeit 0,1). Die 6 entsteht nur für z · 5 ≥ 4,5 (0,1). Die Werte 2 bis 5 haben Intervalle der Länge 1 für z · 5, also je 0,2. Runden benachteiligt die Randwerte; für Zufallszahlen schneidet man ab.

Erwartungshorizont zu Aufgabe c)
Pseudocode
sechsen ← 0
gerade ← 0
für i von 1 bis 6000 wiederhole
  wurf ← Zufallszahl von 1 bis 6
  wenn wurf = 6 dann
    sechsen ← sechsen + 1
  ende wenn
  wenn wurf mod 2 = 0 dann
    gerade ← gerade + 1
  ende wenn
ende für
Ausgabe: sechsen, gerade
Python
import random
sechsen = 0
gerade = 0
for i in range(6000):
    wurf = random.randint(1, 6)
    if wurf == 6:
        sechsen = sechsen + 1
    if wurf % 2 == 0:
        gerade = gerade + 1
print(sechsen, gerade)

Zu erwarten sind etwa 1000 Sechsen und 3000 gerade Augenzahlen. Die zweite Verzweigung ist bewusst keine sonst-Verzweigung, denn eine Sechs ist auch gerade.