Eintritt ins Freibad
AFB I–IIDas Freibad möchte seine Kasse mit einem Java-Programm betreiben. Kinder unter 6 Jahren zahlen nichts, Kinder und Jugendliche bis einschließlich 17 Jahre zahlen 2,50 €, alle anderen 4,00 €. Wer einen Ferienpass hat, bekommt 1,00 € Rabatt – aber nur, wenn überhaupt etwas zu zahlen ist.
int alter = 15;
boolean ferienpass = true;
double preis;
if (alter < 6) {
preis = 0.0;
} else if (alter <= 17) {
preis = 2.5;
} else {
preis = 4.0;
}
if (ferienpass && preis > 0) {
preis = preis - 1.0;
}
System.out.println("Eintritt: " + preis + " Euro");
alter und ferienpass werden an der Kasse eingegeben.- Beschreibe den Ablauf des Programms für die angegebenen Werte und gib die Ausgabe an.
- Erstelle eine Tabelle mit den Ausgaben für die Alter 5, 6, 17 und 18, jeweils mit und ohne Ferienpass.
- Mittwochs ist Schülertag. Ein Mitschüler schreibt dafür
if (tag == "Mittwoch"). Begründe, warum Texte in Java anders verglichen werden sollten, und gib die richtige Bedingung an.
Hinweise
Hinweis zu Aufgabe a)
if-else if-Kette zutrifft, werden die übrigen übersprungen. Das zweite if steht für sich allein.Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
String ist ein Objekt. Was vergleicht == bei Objekten – den Inhalt oder etwas anderes?Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
alter < 6 ist falsch (15 ist nicht kleiner als 6). alter <= 17 ist wahr, also wird preis = 2.5 gesetzt; der else-Zweig wird übersprungen. Danach ist ferienpass && preis > 0 wahr (beide Teile wahr), der Preis sinkt auf 1.5. Ausgabe: Eintritt: 1.5 Euro
Erwartungshorizont zu Aufgabe b)
| Alter | mit Ferienpass | ohne Ferienpass |
|---|---|---|
| 5 | Eintritt: 0.0 Euro | Eintritt: 0.0 Euro |
| 6 | Eintritt: 1.5 Euro | Eintritt: 2.5 Euro |
| 17 | Eintritt: 1.5 Euro | Eintritt: 2.5 Euro |
| 18 | Eintritt: 3.0 Euro | Eintritt: 4.0 Euro |
Bei 5 Jahren verhindert preis > 0 einen negativen Preis.
Erwartungshorizont zu Aufgabe c)
Ein String ist ein Objekt. == prüft bei Objekten nur, ob beide Variablen auf dasselbe Objekt verweisen, nicht ob die Texte gleich sind. Wird der Wochentag z. B. eingegeben, entsteht ein neues String-Objekt; == kann dann false liefern, obwohl dort „Mittwoch“ steht. Den Inhalt vergleicht die Methode equals:
if (tag.equals("Mittwoch")) {Noahs Sparschwein
AFB II–IIINoah hat 12 € im Sparschwein und legt jede Woche 7 € dazu. Er will wissen, nach wie vielen Wochen er mindestens 100 € beisammen hat. In Python hat er das schon gelöst (Material 1). Sein Freund Tim hat in Java eine Version mit for-Schleife geschrieben (Material 2).
guthaben = 12
wochen = 0
while guthaben < 100:
guthaben = guthaben + 7
wochen = wochen + 1
print(wochen, "Wochen,", guthaben, "Euro")
13 Wochen, 103 Euroint guthaben = 12;
for (int w = 0; w <= 13; w++) {
guthaben = guthaben + 7;
}
System.out.println(guthaben + " Euro");
- Implementiere Noahs Programm aus Material 1 als vollständiges Java-Programm mit einer
while-Schleife. Die Ausgabe soll gleich bleiben. - Stelle den Ablauf deines Programms als Tracetabelle dar (Werte von
wochen,guthabenund der Bedingung). Es genügen die ersten drei und die letzten zwei Zeilen. - Vergleiche Tims
for-Schleife mit deinerwhile-Schleife: Anzahl der Durchläufe, Ergebnis und Eignung für Noahs Frage. - Noahs Oma legt in jeder vierten Woche zusätzlich 5 € dazu. Erweitere dein Programm entsprechend und gib die neue Ausgabe an.
Hinweise
Hinweis zu Aufgabe a)
main, Typen vor die Variablen, Bedingung in runde Klammern, Rumpf in geschweifte Klammern. Die Ausgabe setzt du mit + zusammen.Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
w annimmt. Was müsste Tim tun, wenn Noah 150 € sparen will?Hinweis zu Aufgabe d)
wochen bei Division durch 4 ist 0. Erhöhe den Wochenzähler, bevor du prüfst.Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
public class Sparschwein {
public static void main(String[] args) {
int guthaben = 12;
int wochen = 0;
while (guthaben < 100) {
guthaben = guthaben + 7;
wochen++;
}
System.out.println(wochen + " Wochen, " + guthaben + " Euro");
}
}
Ausgabe: 13 Wochen, 103 Euro
Erwartungshorizont zu Aufgabe b)
| wochen | guthaben | guthaben < 100 |
|---|---|---|
| 0 | 12 | wahr |
| 1 | 19 | wahr |
| 2 | 26 | wahr |
| … | … | … |
| 12 | 96 | wahr |
| 13 | 103 | falsch → Ende |
Erwartungshorizont zu Aufgabe c)
Durchläufe: w läuft von 0 bis einschließlich 13, das sind 14 Durchläufe (wegen <=). Die while-Schleife läuft 13-mal.
Ergebnis: Tim erhält 12 + 14 · 7 = 110 Euro statt 103 Euro – eine Woche zu viel. Mit w < 13 stimmte es.
Eignung: Eine for-Schleife passt, wenn die Anzahl der Durchläufe vorher feststeht. Noah kennt sie aber gerade nicht – sie ist die gesuchte Antwort. Tim musste sie aus Noahs Ergebnis abschreiben. Die while-Schleife läuft, „solange“ das Ziel nicht erreicht ist, und findet die Wochenzahl selbst. Für Noahs Frage ist sie daher besser geeignet.
Erwartungshorizont zu Aufgabe d)
while (guthaben < 100) {
wochen++;
guthaben = guthaben + 7;
if (wochen % 4 == 0) {
guthaben = guthaben + 5;
}
}
System.out.println(wochen + " Wochen, " + guthaben + " Euro");
Ausgabe: 12 Wochen, 111 Euro (in den Wochen 4, 8 und 12 kommen je 5 € dazu: 12 + 12 · 7 + 3 · 5 = 111).
