[TP7] Concaténér une chaîne [Résolu]

cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 25 févr. 2007 à 10:35 - Dernière réponse : cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention
- 26 févr. 2007 à 16:55
Bonjour à tous.
Je suis en train de faire une fonction de cryptage xor en Turbo Pascal 7.
Seul petit problème : il ne veut pas ajouter le caractère crypter dams tmp...
J'ai essayé 2 fois, rien ne fonctionne ! (C'est une erreur type missmatch)

function Crypto(S:String;Key:String) : String;



         var lS : Integer;
         var lK : Integer;



         var pS : Integer;
         var pK : Integer;



         var cS : Byte;
         var cK : Byte;



         var cTmp : Char;
         var Tmp : String;



         begin





              lS := Length(S);
              lK := Length(Key);



              pS := 1;
              pK := 1;



              for pS := 1 to lS do;
                  begin
                       inc(pK,1);
                       if pK > lK then;
                          begin
                               pk := 1;
                          end;



                       cS := ord(S[pS]);
                       cK := ord(Key[pK]);
                       cTmp := cS xor cK




                       Tmp := concat(Tmp,Chr(cTmp));  { <- Cette ligne ne fonctionne pas ...}
                       Tmp := Tmp + Chr(cTmp); { <- Et celle-là non plus !}

                  end;
              Crypto := Tmp
         end;
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 25 févr. 2007 à 20:43
3
Merci
Evidemment qu'il est possible d'optimiser cette fonction !
Cependant, ne connaissant pas les limites de Turbo Pascal, je me suis contenté de lui donner sa réponse.
Par contre, à quoi sert la variable Tmp, autant utiliser directement Result (ou alors Crypto puisque TP ne permet peut être pas cette méthode).

Et sinon, ut peux aussi éviter l'affectation en appelant SetLength() puisque la valeur affectée à Tmp (Tmp := S) n'est jamais utilisée.

D'où : (pas testé mais ça doit être OK)

function Crypto(const S, Key : String) : String;
var
nS, nK: Integer;
begin
SetLength(Crypto, Length(S));
nK := 1;
for nS := 1 to lS do
begin
Crypto[nS] := Chr(Ord(S[nS]) xor Ord(Key[nK]));
Inc(nK,1);
if nK > lK then
nK := 1;
end;
end;

++

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de florenth
Meilleure réponse
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 26 févr. 2007 à 16:55
3
Merci
ta réponse est tout a fait bonne sauf que certaines var n'étaient pas déclarées ni utilisées ...
voici la version corrigée (un soupcon) :

function Crypto(const S, Key : String) : String;
 var
                lS, lK: Integer;
                nS, nK: Integer;
 begin
                lS:=Length(S);
                lK:=Length(Key);
                SetLength(Crypto, lS);
    nK  := 1;
                for nS := 1 to lS do
     begin
        Crypto[nS] := Chr(Ord(S[nS]) xor Ord(Key[nK]));
        Inc(nK,1);
        if nK > lK then
            nK := 1;
     end;
 end;

Merci à tous de m'avoir aidé !

Merci cs_ghuysmans99 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de cs_ghuysmans99
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 25 févr. 2007 à 11:05
0
Merci
Salut,

Puisque cTmp est un Char et Tmp un string, il ne faut pas appeler Chr() mais directement concaténer.
Ce qui donne :

Tmp := Concat(Tmp, cTmp)

ou bien :

Tmp := Tmp + cTmp.

Personnellement, je préfère la deuxième solution, plus rapide et plus simple à relire.
++
Commenter la réponse de florenth
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 25 févr. 2007 à 16:10
0
Merci
function Crypto(const S, Key : String) : String;
var lS,lK, nS, nK : Integer;
    tmp           : string;
begin
  lS  := Length(S);
  lK  := Length(Key);

  tmp := S;
  nK  := 1;

  for nS := 1 to lS do
  begin
    Tmp[nS] := ord(S[nS]) xor ord(Key[nK]);
    inc(nK,1);
    if nK > lK then
       nK := 1;
  end;
  Crypto := Tmp;
end;



tout simplement ...

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.