Sie sind auf Seite 1von 8

Programmierung I

Praktikum 3
Boolesche Ausdrücke und If-Kontrollstruktur

Allgemeine Hinweise
Lösungen der Aufgaben dieses Aufgabenblatts müssen über die Lernplattform abgegeben
werden, um Punkte für die Klausurzulassung zu erhalten.

Da die Lösungen automatisch überprüft werden, müssen die Spezifikationen und die
Ausgaben der Lösungen genauso eingehalten werden wie sie auf diesem Aufgabenblatt
definiert sind. Hierfür lassen sich die auf der Lernplattform verfügbaren Programmier-
Templates (Projekte) als Vorlage nutzen. Für die Abgabe laden Sie nur die Dateien hoch, die
die einzelnen Klassen enthalten, bitte nicht das gesamte Programmier-Template hochladen.

Es werden nur die Lösungen der Aufgaben bewertet, zu denen eine Punktzahl angegeben ist.
Für Aufgaben oder Aufgabenteile, die als Zusatzaufgaben gekennzeichnet sind, werden keine
Punkte vergeben. Die Bearbeitung ist dennoch sinnvoll für eine Vertiefung der Inhalt. Falls
Sie diese Aufgaben abgeben möchten, nutzen Sie hierfür separate Klassen und Dateien.

Details zu der Klausurzulassung, dem Ablauf des Praktikums und den Abgaben können dem
Leitfaden entnommen werden, der sich auf der Lernplattform befindet. Dort befinden sich
auch der Stundensonderplan und der Semesterterminplan.

Aufgabe 1 – Hello PR1! (1 Punkt)


a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Bool, das sich in
dem Zip-Archiv „Bool.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-Datei
HelloKlasse.java in dem Java-Paket aufgaben/_01hello. Dieses Paket muss
ggf. erst aufgeklappt werden.

Schauen Sie sich die Definition der Klasse mit dem Namen HelloKlasse an. Dort
befindet sich die Methode mit dem Namen main, die in jedem Java-Programm
vorhanden sein muss und den Einstiegspunkt (Startpunkt) des Programms darstellt. In
dieser Methode können Sie die Lösung für diese Aufgabe einfügen. In späteren
Lehrveranstaltungen werden das Erstellen und Nutzen eigener Methoden erläutert.

b) Erstellen Sie ein Programm, das auf der Kommandozeile „Hello PR1“ ausgibt. Der Name
der Klasse muss HelloKlasse heißen. Bitte achten Sie – auch bei anderen Aufgaben –
genau auf die angegebenen Schreibweisen, insbesondere auf die Groß- und
Kleinschreibung und auf die Nutzung (und nicht-Nutzung) von Leerzeichen.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

Aufgabe 2 – Boolesche Ausdrücke (5 Punkte)


a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Bool, das sich in
dem Zip-Archiv „Bool.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-Datei
BoolAusdruecke.java in dem Java-Paket aufgaben/_02bool_ausdruecke.
Dieses Paket muss ggf. erst aufgeklappt werden.

b) Definieren Sie in der main-Methode die beiden booleschen Variablen muede und
praktikum folgendermaßen:

boolean muede;
boolean praktikum;

Semantik: Die Variable muede soll beschreiben, ob eine Person müde ist. Falls
praktikum == true ist, befindet sich die Person gerade in einem Praktikum.

c) Weisen Sie diesen Variablen zunächst jeweils den booleschen Wahrheitswert false zu.
Schreiben Sie Quellcode, um den Wert (Inhalt) dieser Variablen auszugeben. Nach dem
Start des Programms soll auf der Kommandozeile die folgende Ausgabe erscheinen.

muede = false
praktikum = false

d) Erweitern Sie das Programm so, dass zusätzlich die logische Negation (logical NOT) der
Variablen muede ausgegeben wird. Weiterhin sollen die Ergebnisse der logischen UND-,
OR- und XOR (exklusiv Oder)-Verknüpfungen der Variablen muede und praktikum
ausgegeben werden. Nutzen Sie dabei die Verknüpfungsoperatoren in Java und nicht nur
das (manuell berechnete) Endergebnis. Die Ausgabe auf der Kommandozeile soll
folgendermaßen aussehen.

muede = false
praktikum = false
NOT muede = true
muede AND praktikum = false
muede OR praktikum = false
muede XOR praktikum = false

e) Erweitern Sie das Programm um etwas komplexere boolesche Ausdrücke, in denen die
Variablen muede und praktikum verwendet werden. Die Verknüpfungen seien
folgendermaßen definiert:
• Die Person hat spass, falls sie nicht müde ist und an einem praktikum
teilnimmt.
• Die Person hat freizeit, falls sie nicht an einem Praktikum teilnimmt.
• Die Person ist unternehmungslustig1, falls sie nicht müde ist und nicht an
einem Praktikum teilnimmt.
• Die Person ist unternehmungslustig2, falls sie nicht müde ist oder an
einem Praktikum teilnimmt.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

Hinweis: Die letzte umgangssprachliche Formulierung ist etwas unpräzise, lässt


sich aber exakt durch einen booleschen Ausdruck formulieren, der das gleiche
Ergebnis liefert wie der Ausdruck davor.

Wandeln Sie diese umgangssprachlichen Definitionen in boolesche Ausdrücke, um das


Ergebnis aus den Variablen muede und praktikum zu berechnen. Die Ausgabe für eine
Werte-Kombination kann folgendermaßen aussehen.

muede = false
praktikum = true
NOT muede = true
muede AND praktikum = false
muede OR praktikum = true
muede XOR praktikum = true
spass = true
freizeit = false
unternehmungslustig1 = false
unternehmungslustig2 = false

f) Geben Sie alle Berechnungsergebnisse der vorherigen Teilaufgaben für alle möglichen
Kombinationen der Wahrheitswerte (boolesche Werte true oder false) für muede
und praktikum auf der Kommandozeile aus. Dies soll in der folgenden Reihenfolge
stattfinden. Die ??? sind durch die jeweiligen Berechnungsergebnisse zu ersetzen.
Zwischen den Absätzen befindet sich jeweils genau eine Leerzeile.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

muede = false
praktikum = false
NOT muede = ??? Hinweis: Die Ergebnisse können durch das Kopieren
muede AND praktikum = ??? von Quelltext erzeugt werden. Sie können für die
muede OR praktikum = ???
Berechnung aber auch (optional) eine einzige Java-
muede XOR praktikum = ???
spass = ??? Methode verwenden, die mehrfach aufgerufen wird.
freizeit = ???
unternehmungslustig1 = ???
unternehmungslustig2 = ???

muede = false
praktikum = true
NOT muede = ???
muede AND praktikum = ???
muede OR praktikum = ???
muede XOR praktikum = ???
spass = ???
freizeit = ???
unternehmungslustig1 = ???
unternehmungslustig2 = ???

muede = true
praktikum = false
NOT muede = ???
muede AND praktikum = ???
muede OR praktikum = ???
muede XOR praktikum = ???
spass = ???
freizeit = ???
unternehmungslustig1 = ???
unternehmungslustig2 = ???

muede = true
praktikum = true
NOT muede = ???
muede AND praktikum = ???
muede OR praktikum = ???
muede XOR praktikum = ???
spass = ???
freizeit = ???
unternehmungslustig1 = ???
unternehmungslustig2 = ???

Aufgabe 3 – Empfehlungssystem: Boolesche Werte einlesen,


boolesche Ausdrücke auswerten und If-Kontrollstruktur
verwenden (6 Punkte)
In dieser Aufgabe soll ein einfaches Empfehlungssystem für das Verhalten in Vorlesungen
entwickelt werden.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Bool, das sich in
dem Zip-Archiv „Bool.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-Datei
BoolAusdrueckeEinlesen.java in dem Java-Paket
aufgaben/_03bool_ausdruecke_einlesen. Dieses Paket muss ggf. erst
aufgeklappt werden.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

b) Definieren Sie in der main-Methode die folgenden booleschen Variablen, die die
angegebene Bedeutung (Semantik) haben sollen.

boolean vorlesung; // Student befindet sich in einer Vorlesung


boolean vorbereitet; // Student ist vorbereitet
boolean mitarbeitend; // Student arbeitet während der Vorlesung mit

c) Mithilfe der Klasse Scanner lassen sich Benutzereingaben von der Kommandozeile
einlesen. Ein Scanner-Objekt lässt sich folgendermaßen definieren.

Scanner inputScanner = new Scanner(System.in);

Das Einlesen eines Wahrheitswerts kann mit den folgenden Quellcodezeilen stattfinden.

System.out.print("vorlesung: ");
vorlesung = inputScanner.nextBoolean();

Erweitern Sie Ihren Quellcode so, dass Wahrheitswerte für alle drei oben genannten
Variablen nacheinander von der Kommandozeile gelesen werden. Der Benutzer kann
false oder true tippen und die Eingabe mit der Eingabetaste (Return, Enter)
bestätigen. Die Eingabe soll folgendermaßen aussehen, wenn der Benutzer immer true
eingegeben hat.

vorlesung: true
vorbereitet: true
mitarbeitend: true

d) Mithilfe einer If-Kontrollstruktur (If-Abfrage) lassen sich in Abhängigkeit des


Ergebnisses von booleschen Ausdrücken unterschiedliche Quellcode-Anweisungen
ausführen, beispielsweise:

if (vorlesung) {
System.out.println("in der Vorlesung");
} else {
System.out.println("nicht in der Vorlesung");
}

Erweitern Sie den bisherigen Quellcode so, dass in Abhängigkeit der eingelesenen Werte
der oben definierten Variablen ein Text (als ein Analyseergebnis) ausgegeben wird. Die
Analyseergebnisse seien wie folgt definiert:

• Nicht in der vorlesung und nicht vorbereitet und nicht mitarbeitend


 „Freizeit“
• Nicht in der vorlesung und mitarbeitend  „Wie geht das?“
• Nicht in der vorlesung und vorbereitet  „gut“
• In der vorlesung und nicht vorbereitet und nicht mitarbeitend 
„wenig Lernerfolg“

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

• In der vorlesung und (nicht vorbereitet oder nicht mitarbeitend) 


„könnte besser sein“
• In der vorlesung und vorbereitet und mitarbeitend  „perfekt“

Die Analyse findet durch separate If-Kontrollstrukturen in der oben definierten


Reihenfolge statt. Dabei kann es passieren, dass für eine bestimmte Eingabe-
Kombination mehr als ein Text ausgegeben wird. Der angegebene Text muss mit
System.out.println("Text"); ausgegeben werden, damit nach der Ausgabe
ein Zeilenwechsel (Zeilenumbruch) erfolgt.

e) Testen Sie Ihr Programm ausführlich mit möglichst allen möglichen


Eingabekombinationen und korrigieren Sie eventuelle Fehler.

f) Zusatzaufgabe (0 Punkte): Nutzen Sie diese Aufgabe als Basis, um ein umfangreicheres
Empfehlungssystem zu entwickeln, das Tipps für ein erfolgreiches Verhalten im Studium
gibt.

Aufgabe 4 – Analysesystem: Werte einlesen und verknüpfen


und If-Kontrollstruktur (8 Punkte)
In dieser Aufgabe soll ein einfaches Bußgeld-Analysesystem für eine
Geschwindigkeitsüberschreitung mit einem PKW entwickelt werden. Dabei wird ein fiktiver
und stark vereinfachter Bußgeldkatalog zugrunde gelegt.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Bool, das sich in
dem Zip-Archiv „Bool.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-Datei
BoolVergleiche.java in dem Java-Paket aufgaben/_04bool_vergleiche.
Dieses Paket muss ggf. erst aufgeklappt werden.

b) Definieren Sie in der main-Methode die folgenden Variablen, die die angegebene
Bedeutung (Semantik) haben sollen.

boolean innerorts; // Es wurde innerhalb der Ortschaft gefahren


boolean landstrasse; // Es wurde auf einer Landstraße gefahren
int deltaV; // Höhe der Geschwindigkeitsüberschreitung in km/h

Die letzte Variable ist vom Typ int, der die Aufnahme von ganzzahligen Werten
(Ganzzahl) ermöglicht. Damit können Geschwindigkeitsüberschreitungen nur in ganzen
Stundenkilometern angegeben werden.

c) Die aus der vorherigen Aufgabe bekannte Klasse Scanner ermöglicht auch die
Benutzereingaben von ganzen Zahlen. Dies kann durch die folgenden Quellcodezeilen
stattfinden.

System.out.print("deltaV: ");
deltaV = inputScanner.nextInt();

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

Ermöglichen Sie in Ihrem System das Einlesen aller drei Werte. Eine (Beispiel-)Eingabe
soll wie folgt aussehen:

innerorts: true
landstrasse: false
deltaV: 5

d) Werte von int-Variablen können mit (konstanten oder anderen) Werten verglichen
werden, z.B. durch

(deltaV < 15)

Das Ergebnis dieser Auswertung ergibt einen Wahrheitswert (false oder true). Damit
lässt sich ein solcher Ausdruck in komplexeren booleschen Ausdrücken einfügen oder in
If-Kontrollstrukturen nutzen.

Mithilfe von booleschen Ausdrücken und If-Kontrollstrukturen sollen die eingelesen


Werte analysiert werden. Hierbei sollen die folgenden Regeln gelten und der jeweils
definierte Text mithilfe von System.out.println("Text"); ausgegeben werden.

• Falls nicht innerorts und nicht landstrasse  „Richtgeschwindigkeit“


• Falls innerorts und landstrasse  „Fehler“
• Falls nicht innerorts und landstrasse
o Falls deltaV <= 0  „OK“
o Falls deltaV > 0 und deltaV <= 10  „10 EUR“
o Falls deltaV >= 11 und deltaV <= 15  „20 EUR“
o Falls deltaV >= 16  „30 EUR“
• Falls innerorts und nicht landstrasse
o Falls deltaV <= 0  „OK“
o Falls deltaV > 0 und deltaV <= 10  „15 EUR“
o Falls deltaV >= 11 und deltaV <= 15  „25 EUR“
o Falls deltaV >= 16  „40 EUR“

Die Analyse findet durch If-Kontrollstrukturen in der oben definierten Reihenfolge statt.
Der angegebene Text muss mit System.out.println("Text"); ausgegeben
werden, damit nach der Ausgabe ein Zeilenwechsel (Zeilenumbruch) erfolgt. Eine
Beispielausgabe sieht folgendermaßen aus:

innerorts: true
landstrasse: false
deltaV: 20
40 EUR

e) Testen Sie Ihr Programm ausführlich mit möglichst vielen Eingabekombinationen und
korrigieren Sie eventuelle Fehler.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

f) Zusatzaufgabe (0 Punkte): Überlegen Sie mit welchen Test-Wert Sie eine möglichst gute
Abdeckung (Coverage) aller möglichen Eingabekombinationen erreichen können.

g) Zusatzaufgabe (0 Punkte): Nutzen Sie Ihren Quellcode als Basis, um ein Analysesystem zu
entwickeln, dem ein realer Bußgeldkatalog zugrunde liegt. Hierbei lassen sich zusätzlich
Strafpunkte beim Kraftfahrtbundesamt („Punkte in Flensburg“) und Fahrverbote
berücksichtigen.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle

Das könnte Ihnen auch gefallen