Losowanie danych z tablic bez powtarzania

0

Witam!
Czy ktoś wie jak wyświetlić losowo jakieś dane z tablicy, aby się
nie powtarzały? Najlepiej w pascalu lub delphi. Próbowałem zrobić
tak: WriteLn(tablica[random(10)]); i to w pętle, ale wtedy
wyświetlenia się powtarzają. Ma ktoś pomysł na jak najszybszy
algorytm losująco-mieszający dane w tablicy???


Michal Kisielewski
mailto: [email protected]

0

Szkoda, że musisz używać tablicy. Wygodniej byłoby użyć zbiorów. Wówczas losujesz element ze zbioru. A potem usuwasz poszczególne elementy.
A jeżelic chcesz od razu z tablicy losować to możesz użyć RandomFrom (w module Math).

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC: #4programmers, warszawa.ircnet.pl (POLNet)

0

randomize;
writeln(tab[random(10)]);

randomize wystarczy wywolac tylko raz w programie, jest to cos w rodzaju generatora liczb pseudolosowych.

--
-=[.SlimY.]=-

0

randomize;
writeln(tab[random(10)]);

randomize wystarczy wywolac tylko raz w programie, jest to cos w rodzaju generatora liczb pseudolosowych.

Tylko, że on losuje z tablicy.
Czyli jak ma np. tablicę:
12 23 564 324 75 13
To chce, żeby mu wylosowało:
23 75 12 13 564 324
Jakąś przypadkową kolejność.

Może zrób tak:
Losuj spośród n liczb (Random(n))
Jeżeli wylosujesz np. 5 element tablicy do dodaj do zbioru 5
(Wylosowane := Wylosowane + [5], lub jeszcze lepiej do tablicy jakiejś tablicy, pod numer 5 znacznik, że wylosowano ten element)
i losuj spośród n-1 liczb (Random(n-1);
Następnie sprawdzasz jaki numer wylosowałeś i zwiększasz tą liczbę o liczbę elementów w zbiorze wylosowanych, ale mniejszych od tej liczby. Wówczas masz element w tablicy, jaki powinieneś wybrać. Itd.

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC: #4programmers, warszawa.ircnet.pl (POLNet)

0

jak wylosujesz to zapisz do tablicy 0 ;]
i jak bedzie 0 to losuj jeszcze raz ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1