Übungen
Aufgabe 1: Eine Funktionsdefinition analysieren
Gegeben ist die folgende Funktionsdefinition.
def uText(text): textNeu = '' for zeichen in text: textNeu = zeichen + textNeu return textNeu
(a) Analysiere zunächst den Quelltext der Funktionsdefinition. Stelle eine Vermutung auf, was die Funktion leistet.
(b) Teste das Verhalten der Funktion mit Funktionsaufrufen im Python-Ausführfenster. Beachte, dass du vorab die Funktionsdefinition mit einem Run-Befehl dem Python-Interpreter bekannt machen musst.
>>> uText('HALLO') ... >>> uText('...') ..
(c) Beschreibe das Verhalten der Funktion uText
mit einem Black-Box-Diagramm.
(d) Entwickle ein Testprogramm, bei der der Benutzer einen beliebigen Text eingeben kann.
Dieser soll mit der Funktion uText
verarbeitet und anschließend
ausgegeben werden.
Aufgabe 2: Eine Funktionsdefinition erstellen
Texte, die nur aus Großbuchstaben bestehen, sollen so verschlüsselt werden, dass jedem Vokal eine Silbe bestehend aus einem "B" und dem Vokal angehängt wird.
Entwickle eine geeignete Funktionsdefinition und teste die Funktion mit verschiedenen Funktionsaufrufen.
Aufgabe 3: Funktionsaufrufe schachteln
Gegeben sind die bereits erstellten Funktionsdefinitionen.
# Funktionsdefinitionen def verschluesselterText(klartext, schluessel): # ... return geheimtext def entschluesselterText(geheimtext, schluessel): # ... return klartext def bereinigterText(text): # ... return textNeu
Funktionsaufrufe kann man - wie in den folgenden Beispielen - schachteln.
>>> entschluesselterText(verschluesselterText('TOR', 9), 9) ... >>> entschluesselterText(verschluesselterText(bereinigterText('TÜR'), 15), 15) ...
Welche Ergebnisse werden hier wohl geliefert? Überprüfe deine Vermutungen.
Aufgabe 4: Funktionsdefinitionen schachteln
Gegeben sind die folgenden Funktionsdefinitionen. Beachte, dass die neu definierte Funktion
verschobenesZeichen
bei der Definition der Funktion verschobenerText
verwendet wird.
def verschobenesZeichen(zeichen, verschiebezahl):
zahl = ord(zeichen)
neuezahl = zahl + verschiebezahl
if neuezahl > ord('Z'):
neuezahl = neuezahl - 26
if neuezahl < ord('A'):
neuezahl = neuezahl + 26
neuesZeichen = chr(neuezahl)
return neuesZeichen
def verschobenerText(text, verschiebezahl):
neuerText = ''
for zeichen in text:
neuesZeichen = verschobenesZeichen(zeichen, verschiebezahl)
neuerText = neuerText + neuesZeichen
return neuerText
(a) Analysiere die Funktionsdefinitionen und ergänze den folgenden Python-Dialog (ohne ihn vorab mit Python durchzuführen). Überprüfe die Ergebnisse mit Python.
>>> verschobenesZeichen('H', 1) ... >>> verschobenesZeichen('H', -2) ... >>> verschobenerText('HUND', 7) ... >>> verschobenerText('OBUK', 19) ...
(b) Begründe: Man kann zum Ver- und Entschlüsseln von Texten nach der Verschiebemethode dieselben Funktionen benutzen.
Aufgabe 5: Eine Funktion konzipieren
Mit Hilfe einer Funktion ersetzterText
soll in einem Text (aus beliebigen Zeichen)
ein vorgegebenes Zeichen durch neue Zeichen
ersetzt werden, z.B.:
Mit der Funktion ersetzterText
kann man im Text 'Sägespäne'
das Zeichen
'ä'
durch die Zeichenkette 'ae'
ersetzen.
Mit der Funktion ersetzterText
kann man im Text 'bei jedem Wind und Wetter'
das Zeichen
'W'
durch die Zeichenkette 'w'
ersetzen.
(a) Entwickle zunächst ein Black-Box-Diagramm zur Beschreibung der gewünschten Funktion.
(b) Entwickle anschließend eine Funktionsdefinition und teste die Funktion.
(c) Benutze die Funktion ersetzterText
, um eine neue Funktion ohneUmlaute
zu definieren, bei der alle Umlaute durch entsprechende Buchstabenkombinationen ersetzt werden.
Aufgabe 6: Eine Funktion konzipieren
Atbasch ist eine auf der Grundlage des hebräischen Alphabets beruhende einfache Methode zur Ver- bzw. Entschlüsselung eines Textes. Der Name Atbasch leitet sich ab von den beiden ersten und letzten Buchstaben des hebräischen Schriftsystems (A-T-B-Sch) und illustriert zugleich das Vorgehen, bei dem der erste Buchstabe (Aleph) vertauscht wird mit dem letzten Buchstaben (Taw), der zweite Buchstabe (Beth) vertauscht wird mit dem vorletzten Buchstaben (Schin), usw.. Dieses Verfahren lässt sich natürlich auch mit unserem Alphabet durchführen.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | | | | | | | | | | | | | | | | | | | | | | | | | | Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
(a) Erstelle ein Black-Box-Diagramm für eine Funktion atbash
.
(b) Implementiere die Funktion atbash
.
(c) Teste anschließend die Implementierung. Benutze dabei nur Texte, die aus Großbuchstaben bestehen.
Aufgabe 7: Funktionen konzipieren
Beim Vigenère-Verfahren wird zunächst ein Schlüsselwort vorgegeben - z.B. das Schlüsselwort 'DACHS'. Mit Hilfe des Schlüsselworts erfolgt jetzt die Erzeugung des Geheimtextes aus einem gegebenen Klartext (der hier nur aus Großbuchstaben bestehen soll). Hier ein Beispiel.
Schlüssel: D A C H S D A C H Klartext: G E H E I M N I S | | | | | | | | | Geheimtext: J E J L A P N K Z
Jeder Schlüsselwortbuchstabe verschiebt den zugehörigen Klartextbuchstaben im Alphabet. Die Verschiebezahl ergibt sich wie folgt aus den Buchstaben des Schlüsselworts: A verschiebt um 0 Einheiten, B um 1 Einheit, C um 2 Einheiten, D um 3 Einheiten, ..., Z um 25 Einheiten. Die Verschiebung wird dabei nach dem Verschiebeverfahren durchgeführt.
(a) Verschlüssele den Klartext 'GEHEIMNIS' mit dem Schlüssel 'HUND'. Zur Kontrolle: Die folgenden Buchstaben kommen im Geheimtext - in anderer Reihenfolge - vor: ZAUNGLYPH.
(b) Beschreibe das Verhalten einer Funktion verschluesselterTextVigenere
mit einem
Black-Box-Diagramm.
(c) Konzipiere geeignete Hilfsfunktionen, die die Definition der Funktion
verschluesselterTextVigenere
vereinfachen (siehe z.B. Aufgabe 4).
(d) Entwickle die Funktionsdefinitionen zu allen beschriebenen Funktionen und teste sie mit verschiedenen Übergabedaten.
Aufgabe 8: Funktionen konzipieren
Nachrichten kann man auch mit Hilfe eines Holzstabs (Skytale) verschlüsseln.
Zum Ver- und Entschlüsseln benötigt man Holzstäbe mit dem gleichen Durchmesser. Hier ein Beispiel für die Ver- und Entschlüsselung einer Nachricht mit einer Skytale.
Quelltext:
DIESENACHRICHTISTGEHEIM
Verschlüsselung mit einer Skytale zum Schlüssel 4:
DIES ENAC HRIC HTIS TGEH EIM
Geheimtext:
DEHHTEINRTGIEAIIEMSCCSH
Entschlüsselung mit einer Skytale zum Schlüssel 4:
DEHHTE INRTGI EAIIEM SCCSH
Weitere Informationen zu diesem Verschlüsselungsverfahren findest du hier.
(a) Probiere das Verfahren mit einem selbst gewählten Quelltext und einem selbst gewählten Schlüssel aus.
(b) Modelliere Funktionen zum Ver- und Entschlüsseln mit geeigneten Black-Box-Diagrammen.
(c) Konzipiere gegebenenfalls geeignete Hilfsfunktionen.
(d) Implementiere alle Funktionen und teste sie mit verschiedenen Übergabedaten.
Aufgabe 9: Funktionen konzipieren
Hier ein weiteres Verfahren zum Verschlüsseln von Nachrichten:
Quelltext:
DASISTEINGEHEIMTEXT
Verschlüsselung nach der Gartenzaunmethode:
D S S E N E E M E T A I T I G H I T X
Geheimtext:
DSSENEEMETAITIGHITX
Der Text wird so untereinander geschrieben, dass die Buchstaben abwechselnd in zwei Zeilen untereinander geschrieben werden. Dann werden die Zeichen der oberen Zeile als ein Wort genommen, die Zeichen der unteren Zeile als ein zweites Wort. Beide Wörter werden dann ohne Leerzeichen aneinandergefügt.
(a) Alles klar? Dann probiere das Verfahren mit einem selbst gewählten Quelltext aus. Überlege dir auch ein Verfahren zum Entschlüsseln eines Geheimtextes, der nach der Gartenzaunmethode erzeugt wurde.
(b) Modelliere Funktionen zum Ver- und Entschlüsseln mit geeigneten Black-Box-Diagrammen.
(c) Implementiere alle Funktionen und teste sie mit verschiedenen Übergabedaten.
Quellen
Foto: Skytale - Urheber: Luringen - Lizenz: CreativeCommons by-sa-3.0