Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] kilkakrotne losowanie kilku liczb z tablicy
lukash85
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.04.2011

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


Cześć!

Mam problem z powtórnym losowaniem kilku liczb z tej samej tablicy... W skrócie - na pierwszej stronie wpisujemy zakres liczb, który następnie zamieniany jest na tablicę z której losowane są liczby w celu dalszych obliczeń statystycznych:

  1. $liczby = $_POST['liczby']; // zbior
  2. $wylosowane = $_POST['wylosowane']; //liczba losowanych ze zbioru elementow
  3. $liczba_losowan = $_POST['liczba_losowan']; //liczba losowan
  4.  
  5.  
  6. $tablica_liczb = (explode("\n", $liczby));
  7. $zakres = count($tablica_liczb);
  8. echo "Ilość wprowadzonych liczb = ".$zakres."<br />";
  9. for($i=0; $i<$zakres; $i++){
  10. echo "<strong> ".$tablica_liczb[$i]."; </strong>";
  11. }
  12. echo "</br /><br />Wyniki losowania: </br />";
  13.  
  14. reset($tablica_liczb);
  15.  
  16.  
  17. for($k=0; $k<$wylosowane; $k++){
  18.  
  19. $losowanie = array_rand($tablica_liczb, $wylosowane);
  20.  
  21. echo $tablica_liczb[$losowanie[$k]]." ; ";
  22.  
  23. }
  24.  


I ten kod działa, tylko że zwraca mi jedno losowanie, a ja chciałbym dostać kilka losowań (zgodnie z wprowadzonym parametrem $liczba_losowan) z zadaną liczbą wyników ($wylosowane)... Wydawało mi się to proste, myślałem że wystarczy zrobić pętle w pętli, albo tablicy wielowymiarową... ale kompletnie nic mi nie wychodzi.... byłbym bardzo wdzięczny za podpowiedzi (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
barcisz
post
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 12
Dołączył: 8.04.2011

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


  1. for ($i=0; $i<$liczba_losowan; $i++) {
  2. // losowanie
  3. }
Go to the top of the page
+Quote Post
lukash85
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.04.2011

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


Hehe, dzięki, to samo wcześniej pisałem tylko coś innego jeszcze musiałem schrzanić (IMG:style_emoticons/default/smile.gif)

Ale mam kolejny problem, chciałbym teraz zsumować wylosowane liczby dla każdej serii, np po to aby później policzyć średnią, odchylenie etc
Usiłuje jakoś wrzucić wylosowane liczby do tablicy aby później podziałać na nią array_sum, ale coś nie wychodzi, ewentualnie w tablicy wyrzuca mi tylko ostatni wynik z pętli.

To jedna z moich ostatnich, jeszcze gorszych prób:

  1. for($j=1; $j<=$liczba_losowan; $j++){
  2.  
  3. echo "<br />Losowanie nr: ".$j;
  4.  
  5. for($k=0; $k<$wylosowane; $k++){
  6.  
  7. $losowanie = array_rand($tablica_liczb, $wylosowane);
  8.  
  9. $wyniki = $tablica_liczb[$losowanie[$k]];
  10.  
  11.  
  12. echo "<br />".$wyniki;
  13.  
  14. }
  15.  
  16. $tablica_wynikow = array($wyniki);
  17. $suma = array_sum($tablica_wynikow);
  18.  
  19. echo "Suma: ".$suma;
  20.  
  21. }
  22.  
Go to the top of the page
+Quote Post
barcisz
post
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 12
Dołączył: 8.04.2011

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


  1. $wyniki = $tablica_liczb[$losowanie[$k]];


powinno raczej być tak:

  1. $wyniki[] = $tablica_liczb[$losowanie[$k]];
Go to the top of the page
+Quote Post
krzystyn
post
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 2.04.2011

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


  1. $suma=0;
  2. for($k=0; $k<$wylosowane; $k++){
  3.  
  4. $losowanie = array_rand($tablica_liczb, $wylosowane);
  5.  
  6. $suma = $suma + $losowanie;
  7. }


Ten post edytował krzystyn 11.04.2011, 18:24:01
Go to the top of the page
+Quote Post
lukash85
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.04.2011

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


Dzięki, za pomoc ale ten drugi sposób, chociaż bardziej do mnie przemawia (bo nie trzeba dłubać w kolejne tablicy) to nie działa "Unsupported operand types", tak jakby któraś ze zmiennych nie była numeryczna... (IMG:style_emoticons/default/worriedsmiley.gif)
Go to the top of the page
+Quote Post
krzystyn
post
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 2.04.2011

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


dodaj sobie print_r($losowanie); i sprawdz sam
Go to the top of the page
+Quote Post
lukash85
post
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.04.2011

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


(IMG:style_emoticons/default/wink.gif)

No tak, nie ta zmienna, wystarczyło zmienić na
  1. $suma = $suma + $wyniki;
i już wszystko ok, dzięki (IMG:style_emoticons/default/wink.gif)

uhh jeszcze trochę potruje... dopisałem trochę do tego skryptu, dorzuciłem m.in liczenie średniej i chciałem wyznaczyć odchylenie standardowe, na razie konkretnie same kwadraty różnicy z sumy w liczniku :

(IMG:http://img194.imageshack.us/img194/6521/odchys.jpg)

Uploaded with ImageShack.us

To nie wychodzi i wiem jaki jest powód, tylko problem z rozwiązaniem go w skrypcie;p

samo działanie $kwadrat_roznicy = pow(($wyniki-$srednia), 2); umiejscowione w tej jednej pętli jest bez sensu, bo średnia liczona z sumy w pętli daje dobry wynik dopiero po jej zakończeniu, czyli jak losuje dajmy na to 8 elementów, to dopiero kwadrat różnicy dla ósmego elementu da poprawny wynik.
Próbowałem zastosować jakiś warunek logiczny dla tej średniej, tak żeby liczona była dla całego wylosowanego zbioru, ewentualnie wpakować kolejną pętle ale bez rezultatu. Zastanawiam się czy w ogóle mogę to zrobić bez definiowania funkcji bo jeszcze nie do końca się w nie zagłębiałem...

  1. for($j=1; $j<=$liczba_losowan; $j++){
  2.  
  3. echo "<br /><br />Losowanie nr: ".$j;
  4.  
  5. $suma = 0;
  6. $srednia = 0;
  7. $kwadrat_roznicy = 0;
  8.  
  9. for($k=0; $k<$wylosowane; $k++){
  10.  
  11. $losowanie = array_rand($tablica_liczb, $wylosowane);
  12.  
  13. $wyniki = $tablica_liczb[$losowanie[$k]];
  14.  
  15. $suma = $suma + $wyniki;
  16.  
  17. $srednia = $suma/$wylosowane;
  18.  
  19. $kwadrat_roznicy = pow(($wyniki-$srednia), 2);
  20.  
  21. echo "<br />kwadrat sumy".$kwadrat_roznicy;
  22.  
  23. echo "<br />".$wyniki;
  24.  
  25. }
  26.  
  27. echo "<br />Suma = ".$suma." || Srednia = ".$srednia;
  28.  
  29. }


Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 16:07