i

Experimente in der REPL zum Caesar-Verfahren

Caesar-Verfahren

Wir werden uns auf dieser Seite damit beschäftigen, wie man einzelne Zeichen nach dem Caesar-Verfahren verschlüsseln kann. Die Verarbeitung ganzer Zeichenketten wird in einem späteren Kapitel behandelt.

    Verschiebung um 3:
    A -> D
    Z -> C

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.

Suche

v
8.2.2.1.3.1.1
dev.inf-schule.de/deklarativ/fp_elm/elm_programme/datenobjekte/verschluesselung/lernstrecke/experimentcaesar
dev.inf-schule.de/8.2.2.1.3.1.1
dev.inf-schule.de/@/page/jBIHC08BRCEIPvSD

Rückmeldung geben