Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mit einer kurzen Prozdur einen Schlüssel erzeugen (https://www.delphipraxis.net/20949-mit-einer-kurzen-prozdur-einen-schluessel-erzeugen.html)

Sharky 26. Apr 2004 12:45

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Oder so:

Delphi-Quellcode:
function TForm1.Button1Click(Sender: TObject) : String;
var
  myString1,
  myString2 : String;
  rand,
  ndx : Integer;
begin
  for ndx := 1 to 26 do
  begin
    myString1 := myString1+ Char(ndx+64);
  end;
  ndx := 0;
  While (Length (myString1) > 0) do
  begin
    rand := random(Length(myString1))+1;
    myString2 := myString2 + Copy (myString1,rand,1);
    Delete (myString1,rand,1)
  end;
  result := myString2;
end;
Ungetestet, darum auch nicht optimiert ;-)

fiasko 26. Apr 2004 12:48

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Der Ansatz kommt mir bekannt vor... 8)

Sharky 26. Apr 2004 12:51

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Zitat:

Zitat von fiasko
Der Ansatz kommt mir bekannt vor... 8)

:shock: Das kommt davon wenn man zwichen dem Tippen und dem Absenden ans Telefon muss :?

negaH 26. Apr 2004 13:03

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Delphi-Quellcode:
function Code: string;
const
  s: string = 'abcdefghijklmnopqrstuvwxyz';
var
  i,j: Integer;
begin
  randomize;
  result:='';
  for i:=1 to 25 do
  begin
    j:=random(length(s)+1);
    result:=result+s[j];
    delete(s,j,1);
  end;
  result:=result+s;
end;
der code ist ineffizient und zudem falsch. S ist eine Konstante die mit delete(s, j, 1) modifiziert wird. Beim nächsten Aufruf dieser Funktion wurde also S vorher schon modifiziert.
Ineffizient ist er weil er mit result := result + s[J], 26 realozierungen des Strings benötigt.
Randomize sollte auf nur EINMAL im Program aufgerufen werden.

Delphi-Quellcode:
function Code: String;
const
  Table: String = 'abcdefghijklmnopqrstuvwxyz';
var
  I,J: Integer;
  Temp: Char;
begin
  Result := Table;
  for I := 1 to Length(Table) do
  begin
    J := Random(Length(Table)) +1;
    Temp := Result[J];
    Result[J] := Result[I];
    Result[I] := Temp;
  end;
end;
Gruß Hagen

Sharky 26. Apr 2004 13:08

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Zitat:

Zitat von negaH
...Ineffizient ist er weil er mit result := result + s[J], 26 realozierungen des Strings benötigt....

Wusste ich doch das Hagen das mal irgendwo geschrieben hat. Darum verwende ich in einer Funktion immer temp_Variablen und setze Result ganz am ende der Funktion.

SirThornberry 26. Apr 2004 13:17

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Irgendwie versteh ich nicht wieso bei dem source jedes zeichen nur einmal vorkommt. Also ich zweifel is ni an (habs auch zig mal probiert) aber wie wird das sichergestellt? kannste den source mal erklären - irgendwie begreif ich den zu so früher stunde ni

Sharky 26. Apr 2004 13:27

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Zitat:

Zitat von SirThornberry
... kannste den source mal erklären ...

Wenn meinst Du denn?

SirThornberry 26. Apr 2004 13:28

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
eigentlich ist mir egal wer den source erklärt solange der source von Hagen (Negah) erklärt wird

Sharky 26. Apr 2004 13:34

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
Wenn ich den Code richtig verstehe macht Hagen es so das er einmal den sortierten String hat.
Dann durchläuft er diesen von 1 bis 26 und ersetzt jedes Zeichen durch ein Zufällig ausgewähltes des gleichen Strings.

Grob gesagt: Er sorgt dafür das der Sring nicht mehr sortiert ist.

SirThornberry 26. Apr 2004 13:44

Re: Mit einer kurzen Prozdur einen Schlüssel erzeugen
 
so weit bin ich auch mitgekommen. Aber wo/wie wird sichergestellt das, das zeichen nicht schon vorhanden ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz