Autor Zpráva
Ratio
Profil
Cau, potrebuju poradit s takovou prkotinou.
while ($x = $n) {
		$x = $x + 1;
		$k = $k * $x;
		}

kde: n = pocet cisel, ktere se musi v kombinacich vyskitnout, kdyz je n=3 jsou to cisla 1,2,3; n je od 1 k 9
x = pocet cisel s kterymi jsme pracovali
k je soucin
Na kalkulačkách a všude jinde znám tento zápis jako n!
když dám vypocítat nahlasí mě to chybu:
Fatal error: Maximum execution time of 60 seconds exceeded in vypocet.php on line 22
kde line 22 je $k = $k * $x;
díky za pomox
Chamurappi
Profil
Reaguji na Ratia:
Jedno rovnítko je přiřazení, dvě rovnítka jsou porovnání.
Kajman_
Profil *
Většinou se to řeší jednoduchou rekurzní funkcí
http://www.google.com/#hl=en&q=php+factorial
Ratio
Profil
ted to nehlasi tu chybu, ale saptne to pocita
pred while jsem urcil $k = 1; a $x=0 a jako, na konci ma zobrazit vysleden $k, ale stale zobrazuje 1 i pri zadani napr $n=3
Joker
Profil
Ratio:
Na kalkulačkách a všude jinde znám tento zápis jako n!
To je faktoriál.

Když rozeberu ten cyklus:
while ($x = $n) {
= dokud (výsledek "přiřaď hodnotu $n do $x" se vyhodnotí jako true)
...čili do $x se v každém cyklu dá hodnota $n, pak se dělá $x = $x + 1, čili ten cyklus bude donekonečna dělat ($k = $k * (n+1)). S výjimkou případu, kdy $n bude 0, pak se ten cyklus neprovede nikdy.

Chamurappi:
Jedno rovnítko je přiřazení, dvě rovnítka jsou porovnání.
Ani pak by mu to nefungovalo... S podmínkou while($x == $n) by se ten cyklus neprovedl buď nikdy (pokud na začátku $x je něco jiného než $n) nebo jednou (pokud by byly stejné)
Ratio
Profil
jak to tedy spravne zapsat ten faktorial?
teoreticky to chapu, ale nevim jak zapsat
mattyZEM
Profil
Proč to neuděláš přes
for()
?
Ratio
Profil
a opet se k tomu pripojila chybova hlaska Fatal error: Maximum execution time of 60 seconds exceeded in vypocet.php on line 11
Ratio
Profil
tak se omlouvam, uz to castecne funguje, kdyz n = 1-5 zobrazi vysledek 6, kdyz je vetsi je vysledek 24, novy cyklus je:
for ($k = 1; $k <= $n;) {
		$i = $i + 1;
		$k = $k * $i;
mattyZEM
Profil
for($k=1;$k<=$n;$k++){
// ....
}

Chybí ti tam $k++, v tvém případě je to celkem sranda :D
Ratio
Profil
hej diky moc, ja se teprve ucim, delam v tom chvili a proto jsem pisi takove kraviny :D
mattyZEM
Profil
Jasný, pohoda, já to tak beru :)
Joker
Profil
Ratio, mattyZEM:
$k++
To je nesmysl, ne? Do $k se uvnitř toho cyklu dává (mezi)výsledek výpočtu, jako index se tam používá $i!
Krom toho je zbytečné začínat od jedničky a počítat v prvním běhu 1*1.
$k = 1;
for ($i = 2; $i <= $n; $i++) $k = $k * $i;
mattyZEM
Profil
Joker: Já jsem jen ukázal funkci, to on tam $k napsal, takže mě z toho neobvyňuj ;) nevěděl jsem že udělá něco takového...

k tomu druhému, ano, máš pravdu, to jsem si neuvědomil

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0