Cryptographie XOR

MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 24 oct. 2004 à 17:38
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 27 oct. 2004 à 09:48
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
begin
  Memo2.Clear;
  for n:=0 to Length(Memo1.Text)
  do
  begin
    if Length(Memo2.Text)=0 then
    Memo2.Text:=Chr(Length(Memo1.Text) xor Ord(Memo1.Text[n]))
    else
    Memo2.Text:=Memo2.Text + Chr(Length(Memo1.Text) xor Ord(Memo1.Text[n]));
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
n: Integer;
begin
  Memo3.Clear;
  for n:=0 to Length(Memo2.Text)
  do
  begin
    if Length(Memo3.Text)=0 then
    Memo3.Text:=Chr(Length(Memo1.Text) xor Ord(Memo2.Text[n]))
    else
    Memo3.Text:=Memo3.Text + Chr(Length(Memo1.Text) xor Ord(Memo2.Text[n]));
    end;
end;


si quelqu un pouvait mexpliquer pourquoi je me retrouve avec un caractere en plus dans le cryptogramme et mlindiquer comment y remedier, ce serait super cool.

4 réponses

divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 2
25 oct. 2004 à 18:19
Ta boucle doit aller de 0 à Length(Memo2.Text) - 1

Quand on commence à zéro, on s'arrête souvent à (Nbre - 1)

Oublie pas de valider la réponse si elle te convient !!

Keep Cool & Be Wild
Divad
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
27 oct. 2004 à 08:24
salut MoveX,

divadav à raison sauf que tu dois boucler de 1 à Length(Memo1.Text) car l'élément 0 d'une chaine de caractère est sa taille.

De plus ton code semble alourdi par tes test qui ne servent à rien. tu n'as pas besoin de tester si la taille de ton Memo = 0 pour écrire la même chose que si elle est supèrieur... Vu que ton memo est vide Memo.text := '0' reviens à Memo.text := Memo.text + '0'

exemple :
procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
begin
  Memo2.Clear;

for n:=1 to Length(Memo1.Text) do
  Memo2.Text:=Memo2.Text + Chr(Length(Memo1.Text) xor Ord(Memo1.Text[n]));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  n: Integer;
begin
  Memo3.Clear;

for n:= 1 to Length(Memo2.Text) do
begin
if Length(Memo3.Text)=0 then
  Memo3.Text:=Memo3.Text + Chr(Length(Memo1.Text) xor Ord(Memo2.Text[n]));
end;


Bonne Prog, ;)

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
27 oct. 2004 à 08:26
Zut la ligne if Length(Memo3.Text)=0 then dans la deuxième procedure n'a pas été supprimmer, mais tu l'auras bien compris qu'elle est inutile.

Bonne Prog, ;)

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
27 oct. 2004 à 09:48
ok !

le teste cest parce que comme je partais de 0, ca faisait soit un caractere blance au debut dans le memo soit une ligne....

mais bon, si je pars de 1 !!!

merci encore
0
Rejoignez-nous