Projekt 1 : "Geheime Nachrichten" (Teil 3)
3. Zyklische Verschiebung mit MODULO
Im letzten Abschnitt haben wir gesehen, dass eine simple Addition der Geheim-Zahl auf die jeweiligen ASCII-Codes nicht immer funktionieren würde: Sobald die Zahl 126 überschritten oder die Zahl 32 unterschritten werden, verlassen wir den Bereich der druckbaren Zeichen oder sogar den zulässigen Wertebereich der ASCII-Tabelle.
Was wir also brauchen, ist eine zyklische Verschiebung, die nach dem Überschreiten des zulässigen Maximalwerts wieder von vorne beginnt, d.h. aus dem letzten druckbaren Zeichen"~" mit dem Code 126 würde bei einer Verschiebung um den Wert 1 das Leerzeichen mit dem Wert 32.
Eine mögliche Lösung hierfür bietet der Modulo-Operator %: Hiermit wird der Rest einer Division zurückgegeben, d.h. der Befehl 9 % 2 ergibt den Wert 1, da die Rechenoperation 9/2 das Ergebnis "4 Rest 1" liefert. Die Modulo-Operation 9 % 3 liefert stattdessen den Wert 0, da die Zahl 9 ohne Rest durch 3 teilbar ist.
Im nachstehenden Code sind einige Beispiele zu sehen, in denen der Modulo-Operator genutzt wird, um Zahlen auf einen eingeschränkten Bereich abzubilden.
#include <iostream> using namespace std; int main() { cout << "Abbilden auf Zahlenraum 0-9" << endl; // Bereich umfasst 10 Zahlen cout << 9 % 10 << endl; cout << 10 % 10 << endl; cout << 11 % 10 << endl; cout << "Abbilden auf Zahlenraum 3-9" << endl; // Bereich umfasst 7 Zahlen int first = 3, last=9; int mod = (last-first+1); cout << (9 - first) % mod + first << endl; cout << (10 - first) % mod + first << endl; cout << (11- first) % mod + first << endl; return 0; }