Ferner sei nochmals ausdrücklich darauf hingewiesen, dass Zusatzaufgaben in der Regel über den Stand der Vorlesung hinausgehen und für Leute gedacht sind, die noch Anregungen für eigene Experimente brauchen. 100 Prozent der Übungspunkte bleiben auch für jene erreichbar, die keine Zusatzaufgaben machen.
Paul P. Lanlos sitzt ganz schön in der Patsche. Zuerst hat er sich eine Digitalkamera aufschwatzen lassen, die grade mal Fotos mit 50 Kilopixel zustande bringt. In Schwarzweiß.
Und jetzt, da er seine ersten Urlaubsfotos von der Schwäbischen Alb seiner übergewichtigen Freundin Berta B. Reit schicken will, fällt ihm ein, dass Bilder mit fetten Linien gar nicht so gut sind für sie.
Doch glücklicherweise kennt er Sie! Sie werden ihm nun helfen, die Bilder ein wenig leichtgewichtiger zu machen.
Werfen wir zunächst einen Blick auf die Bilder. Sie liegen im PBM-Format (portable bitmap) vor, von dem es wiederum eine ASCII- und eine Raw-Variante gibt.
Die ASCII-Variante sieht folgendermaßen aus: In der ersten Zeile steht lediglich ,,P1``, in der zweiten die Breite und Höhe des Bildes in Pixeln. Danach folgen Nullen oder Einsen, wobei eine ,,1`` für ein schwarzes und ,,0`` für ein weißes Pixel steht. Ein Beispiel:
P1 16 4 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
Deutlich kompakter kommt die Raw-Variante daher. Sie beginnt mit der Kennung ,,P4`` und nennt ebenfalls und . Nach einem weiteren Newline-Zeichen folgt der Datenblock, in dem kein strukturierender Whitespace mehr erlaubt ist1:
P4 16 4 <<xxððÿàWenn wir aus diesem Datenblock Zeichen für Zeichen lesen, erhalten wir als erstes ein
<
, das laut ASCII-Tabelle
(siehe man ascii) dem Wert
entspricht, also genau obigem Bitmuster. Das dritte Zeichen ist
x
mit dem Wert
.
a.out < schaf-asc.pbm > ergebnis.pbm
Dabei soll jedes schwarze Pixel durch ein weißes ersetzt werden und umgekehrt. Geben Sie zur Kontrolle die Breite und Höhe über stderr (!) aus, und melden Sie auf diesem Wege auch, wenn die Eingabedatei nicht dem erwarteten Format entspricht.
Wenn Ihr Programm eine sinnvolle Ausgabe zu erzeugen scheint, können Sie diese auch direkt an das Bildbearbeitungsprogramm xv weiterleiten:
a.out < schaf.pbm | xv -Einige Testbilder finden Sie auf der Vorlesungshomepage. Sie können davon ausgehen, dass die Breiten aller Testbilder ein Vielfaches von 8 sind.
^
nützlich sein. Damit das
Ausgabebild die Breite des Eingabebildes behält, vergleichen Sie das erste
Pixel einer Zeile mit ,,weiß``.)
RSA in einem Satz erklärt: Sind drei Zahlen (ein Verschlüsselungsexponent , ein Entschlüsselungsexponent sowie ein Modul ) geeignet gewählt, so lässt sich eine Botschaft in Form einer Ganzzahl mit der Abbildung chiffrieren und mit wieder dechiffrieren.
Normalerweise ist so groß, dass die gesamte Nachricht in untergebracht werden kann. Wir wollen jedes Zeichen einzeln codieren, das heißt, wir wählen für einfach das jeweils eingelesene Zeichen und wenden die Chiffriervorschrift darauf an.3
int modPow(int a, int x, int m)welche berechnet. Beachten Sie, dass sehr groß werden kann, so dass es in keinem der Standard-Datentypen (wie double, long long) mehr repräsentiert werden kann. Nutzen Sie stattdessen die Binärdarstellung des Exponenten sowie die Beziehungen
24027 11520 5356 14399 1054 24725 20253 268 24027 1054 17220 14399 26786 1496 20253 12261 12261 12560 1054 25489 11931 19835 22816
Viel Erfolg!