Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Losowa liczba z wykluczeniem wybranych liczb
-zimix-
post 2.01.2013, 18:00:33
Post #1





Goście







Witam
Mam problem, nie moge sobie poradzic wykonac instrukcji do wygenerowania losowej liczby z wykluczeniem wybranych liczb.
Znam ideea nie moge jej zastosowac. Trzeba jakos sporzadzic instrukcje sprawdzajaca czy wylosowana liczba nie jest np. elementem tablicy wykluczonych liczb po czym jesli nie jest to ok jesli jest to nastepuje kolejne losowanie az do skutku... Jak to zapisac?

Moje aktualne wypociny (dzialaja jedynie gdy w tablicy "c" jest jedna wartosc - choc to moze zbiegokolicznosci ze dziala)...:

  1. <div id="ppp"></div>
  2. var n=document.getElementById('ppp');
  3. //var x=Math.round(Math.random()*8);
  4. var c=[3,7,8]; // liczby wykluczone
  5. n.innerHTML=losowaZwykluczeniem(c);
  6.  
  7. function losowaZwykluczeniem(tablicaWykluczonych)
  8. {
  9. var x=Math.round(Math.random()*8);
  10. for(var i=0;i<tablicaWykluczonych.length;i++)
  11. {
  12. if(tablicaWykluczonych[i]!=x)
  13. {
  14. return x;
  15. }
  16. else
  17. {
  18. x=Math.round(Math.random()*8);
  19. }
  20. }
  21. return x;
  22. }
Go to the top of the page
+Quote Post
Pawel_W
post 2.01.2013, 18:04:10
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


pomyśl jak działa to co napisałeś

losuję liczbę

sprawdzam czy liczba należy do tablicy, jeżeli nie to losuję kolejną i lecę dalej po pętli

zamiast tego powinieneś po każdym losowaniu odpalać pętlę od nowa
Go to the top of the page
+Quote Post
-zimix-
post 2.01.2013, 19:36:29
Post #3





Goście







Nie wiem jak odpalic petle od nowa - na moj rozum wydaje mi sie, ze bym musial w kolko robic warunek w warunku...

  1. <div id="ppp"></div>
  2. <script type="text/javascript">
  3. var n=document.getElementById('ppp');
  4. var tablicaWykluczonych=[3,7,8];
  5. var x=Math.round(Math.random()*8);
  6. for(var i=0;i<9;i++)
  7. {
  8. if(tablicaWykluczonych[i]==x)
  9. {
  10. // i tu petla od nowa..? a potem znowu i znowu...
  11. x=Math.round(Math.random()*8);
  12. n.innerHTML=x;
  13. }
  14. else
  15. {
  16. n.innerHTML=x;
  17. }
  18. }
Go to the top of the page
+Quote Post
kamil4u
post 2.01.2013, 20:29:56
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Jest coś takiego jak continue. Jeszcze będziesz musiał od zmiennej "i" odjąć jeden.


--------------------
Go to the top of the page
+Quote Post
Pawel_W
post 2.01.2013, 21:48:03
Post #5





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(kamil4u @ 2.01.2013, 20:29:56 ) *
Jest coś takiego jak continue. Jeszcze będziesz musiał od zmiennej "i" odjąć jeden.

to jest podejście bardzo naokoło, można przecież tak:
  1. do {
  2. // losowanie liczby
  3. // sprawdzanie, czy należy do tablicy zakazanych liczb
  4. // jeżeli tak to unique=false i przerywamy petle
  5. } while (!unique)
Go to the top of the page
+Quote Post
lobopol
post 2.01.2013, 22:07:04
Post #6





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


Można również napisać tego rodzaju funkcje jeżeli nie losujemy ze zbyt dużego zbioru liczb:
[JAVASCRIPT] pobierz, plaintext
  1. function random() {
  2. var numbers = [1,2,3,5,7,9,0,9];
  3. return numbers[Math.floor(Math.random() * numbers.length)];
  4. }
[JAVASCRIPT] pobierz, plaintext


gdzie w tablicy numbers są liczby którym pozwalamy się losować, ich wielokrotność zwiększa szanse wylosowania takiej samej


--------------------
Go to the top of the page
+Quote Post
kamil4u
post 2.01.2013, 23:49:26
Post #7





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


@Pawel_W: Masz rację. Z tym, że autor tematu jest początkujący i nie chciałem za dużo mieszać. smile.gif

Już nie mówiąc o tym, że tak nie powinniśmy tego robić, bo jest szansa, że nigdy nie wylosujemy liczby. Oczywiście to nie ten poziom problemu i w tym przypadku takie coś w zupełności wystarczy.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 13:07