Beispiel - Verschlüsselung
Das Caesar-Verfahren mit einer Funktionsdefinition implementieren
Ausgehend von Berechnungen mit konkreten Datenwerten entwickeln wir hier eine Funktion, die diese Berechnungen für beliebige Datenwerte ausführt.
'H' -> 72 -> 75 -> 'K'
Dieses Verschiebeverfahren kann man für (zumindest einige) konkrete Datenwerte mit dem folgenden Ausdruck beschreiben.
> Char.fromCode ((Char.toCode 'H') + 3)
'K' : Char
Ziel ist es, eine Funktion verschobenesZeichen
zu konzipieren, die verallgemeinernd die folgende Übergabe-Rückgabe-Situation implementiert.
Übergabe: - Zeichen, das verschoben werden soll: 'H' - Verschiebezahl: 3 Rückgabe: - verschobenes Zeichen: 'K'
Aufgabe 1
Erkläre die Signatur der Funktion verschobenesZeichen
. Ergänze auch die fehlenden Angaben in den Beispielaufrufen.
Signatur:
verschobenesZeichen: Char -> Int -> Char
Beispiele:
verschobenesZeichen 'H' 3 -> 'K'
verschobenesZeichen 'B' 5 -> ...
verschobenesZeichen 'L' 7 -> ...
Aufgabe 2
Implementiere die Funktion verschobenesZeichen
mit einer Funktionsdefinition und teste diese mit Funktionsaufrufen.
Nutze eine Verallgemeinerung des oben gezeigten Ausdrucks.
Aufgabe 3
Implementiere die Funktion verschobenesZeichen
für das komplizierte Verschiebeverfahren, das auch die "Randfälle" berücksicht.
'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'
Das Umkehrverfahren mit einer Funktionsdefinition implementieren
Ausgehend von Berechnungen mit konkreten Datenwerten entwickeln wir hier eine Funktion, die diese Berechnungen für beliebige Datenwerte ausführt.
Betrachte noch einmal dieses Verschlüsselungsverfahren:
HALLO -> OLLAH -> Z OLLAH A -> ZOLLAHA ALLESKLAR -> RALKSELLA -> Z RALKSELLA A -> ZRALKSELLAA UMDREHENUNDERGAENZEN -> NEZNEAGREDNUNEHERDMU -> Z NEZNEAGREDNUNEHERDMU A -> ZNEZNEAGREDNUNEHERDMUA ...
Das Verfahren lässt sich für fest vorgegebene Datenwerte mit einem Ausdruck so umsetzen.
> String.append "Z" (String.append (String.reverse "HALLO") "A")
"ZOLLAHA" : String
Aufgabe 4
Erkläre die Signatur der Funktion verschluesselterText
. Ergänze einen weiteren Beispielaufruf.
Signatur:
verschluesselterText: String -> String
Beispiele:
verschluesselterText "HALLO" -> "ZOLLAHA"
...
Aufgabe 5
Implementiere die Funktion verschluesselterText
mit einer Funktionsdefinition und teste diese mit Funktionsaufrufen.
Nutze eine Verallgemeinerung des oben gezeigten Ausdrucks.