Merkwürdige ausgaben meines PW Generators

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Merkwürdige ausgaben meines PW Generators

Beitrag von Dragon »

Hallo Lazarusforum ich bin neu hier also verzeiht bitte wenn ich beim posten dieses beitrags einen fehler gemacht habe.

Also ich habe folgendes Problem

Ich habe ein Form auf der liegen drei edit felder im ersten gibt man die länge des PWs ein im Zweiten die zeichen
die verwendet werden sollen das generierte Pw wird dann im dritten edit feld das auf readOnly steht ausgegeben nun
das klingt alles schön und gut aber das pw ist merkwürdigerweise immer unterschiedlich lang obwohl es nach meinem verständnis des codes nicht so sein sollte blos ich finde diesen fehler nicht(kann daran liegen das ich anfänger in Pascal programmierung bin und das mein erstes richtiges Programm ist). Deshalb hoffe ich das ihr mir helfen könnt den fehler im code zu finden.

Über andere verbesserungsvorschläge würde ich mich natürlich auch freuen

Hier also mein code

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  laenge    : integer;
  Zeichen   : string;
  Generiert : string;
  i              : integer;
  zl             : integer;
  z              : integer;
begin
  if (strtoint(edit1.text)) >= 100 then
 ShowMessage('das Pw ist zu lang :)');
  if (strtoint(edit1.text)) <= 99 then
 laenge := (strtoint(edit1.text));
 Zeichen := edit2.text;
 randomize;
  for i:= 1 to laenge do
    begin
    zl := length(Zeichen);
    z := random(zl-1);
    Generiert := Generiert + Zeichen[z];
  end;
  edit3.text := Generiert;
  label4.Caption := (inttostr(length(edit3.text)));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label4.Caption := '';
end;                  
 
Ich benutze linux Mint 15 falls das hilft
Zuletzt geändert von Lori am Fr 9. Aug 2013, 21:15, insgesamt 2-mal geändert.
Grund: richtiger Highlighter

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Merkwürdige ausgaben meines PW Generators

Beitrag von theo »

Ich würde mal so probieren:

z := random(zl)+1;

Dann kann man noch anderes Verbessern wie
laenge := (strtoint(edit1.text));
an den Anfang nehmen, statt 3 mal strtoint(edit1.text) zu rechnen.

zl := length(Zeichen);
muss auch nicht in die Schleife rein, weil ändert sich nicht.
Zuletzt geändert von theo am So 4. Aug 2013, 17:24, insgesamt 1-mal geändert.

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Merkwürdige ausgaben meines PW Generators

Beitrag von Dragon »

Danke theo hat funktioniert

kann mir mal bitte jemand erklären warum das PW jetzt nicht mehr unterschiedlich lang ist

korrigierter code

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  laenge    : integer;
  Zeichen   : string;
  Generiert : string;
  i         : integer;
  zl        : integer;
  z         : integer;
begin
  laenge := (strtoint(edit1.text));
 
  if laenge >= 100 then
 ShowMessage('das Pw ist zu lang :)');
 
  if laenge <= 99 then
 Zeichen := edit2.text;
 zl := length(Zeichen);
 randomize;
  for i:= 1 to laenge do
    begin
    z := random(zl)+1;
    Generiert := Generiert + Zeichen[z];
  end;
  edit3.text := Generiert;
  label4.Caption := (inttostr(length(edit3.text)));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label4.Caption := '';
end;                          
 
Zuletzt geändert von Lori am Fr 9. Aug 2013, 21:15, insgesamt 1-mal geändert.
Grund: Highlighter

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Merkwürdige ausgaben meines PW Generators

Beitrag von Euklid »

Dragon hat geschrieben:Danke theo hat funktioniert

kann mir mal bitte jemand erklären warum das PW jetzt nicht mehr unterschiedlich lang ist
Klar. Es liegt an dem Inhalt dieser Schleife:

Code: Alles auswählen

 
  for i:= 1 to laenge do
    begin
    z := random(zl)+1;
    Generiert := Generiert + Zeichen[z];
  end; 
 
 
Random(zl) erzeugt immer Zufallszahlen von 0 bis zu zl-1. D.h. in Deiner alten Variante bestand z bei den Zufallszahlen 0 und 1 aus den Zahlen 0 bzw. -1.
Nun ist die Variable Zeichen aber vom Typ String. Und bei diesem Typ fängt die Zählung bei 1 an. D.h. man bekommt das erste Zeichen im String durch Zeichen[1].
Als z im alten Code zufällig -1 oder 0 gewesen ist, wurde auf ein nicht existierendes Zeichen im String zugegriffen und die Abfrage Zeichen[z] ergab '', also keinen Inhalt. Das erzeugte Passwort war aus diesem Grund um dieses Zeichen kürzer.
Hoffe, das klärt die Frage?

Viele Grüße, Euklid

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Merkwürdige ausgaben meines PW Generators

Beitrag von Dragon »

Ja tut es danke Euklid

Antworten