Možnosti využití JavaScriptu při výuce programování a matematiky
Faktoriál přirozeného čísla
 Tisk

Faktoriál přirozeného čísla

Na závěr si ukážeme úlohu navazující na problematiku zobrazení čísel v počítači a varianty jejího řešení. Jde o výpočet faktoriálu. Jedná se o jednu z nejfrekventovanějších úloh, která se objevuje v různých fázích výuky programování viz příklad .


Program je přesným přepisem správného algoritmu, který je uváděn v nejedné publikaci a na mnoha internetových stránkách věnujících se programování v tom, či onom programovacím jazyce. Z tohoto důvodu by mohl málokdo předpokládat, že nebude správně řešit danou úlohu. Výsledky získané tímto programem jsou následující:

     21! = 51090942171709440000

     22! = 1.1240007277776077e+21

     23! = 2.585201673888498e+22

     24! = 6.204484017332394e+23

Pro ověření správnosti výsledků může být použita např. vědecká kalkulačka, která je součástí příslušenství operačního systému Windows. Žáci dojdou k závěru, že výsledek programu se s hodnotou na kalukalčce neshoduje od 22!. Vnímavější zjistí, že k rozdílnému výsledku dochází kvůli omezenému počtu zobrazených platných cifer a dochází tak k zaokrouhlovací chybě, výsledek je také reprezentován reálným číslem, přitom výstupní hodnota má být celé číslo.

Tento moment, kdy počítač nevypisuje přesné hodnoty, je možné využít k podrobnějšímu připomenutí rozsahu celých a reálných čísel v jazyku JavaScript. Celočíslený rozsah je charakterizován nejen množinou přípustných hodnot, ale i množinou přípustných operací které lze s daty daného typu provádět. Na rozdíl od matematiky je zde množina celočíselných hodnot konečná. K zastavení programu při překročení rozsahu, ale nedochází z důvodu uvedeného na začátku tohoto článku. Např. hodnota

21! = 51 090 942 171 709 440 000 leží mimo maximální hodnotu rozsahu celých čísel (253) a přesto je výsledek správný, protože hlavní množinou zůstávají čísla reálná s výše uváděným rozsahem, díky němuž může být po vykonání programu zobrazen zaokrouhlený výsledek až do velikosti 170!. Při zadávání vyšších hodnot, kdy bude maximální hodnota celočíselného rozsahu také překonána se zobrazí už jen oznámení „Infinity“ (nekonečno).

Otázkou však stále zůstává, jak sestavit nebo vylepšit program tak, aby počítal nejen nezaokrouhlené výsledky od 22!, ale také správné hodnoty nad 170!. Žáci přestanou pohlížet na počítač jako na neomylného počtáře a začnou se zajímat o řešení programu, který by jim umožnil počítat správný faktoriál. Neomylný počítač v očích žáků selhal, nedokáže vyřešit jednoduchou úlohu jakou je výpočet faktoriálu. V tomto momentu je třeba studentům vysvětlit, že chyba není v počítači, ale ve strategii řešení. Výsledky součinu 1⋅2⋅...⋅n jsme v předchozích případech uchovávali jako jednu hodnotu.


V příkladu budeme výsledek uchovávat jako posloupnost hodnot (musíme zajistit, aby délka posloupnosti byla určena pouze délkou pole, které pro uložení použijeme. Výsledek se musí ukládat do pole. V programu je pole nazváno jako Cislice):


Že je problém vyřešen dokazuje následující výsledek:

200! = 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000

Pocet cislic: 375