Autor | Zpráva | ||
---|---|---|---|
Ratio Profil |
#1 · Zasláno: 11. 3. 2010, 09:51:00
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 |
#2 · Zasláno: 11. 3. 2010, 10:02:12
Reaguji na Ratia:
Jedno rovnítko je přiřazení, dvě rovnítka jsou porovnání. |
||
Kajman_ Profil * |
#3 · Zasláno: 11. 3. 2010, 10:02:57
Většinou se to řeší jednoduchou rekurzní funkcí
http://www.google.com/#hl=en&q=php+factorial |
||
Ratio Profil |
#4 · Zasláno: 11. 3. 2010, 10:06:52
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 |
#5 · Zasláno: 11. 3. 2010, 10:07:47
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) { ...č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 |
#6 · Zasláno: 11. 3. 2010, 10:10:19 · Upravil/a: Ratio
jak to tedy spravne zapsat ten faktorial?
teoreticky to chapu, ale nevim jak zapsat |
||
mattyZEM Profil |
#7 · Zasláno: 11. 3. 2010, 10:12:38
Proč to neuděláš přes
for() |
||
Ratio Profil |
#8 · Zasláno: 11. 3. 2010, 10:19:28
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 |
#9 · Zasláno: 11. 3. 2010, 10:30:05
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 |
#10 · Zasláno: 11. 3. 2010, 10:34:32 · Upravil/a: mattyZEM
for($k=1;$k<=$n;$k++){ // .... } Chybí ti tam $k++, v tvém případě je to celkem sranda :D |
||
Ratio Profil |
#11 · Zasláno: 11. 3. 2010, 10:36:39
hej diky moc, ja se teprve ucim, delam v tom chvili a proto jsem pisi takove kraviny :D
|
||
mattyZEM Profil |
#12 · Zasláno: 11. 3. 2010, 10:41:13
Jasný, pohoda, já to tak beru :)
|
||
Joker Profil |
#13 · Zasláno: 11. 3. 2010, 10:58:41
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 |
#14 · Zasláno: 11. 3. 2010, 11:23:05
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 |
||
Časová prodleva: 14 let
|
0