Root /ArchiveAbout
()

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

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

Особеностью заданий 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 Если у Вас есть замечания или вопросы, то задавайте их ниже в комментариях.