Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z programem losującym
michat34
post 13.08.2012, 19:48:07
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
qrooel
post 13.08.2012, 19:53:02
Post #2





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

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


W 7. linijce masz przypisanie, a w komentarzu piszesz, że coś tam porównujesz.


--------------------
Strony WWW: http://arscreo.pl
Go to the top of the page
+Quote Post
michat34
post 13.08.2012, 19:54:34
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


fakt, dzięki. ale nadal nie działa
Go to the top of the page
+Quote Post
klocu
post 13.08.2012, 20:15:57
Post #4





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

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


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.
Go to the top of the page
+Quote Post
michat34
post 13.08.2012, 20:31:24
Post #5





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


@up dzieki, przeanalizowalem Twoj skrypt i wszystko chodzi, mozna zamknac

Ten post edytował michat34 14.08.2012, 06:34:44
Go to the top of the page
+Quote Post
pamil
post 13.08.2012, 20:57:18
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 15
Dołączył: 12.08.2012
Skąd: Zabrze

Ostrzeżenie: (10%)
X----


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.
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: 3.05.2024 - 20:37