Обчислити X^n

Формулювання. 
Дано натуральні числа x і n (яке також може бути дорівнює 0). Обчислити X^n.

Рішення. 
Для того щоб вирішити цю задачу, згадаємо визначення ступеня з натуральним показником: запис X^n означає, що число x помножено саме на себе n разів.
Відразу з визначення видно, що тут заздалегідь відомо кількість повторень при обчисленні результату, так що завдання легко вирішується через цикл for. Виходить, ми копіюємо вихідне число x в деяку змінну res (від англ. Result - «результат»), а потім просто множимо його на x n раз? Не варто поспішати з відповіддю.
Розглянемо приклад: 3^4 = 3 * 3 * 3 * 3 = 81. Якщо подивитися на цей запис, то ми бачимо, що зведення в четверту ступінь як вираз містить чотири доданки, але тільки три операції, так як ми з першого кроку домножуємо число 3 на три трійки. Тоді реалізація ідеї з абзацу вище буде давати число в ступені на 1 більше, ніж потрібно.
Який можна придумати вихід? Наприклад, можна скоротити цикл на одну операцію, але що тоді буде при обчисленні нульової ступеня? Як відомо, будь-яке число в нульовому ступені дає 1, а тут при введенні в якості n нуля призведе до того, що не буде здійснений вхід в цикл (так як не існує цілочисельного відрізка від 1 до 0) і в підсумку отримаємо число x.
А що, якщо змінити схему множення так: 3^4 = 1 * 3 * 3 * 3 * 3 = 81? Так ми можемо порівняти показник ступеня і число необхідних операцій, та й з нульовим ступенем все стає просто, так як при введенні в якості n нуля не здійснюватиметься вхід в цикл і на вихід в програмі піде число 1!
Тепер алгоритм природною мовою:
1) Введення x і n;
2) Присвоєння змінної res числа 1;
3) Запуск циклу, при якому i змінюється від 1 до n. У циклі:
1. Надаємо змінної res значення res * x;
4) Виведення змінної res.
program Exponentiation;
var
x, n, i, res: word;
begin
readln(x, n);
res := 1;
for i := 1 to n do begin
res := res * x
end;
writeln(res)
end.

Немає коментарів:

Дописати коментар