Autor Beitrag
TRUCKERm
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 26.01.11 22:38 
Joah...diese schleife scheint endlos zu laufen...wieso?
Ich will das für FZ[1 bis 3] verschiedene zuffalswerte generiert werden.
totc ist 3

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure Tform1.InitRQ;
var svc,svx,zahl:integer;
var bv:boolean;
begin

bv:=false;

for svc:=1 to totc do
  begin
  randomize;
  repeat
    begin
    bv:=false;
    Zahl:=Random(totc)+1;
    bv:=true;
      for svx:=1 to totc do
        begin
        if FZ[svx] = Zahl then
        bv:=false;
      end;
  end;
  until bv=true;
  FZ[svc]:=zahl;
  
end;
end;



[delphi]

Falls jemand eine Idee hätte wäre es super wenn er sie mit mir teilen würde.

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Mi 26.01.11 22:57 
Naja, ganz offensichtlich ist 'Zahl' im Array 'FZ' enthalten...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 26.01.11 23:01 
randomize;
nur einmal im Programm aufrufen.
Mir erschließt sich der Sinn des ganzen nicht, aber wenn Du FZ mit 0 ern initialisiert läuft alles wie es soll.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
TRUCKERm Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 26.01.11 23:05 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
randomize;
nur einmal im Programm aufrufen.
Mir erschließt sich der Sinn des ganzen nicht, aber wenn Du FZ mit 0 ern initialisiert läuft alles wie es soll.


Du musst bedenken, das ich warscheinlich den code so schwachsinnig wie es nur geht geschrieben habe.

Vielleicht kannst du das da für mich abändern oder kurz was neues schreiben?

Jedenfalls nochmal der Sinn:

FZ soll für die werte 1 bis totc (in diesem fall 3) eine zufällige Nummer zwischen 1 und totc erhalten die sich aber nicht wiederholen darf.
Datenpaare wie folgende sind möglich:
FZ[1]=2
FZ[2]=1
FZ[3]=3
usw.
Normalerweise soll das mit totc=36 Laufen, ich teste es gerade nur so mit totc=3.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 26.01.11 23:07 
Fülle das Array mit den Zahlen 1..totc ubd mische es dann, fertig...
www.delphi-library.d...t+shuffle_71713.html

Für diesen Beitrag haben gedankt: TRUCKERm
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.01.11 23:08 
Du suchst also eine zufällige Verteilung der Zahlen 1 bis 36? Also einmal das Array gründlich durchmischen? Dann schau dir mal dieses Topic an. :D

Argh. Da war Sebastian wieder schneller. :motz:

_________________
We are, we were and will not be.


Zuletzt bearbeitet von Gausi am Mi 26.01.11 23:09, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: TRUCKERm
TRUCKERm Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 26.01.11 23:08 
user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
Naja, ganz offensichtlich ist 'Zahl' im Array 'FZ' enthalten...


Mir fällt grad auf....das du Recht hast.
Ne idee wie ich das schreibe, sodass er nach allen Werten in FZ sucht außer nach der jetzigen?
Wäre das eine Option? (ich würds ja testen...aber ich glaube hier sind eh überall fehler drin...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
      for svx:=1 to svc-1 do
        begin
        if FZ[svx] = Zahl then
        bv:=false;
      end;
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Mi 26.01.11 23:11 
Randomize nur ein einziges Mal aufrufen! Z.B. im OnCreate der Form...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
TRUCKERm Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 26.01.11 23:16 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Du suchst also eine zufällige Verteilung der Zahlen 1 bis 36? Also einmal das Array gründlich durchmischen? Dann schau dir mal dieses Topic an. :D

Argh. Da war Sebastian wieder schneller. :motz:

Mache ich das so richtig? Ich kriege Access violation fehler....
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Tform1.InitRQ;
  var
    i,j: Integer;
    tmp: TArrayElement;
begin
  for i := Low(FZ) to High(FZ) do begin
    j := i +Random(Length(FZ) -i +Low(FZ));
    tmp := FZ[j];
    FZ[j] := FZ[i];
    FZ[i] := tmp;
  end;
end;


Zuletzt bearbeitet von TRUCKERm am Mi 26.01.11 23:23, insgesamt 1-mal bearbeitet
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 27.01.11 01:03 
nimm's doch so wie beschieben
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
type
TA=Array of Integer;


procedure ShuffleFisherYates(var aArray: TA);
  var
    i,j: Integer;
    tmp: integer;
begin
  for i := Low(aArray) to High(aArray) do
    begin
    j := i +Random(Length(aArray) -i +Low(aArray));
    tmp := aArray[j];
    aArray[j] := aArray[i];
    aArray[i] := tmp;
    end;
end;



procedure TForm1.Button1Click(Sender: TObject);

var
   a:TA;
   i:Integer;
begin
   SetLength(A,100000);
   for I := LOW(A) to High(A) do A[i] := i;
   ShuffleFisherYates(a);
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS