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.
1 Kommentar |
Felder, Kontrollanweisungen, Schwierig | Mit Tag(s) versehen: Entschlüsselung, Häufigkeite |
Permalink
Verfasst von programmieraufgaben
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.
1 Kommentar |
Felder, Mittelschwer | Mit Tag(s) versehen: polyalphabetisch, verschlüsselung |
Permalink
Verfasst von programmieraufgaben
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.
Kommentar schreiben » |
Mittelschwer, OOAD | Mit Tag(s) versehen: Geld, objekt-orientierung |
Permalink
Verfasst von programmieraufgaben
16. Juni, 2008
Gegeben sei folgende geometrische Reihe (die Summe der Kehrwerte aller 2er-Potenzen):

Implementieren Sie ein Programm, mit dem Sie überprüfen, ob diese Reihe – vermutlich – konvergiert. Falls die Reihe konvergent ist: gegen welchen Wert konvergiert sie?
Kommentar schreiben » |
Kontrollanweisungen, Leicht | Mit Tag(s) versehen: geometrische Reihe, Konvergenz, Mathematik, Reihe |
Permalink
Verfasst von programmieraufgaben