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 = 2
b = 3
b - 1 = 2
- hodnotu
a
je třeba vynásobit2x
hodnotoua
(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 argumentb
kladný (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.