gutefrage.net, die Ratgeber Community
Login   |  Registrieren   |  Forum |  Richtlinien & FAQ

Delphi Problem

gefragt von rajaxx am 29.07.2009 um 20:36 Uhr

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:

                         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?

Frage beantworten

Hier finden Sie weitere Fragen zu den Themen:

informatik x 945 programmieren x 804 programmierung x 401 delphi x 54

jairohmsford
beantwortet von jairohmsford am 30. Juli 2009 12:38
1x
Die Antwort ist hilfreich? Dann klick mich!

Nein, random und randomize arbeiten in Delphi einwandfrei. Dein Programm würde prinzipiell seine Aufgabe erfüllen.
Dein Problem ist, dass du die ermittelten Zufallszahlen in einem String abspeicherst und diesen String auf das Vorhandensein einer Zahl absuchst.
Ich weiß nicht genau, welches Zeichen du zum Trennen benutzt (&#039), aber der Fehler liegt wohl einfach darin, dass mit jeder zweistelligen Zahl ja auch bis zu zwei einstellige Zahlen in deinem String gespeichert werden.
Nimm einmal an, random liefert dir die Zahl 25. Dann wird deine Suche über pos auch dann fündig, wenn du beim nächsten Mal eine 2 oder eine 5 erhältst, obwohl diese beiden Zahlen noch gar nicht im String enthalten sind.
Eine Lösung wäre es z.B., die Zahlen grundsätzlich 2stellig (mit evtl. führender Null) abzuspeichern und natürlich auch abzufragen.
Einfacher scheint es mir aber zu sein, wenn du statt eines Strings eine Menge (set) benutzt. Dann brauchst du auch keinen Trenner mehr.

Kommentar von rajaxx am 31. Juli 2009 20:54

vielen dank für die antwort! ich glaube, ich suche lieber im string nach "<leerzeichen>zahl" statt nach "zahl"!


saarlodri
beantwortet von saarlodri am 30. Juli 2009 10:53
0x
Die Antwort ist hilfreich? Dann klick mich!

Ich denke mal es wird daran liegen, dass die Randomizefunktion oft gleiche Zahlen liefert, d.h. wenn du 21 Zahlen schon hast, d.h. nur noch 5 überhaupt den Programmfluss beeinflussen, dann kann dies unter Umständen lange dauern, da die Randomizefunktion immer wieder schon vorhandene Zahlen ausspuckt.

Hoffe diese Erklärung hilft dir. Es liegt also mit großer Wahrscheinlichkeit an der Random-Funktion.


Dory1
beantwortet von Dory1 am 29. Juli 2009 20:41
0x
Die Antwort ist hilfreich? Dann klick mich!

die randomize funktion von delphi is einfach nur fürn ar*ch.. aber nicht nur die. das is auch in anderen programmiersprachen assig gelöst


Frage beantworten

Verwandte Fragen

Verwandte Fragen

Noch nicht die richtige Antwort? Dann hier in allen Fragen und Tipps suchen:




Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Bitte lesen Sie hierzu auch unsere Rechtlichen Hinweise.