Autor Zpráva
jirka3
Profil *
Ahoj, někde tady na fóru jsem si našel kód faktoriálu a lehce upravil, ale prostě ho za žádných okolností nemůžu rozběhat... Poradíte mi, co s tím?

<!doctype html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<script>
function faktorial(x) {
   if ((x == 0) || (x == 1))
    return 1;
   else
      result = (x * faktorial(x-1) );
      return result;
   }
alert(x);
}
</script>
<form>
    <input type="text" name="e">
    <input type="submit" onClick="faktorial(this.form.e.value)">
</form>
</html>
lionel messi
Profil
jirka3:
Na riadok 10 doplň za podmienku znak {, čiže:
function faktorial(x) {
   if ((x == 0) || (x == 1))
    return 1;
   else {
      result = (x * faktorial(x-1) );
      return result;
   }
alert(x);
}

Opravené po upozornení [#3] a radšej mažem študovať JS spolu s autorom.
juriad
Profil
Máš tam hromadu chyb:
1) Závorka na 13. řádku - chybí jí otevírací na konci 10. řádku.
2) Alert se nikdy neprovede, protože vždy před ním bude return
3) Občas se ti stane, že se nikdy nezastaví (když uživatel zadá desetinné nebo záporné číslo)
4) Po stisknutí tlačítka se stránka refreshne
5) Umí to počítat jen malé faktoriály, používáš hloupý algoritmus. (I když presnost čísel v JS stejně lepší není, takže to tak nevadí.)

lionel messi:
To je chybná oprava I když kvůli return 1; to bude fungovat také, ale není to pěkné. (Závorka byla za ifem.)
jirka3
Profil *
juriad:
Díky za odpověď: 1) opraveno 2) Jak se to dá teda jinak napsat? Jestli vůbec? 3) opraveno pomocí maxlength 4) S tím nevím, co dělat 5) nevadí


jirka3:
Já jsem vůl... 3) bod opraven pouze za předpokladu jednociferného faktoriálu .. Ach já dutá palice.
juriad
Profil
jirka3:
Aha, doplnil jsi jen tu závorku. Není třeba ukazovat.

Třeba takto: http://kod.djpw.cz/skkb

2) Dej alert mimo tu funkci. Protože volá sama sebe, nesmí být alert uvnitř - to by se volal v každém kroku.
3) Dej podmínku na menší nebo rovno 1. Co na tom, že bude vracet 1 i pro záporná čísla :-)
4) Nepoužívej input type="submit", ale input type="button"; nebo do onclick přidej na začátek return, nebo na konec onclick přidej ;false
5) Lepši je použít smyčku for.
jirka3
Profil *
juriad:
Díky moc, funguje skvěle.


jirka3:
Smyčkou for jsem to zkoušel, ale dostal jsem se do výsledku, kdy mi to vykreslilo u např. 5! 54321. A to jsem vzdal, protože nevím, jak to rozdělit na 5 proměnných...

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0