Autor | Zpráva | ||
---|---|---|---|
malek-amater Profil * |
#1 · Zasláno: 5. 7. 2005, 09:59:32
ktore sa opakuje, nieaky script ktorym ziskam tri nahodne cisla od 1-6, napise mi ho niekto:) pleas, ja sa to len ucim:)
a mohli byste mi poradit aj nieaku najvhodnejsiu knizku o php pre zaciatocnika. |
||
michaelkiller Profil |
#2 · Zasláno: 5. 7. 2005, 10:50:57
skus si pozriet funckiu rand .
|
||
malek-amater Profil * |
#3 · Zasláno: 5. 7. 2005, 11:30:42
<?
$min = 1 $max = 6 function fn_arrRandom($min, $max){ // vygeneruje 3 cisla $iRandom1 = rand($min, $max); $iRandom2 = rand($min, $max); $iRandom3 = rand($min, $max); // compare them if ($iRandom1 !== $iRandom2){ // the numbers are different, great } else { // the numbers are equal, try again return fn_arrRandom($min, $max); } return array($iRandom1, $iRandom2); } print_r(fn_arrRandom(3, 13)); echo $iRandom1 $iRandom2 $iRandom3; ?> :)))) ako to upravim aby mi to vypisalo tie cisla? |
||
Martin Profil |
#4 · Zasláno: 5. 7. 2005, 11:38:50
Chceš vygenerovat tři náhoná čísla od 1-6, můžou ty čísla být shodné?
|
||
Spikee Profil |
#5 · Zasláno: 5. 7. 2005, 14:06:33
malek-amater
Knihy pozri http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=8496&forum =15&page=-1 |
||
malek-amater Profil * |
#6 · Zasláno: 5. 7. 2005, 14:54:00
islo o to aby boly aj zhodne :) nieco ako fruit machine a tak abycastejsi padali male vyhry, spravil som to dost amatersky. aha:
<? function rand_str($size) { $feed = "123456123121"; for ($i=0; $i < $size; $i++) { $rand_str .= substr($feed, rand(0, strlen($feed)-1), 1); } return $rand_str; } echo rand_str(1); ?> <br> <? function rand2_str($size) { $feed = "123456123121"; for ($i=0; $i < $size; $i++) { $rand2_str .= substr($feed, rand(0, strlen($feed)-1), 1); } return $rand2_str; } echo rand2_str(1); ?><br> <? function rand3_str($size) { $feed = "123456123121"; for ($i=0; $i < $size; $i++) { $rand3_str .= substr($feed, rand(0, strlen($feed)-1), 1); } return $rand3_str; } echo rand3_str(1); ?> to by malo vygenerovat tri cisla .. funguje to, ale nechapem celkom ako, $rand3_str .= substr($feed, rand(0, strlen($feed)-1), 1); v tomto riadku je naco strlen($feed) resp co je strlen a substr |
||
Charlie Profil |
#7 · Zasláno: 5. 7. 2005, 15:26:01
$rand3_str .= substr($feed, rand(0, strlen($feed)-1), 1);
strlen ti vrátí délku řetězce a substr jej ořízne. |
||
Martin Profil |
#8 · Zasláno: 5. 7. 2005, 15:34:25 · Upravil/a: Martin
|
||
Charlie Profil |
#9 · Zasláno: 5. 7. 2005, 16:11:13
Martin, přečti si tohle: abycastejsi padali male vyhry
To tvoje fce nesplňuje. |
||
Charlie Profil |
#10 · Zasláno: 5. 7. 2005, 16:59:42
Tak, myslím, že jsem to vyřešil. Použil jsem goniometrické funkce. Tady je script:
<?php Vypadá to složitě, ale ve skutečnosti je to velmi jednoduché :-) Vysvětlím tento řádek: $output[] = ceil((sin((rand(271,300)*pi())/180)+1)*(1/(1-(sqrt(3)/2))*$max));, zbytek snad není potřeba. Takže, vyšel jsem z toho, že sinus má od úhlu 270 do 300 příjemně stoupající tendenci. Když se to implementuje do funkce, tak to pak vrací více menších než větších čísel, o to přece šlo. Tento řádek vrací náhodný sinus úhlu (převádí z radiánů), vrací číslo od - 0,99 do - 0,866 (minus odmocnina ze tří lomeno dvěma). Přičte k němu 1, čímž získáme výchozí téměř nulový bod. (sin((rand(271,300)*pi())/180)+1 Dále vynásobíme tak, aby jsme dostali konečný bod 1, nebo téměř jedna. (1/(1-(sqrt(3)/2)) Takže máme číslo z intervalu (0;1), teď jen vynásobíme proměnnou $max a zaokrouhlíme nahoru. |
||
Martin Profil |
#11 · Zasláno: 5. 7. 2005, 17:04:35
malek-amater uvedl víš fci, ke které řekl, že funguje. Tak jsem udělal fci kratší, která dělá úplně to stejné :) Mile rád se podívám na tvojí fci :)
Substr - vrátí část řetězce Substr( řetězec, začátek<pozice prvního znaku>, délka<počet znaků>) http://mirrors.inway.cz/manual/cs/function.substr.php Rand - generování náhodné hodnoty Rand(minimální hodnota, maximální hodnota) http://mirrors.inway.cz/manual/cs/function.rand.php StrLen - zjistí délku řetězce StrLen( řetězec ) http://mirrors.inway.cz/manual/cs/function.strlen.php Zkus si každou fci zvlášť, uvidíš, že to pochopíš :) |
||
Charlie Profil |
#12 · Zasláno: 5. 7. 2005, 17:10:12
která dělá úplně to stejné
Nedělá, jeho funkce generuje více menších čísel, přesně jak to chtěl. |
||
Martin Profil |
#13 · Zasláno: 5. 7. 2005, 17:16:29
Ok.... máš pravdu.
Ten tvůj script je dobrej :) |
||
Charlie Profil |
#14 · Zasláno: 5. 7. 2005, 17:18:26
Martin, no děkuji, doufám, že si už o mně nebudeš myslet, že jsem taková lama. Z threadu o cache vyhledávačů to tak vypadalo ...
|
||
Charlie Profil |
#15 · Zasláno: 5. 7. 2005, 18:33:26
Tak jsem přiešl na rychlejší řešení využívající kvadratické funkce:
function nahodnaCisla2($kolik,$max) { Funkce jsou téměř totožné, tento graf z excelu to dokazuje: |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0