Faktoriál
(2019)
Napište algoritmus pro výpočet faktoriálu pomocí cyklu a pomocí rekurzivní funkce. Srovnejte jednotlivá řešení.
Poznámka:
Faktoriál je označován „!“.
Hodnoty pro testování: 5!=5*4*3*2*1*1= 120 ; 10! = 3628800
(Pro
zajímavost 1000! = 4,02387260077093773543702433923e+2567).
Definice funkce faktoriál je:
i ! je pro kladná i roven
součinu (i * (i-1) * (i-2) * … 4 * 3 * 2 * 1).
Pro i=0 je
i! = 1.
Zároveň je možné faktoriál definovat i jako rekurentní vztah (v
definici se objeví tatáž funkce)
i ! je pro kladná i roven (i *
(i-1)! )
pro i = 0 je i! = 1.
Úkol:
Založte projekt a v něm soubor mainfaktorial.c kde vypočtěte faktoriál (třemi „způsoby“). Dodržujte přesně požadovaný formát tisku.
0) Ve funkci main
načtěte (funkci scanf) dvě celá čísla oddělená čárkou
(použijte typ unsigned long long (formátovací řetězec je
“%llu“) a int). První celé číslo je hodnota
jejíž faktoriál se bude počítat. Druhé číslo bude nula nebo
jedna (udává, zda se provede bod číslo 4 zadání). Pro výpočty
využívejte typ unsigned long long int. Pokud se nenačtou dva
parametry, nebo druhé číslo nebude jedna či nula, vypište text
“chybne zadani“ a program ukončete s chybovým
kódem 1.
Pokud funkce main skončí bez chyby, vrací hodnotu
0.
1) Napište kód realizující výpočet faktoriálu (nerekurzivní)
přímo ve funkci main. Použijte algoritmus, který postupuje od
nižších čísel k vyšším. Vytiskněte ve funkci main faktoriál
zadaného čísla (z bodu 0). Vytiskněte pouze výsledek (číslo) na
začátek řádku a odřádkujte. Výpočet a tisk výsledku proveďte pouze,
je-li parametr pro výpočet správně zadán.
2) Napište funkci (se
jménem faktnerek) počítající faktoriál (nerekurzivní). Funkce
vrací faktoriál čísla zadaného jako parametr. Vypočtěte ve funkci
main pro zadané číslo faktoriál zjištěný pomocí této funkce.
Vytiskněte výsledek jako v předchozím bodě.
unsigned
long long faktnerek(unsigned long long aVal)
3) Napište
funkci (se jménem faktrek), počítající faktoriál, výpočet
realizovaný rekurzivně. Funkce vrací faktoriál čísla zadaného jako
parametr.
unsigned long long
faktrek(unsigned long long aVal)
4) Využijte funkci z bodu 3
(vytvořte kopii se jménem faktrektisk) tak, aby při jediném
jejím volání vytiskla tato funkce tabulku faktoriálů pro čísla od 0
(nuly) do zvoleného čísla. To znamená, že se bude tisknout při
zpětném běhu rekurze.
Ve funkci main tuto funkci zavolejte
pouze, mělo-li druhé zadané číslo hodnotu 1 (zadání z bodu 1). Formát
tisku je: od začátku řádku je pole desíti znaků, do kterých je
vytištěna hodnota čísla, ze kterého se aktuálně počítá faktoriál
(zarovnáno na pravý kraj tohoto pole), potom následuje pole třiceti
znaků, do kterého se vytiskne faktoriál aktuální hodnoty (zarovnáno
na pravý kraj tohoto pole). Každá dvojice (hodnota + výsledek) má
vlastní řádek.
5) Jaké je maximální číslo (pro zvolený datový typ) jehož faktoriál se dá pro zvolený datový typ
Poslední změna 2019-02-11