AGB  ·  Datenschutz  ·  Impressum  







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

Zufallszahlen von 1-26 generieren

Ein Thema von Delphi_gn7 · begonnen am 29. Jul 2009 · letzter Beitrag vom 30. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#1

Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:40
Hi,
ich möchte die Zahlen von 1-26 (jede einmal) in zufälliger reihenfolge in ein array speichern und habe dafür eine repeat until schleife geschrieben:

Delphi-Quellcode:
repeat
rnd:=random(25)+1;//zufallszahlerzeugen
if (pos(IntToStr(rnd),s)=0) // fügt zufallszahl dem array hinzu, falls diese zufallszahl bis jetzt noch nicht verwendet wurde
then begin
      a[counter]:=rnd;
      writeln(counter,': ',rnd);
      s:=s+IntToStr(rnd)+' '; // zufallszahl in einem string abspeichern, damit sie nicht nochmal ins array geschrieben wird
      counter:=counter+1; // wenn neue zufallszahl dem array hinzugefügt wurde, wird der zähler erhöht
      end;
until (counter=26);
allerdings schafft es die schleife nicht bis über 17-21 zufallszahlen. woran kann das liegen? oder dauert es nur unheimlich lange, bis die restlichen, noch nicht eingefügten zufallszahlen berechnet wurden?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:46
Hallo

Schreibe die Zahlen 1-26 in ein Array und "mische" es.
Thomas
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#3

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:49
Danke für die Antwort, aber wie geht das? da muss ich doch auch sicher mit zufall arbeiten
Andreas
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:49
Ich würde eine Stringlist nehmen und die Zahlen dort reinschreiben.
Wenn du mit (pos(IntToStr(rnd),s)=0) eine 1 suchst, wirst du die in "1", aber auch in "11" finden.
Wenn du das mit einer Stringlist machst, dann sollte das eindeutiger sein
if sl.indexof(rnd)=-1 dann einfügen ansonsten weitersuchen
Matthias
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#5

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:50
ich hab noch nie mit stringlists gearbeitet... wie wärs denn, wenn ich nach rnd+' ' suche?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:52
Zitat von Delphi_gn7:
Danke für die Antwort, aber wie geht das?
Ein Beispiel findest du hier (delphi.about.com)
Thomas
  Mit Zitat antworten Zitat
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#7

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 20:55
Oder du mischt es so: http://www.delphipraxis.net/internal...=998529#998529

Aber das sollte eigentlich nicht so schwer sein, könnte man sich auch fast selbst überlegen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 21:01
Delphi-Quellcode:
var
  a : array[1..26] of char;
....
// initialisieren
for i:=1 to 26 do
  a[i]:= ' ';

counter :=0;

repeat
  // rnd := random(25)+1;
  // Aus der Hilfe: Random returns a random number within the range 0 <= X < Range.
  // bei Dir wird 26 nie erreicht.
  rnd:=random(26)+1;

  if a[rnd] <> 'xthen
    begin
      a[rnd]:='x';
      inc(counter,1);
    end;
until (counter=26);
// Ausgabe
for i:=1 to 26 do
  write(format('%3d %s',[i,a[i]]));
writeLn;
..funktioniert recht fix

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 21:05
[OT]
Hallo auch wenn das nicht gerade zu deinem Lösungsansatz gehört, ist noch ein kleiner Fehler drin (Habs ebend nur schnell überflogen, hoffe kein anderer hat dazu schon was gepostet).

Zitat von Delphi_gn7:
Hi,ich möchte die Zahlen von 1-26 (jede einmal)

Delphi-Quellcode:
repeat
rnd:=random(25)+1; <-- hiermit erzeugst du aber nur Zahlen von 1 bis 25 erzeugen, da random(25) 0..24 abdeckt plus 1
...
until (counter=26);
einfach die 25 in eine 26 ändern.

MfG
BAMatze
[/OT]

Edit: Mist Klaus war ebend schneller und hat den Fehler im Quellcode schon verbessert
2. Account Sero
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Zufallszahlen von 1-26 generieren

  Alt 29. Jul 2009, 21:07
Eine StringList ist zwar als Container nicht optimal... etwas oversized, aber wenn man schon munter am Code posten ist
Delphi-Quellcode:
procedure ShakeStringList(aStringList : TStringList);
var
  i, Count : Integer;
begin
  Count := aStringList.Count;
  for i := 0 to Count -1 do
    aStringList.Move(Random(Count), Random(Count));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  StringList : TStringList;
  i : Integer;
begin
  Randomize;
  StringList := TStringList.Create;
  try
    for i := 1 to 26 do
      StringList.Add(IntToStr(i));
    ShakeStringList(StringList);

    // Hier wird das Ergebnis in einer ListBox angezeigt
    ListBox1.Items.Assign(StringList);
  finally
    StringList.Free;
  end;
end;
  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 12:40 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