AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Random ohne doppelte Zahlen

Ein Thema von D0N · begonnen am 2. Okt 2008 · letzter Beitrag vom 4. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Random ohne doppelte Zahlen

  Alt 2. Okt 2008, 22:22
Hallo

ich habe vor für meinen Clan n Programm zu schreiben welches durch das benutzen von random eine Zufällige map auswählt oder eine Zufällige aufstellung (TF2) nun habe ich Das problem das es ja sehr schlecht ist wenn in einer Aufstellung jemand doppelt vorkommt.

Da dachte ich mir hmm keine zahl doppelt dürfte ja kein Problem sein.

Mit Array kenne ich mich nicht aus.

Ich wollte nach jedem durchlauf der Schleife das ergebnis in eine Listbox schreiben lassen um das nächste ergebnis damit abzugleichen.

Nur weiß ich nicht wie und vorallem ob man überhaupt mit der Listbox abgleichen kann.

Vielleicht habt ihr ja bessere Vorschläge dafür.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var zufall, anzahl, ergebniss, i, zaehler, cnt:integer;
    found: boolean;
    a: string;
begin
  button2.Visible:= False;
  panel1.Visible:= false;
  panel2.Visible:= True;
  a:= labelededit1.Text;
  zaehler:= 0;
  zufall:= 0;
  anzahl:= strtoint(labelededit13.Text);
  if radiobutton2.Checked = (true) then
    for i := 1 to anzahl do
    begin
{      repeat
        begin
           randomize;}

           zufall:= random(anzahl)+1;
        {end
      until zufall <> ergebniss;
        begin
          ergebniss:= zufall;}

          inc(zaehler);
          if zufall = listbox1.Items[listbox1.ItemIndex] then
            zufall:= random(anzahl)+1
          else
          begin
          case zufall of
            1: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            2: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            3: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            4: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            5: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            6: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            7: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            8: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            9: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            10: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            11: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
            12: memo1.Lines.Add(inttostr(zaehler) + '. Slot: ' + labelededit1.Text);
          end;
        end;
        listbox1.Items.Add(inttostr(zufall));
      end;
  if radiobutton1.Checked = (true) then
    begin
    zufall:= random(anzahl) + 1;
      case zufall of
        1 : memo1.lines.add('Slot: ' + labelededit1.Text);
        2: memo1.lines.add('Slot: ' + labelededit2.Text);
        3: memo1.lines.add('Slot: ' + labelededit3.Text);
        4: memo1.lines.add('Slot: ' + labelededit4.Text);
        5: memo1.lines.add('Slot: ' + labelededit5.Text);
        6: memo1.lines.add('Slot: ' + labelededit6.Text);
        7: memo1.lines.add('Slot: ' + labelededit7.Text);
        8: memo1.lines.add('Slot: ' + labelededit8.Text);
        9: memo1.lines.add('Slot: ' + labelededit9.Text);
        10: memo1.lines.add('Slot: ' + labelededit10.Text);
        11: memo1.lines.add('Slot: ' + labelededit11.Text);
        12: memo1.lines.add('Slot: ' + labelededit12.Text);
      end;
    end;
end;
Weiß nicht ob ich irgendwas Falsch gemacht habe denn ich kenne mich noch nicht so gut mit Delphi aus hatte es erst 1/2 jahr in der Schule.

mfg
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Random ohne doppelte Zahlen

  Alt 2. Okt 2008, 22:53
Hmm, warum machst du das net einfach so, dass du alle Leute in eine Liste schreibst, dann aus dieser Liste einen auswählst und ihn aus der Liste streichst? Dann haste ihn sicher net doppelt...

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Random ohne doppelte Zahlen

  Alt 2. Okt 2008, 23:05
Oder, um Z4ppys Worte ins "Reallife" zu übertragen:
Wie stellst Du sicher, dass von einem Kartenspiel jede Karte nur einmal vergeben wird? Mische den Kartenstapel einmal ordentlich durch und verteile diese dann.
Es existiert auch ein Algorithmus um doppelte Zahlen zu vermeiden; Suchfunktion des Forums benutzen!

Und man nutzt keine VCL-Komponenten zur Datenspeicherung! Dafür gibt es ganz tolle Listenobjekte in Delphi (TStringList, TObjectList, ...)
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
hamburcher
(Gast)

n/a Beiträge
 
#4

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 01:00
Lottozahlen könnten was mit Deinem Problem zu tun haben, zufällige 6 aus 49 ohne Duplikate.

Such doch mal in der DP nach Lottozahlen...

HTH
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 08:56
Stichworte 'Permutation', 'Fisher-Yates' usw.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#6

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 11:22
Oder wenn du es ganz selbst machen möchtest: Ich habe hier eine Möglichkeit als PDF in den Anhang getan. Habe ich aus reiner Langeweile mal schnell mit OpenOffice gemacht.

Mit freundlichen Grüßen,

Valle
Angehängte Dateien
Dateityp: pdf keinedoppeltenzahlen_894.pdf (37,9 KB, 44x aufgerufen)
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 13:57
Also ich hab hier nen code, bei dem man in ~17ms (meine alte 3GHz Monocoremöre ) ein Array mit 100.000 Zufallszahlen ohne Doppelte erstellen kann.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  variablen : array[1..100000] of integer;
  i,zufall : integer;
  start,ende,frequenz,counter : int64;
begin
  randomize;
  QueryPerformanceFrequency(frequenz);
  counter := 0;
  QueryPerformanceCounter(start);
  for i := 1 to high(variablen) do variablen[i] := 0;
  for i := 1 to high(variablen) do
  begin
    repeat
      zufall := random(high(variablen)) + 1;
      inc(counter); //bei 100.000 ca. 1,1 Mio
    until variablen[zufall] = 0;
    variablen[zufall] := i;
  end;
  QueryPerformanceCounter(ende);
{
  memo1.Lines.BeginUpdate;
  for i := 1 to high(variablen) do memo1.Lines.Add(inttostr(variablen[i]));
  memo1.Lines.EndUpdate;
}

  memo1.Lines.Add(floattostr((ende-start)/frequenz)+'s');
  memo1.Lines.Add(inttostr(counter));
end;
Thomas H.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 14:05
Irgendwann wird deine Schleife nicht terminieren. Du kannst das nicht ausschließen, und Du kannst auch nicht vorhersagen, wann es passiert. Aber es *wird* passieren, und dann?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#9

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 14:16
In der Informatiker-Bibel (die große Version: "The Art Of Computer Programming" von Donald E. Knuth) ist beschrieben, wie man eine Folge a(n) bildet, so dass es aussieht, als ob die Zahlen quasi zufällig ausgewählt werden, aber bei n Durchläufen auch wirklich alle n Zahlen erwischt werden.

Leider finde ich das Buch gerade nicht, müsste in Band 3 stehen.

Gruß,
SirTwist
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Random ohne doppelte Zahlen

  Alt 3. Okt 2008, 14:17
hast schon recht, ist aber bei etlichen versuchen nicht passiert.
Man könnte natürlich nen sicherheitszähler einbauen.
Thomas H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz