Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallsgenerator (https://www.delphipraxis.net/73765-zufallsgenerator.html)

joel93 23. Jul 2006 19:13


Zufallsgenerator
 
Ich brauche nen zufallsgenerator, der den Inhalt von edit1 zu edit2 durcheinander wirft!
Kann mir einer helfen? :gruebel: :coder:

3_of_8 23. Jul 2006 19:31

Re: Zufallsgenerator
 
Was meinst du? Permutationen? Also zum Beispiel so:

edit1.text: wuppdi
edit2.text puwipd

Das ginge so:
Delphi-Quellcode:
function MakeAnagram(str: string): string;
var I, n, r: Integer;
    c: Char;
begin
  result:=str;
  n:=length(result);
  for I:=1 to n do
  begin
    r:=i+random(n-I);
    c:=result[I];
    result[I]:=result[r];
    result[r]:=c;
  end;
end;
EDIT: Mit einer kleinen Änderung ist sogar ein 1 MB String fix verarbeitet.

joel93 24. Jul 2006 13:07

Re: Zufallsgenerator
 
entschuldige die dumme frage aber wie kann ich die function entsprechend aufrufen? :wiejetzt:

Neutral General 24. Jul 2006 13:28

Re: Zufallsgenerator
 
Delphi-Quellcode:
Edit2.Text := MakeAnagram(Edit1.Text);
so ;)

Gruß
Neutral General

joel93 24. Jul 2006 14:15

Re: Zufallsgenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke an beide!
Nur ein problem gibt es noch!


Wenn ich etwas eintippe
zb. 18d4 kommt im Ergebnis am ende immer dei 4
zb. d4df kommt im Ergebnis am ende immer das f
zb. 38fsdfh? kommt im Ergebnis am ende immer das ?
egal was ich tue und drücke!

...Und so weiter...
:coder2:

Klaus01 24. Jul 2006 14:20

Re: Zufallsgenerator
 
Hallo Joel,

schau Dir mal diesen Thread dazu an, dort findest Du auch die Lösung
zu Deinem Problem: -> http://www.delphipraxis.net/internal...ct.php?t=88372

Grüße
Klaus

DGL-luke 24. Jul 2006 14:22

Re: Zufallsgenerator
 
Da würd ich doch ne Lottoziehung bauen...

Delphi-Quellcode:
function StringShuffle(s: string): string;
var i: Integer;
begin
Result := '';
while length(s) > 0 do
  begin
    i := Random(length(s)-1) +1; //laut Dok bis < Range, deswegen das -1
    Result := Result + s[i];
    Delete(s,i,1);
  end;
end;
Ich nehme also einen zufälligen Wert aus dem alten string raus, tu ihn an den neuen dran und lösch ihn im alten. und das so lange, bis der alte leer ist.

joel93 24. Jul 2006 17:59

Re: Zufallsgenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab nen passenden Code gefunden :cheers: :

Delphi-Quellcode:
function Anagram(const s: String): String;
var
  i, iRandom, iLast: Integer;
  c: Char;
begin
  Result := s;
  iLast := Length(s);
  for i := 1 to Pred(iLast) do
  begin
    iRandom := Succ(Random(i));
    c := Result[iLast];
    Result[iLast] := Result[iRandom];
    Result[iRandom] := c;
  end;
end;
Hier ist das vertige Beispielprog:

ManuMF 25. Jul 2006 19:29

Re: Zufallsgenerator
 
Auch das randomize; nicht vergessen gehabt?

joel93 25. Jul 2006 19:50

Re: Zufallsgenerator
 
???
Delphi-Quellcode:
randomize;
??? :coder:

3_of_8 25. Jul 2006 20:01

Re: Zufallsgenerator
 
Du musst den Zufallszahlengenerator schon auch initialisieren...

joel93 25. Jul 2006 20:31

Re: Zufallsgenerator
 
:wiejetzt: ?

ManuMF 26. Jul 2006 13:18

Re: Zufallsgenerator
 
Der Zufallsgenerator ist nicht wirklich einer, sondern versucht möglichst zufällig eine Zahl auszugeben, das kann auf mehrere Arten gehen. Aber dazu muss z.B. in MainForm (meist Form1 ;-)).FormCreate der Befehl "randomize" geschrieben werden, der das ganze initialisiert. Sonst bekommst du immer die gleichen Werte ;-)

joel93 26. Jul 2006 13:57

Re: Zufallsgenerator
 
Ich fersteh zwar nicht warum ich die gleichen Werte haben soll (hab ich mähmlich nich!!!)? :warn:

3_of_8 26. Jul 2006 14:02

Re: Zufallsgenerator
 
Jedes mal beim Programmstart die gleichen.

joel93 26. Jul 2006 14:10

Re: Zufallsgenerator
 
Hab ich auch nich???!!!??? :wall:

joel93 26. Jul 2006 20:43

Re: Zufallsgenerator
 
Sorry, aber kommen hier keine Antworten???

DGL-luke 26. Jul 2006 20:52

Re: Zufallsgenerator
 
Ähm...

Delphi-Referenz durchsuchenRandomize; setzt die globale Variable Delphi-Referenz durchsuchenRandSeed auf die "Counts" (Delphi-Referenz durchsuchenQueryPerformanceCounter, ka was das genau für n Wert ist) seit Systemstart oder Millisekunden seit Systemstart (Delphi-Referenz durchsuchenGetTickCount), falls ersteres nicht verfügbar ist (false zurückgibt).

Random gibt dann "RandomEngine.Next" (weiter komme ich nicht in die Untiefen des VCL-Codes) zurück. Also "die nächste zufallszahl". Für jeden Wert von Randseed hast du eine eindeutige kette von aufeinanderfolgenden Zufallswerten, diese werden über sehr komplizierte Algorithmen ausgerechnet, so dass es "wie Zufall aussieht". negaH kann sich da differenzierter darüber auslassen (und er würde an der Delphi-Implenmentation kein gutes Haar lassen).

Somit sollte Randseed VOR dem aufruf von Randomize auf einem bestimmten Wert stehen, und du solltest somit immer die selben zufallszahlen erhalten.

SnuffMaster23 26. Jul 2006 21:22

Re: Zufallsgenerator
 
Zitat:

Zitat von DGL-luke
Somit sollte Randseed VOR dem aufruf von Randomize auf einem bestimmten Wert stehen

Wird RandSeed denn überhaupt initialisiert?
Vielleciht steht da auch was wirklich zufälliges drin...

Christian Seehase 26. Jul 2006 21:38

Re: Zufallsgenerator
 
Moin Lukas,

RandSeed steht vor dem Aufruf von Randomize auf 0 (zumindest in D7 und 2006).

DGL-luke 27. Jul 2006 08:18

Re: Zufallsgenerator
 
Genau, das hatte ich vermutet.

joel93 27. Jul 2006 13:09

Re: Zufallsgenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Is ja eigentlich egal, denn der Zufallsgenerstor funzt jetzt endlich. :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 Uhr.

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