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