Ubungsblatt 3

Werbung
Programmierparadigmen
Fachgebiet Telematik/Rechnernetze
Prof. Dr.-Ing. Günter Schäfer
SS 2017
Übungsblatt 3
Aufgabe 1
Falten
In der Vorlesung haben Sie bereits die beiden Funktionen foldl und foldr kennengelernt, welche auch als Faltungen bezeichnet werden.
a) Definieren Sie eine Funktion ggT, die den größten gemeinsamen Teiler einer
Liste von Ganzzahlen errechnet (Beispiel: ggt([18, 60, 36]) == 6.).
Hinweis: Um zunächst den ggT zweier als Parameter übergebenen Zahlen zu berechnen, können Sie auf den bekannten euklidischen Algorithmus zurückgreifen.
Anschließend können Sie die Funktion foldl verwenden, um die Teilaufgabe zu
lösen.
b) Definieren Sie nun eine Funktion kgV, welche analog dazu das kleinste gemeinsame Vielfache einer Liste von Ganzzahlen bestimmt.
Hinweis: Sie können bei der Lösung der Teilaufgabe folgenden Zusammenhang
ausnutzen: |x × y| = ggT(x , y) × kgV(x , y).
c) Skizzieren Sie bitte, wie das Erlang-System die Anfrage kgV ([2, 3, 6, 5]). bearbeitet.
Aufgabe 2
Filtern
Gegeben sei eine Liste ls aus natürlichen Zahlen und eine beliebige einargumentige
Funktion f (x ), wobei x ∈ N. Definieren Sie eine Funktion eqklassen, welche die Liste
der Äquivalenzklassen der Elemente in ls bezüglich f berechnet. Eine Äquivalenzklasse soll dabei durch die Liste ihrer Elemente repräsentiert werden.
Beispiele:
– eqklassen(fun id /1, [1, 2, 3, 2, 1]) == [[1, 1], [2, 2], [3]].
Hierbei ist id die Identitätsfunktion id (X ) → X .
– Sei eine Funktion modThree wie folgt gegeben:
modThree(X ) → X rem 3.
Dann soll gelten:
eqklassen(fun modThree/1, [1, 2, 3, 4, 5, 6, 7]) == [[1, 4, 7], [2, 5], [3, 6]].
Verwenden Sie wahlweise die Funktion filter oder List Comprehensions, um die Aufgabe zu lösen. Achten Sie bitte darauf, dass keine Äquivalenzklasse mehrfach ausgegeben
wird.
uebung3˙pparadigmen.tex @ 18. April 2017 : 15:09
Aufgabe 3
Zahlensysteme
Definieren Sie eine Funktion wandeln, die eine Zahl zur Basis b1 in eine Zahl zur
Basis b2 wandelt. Eine Zahl sei dabei als Integer-Liste gegeben. Die 5 hat zur Basis 2
beispielsweise die Darstellung [1, 0, 1]. b1 und b2 werden der Funktion als Parameter
übergeben.
Beispiel: wandeln(2, [1, 0, 1], 10) == [5], oder wandeln(4, [1, 3], 3) == [2, 1]
Aufgabe 4
Abstraktes Übertragungsprotokoll
Bei dem bereits aus der Vorlesung bekannten Alternating Bit Protocol (ABP) handelt
es sich um ein einfaches Protokoll zur Datenübertragung über einen verlustbehafteten
Kanal. Das Prinzip ist einfach: Der Sender wartet zunächst auf eine positive Empfangsbestätigung für ein übertragenes Paket, bevor das nächste Paket versendet wird.
Somit fällt das Protokoll in die Kategorie der Automatic Repeat reQuest (ARQ) Protokolle. Außerdem lässt es sich als Stop-And-Go-Protokoll klassifizieren, da es - im
Gegensatz zu Sliding-Window-Protokollen - zu einem Zeitpunkt und in eine Richtung
immer nur ein einziges Paket zu übertragen versucht.
Das Konzept dieses Protokolls soll in dieser Aufgabe in einer vereinfachten Variante veranschaulicht werden. Dazu muss das Beispiel aus der Vorlesung zunächst
vervollständigt werden.
a) Rekapitulieren Sie zunächst das Verhalten von Sender und Empfänger, sowie
den Protokollablauf. Zur besseren Veranschaulichung können Sie beispielsweise
einen einfachen Zustandsautomaten verwenden.
b) Setzen Sie nun das beschriebene Verfahren zur Datenübertragung in Erlang
um. Ergänzen Sie dazu das – auf den Fachgebietsseiten verfügbare – Beispiel
alternatingBit.erl um die Funktionen senderReady1/1, receiverWait1/1 und senderProcess1/1. Um die Implementierung zu testen, können Sie schließlich auf
die Funktion initialize(ErrorRate, NachrichtenAnzahl) zurückgreifen.
c) Versuchen Sie, den Zustandsautomaten und – analog dazu – die Implementierung weiter zu vereinfachen, ohne die Zuverlässigkeit des Übertragungskonzeptes
zu beeinflussen. Ist es möglich, mit einer geringeren Anzahl von Zuständen eine
zuverlässige Übertragung zu gewährleisten?
2
Herunterladen