und nochmal Hi.
Natürlich hat "Ratte" recht, es muss Random(30) lauten..ich werde wohl alt...
Hier exemplarisch meine Lösung mit der Stringlist (die eigentlich eher für Dateinamen gedacht war)
Damit ich im Test auch etwas sehen konnte, habe ich eine Listbox genommen, etwas nichtvisuelles geht aber natürlich auch. Hier sind es sogar zwei. Eine mit den Vorgabewerten und eine mit dem Ergebnis.
Delphi-Quellcode:
procedure TForm1.Button_startClick(Sender: TObject);
var
i :integer;
begin
// die Maximale Anzahl wird gesetzt
anzahl := 30;
// die Vorgabeliste wird geleert
listbox_vorgabe.Items.Clear;
// die Schleife füllt die Liste mit den möglichen Werten
// in diesem Fall einfach Zahlen
i := 1;
for i := 1 to anzahl do
begin;
listbox_vorgabe.Items.Append(inttostr(i));
end;
// die Ausgabeliste wird geleert
listbox_ausgabe.Items.Clear;
randomize;
// in der Vorgabeliste wird ein beliebiges Item gewählt, in die Ausgabeliste angehängt
// und in der Vorgabeliste gelöscht bis keine Items mehr da sind
while listbox_vorgabe.Items.Count > 0 do
begin;
zufallszahl := random(listbox_vorgabe.Items.Count);
listbox_ausgabe.Items.Append(listbox_vorgabe.Items.Strings[zufallszahl]);
listbox_vorgabe.Items.Delete(zufallszahl);
end;
//nun enthält die Vorgabeliste keine Items mehr
//und die Ausgabeliste eine zufällige Reihenfolge der Items
end;
Ggf. ist die Lösung nicht elegant, aber sie sollte gehen.