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 zur Verfügung:
Kosten in Euro:
Aufgabe 1: Farbberechnungen mit vorgegeben Rechnern
(a) Berechne mit dem ersten Rechner wie viel Liter Farbe du für das 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 diese 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. Drei der 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.
Betrachte hierzu die nachfolgenden sechs abstrakten Beschreibungen und bestimme welche der Beschreibung auf welchen 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
(real -> integer)
(b) remainder
(integer integer -> integer)
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 jeweilig korrekten Signaturen:
(c) string-length
(string -> natural)
(d) odd?
(integer -> boolean)
(e) string-append
(string string -> string)
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))