ВВЕРХ
ВНИЗ
  • Home
  • Series
  • Series 26 - 28

Вывести степени чисел из данного набора

Особеностью заданий Series26-28 задачника Абрамяна является то, что по данному набору вещественных чисел A1, A2, …, AN нужно вычислить их степени по указанному правилу.

Series26. Даны целые числа K, N и набор из N вещественных чисел: A1, A2, …, AN. Вывести 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 вещественных чисел: A1, A2, …, AN. Вывести следующие числа:

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 вещественных чисел: A1, A2, …, AN. Вывести следующие числа:

(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.

Если у Вас есть замечания или вопросы, то задавайте их ниже в комментариях.



Яндекс.Метрика