2

Delphi Problem

Frage von rajaxx rajaxx

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?

Fragen zu gleichen Themen finden

Antworten (3)

  • 1
    Antwort von jairohmsford jairohmsford

    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 rajaxxrajaxx

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

  • 0
    Antwort von saarlodri saarlodri

    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.

  • 0
    Antwort von Dory1 Dory1

    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

Diese Frage

Verwandte Fragen

Noch nicht den richtigen Rat gefunden?

Einfach und schnell viele hilfreiche Ratschläge von Deutschlands aktivster Ratgeber-Community erhalten!

Einfach und schnell einen Tipp erstellen und Ihren guten Rat mit anderen teilen!

Einfach und schnell ein Video hochladen und anschaulichen Rat an alle geben!

Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Rechtliche Hinweise finden Sie hier.