Dein Algorithmus ist ziemlich umständlich und mit den vielen, vielen Tests schlecht nachvollziehbar.
Schneller und einfacher geht es, wenn Du die Funktionen ord und chr für die Umwandlung in ASCII-Code und zurück nutzt.
Befindet sich der Klartext im String klar und soll der Geheimtext in den string geheim sowie die Verschiebungsweite in v (integer), so kann ein einzelner Buchstabe wie folgt verändert werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| n := ord (klar[i]); n := 97 + (n + v - 97) mod 26; geheim[i] := chr (n);
n := ord (geheim[i]); n := 97 + (n - v - 97 + 26) mod 26; klar[i] := chr (n); |
Der Algorithmus funktioniert hier für Kleinbuchstaben und kann auch auf andere Bereiche angepasst werden.
Der scheinbare "Trick" beruht darin, dass mittels mod 26 die Zahl n immer im Bereich von 'a' bis 'z' gehalten wird.
Beste Grüße
Mathematiker