John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009
-
10 avril 2006 à 01:31
ftone
Messages postés1Date d'inscriptionsamedi 14 avril 2007StatutMembreDernière intervention14 avril 2007
-
14 avril 2007 à 11:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
ftone
Messages postés1Date d'inscriptionsamedi 14 avril 2007StatutMembreDernière intervention14 avril 2007 14 avril 2007 à 11:55
bonjour à tous et toutes, j ai téléchargé le generateur mais je ne sais pas l'utiliser.
je suis completement novice dans l'excution d'un programme .
c'est un ami qui m'a donné votre adresse suite aux piratages de mes boites mails.
pouvez vous m'indiquer la marche à suivre.
merci d'avance
kiki917
Messages postés1Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention18 juillet 2006 18 juil. 2006 à 13:11
bonjour, je débute en informatique, j'ai tléchargé le zip, et jlé décompréssé mai je ne c pa se ke je doi faire ensuite :s help please
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 24 avril 2006 à 14:22
aucune difference de performance entre les deux. car voici l'interpretation assembleur des deux :
mais un peu plus d'instruction pour repeat vus qu'il faut tester avant d'entrer dans la condition.
function LoopWhile(X,Min,Max : integer) : boolean;
begin
result := (X >= Min) and (X <= Max);
while result do begin
inc(X);
result := (X >= Min) and (X <= Max);
end;
end;
function LoopRepeat(X,Min,Max : integer) : boolean;
begin
result := (X >= Min) and (X <= Max);
if result then
repeat
inc(X);
result := (X >= Min) and (X <= Max);
until not result;
end;
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 16 avril 2006 à 14:50
Merci FoXI pour toutes ses précisions. Je ferai gaffe à l'avenir, et il est vrai qu'il m'arrive d'utiliser While comme le Repeat..Until sans me poser de questions.
A l'avenir je devrai me méfier des conséquences du à ce genre de petits details plus souvent.
Sinon en terme de performance (calcul machine), sais tu s'il y à une différence entre un While et un Repeat ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 14 avril 2006 à 02:41
petite recommandation a elguevel, ne plus utiliser Repeat Until mais plutot While ... do
la boucle "Repeat until" execute au moins une fois l'instruction qu'elle contient, meme si la condition est fausse, ce qui peu provoquer des erreurs inattendues.
la boucle "While do" n'execute pas l'instruction qu'elle contient si la condition est fausse.
exemple :
result := '';
x := 1;
repeat
result := result + S[x];
inc(x);
until X > length(S);
erreur si S est vide (length(S) = 0), l'instruction serat executée au moins une fois, la condition ne peu que faire sortir de la boucle APRES l'instruction mais ne protege pas son accés.
result := '';
x := 1;
while X <= length(s) do begin
result := result + s[x];
inc(x);
end;
aucune erreur si S est vide (length(S) = 0), car la condition fausse empecheras d'aller a l'interieur de la boucle et egalement elle permet d'en sortir AVANT l'instruction.
pour obtenir un comportement similaire avec "Repeat Until" il faudrait tester avant la boucle la condition :
result := '';
x := 1;
if X <= Length(S) then
repeat
result := result + S[x];
inc(x);
until X > length(S);
while ne necessite donc pas de controller la condition avant son appel, ce qui est plus rapide et plus securisant.
d'une maniere plus generale, "Repeat Until" viens du monde du Pascal et tout comme le type "Object", on doit se mefier et bien reflechir avant son utilisation, voir ne pas les utiliser du tout.
Repeat Until serat donc remplacée systematiquement par While Do
et Object serat remplacé systematiquement par une Classe.
et dans le code, l'instruction While permet de connaitre immediatement la condition a respecter alors qu'avec repeat until il faudrat descendre dans le code pour connaitre cette fameuse condition, ce qui n'en facilite pas la lecture.
il faut donc oublier les conventions du Turbo Pascal au profit des conventions du Pascal Objet.
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 13 avril 2006 à 08:11
L'avantage du KeyPress dans ce cas là c'est que l'utilisateur n'a pas le choix, et de plus çà evite d'avoir à géré des exception et de les afficher systématiquement en cas de problème. Enfin je trouve çà plus propre.
PS : Tu peux utiliser la propriété "MaxLength" de TEdit aussi pour forcer l'utilisateur à ne pas entrer autant de caractères qu'il veut.
Pour les noms de compo, j'avoue que c plus simple de pas avoir a les retoucher, mais bon sur des programmes conséquents, vous mieux etre explicit.
Sinon j'ai pas dit que mon algo etait bien lol, j'ai fait çà main lever, c'etait juste histoire de dire que çà aurait été mieux de passer les checkBox en paramètres plutôt que les avoir intégrées dans ta fonction proprietaire. En plus avec le passage de paramètre ta fonction devient portable d'un programme à l'autre :-)
Allé bon Coding, @+
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 12 avril 2006 à 19:25
Salut :)
- le try except est une autre manière de procéder, je ne savais pas jusqu'alors me servir de KeyPressed comme tu le fait
- pour les noms sur les compo, j'admets que c'est une mauvaise habitude et que ça facilite la compréhension générale de la source, mais moi ça me gêne pas (je dis pas que c'est bien hein :D !)
- j'ai fait une fonction séparé pour générer le MDP mais c'est vrai que j'ai pas pensé à la rendre completement indépendante du reste, c'est une faute d'inattention :S
Par contre, je trouve mon algo pour trouver les caractères du MDP plus efficace que le tien :p ...
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 12 avril 2006 à 13:54
Programme simple et pratique.
Mais ...
+ Dans l'evenement "KeyPressed" de "Edit1" ajoute : if not (Key in #13, '0'..'9') then Key := #0;
çà te permettera de te passer du Try..except..end; de l'evenement BitBtn1Click, en n'autorisant que l'entré de chiffre !
+ Donne des noms à tes composants : Edit1, RichEdit1, CheckBox1, etc...
+ Et j'aurai fait une fonction séparer pour la géneration de mots de passe : (tient je suis gentil je te fait un exemple)
-------------------------
function TForm1.GenererMDP( longeur : integer; lettremin : boolean; lettremaj : boolean; numerique : boolean) : string;
var
temp : string;
begin
temp := '';
if ( not lettremin ) and ( not lettremaj ) and ( not numerique ) Then
begin
MessageBoxA( Handle, PChar('Veuillez cocher au moins un type ...'), PChar('Type manquant'), MB_ICONINFORMATION );
Exit;
end;
while Length(Temp) < longeur do
begin
if ( lettremin = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(97,122));
if ( lettremaj = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(65,90));
if ( numerique = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(48,57));
end;
Pour afficher le resultat (tu fait un repeat..until si tu veux une liste)
Voila, J'tai mis 8/10.
++ ;-)
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 11 avril 2006 à 19:25
Merci de cette critique constructive ...
Bien vu pour le RandomRange, je n'etais pas au courant.
Heureusement, c'est simplissime à corriger :).
Pour les répétitions, ça deviens un peu plus delicat, en particulier sur les très longues clés où proportionnelement une répétition sera très probable ...
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 11 avril 2006 à 18:39
Pinèze !
Quand vous laissez une note, j'aimerais bien que vous laissiez un pti commentaires : ce qui va pas, ce qui vous a plus ...
Allez siouplet, un ptit effort :)
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 10 avril 2006 à 01:31
14 avril 2007 à 11:55
je suis completement novice dans l'excution d'un programme .
c'est un ami qui m'a donné votre adresse suite aux piratages de mes boites mails.
pouvez vous m'indiquer la marche à suivre.
merci d'avance
18 juil. 2006 à 13:11
24 avril 2006 à 14:22
mais un peu plus d'instruction pour repeat vus qu'il faut tester avant d'entrer dans la condition.
function LoopWhile(X,Min,Max : integer) : boolean;
begin
result := (X >= Min) and (X <= Max);
while result do begin
inc(X);
result := (X >= Min) and (X <= Max);
end;
end;
function LoopWhile(X: Integer; Min: Integer; Max: Integer): Boolean;
asm
@@0: push ebx
@@1: cmp edx, eax
@@3: jnle @@9
@@5: cmp ecx, eax
@@7: jnl @@13
@@9: xor ebx, ebx
@@11: jmp @@32
@@13: mov bl, $01
@@15: jmp @@32
@@17: inc eax
@@18: cmp edx, eax
@@20: jnle @@26
@@22: cmp ecx, eax
@@24: jnl @@30
@@26: xor ebx, ebx
@@28: jmp @@32
@@30: mov bl, $01
@@32: test bl, bl
@@34: jnz @@17
@@36: mov eax, ebx
@@38: pop ebx
end;
function LoopRepeat(X,Min,Max : integer) : boolean;
begin
result := (X >= Min) and (X <= Max);
if result then
repeat
inc(X);
result := (X >= Min) and (X <= Max);
until not result;
end;
function LoopRepeat(X: Integer; Min: Integer; Max: Integer): Boolean;
asm
@@0: push esi
@@1: mov esi, ecx
@@3: cmp edx, eax
@@5: jnle @@11
@@7: cmp esi, eax
@@9: jnl @@15
@@11: xor ecx, ecx
@@13: jmp @@17
@@15: mov cl, $01
@@17: test cl, cl
@@19: jz @@40
@@21: inc eax
@@22: cmp edx, eax
@@24: jnle @@30
@@26: cmp esi, eax
@@28: jnl @@34
@@30: xor ecx, ecx
@@32: jmp @@36
@@34: mov cl, $01
@@36: test cl, cl
@@38: jnz @@21
@@40: mov eax, ecx
@@42: pop esi
end;
16 avril 2006 à 14:50
A l'avenir je devrai me méfier des conséquences du à ce genre de petits details plus souvent.
Sinon en terme de performance (calcul machine), sais tu s'il y à une différence entre un While et un Repeat ?
14 avril 2006 à 02:41
la boucle "Repeat until" execute au moins une fois l'instruction qu'elle contient, meme si la condition est fausse, ce qui peu provoquer des erreurs inattendues.
la boucle "While do" n'execute pas l'instruction qu'elle contient si la condition est fausse.
exemple :
result := '';
x := 1;
repeat
result := result + S[x];
inc(x);
until X > length(S);
erreur si S est vide (length(S) = 0), l'instruction serat executée au moins une fois, la condition ne peu que faire sortir de la boucle APRES l'instruction mais ne protege pas son accés.
result := '';
x := 1;
while X <= length(s) do begin
result := result + s[x];
inc(x);
end;
aucune erreur si S est vide (length(S) = 0), car la condition fausse empecheras d'aller a l'interieur de la boucle et egalement elle permet d'en sortir AVANT l'instruction.
pour obtenir un comportement similaire avec "Repeat Until" il faudrait tester avant la boucle la condition :
result := '';
x := 1;
if X <= Length(S) then
repeat
result := result + S[x];
inc(x);
until X > length(S);
while ne necessite donc pas de controller la condition avant son appel, ce qui est plus rapide et plus securisant.
d'une maniere plus generale, "Repeat Until" viens du monde du Pascal et tout comme le type "Object", on doit se mefier et bien reflechir avant son utilisation, voir ne pas les utiliser du tout.
Repeat Until serat donc remplacée systematiquement par While Do
et Object serat remplacé systematiquement par une Classe.
et dans le code, l'instruction While permet de connaitre immediatement la condition a respecter alors qu'avec repeat until il faudrat descendre dans le code pour connaitre cette fameuse condition, ce qui n'en facilite pas la lecture.
il faut donc oublier les conventions du Turbo Pascal au profit des conventions du Pascal Objet.
13 avril 2006 à 08:11
PS : Tu peux utiliser la propriété "MaxLength" de TEdit aussi pour forcer l'utilisateur à ne pas entrer autant de caractères qu'il veut.
Pour les noms de compo, j'avoue que c plus simple de pas avoir a les retoucher, mais bon sur des programmes conséquents, vous mieux etre explicit.
Sinon j'ai pas dit que mon algo etait bien lol, j'ai fait çà main lever, c'etait juste histoire de dire que çà aurait été mieux de passer les checkBox en paramètres plutôt que les avoir intégrées dans ta fonction proprietaire. En plus avec le passage de paramètre ta fonction devient portable d'un programme à l'autre :-)
Allé bon Coding, @+
12 avril 2006 à 19:25
- le try except est une autre manière de procéder, je ne savais pas jusqu'alors me servir de KeyPressed comme tu le fait
- pour les noms sur les compo, j'admets que c'est une mauvaise habitude et que ça facilite la compréhension générale de la source, mais moi ça me gêne pas (je dis pas que c'est bien hein :D !)
- j'ai fait une fonction séparé pour générer le MDP mais c'est vrai que j'ai pas pensé à la rendre completement indépendante du reste, c'est une faute d'inattention :S
Par contre, je trouve mon algo pour trouver les caractères du MDP plus efficace que le tien :p ...
12 avril 2006 à 13:54
Mais ...
+ Dans l'evenement "KeyPressed" de "Edit1" ajoute : if not (Key in #13, '0'..'9') then Key := #0;
çà te permettera de te passer du Try..except..end; de l'evenement BitBtn1Click, en n'autorisant que l'entré de chiffre !
+ Donne des noms à tes composants : Edit1, RichEdit1, CheckBox1, etc...
+ Et j'aurai fait une fonction séparer pour la géneration de mots de passe : (tient je suis gentil je te fait un exemple)
-------------------------
function TForm1.GenererMDP( longeur : integer; lettremin : boolean; lettremaj : boolean; numerique : boolean) : string;
var
temp : string;
begin
temp := '';
if ( not lettremin ) and ( not lettremaj ) and ( not numerique ) Then
begin
MessageBoxA( Handle, PChar('Veuillez cocher au moins un type ...'), PChar('Type manquant'), MB_ICONINFORMATION );
Exit;
end;
while Length(Temp) < longeur do
begin
if ( lettremin = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(97,122));
if ( lettremaj = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(65,90));
if ( numerique = true ) and ( Length(Temp) < longeur ) then temp := temp + Chr(RandomCorrige(48,57));
end;
Result := Temp;
end;
-------------------------
et ta plus qu'a faire :
Randomize;
RichEdit1.Clear;
RichEdit1.Lines.Add( GenereMDP( StrToInt(Edit1.Text), CheckBox3.Checked, CheckBox2.Checked, CheckBox1.Checked ) );
Pour afficher le resultat (tu fait un repeat..until si tu veux une liste)
Voila, J'tai mis 8/10.
++ ;-)
11 avril 2006 à 19:25
Bien vu pour le RandomRange, je n'etais pas au courant.
Heureusement, c'est simplissime à corriger :).
Pour les répétitions, ça deviens un peu plus delicat, en particulier sur les très longues clés où proportionnelement une répétition sera très probable ...
11 avril 2006 à 18:39
Quand vous laissez une note, j'aimerais bien que vous laissiez un pti commentaires : ce qui va pas, ce qui vous a plus ...
Allez siouplet, un ptit effort :)
10 avril 2006 à 01:31
Je vois que j'ai récolté 1/10 !
Merci à vous ...