Thema: Delphi Hilfe:Caesar-Verfahren

Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

Re: Hilfe:Caesar-Verfahren

  Alt 12. Jan 2005, 17:42
Zitat von Toxman:
@ Mabuse:
Ein mod ist hier aber falsch, da du bei der Mod-Funktion die '0' als Ergebniss erhalten kannst. Wenn du also das Y mit dem A verschlüsselst, und dann Mod 24 anwendest, bekommst du als Ergebniss 0 und nicht 25. Also ist der Ansatz mit if if Zahl>24 Then Zahl:=Zahl-24; der richtige, um die Zahlen in der Menge [1..24] einzusperren.
???

Warum, MOD ist doch der Rest einer ganzzahligen Division.

Angenommen wir wollen Ziffern verschlüsseln. um 5 Stellen

Code:
0 -> 5 : 0 + 5 = 5 : 5 mod 10 = 5
1 -> 6 : 1 + 5 = 6 : 6 mod 10 = 6
2 -> 7 : 2 + 5 = 7 : 7 mod 10 = 7
3 -> 8 : 3 + 5 = 8 : 8 mod 10 = 8
4 -> 9 : 4 + 5 = 9 : 9 mod 10 = 9
5 -> 0 : 5 + 5 = 10 : 10 mod 10 = 0
6 -> 1 : 6 + 5 = 11 : 11 mod 10 = 1
7 -> 2 : 7 + 5 = 12 : 12 mod 10 = 2
8 -> 3 : 8 + 5 = 13 : 13 mod 10 = 3
9 -> 4 : 9 + 5 = 14 : 14 mod 10 = 4
Passt doch !!!

Delphi-Quellcode:
Result := Result + chr( (Ord( Upcase(s[i]) ) - Ord('A') + rotation) mod 26 + Ord('A') )

Ord( Upcase(s[i]) ) - Ord('A') // => 0 für A, 1 für B, ... und 25 für Z

rotation := 3
(Ord( Upcase(s[i]) ) - Ord('A') + rotation) // => 3 für A, ... und 28 für Z

(Ord( Upcase(s[i]) ) - Ord('A') + rotation) mod 26 // => 3 mod 26 = 3 für A, ... 28 mod 26 = 2 = Z

chr( (Ord( Upcase(s[i]) ) - Ord('A') + rotation) mod 26 + Ord('A') ) // = D für A, E für B, ... und C für Z
Stimmt !!!

[edit]
Zitat von Toxman:
if Zahl>24 Then Zahl:=Zahl-24;
if (zahl>24) and (zahl<=48) then zahl := zahl - 24; ist absolut identisch mit
zahl := zahl mod 24; ps: warum hat Dein Alphabet nur 24 Buchstaben ?
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat