Autor Beitrag
Maik5678
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 24.09.06 16:23 
Hallo,


ich habe ein Problem beim Programmieren einer Caesar-Verschlüsselung:

Nochmal zur Erinnerung: Bei dieser Verschlüsselung wird, wenn man bspw. den Schlüssel B eingibt aus dem Wort "Hallo" -> "IBMMP" , also eine Verschiebung um ein Buchstabe. Wenn C der Schlüssel wäre, dann müsste man das Wort um 2 Buchstaben verschieben.

Also gilt immer A = (der eingebene Schlüssel, z.B. B)
B = C
C = D etc....

Das Programm verschlüsselt die Buchstaben zwar meistens korrekt, aber ich arbeite mit einem ASCII System, was bedeutet, dass er das Z immer falsch verschlüsselt, da er daraus nicht wieder einen normalen Buchstaben, sondern ein Sonderzeichen (z.B. "$§) des ASCII Systems macht.

Ich weiß, dass ich dafür eine if-Bedingung brauch, die ausschließt das der Wert "90" überschritten wird (90 -> Sonderzeichen beginnen), und ich weiß auch, dass man den eingegeben Wert - 26 rechnen muss. Aber irgendwie funktioniert das bei mir nicht, weil ich nicht weiß an welcher Stelle diese Bedingung rein muss.

Darum gebe ich euch hier mal den Quelltext [noch ohne die oben erklärte bedingung]:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.BtDecodeClick(Sender: TObject);
var z,i, x2,x3:integer;
     x4:char;
begin
key :=  EdSch.Text;
x := ord(key[1]) - 65;
eingabe := uppercase(EdEingabe.Text);
for i := 1 to length(eingabe) do
begin
       
    x2 := ord(eingabe[i]);  //dem eingegeben Wort wird ein Ord wert zugeordnet
  

                 if x2 <> 32 // Leerzeichen werden auch im verschlüsselten Text übernommen
    then begin

      x3 := x2+x; // Ord-Wert plus gewählte Verschiebung

        x4 := Chr(x3);            //x4 = Char Wert der gesamten Rechnung

          eingabe[i] := x4;
          end;
            end;
            end;
               
                 EdGeheim.Text := eingabe; //Ausgabe des verschl. Text im Editfeld "EdGeheim"
                   end;


Könntet ihr mir nun sagen, wie genau die Bedingung aussehen muss und an welcher Stelle sie rein muss? Ich bedanke mich schon mal im Vorraus und hier noch als Hilfe ein ASCII Tabelle: www.torsten-horn.de/techdocs/ascii.htm

Vielen Dank!
konbom
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 36

Win XP Home
Delphi 2005 Personal
BeitragVerfasst: So 24.09.06 18:28 
Ich würde das nach
ausblenden Delphi-Quelltext
1:
x3 := x2+x;					

machen,
und dann:
ausblenden Delphi-Quelltext
1:
if x3>90 then x3 := x3-26;					


Das müsste funktionieren...
Maik5678 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 24.09.06 19:01 
Vielen Dank für deine schnelle und präzise Hilfe, es hat super funktioniert ;)



Danke nochmal!!