Experimente in der REPL zum Caesar-Verfahren
Zeichen in Zahlen umwandeln und umgekehrt
Die Verarbeitung von Buchstaben erfolgt am einfachsten, wenn man ihre ASCII-Codierungen in der gewohnten Zahldarstellung benutzt.
Elm stellt hierzu die vordefinierten Funktionen Char.toCode
und Char.fromCode
zur Verfügung.
Bei diesen Funktionen muss man - wie bei vielen anderen auch - eine Angabe (hier Char
) hinzufügen, die angbibt,
in welcher Datei (ganz genau: in welchem Modul) die
Funktion definiert wurde. Wir werden das im Kapitel Verwendung von Modulen noch genauer betrachten.
Aufgabe 1
(a) Teste die vordefinierten Funktionen Char.toCode
und Char.fromCode
in der REPL mit Dialogen wie dem Folgenden.
> Char.toCode 'A'
65 : Int
> Char.fromCode 65
'A' : Char
> Char.toCode 'Z'
...
> Char.fromCode 90
...
(b) Als Ergebnisse erhält man u.a. Daten wie 'A' : Char
. Beschreibe anhand dieses Beispiels, wie man Zeichen in Elm darstellt und welchen
Datetyp Elm für die Zeichendarstellung verwendet.
Aufgabe 2
(a) Das Verschieben von Buchstaben im Alphabet kann man durch das Rechnen mit Zahlen umsetzen. Beschreibe die Vorgehensweise anhand des folgenden Beispiels.
'H' -> 72 -> 75 -> 'K'
(b) Teste den folgenden Ausdruck und erkläre, wie das Ergebnis zustande kommt.
> Char.fromCode ((Char.toCode 'H') + 3)
...
(c) Erkläre, warum das Verschieben von Buchstaben in dem folgenden Beispiel so nicht funktioniert.
> Char.fromCode ((Char.toCode 'X') + 3)
...
Aufgabe 3
Mit einem etwas aufwendigeren Umrechnungsverfahren kann man auch beliebige Großbuchstaben korrekt verschieben:
'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)) = 1 -> 66 -> 'B' 'Z' -> 90 -> 25 -> (modBy 26 (25+3)) = 2 -> 67 -> 'C'
(a) Teste zunächst in der REPL, was die vordefinierte Funktion modBy
leistet.
(b) Beschreibe das Umrechenverfahren.
(c) Entwickle einen Ausdruck wie in Aufgabe 2, mit dem man das Verschieben von Buchstaben mit Funktionen umsetzen kann.