Autor Beitrag
ad_t1404
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 07.12.12 21:39 
Abend!

bin zufällig auf euer Forum gestoßen und finde es ganz nett hier, hab mich dann einfach mal registriert! :)

Dann bitte ich Euch gleich mal um Rat...

Ich habe ein kleines C# Programm geschrieben. Ich habe ein string feld mit dem Inhalt dem Alphabet. Ich übergebe einer Funktion einen beliebigen String und die Funktion ändert mein string so, dass jeder Buchstabe um 2 nach rechts geht. Z.b. aus "HALLO" wird "JCNNQ". Falls es jemanden interessiert, ich habe versucht die sogenannte "Enigma Verschlüsselung nachzubauen... Mein Problem ist, dass wenn ich jetzt z.B. den Buchstaben "Y" verschlüsseln will, dann kommt logischerweise die Fehelermeldung dass ich außerhalb des Feldes bin, wie kann ich jetzt in meinem Programm schreiben dass der einfach von vorne anfangen soll? also wieder mit "A" beginnt?

Ich hoffe ihr versteht mein Problem und könnt mir helfen! :)


Grüße

ad_t1404
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Fr 07.12.12 22:08 
user profile iconad_t1404 hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich jetzt z.B. den Buchstaben "Y" verschlüsseln will, dann kommt logischerweise die Fehelermeldung dass ich außerhalb des Feldes bin, wie kann ich jetzt in meinem Programm schreiben dass der einfach von vorne anfangen soll? also wieder mit "A" beginnt?


So logisch ist das nicht. Wieso bist Du dann außerhalb des Felds? Du erhöhst ja den Zeichenwert um 2, schreibst aber das Ergebnis anscheinend an die gleiche Stelle.

Wenn Du wissen willst, wie Du von "Y" -> "A" kommst ist der Modulo-Operator Dein Freund.
Meine C/C++ Zeiten sind seit 15 Jahren vorbei, es müßte aber so gehen (oder so ähnlich *g*):

*X = ((*X - 65 +2) % 26)+65
Also: Zuerst dafür sorgen daß "A" auf Null normiert wird, 2 addieren und dann durch 26 teilen. Den Rest der Division wieder um 65 erhöhen so daß wieder auf "A" normiert ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 08.12.12 12:44 
Hallo ad_t1404 :welcome:

ja, mandras hat Recht, das geht mit dem Modulo-Operator %
Laß dich aber nicht von seiner Formel irritieren - die 65 steht dann für den Buchstaben 'A', s. ASCII-Tabelle.

In C# kannst du folgendes schreiben
ausblenden C#-Quelltext
1:
int new_index = (index + 2) % tabelle.Length;					

wobei tabelle dann deinem Alphabet-String entspricht.