Texte entschlüsseln

26. Juni, 2008

Die mit polyalphabetischer Verschlüsselung kodierten Texte (bei Verwendung eines Alphabets) lassen sich meist sehr einfach über die Häufigkeitsverteilung der Buchstaben in Texten entschlüsseln.

Texte in deutscher Sprache haben etwa folgende Verteilung (nach deutscher Wikipedia) als double-Feld. Umlaute sind als ae, ue, oe gezählt:

double [] haeufigkeiten = new double[256];

        haeufigkeiten['a'] = 0.0651;
        haeufigkeiten['b'] = 0.0189;
        haeufigkeiten['c'] = 0.0306;
        haeufigkeiten['d'] = 0.0508;
        haeufigkeiten['e'] = 0.1740;
        haeufigkeiten['f'] = 0.0166;
        haeufigkeiten['g'] = 0.0301;
        haeufigkeiten['h'] = 0.0476;
        haeufigkeiten['i'] = 0.0755;
        haeufigkeiten['j'] = 0.0027;
        haeufigkeiten['k'] = 0.0121;
        haeufigkeiten['l'] = 0.0344;
        haeufigkeiten['n'] = 0.0253;
        haeufigkeiten['m'] = 0.0978;
        haeufigkeiten['o'] = 0.0251;
        haeufigkeiten['p'] = 0.0079;
        haeufigkeiten['q'] = 0.0002;
        haeufigkeiten['r'] = 0.0700;
        haeufigkeiten['s'] = 0.0727;
        haeufigkeiten['t'] = 0.0615;
        haeufigkeiten['u'] = 0.0435;
        haeufigkeiten['v'] = 0.0067;
        haeufigkeiten['w'] = 0.0189;
        haeufigkeiten['x'] = 0.0003;
        haeufigkeiten['y'] = 0.0004;
        haeufigkeiten['z'] = 0.0113;
        haeufigkeiten['ß'] = 0.0031;

Implementieren Sie ein Programm, welches mit Hilfe dieser Verteilung einen verschlüsselten Text entschlüsselt: die Zeichen im verschlüsselten Text werden gezählt und dann mit den am besten passenden Buchstaben obiger Verteilung ersetzt. Der verschlüsselte Text sollte möglichst lang sein (mehr als 1000 Zeichen).

Man kann den Algorithmus noch verbessern, indem die Buchstabenhäufigkeit von Anfangs- und Endbuchstabe mit berücksichtigt wird oder ein Wörterbuch verwendet wird.


Texte verschlüsseln

23. Juni, 2008

Eine sehr einfache Verschlüsselungsmethode ist die polyalphabetische Verschlüsselung: jedem Buchstaben des Alphabets wird genau ein anderer Buchstabe des Alphabets zugeordnet. Die Zuordnung muss bijektiv sein.

Man betrachte z.B. die Verschlüsselung, bei der jeder Buchstabe des lateinischen Alphabets (ohne Umlaute oder ß) durch den vorherigen Buchstaben ersetzt wird:
b -> a, c -> b, …, z -> y, a -> z

Aus IBM wird dann HAL.

Implementieren Sie ein Programm, das eine Zeichenkette polyalphabetisch verschlüsselt. Die Zuordnung soll als char-Feld gegeben sein. Groß- und Kleinschreibung soll ignoriert werden.


Geld entwerfen und implementieren

19. Juni, 2008

Geldbeträge werden in fast allen betrieblichen Anwendungen benötigt (Preise, Kosten, …). Oft wird der Geldbetrag mit einer Gleitkommazahl realisiert: 120,95 Euro. Da im Gleitkommaformat Nachkommastellen im Binärformat repräsentiert werden, treten dabei Ungenauigkeiten auf.

Ein bessere Lösung ist es, Geldbeträge als ganze Zahlen darzustellen: 12095 Cents. Um Rechenungenauigkeiten zu reduzieren, sollten hundertstel Cents kodiert werden (Banken rechnen oft mit 4 Nachkommastellen): 1209500 hundertstel Cents.

Zum Rechnen werden die üblichen Operatoren benötigt. Bei Ergebnissen muss aber kaufmännisch auf die 4. Nachkommastelle gerundet werden.

Es ist deswegen sinnvoll pro Geldbetrag ein eigenes Objekt zu haben, welches die üblichen Rechenoperatoren implementiert.

Entwerfen und implementieren Sie eine Klasse Geld, mit dem derartige Geldbeträge behandelt werden können.


Konvergenz einer geometrischen Reihe prüfen

16. Juni, 2008

Gegeben sei folgende geometrische Reihe (die Summe der Kehrwerte aller 2er-Potenzen):

\sum_{n=0}^{\infty} \frac{1}{2^n} = \frac{1}{1} +  \frac{1}{2} +  \frac{1}{4} +  \frac{1}{8} +  \frac{1}{16} + \ldots

Implementieren Sie ein Programm, mit dem Sie überprüfen, ob diese Reihe – vermutlich – konvergiert. Falls die Reihe konvergent ist: gegen welchen Wert konvergiert sie?


Lottozahlen erzeugen

12. Juni, 2008

Schreiben Sie ein Programm, das 6 zufällige Zahlen aus dem Bereich 1 bis 49 auf dem Bildschirm ausgibt (Lotto 6 aus 49). Es dürfen dabei keine Zahlen doppelt vorkommen.