Особеностью заданий Series26-28 задачника Абрамяна является то, что по данному набору вещественных чисел A1, A2, …, AN нужно вычислить их степени по указанному правилу.
Series26. Даны целые числа K, N и набор из N вещественных чисел: A1, A2, …, AN. Вывести K-e степени чисел из данного набора:
(A1)K, (A2)K, …, (AN)K.
Здесь мы видим, что все показатели равны некоторому целому K. Поскольку задачи группы Series (последовательности) можно решать без использования массивов, то сначала будем последовательно вводить числа A, потом вычислять K-ю их степень. После этого выведем результат на экран и все сначала: вводим число, вычисляем степень и выводим, и т.д.
var
K, N, i, j: byte;
A, S: real;
begin
write('K = ');
readln(K);
write('N = ');
readln(N);
{ Вводим N чисел А и вычисляем степени: }
for i := 1 to N do begin
writeln;
write('A', i, ' = ');
readln(A); { <-- вводим число А }
S := 1; { <== начальное значение степени }
{ Вычисляем i-ю степень числа A, умножая
данное число само на себя i раз: }
for j := 1 to K do S := S * A;
writeln(' --> ', A, '^', K, ' = ', S) { <-- результат }
end;
readln
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Но предыдущий вариант программы не предусматривает ситуации, когда K < 0. Поскольку при отрицательных K прийдется 1 делить на степень числа с положительным показателем, то необходимо предусмотреть эти варианты. Так, например, A-5=1/A5, поэтому при A=0 возникает деление на 0. А если еще и показатель K=0, то возникает неопределенность типа 00. Всё это учтено в следующем варианте программы Series26:
var
K, N, i, j: integer;
A, S: real;
begin
write('K = ');
readln(K);
write('N = ');
readln(N);
{ Вводим N чисел А и вычисляем степени: }
for i := 1 to N do begin
writeln;
write('A', i, ' = ');
readln(A); { <-- вводим число А }
S := 1; { <== начальное значение степени }
{ Вычисляем K-ю степень числа A, умножая данное число
само на себя |K| раз. Модуль мы взяли потому, что K
может быть отрицательным. }
for j := 1 to abs(K) do S := S * A;
write(' A', i, '^', K); { <-- Выводим выражение для степени }
if A = 0 then
if K < 0 then writeln(' --> на 0 делить нельзя')
else
if K = 0 then writeln(' --> неопределенность 0 в степени 0')
else writeln(' = ', S)
else begin
if K < 0 then S := 1 / S;
writeln(' = ', S)
end
end;
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Abs(x: real): real;
: Возвращает модуль числа x. Series27. Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести следующие числа:
A1, (A2)2, …, (AN-1)N-1, (AN)N.
Первое число А выводим без изменений, второе в квадрате, третье в третьей степени, и т.д., (N-1)-е выводим в (N-1)-й степени, и, наконец, N-е число возводим в N-ю степень. То есть, показатель степени числа равен его номеру, под котором оно находится в последовательности.
Поэтому, если во внешнем цикле будем вводить числа А<sub>i</sub>
(строка 12 кода), то во внутреннем цикле for будем возводить числа А<sub>i</sub>
в степень i
(строка 16 кода).
var
N, i, j: byte;
A, S: real;
begin
write('N = ');
readln(N);
{ Вводим N чисел А и вычисляем степени: }
for i := 1 to N do begin
writeln;
write('A', i, ' = ');
readln(A); { <-- вводим число А }
S := 1; { <== начальное значение степени }
{ Вычисляем i-ю степень числа A, умножая
данное число само на себя i раз: }
for j := 1 to i do S := S * A;
writeln(' --> ', A, '^', i, ' = ', S) { <-- результат }
end;
readln
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Series28. Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести следующие числа:
(A1)N, (A2)N-1, …, (AN-1)2, AN.
Первое число возводим в N степень, второе число возводим в (N-1)-ю степень, и т.д., (N-1)-е число выводим во 2 степени, N-е (последнее) число выводим в 1 степени. Помечаем закономерность, что для выводимого числа (А<sub>i</sub>)<sup>j</sup>
сумма показателя степени j
и его номера i
всегда одинакова: i + j = N + 1.
Таким образом, если мы вводим число А<sub>i</sub>
(строка 12 кода), то его нужно возвести в степень N+1-i
(строка 15 кода, см. ниже).
var
N, i, j: byte;
A, S: real;
begin
write('N = ');
readln(N);
{ Вводим N чисел А и вычисляем степени: }
for i := 1 to N do begin
writeln;
write('A', i, ' = ');
readln(A); { <-- вводим число А }
S := 1; { <== начальное значение степени }
{ Вычисляем (N-i+1)-ю степень числа A: }
for j := 1 to N - i + 1 do S := S * A;
writeln(' --> ', A, '^', N-i+1, ' = ', S) { <-- результат }
end;
readln
end.
**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Если у Вас есть замечания или вопросы, то задавайте их ниже в комментариях.