Ĺadny brzuch
Chodzi mi o to, jak można wymieszac między sobą zawartość 24 editów, zeby to mieszanie było jak najbardziej przypadkowe i zeby wszystko opierało sie na ruchach myszką.
Zakładając ze mamy 4 edity a w nich
edit1 = asd
edit2 = bxc
edit3 = ert
edit4 = poi
kazdy musi zostac wymieniony z innym przy kazdym ruchu myszką. Jak o tym myśle mam mętlik w głowie, mam nadzieje ze mi go jakoś rozjasnicie
Użytkownik Crunch edytował ten post 20 sierpień 2006, 22:41
Chodzi mi o to, jak można wymieszac między sobą zawartość 24 editów, zeby to mieszanie było jak najbardziej przypadkowe i zeby wszystko opierało sie na ruchach myszką.
w jakim sensie wymieszac ... pozamieniac miejscami losowo?
wczytaj zawartosc wszystkich editow do tablicy, a nastepnie losowo odczytuj z niej pozycje wstawiajac je do edita i usuwajac po sobie ;)
w jakim sensie wymieszac ... pozamieniac miejscami losowo?
wczytaj zawartosc wszystkich editow do tablicy, a nastepnie losowo odczytuj z niej pozycje wstawiajac je do edita i usuwajac po sobie ;)
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach
Użytkownik Crunch edytował ten post 20 sierpień 2006, 22:44
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach Wystarczy sprawdzać, czy już się z danego indeksu odczytało zawartość.
Wystarczy sprawdzać, czy już się z danego indeksu odczytało zawartość.
Tez próbowałem :D Zapisywałem wylosowane liczby w osobnej tablicy i przed kazdym kolejnym odczytem sprawdzałem czy jej tam aby przypadkiem nie ma, ale cos za bardzo namieszałem, bo w pewnym momencie tylko 2 edity zamienialy sie miejscami :huh:
Na pewno znajdziesz coś takiego jak tablica dynamiczna (w dokumentacji). Taka tablica pozwoli na usunięcie elementu ze środka po tym jak go wykorzystasz. A potem losujesz liczbę, dzielisz ją modulo długość tablicy dynamicznej i pobierasz ten element, i znów go usuwasz. Wtedy nie masz możliwości, że coś się powtórzy.
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach
To zrob tak:
Wczytaj zawartosc wszystkich editow do tablicy, po wczytaniu tablica ma rozmiar n.
Wylosuj element z tablicy o n elementach i wstaw go do pierwszego edita.
Wylosowany element zamien z n tym elementem w tablicy.
Wylosuj drugi element z tablicy o n-1 elementach i wstaw go do drugiego edita.
Wylosowany element zamien z n-1 elementem w tablicy.
Powtarzaj losowanie i zamienianie do momentu gdy rozmiar tablicy bedzie rowny 1.
Na pewno znajdziesz coś takiego jak tablica dynamiczna (w dokumentacji). Taka tablica pozwoli na usunięcie elementu ze środka po tym jak go wykorzystasz. A potem losujesz liczbę, dzielisz ją modulo długość tablicy dynamicznej i pobierasz ten element, i znów go usuwasz. Wtedy nie masz możliwości, że coś się powtórzy.
A jak ta liczba będzie wskazywac na pusty index ? Czy taka tablica sie sama przeindexuje po usunięciu elementu czy będe to musiał zrobić ręcznie ?
ok, juz widze ze wszystko sie opiera o setlenght, zobacze co sie da zrobic
Użytkownik Crunch edytował ten post 20 sierpień 2006, 23:11
Zakładam, że się sama przeindeksuje, tak są zwykle konstruowane DynamicArray. Mają metodę pozwalającą usunąć element o zadanym indeksie i to tak, żeby nie został pusty. Popatrz w helpie do Delphi.
Zakładam, że się sama przeindeksuje, tak są zwykle konstruowane DynamicArray. Mają metodę pozwalającą usunąć element o zadanym indeksie i to tak, żeby nie został pusty. Popatrz w helpie do Delphi.
Cos to dzielenie modulo nie dziala jak trzeba :\ Jest po dwa albo więcej takich samych wpisów w kilku editach. Albo ja robie coś nie tak.
randomize(); a := random(dlugosc); wylosowana := a mod dlugosc; //dlugosc = wielkosc tablicy w tym wypadku 24 edit1.Text := tablica[wylosowana]; dec(dlugosc); SetLength(tablica, dlugosc); // zmiejsza tablice o 1;
tak robie z kazdym editem
Użytkownik Crunch edytował ten post 20 sierpień 2006, 23:46
pseudokod:
var i, x: integer; l: TStringList; begin l:= TStringlist.create(); for i:= 0 to [liczba editow] do l.add([edit[i]].text); while l.count > -1 do begin x:= [losuj_pozycje_z_listy; [losowy_pusty_edit].text := l[x]; l.delete(x); end;
Zrob tak:
randomize(); a := random(dlugosc); edit1.Text := tablica[a]; tablica[a] := tablica[dlugosc - 1]; dec(dlugosc);
i tak dla kazdego Edita.
To co Ty robiles nie ma sensu bo:
a mod dlugosc da Ci zawsze a.
wyjmujesz element z srodka, a kasujesz element z konca.
Użytkownik osiara edytował ten post 20 sierpień 2006, 23:58
To co Ty robiles nie ma sensu bo:
Domyslam sie ;) Działa jak sie patrzy :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Zakładając ze mamy 4 edity a w nich
edit1 = asd
edit2 = bxc
edit3 = ert
edit4 = poi
kazdy musi zostac wymieniony z innym przy kazdym ruchu myszką. Jak o tym myśle mam mętlik w głowie, mam nadzieje ze mi go jakoś rozjasnicie
Użytkownik Crunch edytował ten post 20 sierpień 2006, 22:41
Chodzi mi o to, jak można wymieszac między sobą zawartość 24 editów, zeby to mieszanie było jak najbardziej przypadkowe i zeby wszystko opierało sie na ruchach myszką.
w jakim sensie wymieszac ... pozamieniac miejscami losowo?
wczytaj zawartosc wszystkich editow do tablicy, a nastepnie losowo odczytuj z niej pozycje wstawiajac je do edita i usuwajac po sobie ;)
w jakim sensie wymieszac ... pozamieniac miejscami losowo?
wczytaj zawartosc wszystkich editow do tablicy, a nastepnie losowo odczytuj z niej pozycje wstawiajac je do edita i usuwajac po sobie ;)
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach
Użytkownik Crunch edytował ten post 20 sierpień 2006, 22:44
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach Wystarczy sprawdzać, czy już się z danego indeksu odczytało zawartość.
Wystarczy sprawdzać, czy już się z danego indeksu odczytało zawartość.
Tez próbowałem :D Zapisywałem wylosowane liczby w osobnej tablicy i przed kazdym kolejnym odczytem sprawdzałem czy jej tam aby przypadkiem nie ma, ale cos za bardzo namieszałem, bo w pewnym momencie tylko 2 edity zamienialy sie miejscami :huh:
Na pewno znajdziesz coś takiego jak tablica dynamiczna (w dokumentacji). Taka tablica pozwoli na usunięcie elementu ze środka po tym jak go wykorzystasz. A potem losujesz liczbę, dzielisz ją modulo długość tablicy dynamicznej i pobierasz ten element, i znów go usuwasz. Wtedy nie masz możliwości, że coś się powtórzy.
Hmm tak juz próbowałem, ale pozostaje kwestia tego, ze uzywając liczby losowej "a", która będzie indexem spod którego mamy odczytac, moze byc kilkakrotnie taka sama, a byc nie moze, bo nie moze byc dwóch takich samych wpisów w 2 editach
To zrob tak:
Wczytaj zawartosc wszystkich editow do tablicy, po wczytaniu tablica ma rozmiar n.
Wylosuj element z tablicy o n elementach i wstaw go do pierwszego edita.
Wylosowany element zamien z n tym elementem w tablicy.
Wylosuj drugi element z tablicy o n-1 elementach i wstaw go do drugiego edita.
Wylosowany element zamien z n-1 elementem w tablicy.
Powtarzaj losowanie i zamienianie do momentu gdy rozmiar tablicy bedzie rowny 1.
Na pewno znajdziesz coś takiego jak tablica dynamiczna (w dokumentacji). Taka tablica pozwoli na usunięcie elementu ze środka po tym jak go wykorzystasz. A potem losujesz liczbę, dzielisz ją modulo długość tablicy dynamicznej i pobierasz ten element, i znów go usuwasz. Wtedy nie masz możliwości, że coś się powtórzy.
A jak ta liczba będzie wskazywac na pusty index ? Czy taka tablica sie sama przeindexuje po usunięciu elementu czy będe to musiał zrobić ręcznie ?
ok, juz widze ze wszystko sie opiera o setlenght, zobacze co sie da zrobic
Użytkownik Crunch edytował ten post 20 sierpień 2006, 23:11
Zakładam, że się sama przeindeksuje, tak są zwykle konstruowane DynamicArray. Mają metodę pozwalającą usunąć element o zadanym indeksie i to tak, żeby nie został pusty. Popatrz w helpie do Delphi.
Zakładam, że się sama przeindeksuje, tak są zwykle konstruowane DynamicArray. Mają metodę pozwalającą usunąć element o zadanym indeksie i to tak, żeby nie został pusty. Popatrz w helpie do Delphi.
Cos to dzielenie modulo nie dziala jak trzeba :\ Jest po dwa albo więcej takich samych wpisów w kilku editach. Albo ja robie coś nie tak.
randomize(); a := random(dlugosc); wylosowana := a mod dlugosc; //dlugosc = wielkosc tablicy w tym wypadku 24 edit1.Text := tablica[wylosowana]; dec(dlugosc); SetLength(tablica, dlugosc); // zmiejsza tablice o 1;
tak robie z kazdym editem
Użytkownik Crunch edytował ten post 20 sierpień 2006, 23:46
pseudokod:
var i, x: integer; l: TStringList; begin l:= TStringlist.create(); for i:= 0 to [liczba editow] do l.add([edit[i]].text); while l.count > -1 do begin x:= [losuj_pozycje_z_listy; [losowy_pusty_edit].text := l[x]; l.delete(x); end;
Zrob tak:
randomize(); a := random(dlugosc); edit1.Text := tablica[a]; tablica[a] := tablica[dlugosc - 1]; dec(dlugosc);
i tak dla kazdego Edita.
To co Ty robiles nie ma sensu bo:
a mod dlugosc da Ci zawsze a.
wyjmujesz element z srodka, a kasujesz element z konca.
Użytkownik osiara edytował ten post 20 sierpień 2006, 23:58
To co Ty robiles nie ma sensu bo:
Domyslam sie ;) Działa jak sie patrzy :)