Ü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.

Black-Box-Diagramm

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.

Skytale

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

X

Fehler melden

X

Suche