Die Sitzplatznummer im Theater
AFB I–IIEin 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.
- Ermitteln Sie Reihe und Platz für die Kartennummern 35, 36 und 250.
- Implementieren Sie eine Operation
sitzplatz(nr), die zu einer Kartennummer den Text „Reihe r, Platz p“ zurückgibt. - Erläutern Sie, welcher Fehler entsteht, wenn man in Python für die Reihe
nr / 18 + 1schreibt.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
/ in Python?Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Reihe = nr / 18 + 1, Platz = nr mod 18 + 1.
| nr | nr / 18 | nr mod 18 | Reihe | Platz |
|---|---|---|---|---|
| 35 | 1 | 17 | 2 | 18 |
| 36 | 2 | 0 | 3 | 1 |
| 250 | 13 | 16 | 14 | 17 |
Erwartungshorizont zu Aufgabe b)
String sitzplatz(int nr) { int reihe = nr / 18 + 1; int platz = nr % 18 + 1; return "Reihe " + reihe + ", Platz " + platz; }
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)).
Ein fairer Würfel?
AFB II–IIIFü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.
int a = (int) (Math.random() * 6) + 1; int b = (int) (Math.random() * 7); long c = Math.round(Math.random() * 5) + 1;
- Geben Sie für jeden der drei Ausdrücke an, welche Werte er liefern kann.
- Beurteilen Sie, welcher Ausdruck einen fairen Würfel simuliert, bei dem jede Augenzahl mit der Wahrscheinlichkeit 1/6 fällt.
- 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)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
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)
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
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.
