Abiturprüfung 2002

Leistungskurs Informatik

Teilaufgabe 1

Die Häufigkeitsanalyse der Buchstabenverteilung eines Textes ist eine Methode, mit der Cäsar-Verschlüsselung codierte Texte zu decodieren.

a. Gegeben ist ein String mit dem Namen ‚Text'. Implementiere eine Methode, die ein global definiertes Array vom Typ Integer erstellt, das die Häufigkeit der Buchstaben des Strings ‚Text' enthält. Der Text besteht lediglich aus den Buchstaben ‚a' (ASCII-Code 97) bis ‚z' (ASCII-Code 123).

b. Implementiere eine Methode, die ein global definiertes Array vom Typ Integer erstellt, das den ASCII-Code der drei am häufigsten vorkommenden Buchstaben des Textes enthält.

c. Erstelle eine Methode, die ausgibt, ob es sich bei dem Text um einen deutschen Text handelt oder nicht. Die drei am häufigsten vorkommenden Buchstaben in deutschen Texten sind in dieser Reihenfolge : e, n, i.

Teilaufgabe 2

Eine Möglichkeit der Erstellung einer digitalen Unterschrift ist das aus dem Unterricht bekannte Hash-Verfahren.

a. Berechne nach dem aus dem Unterricht bekannten Hash-Verfahren die digitale Unterschrift zu folgendem Wort : aus. Binärcodierung der einzelnen Buchstaben :

a        01100001
u        01110110
s        01110100

b. Eine nach dem Hashverfahren codierte Nachricht soll von einem Server an einen Client versendet werden. Die vollständige Nachricht ist ein Objekt der Klasse ‚Hashcode'. Der Client meldet sich nach seinem Start beim Server mit einer kurzen Meldung an (z.B. "Hier ist der Client"). Der Server antwortet dem Client mit einer ähnlichen Meldung und versendet anschließend das Objekt der Klasse ‚Hashcode'.

i. Implementiere das Hauptprogramm des Servers

j. Implementiere das Hauptprogramm des Client

Teilaufgabe 3

Ein asymmetrische Chiffrierverfahren ist das Rucksack-Chiffrierverfahren.

a. Anm. : Zur Bearbeitung der folgenden Aufgabe stehen die im Anhang beigefügten Klassen ‚ruck_ele' und Ruck_List' zur Verfügung, die einen Gewichtsvektor in einer dynamisch-organsierten Liste realisieren können.

Zur Entschlüsselung einer nach dem Rucksack-Verfahren verschlüsselten Nachricht muss zu einem Gewichtsvektor und zu einem bestimmten Gewicht ein 0/1-Vektor erstellt werden, der angibt, welche ‚Gewichte' genommen werden.

Erstelle mit Hilfe der genannten Klassen und Methoden eine Methode ‚Vektor' (Methodenkopf : public Ruck_List Vektor (int Rucksackgewicht), die einen true/false-Vektor in Form einer dynamisch-organisierten Liste erstellt, so dass folgendes Hauptprogramm möglich ist :

                       public static void main (String arg []) {
                           Ruck_List L1 = new Ruck_List ();
                           Ruck_List L2 = new Ruck_List ();
                           // Einfügen der Gewichte in L1
                           L1.Einfuegen (5);
                           ...
                           L2 = L1.Vektor (51); //Übergeben wird das Gewicht des ‚Rucksacks'
                          // L2 ist eine dynamisch-organisierte Liste der Elemente ruck_ele,
                          // wobei gilt : enthalten= true, wenn Element im ‚Rucksack', sonst false

b. Erläutere, warum das Rucksack-Verfahren zu den sehr sicheren Verfahren der Kryptologie gehört.

c. Alle möglichen Kombinationen eines Gewichtsvektors lassen sich in einem Entscheidungsbaum darstellen.

i. Erstelle für den Gewichtsvektor = (3,5) den Entscheidungsbaum.

j. Gegeben sei eine Objektklasse ‚Entscheidungsbaum', die folgende Attribute verwaltet :

- Das Attribut ‚int Gewichte' gibt an den Blättern des Baumes die Summe der Gewichte des Pfades bis zu diesem Blatt an.

- Das Attribut ‚String Pfad' gibt die übernommenen Gewichte des Pfades bis zu diesem Blatt an.

Erstelle eine Methode ‚public void Ausgabe (int Hoechstgewicht)', die alle bis zum als Parameter übergebenen ‚Höchstgewicht' zulässigen Gewichtssummen und deren Zusammensetzung ausgibt.