Вывести степени чисел из данного набора
Особеностью заданий Series26-28 задачника Абрамяна является то, что по данному набору вещественных чисел A1, A2, …, AN нужно вычислить их степени по указанному правилу.
Series26. Даны целые числа K, N и набор из N вещественных чисел: A
1, A
2, …, A
N. Вывести K-e степени чисел из данного набора:
(A1)K, (A2)K, …, (AN)K.
Здесь мы видим, что все показатели равны некоторому целому K. Поскольку задачи группы Series (последовательности) можно решать без использования массивов, то сначала будем последовательно вводить числа A, потом вычислять K-ю их степень. После этого выведем результат на экран и все сначала: вводим число, вычисляем степень и выводим, и т.д.
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | 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. |
|
Но предыдущий вариант программы не предусматривает ситуации, когда K < 0. Поскольку при отрицательных K прийдется 1 делить на степень числа с положительным показателем, то необходимо предусмотреть эти варианты. Так, например, A-5=1/A5, поэтому при A=0 возникает деление на 0. А если еще и показатель K=0, то возникает неопределенность типа 00. Всё это учтено в следующем варианте программы Series26:
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 | 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. |
|
Series27. Дано целое число N и набор из N вещественных чисел: A
1, A
2, …, A
N. Вывести следующие числа:
A1, (A2)2, …, (AN-1)N-1, (AN)N.
Первое число А выводим без изменений, второе в квадрате, третье в третьей степени, и т.д., (N-1)-е выводим в (N-1)-й степени, и, наконец, N-е число возводим в N-ю степень. То есть, показатель степени числа равен его номеру, под котором оно находится в последовательности.
Поэтому, если во внешнем цикле будем вводить числа Аi
(строка 12 кода), то во внутреннем цикле for будем возводить числа Аi
в степень i
(строка 16 кода).
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | 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. |
|
Series28. Дано целое число N и набор из N вещественных чисел: A
1, A
2, …, A
N. Вывести следующие числа:
(A1)N, (A2)N-1, …, (AN-1)2, AN.
Первое число возводим в N степень, второе число возводим в (N-1)-ю степень, и т.д., (N-1)-е число выводим во 2 степени, N-е (последнее) число выводим в 1 степени. Помечаем закономерность, что для выводимого числа (Аi)j
сумма показателя степени j
и его номера i
всегда одинакова: i + j = N + 1.
Таким образом, если мы вводим число Аi
(строка 12 кода), то его нужно возвести в степень N+1-i
(строка 15 кода, см. ниже).
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | 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. |
|
Если у Вас есть замечания или вопросы, то задавайте их ниже в комментариях.