Moin,
du möchtest nach der Ziehung einer Zufallszahl die nachfolgenden Zahlen im Vektor
werte aufrücken lassen. Die Zuweisungen innerhalb deiner WHILE-Schleife sind in Ordnung, aber die Bedingung im Schleifenkopf stimmt nicht, da musst du noch dran feilen: Zuerst solltest du dir die Position der aktuellen Zufallszahl merken, dann alle nachfolgenden Werte um eins nach vorne verschieben. Wenn du dir die Zufallszahl nicht merkst, dann brauchst du eine Schleife über den ganzen Vektor, in der zuerst die Stelle anhand des Wertes gesucht und ab dort jeder Wert verschoben wird.
In meinem Beitrag #4 habe ich dir einen Ansatz beschrieben, bei dem du auf das mehrfache Verschieben und die Verkürzung des Vorratsvektors und die damit einhergehende Neuzordnung des Speicherbereiches verzichten kannst:
Delphi-Quellcode:
function Ziehung(const Anzahl, Gesamt: Integer): {Types.}TIntegerDynArray;
var
i, iRandom: integer;
Vorrat: TIntegerDynArray;
begin
SetLength(Vorrat, Gesamt); // Vorrat dimensionieren
for i := Low(Vorrat) to High(Vorrat) do
Vorrat[i] := Succ(i); // Vektor initialisieren
SetLength(Result, Anzahl); // Ergebnis dimensionieren
for i := Low(Result) to High(Result) do
begin // Soviele Zahlen übernehmen wie nötig
iRandom := Random(Gesamt - i); // Zufällige Position auswählen
Result[i] := Vorrat[iRandom]; // Zahl an dieser Position übernehmen
Vorrat[iRandom] := Vorrat[High(Vorrat) - i]; // Letzte Zahl an diese Position verschieben
end;
BubbleSort(Result); // Aufsteigende Sortierung
end;
Freundliche Grüße