Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z programem losującym
Forum PHP.pl > Forum > Przedszkole
michat34
napisałem program, który losuje 8 liczb z przedziału 1-49.

  1. <?php
  2. function sprawdzenie ()
  3. {
  4. $powtorzenie = false;
  5. while ($i !== 0)
  6. {
  7. if ($tablica[$i] = $losowa) // jesli nowa wylosowana liczba bedzie juz w tablicy
  8. {
  9. $powtorzenie = true; // to powtorzenie przyjmuje postac prawda
  10. }
  11. --$i;
  12. }
  13. }
  14.  
  15. for ($i=0;$i!==8;++$i)
  16. {
  17. do
  18. {
  19. $losowa = rand(1,49); // losowanie nowej liczby i sprawdzanie jej do skutku
  20. sprawdzenie();
  21. } while ($powtorzenie == false);
  22. $tablica[$i] = $losowa;
  23. }
  24. ?>


niestety jak sie domyslacie nie działa. maximum time execution 12 sec. gdzie w skrypcie popelnilem blad? sprawdzalem juz kilka opcji ale ciagle nie działa wiec pisze tutaj. moze nalezy zreferowac zmienna $powtorzenie?
qrooel
W 7. linijce masz przypisanie, a w komentarzu piszesz, że coś tam porównujesz.
michat34
fakt, dzięki. ale nadal nie działa
klocu
Generalnie to średnio będzie działać bo:
zasięg zmiennych globalny i wewnątrz funkcji to nie to samo; w związku z tym
Kod
while ($powtorzenie == false)
nie będzie widzieć zmiennej modyfikowanej na poziomie funkcji.

Zaproponowane rozwiązanie jest mocno nieoptymalne - dlaczego?
Za każdym razem, w zamyśle, skanujesz tablicę w poszukiwaniu powtarzalnika.
Aż zrobiłem sobie takie zadanko w ramach małego konkursu - w ile linii uda mi się upchnąć takiego małego lottomaniaka.

  1. $kaseta = array();
  2.  
  3. for($i=0; $i<8; ++$i)
  4. {
  5. $los = rand(1,49);
  6. if(!in_array($los, $kaseta)) array_push($kaseta, $los); else --$i;
  7. }
  8.  
  9. sort($kaseta);
  10. var_dump($kaseta);


Na upartego 4 linie kodu, nie licząc nawiasów, blanków itd.
michat34
@up dzieki, przeanalizowalem Twoj skrypt i wszystko chodzi, mozna zamknac
pamil
Wiesz może dlaczego takie błędy trudno rozwiązać? Nikt nie pokazuje błędów typu E_NOTICE (dostałbyś "undefined variable"), a potem płacz i zgrzytanie zębów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.