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;
}