Ubungsblatt 6

Werbung
Programmierparadigmen
Fachgebiet Telematik/Rechnernetze
Prof. Dr.-Ing. Günter Schäfer
SS 2017
Übungsblatt 6
Aufgabe 1
Auswertungsstrategien in Erlang
In der Vorlesung haben Sie bereits verschiedene Auswertungsstrategien und Möglichkeiten zur Parameterbehandlung in Programmiersprachen kennengelernt.
a) Implementieren Sie bitte zunächst in der Programmiersprache Erlang eine unendliche Liste, welche die Reihe der natürlichen Zahlen nachbildet.
b) Versuchen Sie nun bitte, alle geraden Zahlen auszugeben, welche in dieser Liste
enthalten sind.
Hinweis: Denken Sie zunächst über die Auswertungsstrategien von Erlang nach. Was
ist bei der Implementierung unendlicher Listen zu beachten?
Aufgabe 2
Sieb des Eratosthenes
Ein einfacher Algorithmus zur Bestimmung aller Primzahlen aus der Reihe der natürlichen Zahlen wird als Sieb des Eratosthenes bezeichnet. Der Begriff Sieb weist bereits
auf das zugrundeliegende Prinzip hin: Die gesuchten Primzahlen werden nicht gezielt
konstruiert, sondern alle Nichtprimzahlen werden stattdessen aussortiert. Dazu sei
folgender Algorithmus im Pseudocode gegeben:
Algorithm 1 Eratosthenes
Schreibe alle Zahlen√von 2 bis n in eine Liste
für alle i := 2 . . . b nc in der Liste tue
für alle j := i . . . bn/i c tue
Streiche die Zahl i × k aus der Liste
Implementieren Sie einen Algorithmus zur Bestimmung der ersten k Primzahlen aus
der (unendlichen) Reihe der natürlichen Zahlen in der Programmiersprache Erlang.
Aufgabe 3
* Integration: Java und Erlang
In der Vorlesung haben Sie ein einfaches Client-Server-Beispiel für eine bidirektionale
Kommunikation zwischen Erlang und Java kennengelernt.
Aufbauend auf diesem Beispiel soll mit der Programmiersprache Java eine einfache
GUI-Applikation für ein Übertragungsprotokoll entwickelt werden. Dabei wird auf
die – bereits in Übung 3 gelöste – Übungsaufgabe zum Alternating-Bit-Protokoll
zurückgegriffen. Die Java-Applikation soll lediglich graphisch den Status einer Übertragung prozentual wiedergeben.
Als Basis für die Java-Implementierung können Sie Ihre Lösung aus der Übung
3 und das ProgressBar-Beispiel von Oracle verwenden, welches Sie unter http:
uebung6˙pparadigmen.tex @ 15. Mai 2017 : 9:17
Abbildung 1: Beispiel: Progress Bar
//bit.ly/2pMMotu (oder https://docs.oracle.com/javase/tutorial/uiswing/
components/progress.html) erhalten. Es müssen beide Teile verknüpft werden, in
dem Sie:
a) die Erlang-Übungsaufgabe zum Alternating-Bit-Protokoll um eine Funktion
ergänzen, welche den aktuellen Übertragungszustand vorhält und diesen geeignet an das Java-Programm übergibt.
b) Sie den Code des Java-Threads erweitern, welcher so den Übetragungszustand
entgegennimmt und mit einer Nachricht an die Erlang-Umgebung quittiert.
Aufgabe 4
Wiederholung: Rekursion und natürliche Zahlen
Bereits in Übungsblatt 3 wurde der Euklidische Algorithmus zur Berechnung des
größten gemeinsamen Teilers zweier Ganzzahlen verwendet. In dieser Aufgabe soll
eine klassische rekursive Variante dieses Algorithmus zur Berechnung des ggT zweier
natürlicher Zahlen im λ-Kalkül formuliert werden:


wenn a = b
a
ggT (a, b) = ggT (b − a, a) wenn a < b


ggT (a − b, b) sonst.
a) Definieren Sie bitte zunächst die nötigen Vergleichsoperatoren im LambdaKalkül. Zeigen Sie die Funktion der definierten Operatoren an einem kleinen
Beispiel.
Hinweis: Um die angegebene Rekursion sinngemäß umzusetzen, benötigen Sie
mindestens einen Vergleichsoperator less. Beachten Sie, dass im Rahmen der
Arithmetik über Church-Numeralen pred (c0 ) = c0 gilt. Dementsprechend ist
das Ergebnis von Subtraktionen immer im Bereich der natürlichen Zahlen (allerdings mathematisch möglicherweise nicht korrekt).
2
b) Formulieren Sie nun einen Ausdruck zur Berechnung des ggT zweier natürlicher
Zahlen im λ-Kalkül.
c) Berechnen Sie anschließend unter Verwendung des angebenen Ausdrucks den
ggT von 6 und 9.
Aufgabe 5
Wiederholung: Rekursion und natürliche Zahlen
Formulieren Sie bitte einen Ausdruck zur Berechnung der Summe der ersten n natürlichen Zahlen im λ-Kalkül. Verwenden Sie den entsprechenden Ausdruck anschließend,
um die Summe der ersten 3 natürlichen Zahlen rekursiv zu berechnen.
3
Herunterladen