Eigenschaften von Funktionen
Automatisierte Berechnung von Farbmengen
Wir haben mit Racket bereits die zu streichende Fläche unseres WG-Zimmers ausgerechnet. Natürlich wäre es schön, eine automatisierte Berechnung für egal welche Zimmermaße zu haben. Unten siehst du einen solchen Rechner, der sogar direkt die benötigte Farbmenge für das Zimmer ausrechnet.
Benötigte Farbmenge in Liter:
Eine weitere Webseite erlaubt es uns Farbe, zu bestellen. Um im Voraus die auf uns zukommenden Kosten zu bestimmen, stellt die Webseite eine Funktion zur Berechnung dieser zur Verfügung:
Kosten in Euro:
Aufgabe 1: Farbberechnungen mit vorgegebenen Rechnern
(a) Berechne mit dem ersten Rechner, wie viel Liter Farbe du für das erste WG-Zimmer benötigst. Die Farbreichweite beträgt $8\ m^2/l$.
(b) Berechne mit dem zweiten Rechner, wie viel die benötigte Menge an Farbe kosten würde. Welches Problem tritt auf, wenn du das Ergebnis des ersten Rechners in den zweiten überträgst? Wie lässt sich dieses Problem lösen?
(c) Bestimme möglichst präzise, welche Zahlen von den beiden Rechnern akzeptiert werden.
Aufgabe 2: Beschreibung der Rechner anhand der akzeptierten Zahlen
In Racket lassen sich verschiedene Zahlenmengen angeben. Die drei geläufigsten Mengen findest du in der Tabelle:
Zahlenmengen in Racket | Beschreibung |
---|---|
natural | Alle positiven ganzen Zahlen, inklusive der Null. (natural $\subset$ integer $\subset$ real) |
integer | Alle ganzen Zahlen, sowohl negativ als auch positiv. (integer $\subset$ real) |
real | Alle reellen Zahlen. |
Mittels dieser Angaben können wir die einzelnen Rechner genauer beschreiben.
(a) Betrachte die nachfolgenden sechs abstrakten Beschreibungen und bestimme, welche der Beschreibungen
auf welchen der zwei Rechner zutrifft.
Hinweis:
Mit dem ->
Symbol werden die Zahlen, die wir eingeben und die Zahlen die wir als Ergebnis bekommen, voneinander getrennt.
-
natural -> real
-
integer -> real
-
integer integer -> integer
-
real real real -> real
-
real real real real -> real
-
real real real integer -> real
Aufgabe 3: Racket-Operatoren
Auch die zulässigen Operanden in Racket-Ausdrücken lassen sich wie in Aufgabe 2 beschreiben.
So ergibt sich für den Operator round
beispielsweise:
real -> integer
Im Folgenden findest du eine Auflistung verschiedener Racket-Operatoren. Teste die Operatoren in der REPL von DrRacket, finde heraus, welche Daten als Operanden akzeptiert werden und fülle anschließend die Lücken unter den Operatoren analog zum Beispiel aus.
(a) ceiling
(b) remainder
Wie wir bereits wissen, lassen sich in Racket jedoch nicht nur Zahlen verarbeiten. Zwei weitere geläufige Datentypen siehst du in der Tabelle:
Datentyp | Beschreibung | |
---|---|---|
string | Eine Zeichenkette. Steht immer in Anführungszeichen " ". | |
boolean | Ein Wahrheitswert. Entweder True (#t) oder False (#f) |
Ergänze mithilfe der Tabelle die Operatoren (c)-(e) um die jeweils korrekten Signaturen:
(c) string-length
(d) odd?
(e) string-append
Aufgabe 4: Verkettete Funktionen
Betrachte die folgenden Ausdrücke. Überlege und begründe, warum einige dieser Ausdrücke funktionieren und andere nicht. Überprüfe deine Überlegung anschließend in DrRacket.(a)
> (odd? (ceiling 49.3))
(b)
> (ceiling (string-length "Hallo Welt!"))
(c)
> (remainder (string-length "Informatik") (odd? 3))
(d)
> (string-length (string-length "Drei"))
(e)
> (remainder 7 (remainder (ceiling 4.7) 2))