Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowanie sredniej liczby
miki92
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 29.04.2007

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


Witam moglby mi ktos pomoc w zrobieniu skryptu ktory mialby ustawiona srednia liczbe i ma losowac np od 1-10 i srednia losowan ma wynosic 2 czy mozna taki skrypt zrobic jesli tak to jak jakos nie mam pomyslu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Pride
post
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 11
Dołączył: 31.01.2005
Skąd: Bydgoszcz

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


Szczerze? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) To nie rozumiem co chcesz wykonać.
Ma to być:
1. Skrypt ma się wykonać 2razy?
2. Skrypt ma się wykonać około 2razy (np +/- 1)?
3. Skrypt ma wylosować srednią między 1-10? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
miki92
post
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 29.04.2007

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


ma losowac liczbe od 1-10 ale srednia liczba ktora wybierze ma byc 2 wiec np wybierze 1,5,2,1,1 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ikssde
post
Post #4





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Zeby sobie wylosowac liczbe wystarczy uzyc funkcji rand() - jej pierwszy argument okresla poczatek zakresu, a drugi argument koniec. Tak wiec jesli chcesz wylosowac liczbe z zakresu od 1 do 10 musisz ja wywolac : rand(1, 10);

Tylko w dalszym ciagu nie moge zrozumiec co ty chcesz zrobic... jak to srednia liczba ktora wybierze? Sprobuj pokazac nam to na jakims przykladzie czy bardziej logicznie to przedstaw, bo chyba nie ja jeden nie wiem o co chodzi.
Go to the top of the page
+Quote Post
Piniek
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


Z tego co ja wywnioskowałem on chce wylosować przypuśćmy 5liczb których średnia będzie wynosiła np 2. Według mnie musisz po prostu losować kolejno liczb z przedziału 1-10 za pomocą pętli i sprawdzać czy średnia wylosowanych liczb jest równa 2. Raczej nie jest to optymalny sposób ale taki mi przyszedł do głowy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam
Go to the top of the page
+Quote Post
ikssde
post
Post #6





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Wiesz ze nawet probowalem tak zrobic (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Tylko troche jest to nie wykonalne. Skrypt wykonuje sie baaaaardzo dlugo, a tak poważnie to nawet nie doczekalem sie jego zakończenia (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Mysle ze nie do konca o to mu chodzi. Jak odpisze to moze cos pomozemy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Piniek
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


długość wykonania tego skryptu jest rożna dla każdego przypadku w zależności od wylosowanych liczb być może za pierwszym wykonaniem pętli ich średnia będzie wynosić 2 lecz równie dobrze może to nastąpić po 100 wykonaniach pętli dlatego mówiłem ze ten sposób nie jest optymalny.


EdIt:
: Pytanie do autora tematu w jakim celu ci to potrzebne może da się to załatwić w inny sposób.
Go to the top of the page
+Quote Post
ikssde
post
Post #8





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Równie dobrze moze nie nastapic nigdy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Zreszta nie widze potrzeby stosowania czegos takiego... no ale przeciez lubimy sobie utrudniac zycie ;p
Go to the top of the page
+Quote Post
Black-Berry
post
Post #9





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


heh. taki skrypt nie wykona się nigdy bo kolejne losowania będą dążyły do 5 a nie 2. Żeby napisac taki skrypt należy losować małą ilośc liczb np <10 i powtażać losowanie za każdym razem gdy skrypt przekroczy 10 losowań. (pętla w pętli).
Go to the top of the page
+Quote Post
elemek
post
Post #10





Grupa: Zarejestrowani
Postów: 71
Pomógł: 24
Dołączył: 14.08.2008

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


  1. <?php
  2. /**
  3.  * Klasa do oszukanego ;) losowania :)
  4.  * @author ElemeK
  5.  */
  6. class CheatRand {
  7. protected $n = 0;
  8. protected $sum = 0;
  9. protected $srednia;
  10. protected $min;
  11. protected $max;
  12. protected $p;
  13.  
  14. /**
  15.  * Tworzymy nowy obiekt losujący.
  16.  *
  17.  * @param int $min dolny przedział zakresu losowania
  18.  * @param int $max górny przedział zakresu losowania
  19.  * @param int $srednia wartość oczekiwana :)
  20.  */
  21. public function __construct($min, $max, $srednia) {
  22. $this -> srednia = $srednia;
  23. $this -> min = $min;
  24. $this -> max = $max;
  25.  
  26. $range = $max - $min;
  27. $sp = $srednia - $min;
  28. if ($srednia > $range/2) {
  29. $this -> p = 1 - 1 / ($range / ($range - $srednia));
  30. } else {
  31. $this -> p = 1 / ($range / $srednia);
  32. }
  33. }
  34.  
  35. /**
  36.  * Losowanie wartości z przedziału zadanego przy tworzeniu obiektu.
  37.  *
  38.  * @return int losowa wartość z zadanego przedziału.
  39.  */
  40. public function rand() {
  41. $this -> n++;
  42. if (rand(0,1024)/1024 > $this -> p) {
  43. $x = rand($this -> min, $this -> srednia);
  44. } else {
  45. $x = rand($this -> srednia, $this -> max);
  46. }
  47. $this -> sum += $x;
  48. return $x;
  49. }
  50.  
  51. /**
  52.  * Aktualna wartość średnia od początku losowań.
  53.  *
  54.  * @return float
  55.  */
  56. public function avg() {
  57. return $this -> sum / $this -> n;
  58. }
  59. }
  60.  
  61. /* Przykład zastosowania */
  62.  
  63. /* Nowy obiekt oszukanego losowania :) */
  64. $rnd = new CheatRand($od = 1, $do = 10, $srednia = 2);
  65.  
  66. /* drukuj sto wartości losowych. */
  67. for ($i = 0; $i < 100; $i++) {
  68. echo "{$rnd -> rand()}\n"; 
  69. }
  70.  
  71. /* sprawdź wartość średnią */
  72. echo "srednia: {$rnd -> avg()}\n"; 
  73. ?>


Ten post edytował elemek 24.08.2008, 12:49:10
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: 22.08.2025 - 19:57