Sie sind auf Seite 1von 5

Programmierung I

Praktikum 6
Statische Methoden und Parameter

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 – Zeichenmuster ausgeben (4 Punkte)


In dieser Aufgabe soll eine Folge von Plus-Zeichen (+) und Minus-Zeichen (–) Zeichen als
Muster auf der Kommandozeile ausgegeben werden. Diese Folge soll sich aus Basismustern
der Form +-, ++-, +++-, etc. zusammensetzen. Ein Basismuster soll durch eine zu
erstellende Methode ausgegeben werden. Hierbei soll als Parameter dieser Methode die
Anzahl der Plus-Zeichen (+) innerhalb des Basismusters angegeben werden können. Die
Gesamtausgabe setzt sich als eine anzugebende Anzahl von Basismustern zusammen.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Methoden, das
sich in dem Zip-Archiv „Methoden.zip“ auf der Lernplattform befindet. Öffnen Sie die
Java-Datei Muster.java in dem Java-Paket aufgaben/_01muster.

b) Definieren Sie in der main-Methode die int-Variablen anzahlPlusSymbole und


anzahlBasismuster. Mithilfe der Scanner-Klasse sollen nacheinander Werte von
der Kommandozeile eingelesen und in diesen Eingabevariablen gespeichert werden.

Erstellen Sie eine neue statische Methode druckeMuster innerhalb der Klasse (und
nicht innerhalb der main-Methode), die keinen Rückgabewert hat (void) und den
Parameter anzahlPlusSymbole vom Typ int aufweist. Diese Methode soll ein
Basismuster mit einer Variablen Anzahl von Plus-Symbolen (+) und einem Minus-Symbol
(-) am Ende auf der Kommandozeile ausgeben. Beispielsweise sollen mit dieser Methode

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

abhängig von dem Parameterwert anzahlPlusSymbole die Basismuster +-, ++-,


+++-, ++++- auf der Kommandozeile ausgegeben werden.

c) Fügen Sie Quellcode in die main-Methode ein, wodurch erst ein Basismuster und dann
die durch anzahlBasismuster definierte Anzahl von Basismustern ausgegeben
wird. Beispielausgaben sollen folgendermaßen aussehen:

anzahlPlusSymbole: 1
anzahlBasismuster: 1
Basismuster = +-
+-

anzahlPlusSymbole: 2
anzahlBasismuster: 5
Basismuster = ++-
++-++-++-++-++-

anzahlPlusSymbole: 4
anzahlBasismuster: 6
Basismuster = ++++-
++++-++++-++++-++++-++++-++++-

d) Testen Sie Ihr Programm mit möglichst vielen unterschiedlichen Eingabewerten und
beheben Sie ggf. Fehler.

Aufgabe 2 – Gleitender Mittelwert (einfache Datenfilterung)


(10 Punkte)
In dieser Aufgabe soll die Filterung von Sensor-Daten mithilfe eines einfachen Mittelwert-
Filters simuliert werden. Es sei angenommen, dass Messwerte eines Sensors von einem
Prozess empfangen werden. Der gleitende Mittelwert soll über drei Datenpunkte (Taps)
berechnet werden. Wenn ein Messwert einen Schwellwert überschreitet, dann wird die
Filterung abgebrochen und eine Alarm-Meldung ausgegeben. In diesem Beispiel stammen
die Messwerte von einem Zufallsgenerator, der eine normalverteilte Zufallsfolge erzeugt.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Methoden, das
sich in dem Zip-Archiv „Methoden.zip“ auf der Lernplattform befindet. Öffnen Sie die
Java-Datei MovingAverageFilter.java in dem Java-Paket
aufgaben/_02moving_average_filter.

In diesem Paket befindet sich die weitere Klasse SensorData mit der Methode
nextSample, die bei einem Aufruf einen Wert des Typs double zurückliefert, der aus
einer normalverteilten Zufallsfolge stammt. Diese Klasse und Methode müssen für diese
Aufgabe lediglich genutzt, aber nicht verändert werden.

b) Implementieren Sie die neue statische Methode filter in der Klasse


MovingAverageFilter. Diese neue Methode weist keine Parameter und keinen
Rückgabewert auf und gibt das Ergebnis der Filterung auf der Kommandozeile aus.

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

Hierbei akquiriert diese Filter-Methode durch den Aufruf von nextSample einen
neuen Messwert und filtert diesen, bis ein Messwert größer als der Schwellwert auftritt.
Nach dem Überschreiten dieses Schwellwerts werden der letzte Messwert und die
Meldung Alarm! ausgegeben.

Der Filter soll folgendermaßen operieren:


• Sei s_t0 der neu akquirierte Wert, s_t1 der im vorherigen Zeitschritt
akquirierte Wert und s_t2 der vor zwei Zeitschritten akquirierte Wert.
• Zum Beginn der Filterung sollen s_t1 und s_t2 mit dem Wert 0 initialisiert
werden.
• Das Ergebnis eines Filterschritts berechnet sich folgendermaßen

𝑠𝑠_𝑡𝑡0 + 𝑠𝑠_𝑡𝑡1 + 𝑠𝑠_𝑡𝑡2


result =
3

• Falls s_t0 > 2.42 ist, ist der Schwellwert überschritten. In diesem Fall soll
keine neue Ausgabe berechnet und die Filterung beendet werden. Weiterhin
sollen der letzte Messwert s_t0 und die Meldung Alarm! ausgegeben werden.
• Andernfalls soll mittels nextSample ein neuer Wert bezogen werden, s_t0,
s_t1 und s_t2 aktualisiert und ein neuer Filterschritt durchgeführt werden.
• Nach jedem Filterschritt werden der Wert s_t0 und das Filterergebnis result
zusammen mit der entsprechenden Zuordnung auf der Kommandozeile
ausgegeben.

Damit nach dem Start des Programms die simulierte Filterung beginnen kann, muss in
der main-Methode der Klasse MovingAverageFilter die Methode filter
entsprechend aufgerufen werden.

Ein Beispielergebnis soll folgendermaßen aussehen:


s_t0 = 1.0885889348282718, result = 0.3628629782760906
s_t0 = -0.1817465505861764, result = 0.30228079474736513
s_t0 = -0.4353381554982842, result = 0.15716807624793705
s_t0 = 1.0492323311527452, result = 0.14404920835609483
s_t0 = -1.6989584761061218, result = -0.36168810015055364
s_t0 = -0.7395763285952012, result = -0.46310082451619267
s_t0 = 0.1323892883465637, result = -0.7687151721182531
s_t0 = -1.6115012011987042, result = -0.739562747149114
s_t0 = -0.6924086583069703, result = -0.7238401903863703
s_t0 = 1.0707579358618606, result = -0.4110506412146046
s_t0 = -0.4437007932087865, result = -0.02178383855129873
s_t0 = -0.5835357299023187, result = 0.014507137583585092
s_t0 = 1.3308024534131182, result = 0.10118864343400431
s_t0 = 0.7649112124061882, result = 0.5040593119723292
s_t0 = -1.2052021860385256, result = 0.29683715992692694
s_t0 = 1.87068835087252, result = 0.4767991257467276
s_t0 = 0.419748668170736, result = 0.36174494433491017
s_t0 = 1.245332671157391, result = 1.178589896733549
s_t0 = 0.4248122662257843, result = 0.6966312018513038
s_t0 = -0.36337388887588923, result = 0.4355903495024287

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

s_t0 = -0.5202704806369767, result = -0.15294403442902724


s_t0 = 0.08091291796884201, result = -0.2675771505146746
s_t0 = 1.5037222131916905, result = 0.3547882168411853
s_t0 = 0.2569522640809389, result = 0.6138624650804905
s_t0 = -1.770305363775095, result = -0.0032102955008218212
s_t0 = 2.043291569494301, result = 0.17664615660004834
s_t0 = 1.8026143992446113, result = 0.6918668683212724
s_t0 = -0.07242346250891293, result = 1.2578275020766665
s_t0 = -1.4289437956602296, result = 0.10041571369182296
s_t0 = 0.43222380918149317, result = -0.35638114966254975
s_t0 = 2.094236633057148, result = 0.36583888219280397
s_t0 = -0.2773723916602266, result = 0.7496960168594716
s_t0 = 0.09480651386873308, result = 0.6372235850885515
s_t0 = 0.643369229107651, result = 0.15360111710538585
s_t0 = 0.757883221526934, result = 0.4986863215011061
s_t0 = 0.29039436744516145, result = 0.5638822726932489
s_t0 = 1.8471587002833991, result = 0.9651454297518315
s_t0 = -1.0389431390537365, result = 0.3662033095582747
s_t0 = 0.12489907434807766, result = 0.3110382118592468
s_t0 = 1.2792014414612385, result = 0.1217191255851932
s_t0 = -0.6671874084311861, result = 0.2456377024593767
s_t0 = 0.9574458235082111, result = 0.5231532855127545
s_t0 = 0.06997517418578862, result = 0.12007786308760453
s_t0 = -0.9071595677454914, result = 0.040087143316169395
s_t0 = -0.6650654462285235, result = -0.5007499465960754
s_t0 = -0.746973775700105, result = -0.7730662632247066
s_t0 = -0.9096236542125541, result = -0.7738876253803942
s_t0 = -0.6008789466202147, result = -0.7524921255109579
s_t0 = 0.08932954849698205, result = -0.4737243507785956
s_t0 = -1.9383821746109735, result = -0.8166438575780687
s_t0 = 2.7726618907692244
Alarm!

Aufgabe 3 – Methoden für die Grundrechenarten und die


Ermittlung der Quadratwurzel (6 Punkte)
In dieser Aufgabe sollen Java-Methoden entwickelt werden, mit deren Hilfe sich die vier
Grundrechenarten durchführen lassen. Weiterhin soll mithilfe einer weiteren Methode die
Quadratwurzel ermittelt werden können.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Methoden, das
sich in dem Zip-Archiv „Methoden.zip“ auf der Lernplattform befindet. Öffnen Sie die
Java-Datei Rechner.java in dem Java-Paket aufgaben/_03rechner.

b) Definieren Sie in der main-Methode die double-Variablen wert1 und wert2.


Mithilfe der Scanner-Klasse sollen Werte von der Kommandozeile eingelesen und in
diesen Eingabevariablen gespeichert werden.

Definieren Sie die vier neuen statischen Methoden addiere, subtrahiere,


multipliziere und dividiere in der Klasse Rechner. Jede dieser Methoden

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

weisen zwei Parameter vom Typ double auf und liefern das Ergebnis der
entsprechenden Berechnung als double-Wert zurück. Keine dieser Methoden gibt ein
Ergebnis auf der Kommandozeile aus.

Rufen Sie jede dieser Methoden in der main-Methode jeweils mit den eingelesenen
Werten wert1 und wert2 auf und geben Sie das Ergebnis – zusammen mit
erläuternden Informationen – auf der Kommandozeile aus. Ein Beispielergebnis soll
folgendermaßen aussehen:

wert1: 8
wert2: 2
Summe: 10.0
Differenz: 6.0
Produkt: 16.0
Quotient: 4.0

c) Definieren Sie die weitere statische Methode quadratwurzel in der Klasse


Rechner. Diese Methode weist einen Parameter vom Typ double auf und liefern das
Ergebnis der Quadratwurzelberechnung als double-Wert zurück. Es erfolgt keine
Ausgabe auf der Kommandozeile. Verwenden Sie zur Realisierung der Berechnung die
Methode sqrt aus der in Java 11 enthaltenden Klasse Math.

Rufen Sie jede diese Methoden ebenfalls in der main-Methode mit dem eingelesenen
Werte wert1 auf und geben Sie das Ergebnis – zusammen mit einer erläuternden
Information – auf der Kommandozeile aus. Zusammen mit der Ausgabe aus dem
vorherigen Aufgabenteil soll ein Beispielergebnis folgendermaßen aussehen:

wert1: 81
wert2: 3
Summe: 84.0
Differenz: 78.0
Produkt: 243.0
Quotient: 27.0
Quadratwurzel: 9.0

d) Zusatzaufgabe (0 Punkte): Erweitern Sie diesen Rechner so, dass weitere Mathematische
Operationen genutzt werden können. Beispielsweise sollen sich Potenzen und Werte
trigonometrischer Funktionen berechnen lassen.

e) Zusatzaufgabe (0 Punkte): Erweitern Sie diesen Rechner um eine einfach interaktive Ein-
und Ausgabe über die Kommandozeile. Nach dem Start des Programms soll ein Menü
angezeigt werden, in dem sich auswählen lässt, dass die Operanden eingelesen werden
sollen und welche mathematische Operation auf diese Operanden angewandt werden
soll. Nach einer Auswahl eines Menüpunkt soll die entsprechende Funktion ausgeführt
werden und das Menü erneut angezeigt werden.

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

Das könnte Ihnen auch gefallen