• Keine Ergebnisse gefunden

Aufgabe3DieDatenstrukturString(praktisch) (4Punkte) Aufgabe2Syntax-,Typisierungs-undLaufzeitfehler (4Punkte) Aufgabe1Operatorpräzedenzen (2Punkte) Übungsblatt3:Software-EntwicklungI(WS2007/08) TUKaiserslautern

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabe3DieDatenstrukturString(praktisch) (4Punkte) Aufgabe2Syntax-,Typisierungs-undLaufzeitfehler (4Punkte) Aufgabe1Operatorpräzedenzen (2Punkte) Übungsblatt3:Software-EntwicklungI(WS2007/08) TUKaiserslautern"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch

TU Kaiserslautern

Fachbereich Informatik AG Softwaretechnik

Übungsblatt 3: Software-Entwicklung I (WS 2007/08)

Ausgabe: 06. November 2007 Abgabe: 12. November 2007, 12.00 Uhr Abnahme praktischer Teil: 12. November - 15. November 2007

Aufgabe 1 Operatorpräzedenzen (2 Punkte)

a) Gegeben sind folgende Funktionsdeklarationen:

fun f (x, y) = x < x = true = y;

fun m (a, b) = a * b + a + b > 0;

Geben Sie eine explizite Klammerung der in ihnen auftretenden Ausdrücke gemäß der Operator- präzedenzen an! Hinweis: Eine Auflistung der Präzedenzen einzelner Operatoren finden Sie auf der Seite von Standard ML of New Jersey,

http://www.smlnj.org/doc/basis/pages/top-level-chapter.html (1 Punkt) b) Welchen Typ haben die Funktionenfundm? Begründen Sie Ihre Antwort. (1 Punkt)

Aufgabe 2 Syntax-, Typisierungs- und Laufzeitfehler (4 Punkte)

Schreiben Sie die unten aufgelisteten Ausdrücke in eine sml-Datei und überprüfen Sie, zu welchem Er- gebnis ihre Auswertung führt. Beschreiben Sie eventuell autretende Fehler und deren Ursachen. Gibt es Möglichkeiten fehlerhafte Ausdrücke sinnvoll zu korrigieren?

a) 6.08 * 3.14 * 2.05;

b) 1 + 1 = 2.0;

c) ((-4)=(~(1+3)));

d) #1(true,true);

e) [1,2,3] = [1]@[2,3];

f) [1,2,3] = [1,[2,3]];

g) [1,2,3] = 1::[2,3];

h) [1,2,3] = [1]::[2,3];

Aufgabe 3 Die Datenstruktur String (praktisch) (4 Punkte)

Schreiben Sie eine ML-Funktion swap_letters vom Typ string → string, die eine Zeichenkette s als Eingabe nimmt und alle in s vorkommenden Groß- beziehungsweise Kleinbuchstaben in Klein- bezie- hungsweise Großbuchstaben umwandelt (alle anderen Zeichen bleiben unverändert).

(2)

Beispiele:

swap_letters "" = ""

swap_letters "a7B" = "A7b"

swap_letters "WM 2006" = "wm 2006"

Aufgabe 4 Rekursion (praktisch) (12 Punkte)

a) (Einfache Rekursion) Schreiben Sie eine ML-Funktionsum : int →real, die eine ganze Zahlnals Eingabe nimmt und die Summe dernersten Summanden der geometrischen Reihe1 +12+13+14+. . .=

Σk=1k1 berechnet. (2 Punkte)

b) (Einfache Rekursion) Schreiben Sie eine ML-Funktion lsum : int list ∗ int list →int list, die ein Listenpaar(l1, l2)als Eingabe entgegennimmt und eine Liste mit ganzen Zahlenl3 zurückgibt.

Dabei soll Folgendes gelten:

• Sie dürfen annehmen, dass die Listen l1 und l2 nicht leer sind, nur ganze Zahlen von 0 bis 9 enthalten und zwei ganze Zahleni1undi2darstellen.

• Die Listel3enthält nur Zahlen von 0 bis 9 und stellt die Zahli1+i2dar.

Beispiele:

lsum([0],[1])=[1]

lsum([1,2,3],[2,3])=[1,4,6]

lsum([9,3],[2,1])=[1,1,4]

(2 Punkte) c) (Einfache Rekursion) Schreiben Sie eine ML-Funktioncheck : int ∗ 0a list →bool, die ein Paar

(n, l)als Eingabe entgegennimmt und überprüft, ob die Länge der Listelgleichnist.

Beispiele:

check(0,[])=true check(3,[2,3])=false check(3,[2,3,7])=true

(2 Punkte) d) (Einfache Rekursion) Schreiben Sie eine ML-Funktion nmultiples: int∗int∗int list →bool,

die Tupel(n, m, l)als Eingabe nimmt und überprüft, oblaus den erstennVielfachen vonmbesteht.

Beispiele:

nmultiples(0,4,[])=true

nmultiples(3,4,[4,8,12])=true nmultiples(3,4,[4,8,13])=false nmultiples(3,4,[4,8,12,16])=false

(2 Punkte) e) (Einfache Rekursion) Schreiben Sie eine ML-Funktionconcattest1 : string → bool, die eine Zei- chenkettesals Eingabe entgegennimmt und entscheidet, obsdurch Konkatenation von Zeichenketten aus der Menge{”IF”,”THEN”,”ELSE”}entstanden ist.

Beispiele:

concattest1 ""=false concattest1 "IF"=true concattest1 "IFIF"=true concattest1 "ELSELSE"=false concattest1 "IFTHENIFELSE"=true

(3)

f) (Die verschränkte Rekursion) Betrachten Sie das folgende Beispiel für verschränkt rekursive Funktions- delarationen.

1 fun odd n = if n=0 then false

2 else (if n=1 then true

3 else even(n-1))

4 and even n = if n=0 then true

5 else (if n=1 then false

6 else odd(n-1))

7

8 - even 0;

9 val it = true : bool

10 - even 1;

11 val it = false : bool

12 - even 2;

13 val it = true : bool

14 - even 3;

15 val it = false : bool

16 - odd 0;

17 val it = false : bool

18 - odd 1;

19 val it = true : bool

20 - odd 2;

21 val it = false : bool

22 - odd 3;

23 val it = true : bool

24 -

Schreiben Sie eine ML-Funktionconcattest2 : string → bool, die die gleiche Funktionalität wie die Funktionconcattest1aus der vorangehenden Teilaufgabe hat aber im Gegensatz zuconcattest1auf dem oben veranschaulichten Prinzip der verschränkten Rekursion basiert.

(2 Punkte)

Aufgabe 5 Terminierung (2 Punkte)

Betrachten Sie die folgende Funktiondeklaration der Funktionlookup.

1 fun lookup key (env : (string * int) list) =

2 if key = #1(hd env)

3 then #2(hd env)

4 else lookup key env

Beschreiben Sie, für welche Eingaben diese Funktion terminiert und für welche nicht. Schlagen Sie sinnvolle Verbesserungen vor, so dass die Funktion immer terminiert.

Aufgabe 6 Perlenketten (6 Punkte)

Perlenketten sind ringförmige Schnüre, auf die kleine Perlen aufgereit sind. In dieser Aufgabe wollen wir solche Ketten näher betrachten. Perlen können sechs verschiedene Farben haben, die wir von 1 bis 6 durch- nummerieren.

a) Beschreiben Sie, was sie tun müssen um eine Perlenkette als Liste von Zahlen darzustellen. Geben Sie zwei Beispielperlenketten und ihre Listendarstellung an. (1 Punkt) b) Entwerfen Sie eine Funktion, die überprüft ob eine gegebene Liste von Zahlen eine korrekte Darstellung einer Perlenkette ist. Beachten Sie dabei, dass es keine leeren Perlenketten geben soll und nicht mehr als

6 Farben vorkommen dürfen. (2 Punkte)

c) Ein Problem, das sich bei der Listendarstellung ergibt, ist, dass sich ein und dieselbe Kette durch ver- schiedene Listen darstellen lässt. Entwerfen Sie eine Funktion, die eine Kette in Listendarstellung um

eine Position (Perle) rotiert. (1 Punkte)

d) Geben Sie eine Funktion an, die eine Listendarstellung einer Kette umnPositionen rotiert. (2 Punkte)

Referenzen

ÄHNLICHE DOKUMENTE

∗ wenn nein: lege die Karte auf den vierten Stapel c) Beschreibung: Sie brauchen drei Stapel. • wiederhole Folgendes f¨ ur alle Karten auf dem

a) Die Korrektheit der Eingabe wird nicht überprüft.. “nat list” eignet sich

[r]

i) xs ist zulässiger Parameter in dem Funktionsaufruf (tuples

[r]

[r]

[r]

Aufgabe 3 Störe meine Kreise nicht 2. interface