Autor Zpráva
malek-amater
Profil *
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
skus si pozriet funckiu rand .
malek-amater
Profil *
<?

$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
Chceš vygenerovat tři náhoná čísla od 1-6, můžou ty čísla být shodné?
Spikee
Profil
malek-amater
Knihy pozri http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=8496&forum =15&page=-1
malek-amater
Profil *
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
$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

<?php

function generuj_cisla($kolik,$min,$max) {

for($i=0;$i<$kolik;$i++) {
$y = "cislo".$i;
$$y = rand($mix,$max);
echo $$y; // hodnoty se Ti uloží do proměnných cislo1, cislo2, cislo3 etc.
echo "<br />";
}
}

generuj_cisla(3,1,6);

?>
Charlie
Profil
Martin, přečti si tohle: abycastejsi padali male vyhry

To tvoje fce nesplňuje.
Charlie
Profil
Tak, myslím, že jsem to vyřešil. Použil jsem goniometrické funkce. Tady je script:
<?php

function nahodnaCisla($kolik,$max) {
$output = array();
for ($i = 0; $i < $kolik; $i++) {
$output[] = ceil((sin((rand(271,300)*pi())/180)+1)*(1/(1-(sqrt(3)/2))*$max));
}
return $output;
}
echo join('<br />',nahodnaCisla(3,6));
// vypise treba "3<br />1<br />4"
?>

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
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
která dělá úplně to stejné

Nedělá, jeho funkce generuje více menších čísel, přesně jak to chtěl.
Martin
Profil
Ok.... máš pravdu.
Ten tvůj script je dobrej :)
Charlie
Profil
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
Tak jsem přiešl na rychlejší řešení využívající kvadratické funkce:
function nahodnaCisla2($kolik,$max) {

$output = array();
for ($i = 0; $i < $kolik; $i++) {
$output[] = ceil(pow(rand(0,sqrt(1)),2)*$max);
}
return $output;
}

Funkce jsou téměř totožné, tento graf z excelu to dokazuje:

Toto téma je uzamčeno. Odpověď nelze zaslat.