Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] kilkakrotne losowanie kilku liczb z tablicy
Forum PHP.pl > Forum > Przedszkole
lukash85
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 wink.gif
barcisz
  1. for ($i=0; $i<$liczba_losowan; $i++) {
  2. // losowanie
  3. }
lukash85
Hehe, dzięki, to samo wcześniej pisałem tylko coś innego jeszcze musiałem schrzanić 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.  
barcisz
  1. $wyniki = $tablica_liczb[$losowanie[$k]];


powinno raczej być tak:

  1. $wyniki[] = $tablica_liczb[$losowanie[$k]];
krzystyn
  1. $suma=0;
  2. for($k=0; $k<$wylosowane; $k++){
  3.  
  4. $losowanie = array_rand($tablica_liczb, $wylosowane);
  5.  
  6. $suma = $suma + $losowanie;
  7. }
lukash85
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... worriedsmiley.gif
krzystyn
dodaj sobie print_r($losowanie); i sprawdz sam
lukash85
wink.gif

No tak, nie ta zmienna, wystarczyło zmienić na
  1. $suma = $suma + $wyniki;
i już wszystko ok, dzięki 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 :



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. }


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.