9.2 Alternative Verarbeitung
Aufgabe 9-2: Szenario – „Plötzlicher Erdrutsch“
Das fünfte Szenario entspricht im Wesentlichen Aufgabe 9-1. Allerdings wurde im Feld (2; 3) die Mauer durch einen Weg ersetzt. Es ist weiterhin unklar, ob der auf dem Feld (3; 2) niedergegangene Steinschlag bereits beseitigt worden ist.
Das Ziel des Szenarios besteht darin, dass ein Roboter von Feld (1; 2) startend das Zielfeld (4; 1) auf dem kürzestmöglichen Weg erreicht.
Aufgabe
Aufgabe 9-3: Szenario – „Steine auf- und abladen“
Ziel dieses Szenarios ist es, dass ein Roboter von Feld (1;3) startend auf dem kürzestmöglichen Weg das Zielfeld erreicht. Dabei ist unklar, ob das Feld (3;3) passierbar ist oder sich dort ein Steinhaufen befindet.
Erstellen Sie zunächst ein Struktogramm und anschließend den Quellcode der Methode steuereRobi()
.
Hinweis: Auf- und Abladen von Steinen
-
Befindet sich auf dem Feld direkt vor dem Roboter ein Steinhaufen, kann der Roboter von dort mit Hilfe der Methode
ladAuf()
eine Einheit Steine aufladen. Werden weitere Steine aufgeladen, erhöht sich die Anzahl der aufgeladenen Steine bei jedem Aufladen um eine Einheit. - Beim Aufladen von Steinen wird die Größe des Steinhaufens um jeweils eine Einheit reduziert. Ist der Steinhaufen komplett aufgeladen, erscheint stattdessen ein Wegfeld. Die Standardgröße eines Steinhaufens beträgt eine Einheit.
-
Durch Aufruf der Methode
ladAb()
lädt der Roboter auf dem Feld direkt vor ihm eine Einheit von den zuvor aufgeladenen Steinen ab. Voraussetzung ist, dass das Feld vor ihm die Steine aufnehmen kann. Geeignet dafür sind zum Beispiel Wegfelder, Steinhaufen oder Erdlöcher. - Werden Steine auf einem Wegfeld abgeladen, erscheint dort ein Steinhaufen, der eine Einheit Steine umfasst. Werden die Steine auf einen bestehenden Steinhaufen gekippt, erhöht sich dessen Größe um eine Einheit. Werden Steine in ein Erdloch gekippt, reduziert sich dessen Tiefe um eine Einheit. Ist das Erdloch komplett aufgefüllt, verschwindet es und ein Wegfeld erscheint. Die Standardtiefe eines Erdlochs beträgt eine Einheit.
Aufgabe 9-4: Vom Struktogramm zum Quellcode
Erstellen Sie auf Grundlage des folgenden UML-Klassendiagramms (vgl. Abb. 9-15) den entsprechenden Quellcode-Ausschnitt der Klasse Konto
.
Halten Sie sich bei der Programmierung der Methode +abheben(pBetrag: double): boolean
an die Vorgaben des folgenden Struktogramms (vgl. Abb. 9-16).
+abheben(pBetrag: double): boolean
Lösung
private double saldo;
public boolean abheben(double pBetrag) {
boolean ausgefuehrt;
if(this.saldo >= pBetrag) {
this.saldo = this.saldo - pBetrag;
ausgefuehrt = true;
}
else {
ausgefuehrt = false;
}
return ausgefuehrt;
}
}
Konto
(Quellcode-Ausschnitt)Variante
+abheben(pBetrag: double): boolean
private double saldo;
public boolean abheben(double pBetrag) {
boolean ausgefuehrt = false;
if(this.saldo >= pBetrag) {
this.saldo = this.saldo - pBetrag;
ausgefuehrt = true;
}
return ausgefuehrt;
}
}
Konto
(Quellcode-Ausschnitt)Aufgabe 9-5: Eintrittskarten
Ein Unternehmen verkauft Eintrittskarten für verschiedene Veranstaltungen.
Zu jeder Veranstaltung wird deren Titel und Eintrittspreis erfasst. Außerdem kann einer Veranstaltung ein Ermäßigungssatz zugewiesen werden. Berechtigte Personen, wie zum Beispiel Schüler oder Senioren, erhalten dann den entsprechenden prozentualen Nachlass auf den Eintrittspreis.
Jeder Eintrittskarte sind die entsprechende Veranstaltung und eine Sitzplatznummer zugeordnet. Des Weiteren ist vermerkt, ob es sich um eine ermäßigte Eintrittskarte handelt. Außerdem soll es möglich sein, unter Berücksichtigung einer etwaigen Ermäßigung, den Preis der Eintrittskarte zu berechnen.
Titel: Starlight
Eintrittspreis (in EUR): 69.0
Ermäßigungssatz (in %): 10
Bitte geben Sie die folgenden Daten der Eintrittskarte ein:
Sitzplatznummer: 520
Ermäßigung (true/false): true
-----------------------––––––––––––––----------------------
Preis der Eintrittskarte (in EUR): 62.1
Aufgaben
-
Entwickeln Sie ein geeignetes UML-Klassendiagramm.
Lösung
Lösung
Abb. 9-21: Eintrittskarten (UML) Variante: Jeder Eintrittskarte ist stets eine Veranstaltung zugewiesen
Abb. 9-21b: Eintrittskarten (UML) -
Erstellen Sie den Quellcode der von Ihnen modellierten Klassen.
Lösung
Lösung
JAVApackage app;
public class Veranstaltung {
private String titel;
private double eintrittspreis;
private double ermaessigungssatz;
public Veranstaltung() {
}
public Veranstaltung(String pTitel, double pEintrittspreis) {
this.titel = pTitel;
this.eintrittspreis = pEintrittspreis;
}
public String getTitel() {
return titel;
}
public void setTitel(String pTitel) {
this.titel = pTitel;
}
public double getEintrittspreis() {
return eintrittspreis;
}
public void setEintrittspreis(double pEintrittspreis) {
this.eintrittspreis = pEintrittspreis;
}
public double getErmaessigungssatz() {
return ermaessigungssatz;
}
public void setErmaessigungssatz(double pErmaessigungssatz) {
this.ermaessigungssatz = pErmaessigungssatz;
}
}Abb. 9-22: Klasse Veranstaltung
(Quellcode)JAVApackage app;
public class Eintrittskarte {
private Veranstaltung veranstaltung;
private int sitzplatznummer;
private boolean ermaessigt;
public Eintrittskarte() {
}
public Eintrittskarte(Veranstaltung pVeranstaltung, int pSitzplatznummer) {
this.veranstaltung = pVeranstaltung;
this.sitzplatznummer = pSitzplatznummer;
}
public Veranstaltung getVeranstaltung() {
return veranstaltung;
}
public void setVeranstaltung(Veranstaltung pVeranstaltung) {
this.veranstaltung = pVeranstaltung;
}
public int getSitzplatznummer() {
return sitzplatznummer;
}
public void setSitzplatznummer(int pSitzplatznummer) {
this.sitzplatznummer = pSitzplatznummer;
}
public boolean isErmaessigt() {
return ermaessigt;
}
public void setErmaessigt(boolean pErmaessigt) {
this.ermaessigt = pErmaessigt;
}
public double berechneEndpreis() {
double preis;
double ermaessigungssatz;
double endpreis;
preis = veranstaltung.getEintrittspreis();
ermaessigungssatz = veranstaltung.getErmaessigungssatz();
if(ermaessigt) {
endpreis = preis - preis * ermaessigungssatz/100;
}
else {
endpreis = preis;
}
return endpreis;
}
}Abb. 9-23: Klasse Eintrittskarte
(Quellcode)JAVApackage ui;
import app.Eintrittskarte;
import app.Veranstaltung;
public class Benutzerkonsole {
private Veranstaltung veranstaltung;
private Eintrittskarte eintrittskarte;
public Benutzerkonsole (){
this.erfasseVeranstaltung();
this.erfasseEintrittskarte();
this.zeigeEndpreis();
}
private void erfasseVeranstaltung() {
ConsoleReader consoleReader = new ConsoleReader();
String titel;
double eintrittspreis;
double ermaessigungssatz;
System.out.println("Bitte geben Sie die folgenden Veranstaltungsdaten ein:");
System.out.print("Titel: ");
titel = consoleReader.nextString();
System.out.print("Eintrittspreis (in EUR): ");
eintrittspreis= consoleReader.nextDouble();
System.out.print("Ermäßigungssatz (in %): ");
ermaessigungssatz= consoleReader.nextDouble();
veranstaltung = new Veranstaltung(titel, eintrittspreis);
veranstaltung.setErmaessigungssatz(ermaessigungssatz);
}
private void erfasseEintrittskarte() {
ConsoleReader consoleReader = new ConsoleReader();
int sitzplatznummer;
boolean ermaessigt;
System.out.println("\nBitte geben Sie die folgenden Daten der Eintrittskarte ein:");
System.out.print("Sitzplatznummer: ");
sitzplatznummer = consoleReader.nextInt();
System.out.print("Ermäßigung (true/false): ");
ermaessigt = consoleReader.nextBoolean();
eintrittskarte = new Eintrittskarte(veranstaltung, sitzplatznummer);
eintrittskarte.setErmaessigt(ermaessigt);
}
private void zeigeEndpreis(){
System.out.println("\n-----------------------––––––––––––––----------------------");
System.out.println("Preis der Eintrittskarte (in EUR): " + eintrittskarte.berechneEndpreis());
}
}Abb. 9-24: Klasse Benutzerkonsole
(Quellcode)Variante: Jeder Eintrittskarte ist stets eine Veranstaltung zugewiesen.
JAVApackage app;
public class Eintrittskarte {
private Veranstaltung veranstaltung;
private int sitzplatznummer;
private boolean ermaessigt;
public Eintrittskarte(Veranstaltung pVeranstaltung) {
this.veranstaltung = pVeranstaltung;
}
public Eintrittskarte(Veranstaltung pVeranstaltung, int pSitzplatznummer) {
this.veranstaltung = pVeranstaltung;
this.sitzplatznummer = pSitzplatznummer;
}
//...
}Abb. 9-24b: Klasse Eintrittskarte
(Quellcode)