i

Caesar-Verfahren in der REPL

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 Position in der ASCII-Tabelle nutzt. 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.

Du willst mehr über Module wissen?

In Elm werden Funktionen und Typen in Modulen organisiert. Um die Funktion toCode aus dem Modul Char zu verwenden, muss man das Modul importieren. Das geschieht mit der Anweisung import Char. Weil es einige Module gibt, die man sehr häufig benötigt, importiert Elm diese Module automatisch, was beim Modul Char der Fall ist. Du kannst die Funktion deshalb mit Char.toCode verwenden, ohne sie explizit importieren zu müssen.

Man kann beim Importieren auch angeben, dass bestimmte Funktionen oder Typen auch ohne den Modulnamen verwendet werden können sollen. Das geschieht z.B. mit der Anweisung import Char exposing (toCode). Dann kannst du die Funktion toCode ohne den Modulnamen verwenden. Wenn du alle Funktionen und Typen aus dem Modul Char direkt verfügbar machen möchtest, kannst du import Char exposing (..) verwenden.

Elm importiert das Modul Basics, das besonders wichtige Funktionen wie toFloat, + oder round enthält, mit der Anweisung import Basics exposing (..). Das bedeutet, dass du die Funktionen ohne den Modulnamen verwenden kannst. Alle anderen Module, die automatisch importiert werden, wie z.B. Char oder String, importiert Elm im Wesentlichen mit einer Anweisung wie import Modulname. Das bedeutet, dass du die Funktionen mit dem Modulnamen verwenden musst.

Die Details der Default-Imports findest du in der Elm-Dokumentation.

Zusammenfassend kann man sagen:

Alle Funktionen aus dem Modul Basics kannst du ohne den Modulnamen verwenden. Dazu gehören z.B. die Funktionen toFloat, + und round. Welche Funktionen im Modul Basics enthalten sind, kannst du in der Dokumentation des Moduls Basics nachschauen.

Alle anderen Funktionen, die automatisch importiert werden, kannst du nur mit dem Modulnamen verwenden. Dazu gehören z.B. die Funktionen Char.toCode und Char.fromCode.

Wenn du selbst Module importierst, kannst du die Funktionen mit oder ohne den Modulnamen verwenden, je nachdem, wie du das Modul importierst.

Aufgabe 1

Teste die vordefinierten Funktionen Char.toCode und Char.fromCode in der REPL mit Dialogen wie dem Folgenden. Beschreibe die Wirkung der beiden Funktionen.

> Char.toCode 'A'
...
> Char.fromCode 65
...
> Char.toCode 'Z'
...
> Char.fromCode 90
...

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 aufwendigerem 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
https://inf-schule.de/deklarativ/fp_elm/elm_programme/datenobjekte/verschluesselung/experimentcaesar
https://inf-schule.de/8.2.2.1.3.1
https://inf-schule.de/@/page/jBIHC08BRCEIPvSD

Rückmeldung geben