Übungen
Aufgabe 1
Betrachte das Caesar-Verfahren zum Verschieben von Buchstaben:
'A' -> 65 -> 0 -> (modBy 26 (0+3)) = 3 -> 68 -> 'D' 'B' -> 66 -> 1 -> (modBy 26 (1+3)) = 4 -> 69 -> 'E' ... 'Y' -> 89 -> 24 -> (modBy 26 (24+3)) = 24 -> 66 -> 'B' 'Z' -> 90 -> 25 -> (modBy 26 (25+3)) = 25 -> 67 -> 'C'
Dieses Verschiebeverfahren kann man mit der Funktion verschobenesZeichen
implementieren.
verschobenesZeichen zeichen =
Char.fromCode (modBy 26 (((Char.toCode zeichen) - 65) + 3) + 65)
(a) Teste diese Funktionsdefinition mit mehreren Funktionsaufrufen in der REPL.
(b) Der Ausdruck in der Funktionsdefinition ist komplex. Verdeutliche das Hintereinanderschalten von Funktionen in diesem Ausdruck mit Hilfe von Funktionsboxen.
(c) Führe lokale Konstanten ein, um den Ausdruck verständlicher zu gestalten.
Aufgabe 2
(a) In der einfachen Variante des Caesar-Verfahrens ignorieren wir, dass Zeichen über das Z hinaus geschoben werden könnten. Formuliere den Ausdruck zum Verschieben eines Zeichens um drei Stellen im Alphabet mit Hilfe des Pipe-Operators.
(b) Begründe warum man die Variante aus Aufgabe 1 nicht (direkt) mit Hilfe des Pipe-Operators umsetzen kann.
(c) Formuliere den Ausdruck aus Aufgabe 1 zum Verschieben eines Zeichens um drei Stellen im Alphabet mit Hilfe des Pipe-Operators und der Addition einer negativen Zahl anstelle der Subtraktion.
Aufgabe 3
Betrachte die Berechnung des Anhaltewegs nach den Faustformeln aus der Fahrschule.
$\begin{array}{lcl} \text{Reaktionsweg [in m]} & = & \displaystyle\frac{\text{Geschwindigkeit [in km/h]}}{10} \cdot 3 \\ \\ \text{Bremsweg [in m]} & = & \displaystyle\frac{\text{Geschwindigkeit [in km/h]}}{10} \cdot \frac{\text{Geschwindigkeit [in km/h]}}{10} \\ \\ \text{Anhalteweg [in m]} & = & \text{Reaktionsweg [in m]} + \text{Bremsweg [in m]} \end{array}$
Die Berechnung lässt sich mit der Funktion anhalteweg
durchführen.
anhalteweg geschwindigkeit =
(geschwindigkeit / 10) * 3 + (geschwindigkeit / 10) * (geschwindigkeit / 10)
Führe lokale Konstanten ein, um den Ausdruck möglichst verständlich zu gestalten.
Aufgabe 4
> verarbeite ["Anne", "Bruno", "Charlotte"]
["ENNA","ONURB","ETTOLRAHC"] : List String
Nutze dazu lokale Konstanten und/oder den Pipe-Operator.