Lekce 10 - Výpočet libovolné mocniny
V minulé lekci, Největší společný dělitel (Euklidův algoritmus), jsme si ukázali Euklidův algoritmus, který najde největšího společného dělitele dvou čísel.
Algoritmus výpočtu n-té mocniny je velmi jednoduchý, avšak je
zapotřebí si uvědomit, že exponent mocniny může být i záporný nebo
nulový. Základ mocniny budeme považovat za argument a a exponent
za argument b.
Výpočet mocniny s kladným exponentem
Začneme s výpočtem mocniny s kladným exponentem. Budeme vycházet z
podstaty mocniny, tedy z toho, že 23 = 2 * 2 * 2. Jinými slovy, je
třeba argument a vynásobit b - 1 krát argumentem
a:
a = 2b = 3b - 1 = 2- hodnotu
aje třeba vynásobit2xhodnotoua(a * a * a)
Nyní není nic jednoduššího než použít cyklus for
běžící od b do 2 (ne do jedna, protože
potřebujeme o jedno násobení méně). Kód funkce
mocnenikladnym(a,b) se nachází níže.
Výpočet libovolné mocniny
Zde je třeba rozložit funkci na 3 podmínky:
b > 0- vypočítáme klasickou mocninu s kladným exponentem (např. 23)b < 0- výsledek je převrácená hodnota takové mocniny, kde je argumentbkladný (např. 2−3 = 1 / 23). K získání kladného exponentu použijeme jeho absolutní hodnotu.b = 0- výsledek je vždy 1 (např. 20 = 1)
Funkce na výpočet libovolné mocniny: mocneni(a,b).
Aplikace - zdrojový kód
Funkce mocneni() vrátí argument a umocněný na
argument b. Funkce zavolaná tímto způsobem:
mocneni(2,3) vrátí 23, což je 8.
-
/** * Vrati 'a' umocnene na 'b'. Pokud je 'b' kladne. */ static int mocnenikladnym(int a, int b) { int c = a; for (; b > 1; b--) { c = c * a; } return c; } /** * Vrati 'a' umocnene na 'b'. */ static int mocneni(int a, int b) { if (b > 0) { return mocnenikladnym(a, b); } if (b < 0) { return (1 / mocnenikladnym(a, Math.abs(b))); } return 1; }
V další lekci, Výpočet řešení kvadratické rovnice, si ukážeme algoritmus pro výpočet řešení kvadratické rovnice včetně zdrojového kódu a vývojového diagramu.


David se informační technologie naučil na