ВВЕРХ
ВНИЗ
  • Home
  • Proc
  • Proc 37 - 39

Proc 37 - 39

В задании Proc37 описываем процедуру, вычисляющую А в степени В, где А и В - вещественные числа. Proc38 - аналогичная задача, только показатель степени здесь целый. В примере Proc39 используется комбинация методов из предыдущих двух процедур.

Proc37. Описать функцию Power1(A, B) вещественного типа, находящую величину AB по формуле AB = exp(B·ln(A)) (параметры A и B — вещественные). В случае нулевого или отрицательного параметра A функция возвращает 0. С помощью этой функции найти степени AP, BP, CP, если даны числа P, A, B, C.

Код 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  
{ Функция возвращает А в степени В, 
 если А > 0, и 0, если А ≤ 0 }
function Power1(A, B: real): real;
begin
  if A > 0 then Power1 := exp(B * (ln(A)))
  else Power1 := 0
end;

  { Основная программа }

var
  P, A, B, C: real;

begin
  write('P = ');
  readln(P); //вводим показатель степени P
  write('A = ');
  readln(A); //вводим основание степени А
  write('B = ');
  readln(B); //вводим основание степени В
  write('C = ');
  readln(C); //вводим основание степени С
  writeln;
  { Выводим результат: }
  writeln(' A^', P, ' = ', Power1(A, P):0:4);
  writeln(' B^', P, ' = ', Power1(B, P):0:4);
  writeln(' C^', P, ' = ', Power1(C, P):0:4);
end.

Сравните задачу Proc37 с примером For15. Только отличие этих решений в том, что в задаче For15 фигурирует натуральная степень, а в предыдущем случае - вещественная.

Proc38. Описать функцию Power2(A, N) вещественного типа, находящую величину AN (A — вещественный, N — целый параметр) по следующим формулам:

A0 = 1;
AN = A·A·…·A    (N сомножителей),    если N > 0;
AN = 1/(A·A·…·A)    (|N| сомножителей),    если N < 0.
С помощью этой функции найти AK, AL, AM, если даны числа A, K, L, M.

Код 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  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
{ Функция возвращает А в степени N 
 (A - вещественное, N - целое) }
function Power2(A: real; N: integer): real;
var
  i: word;
  pow: real;
begin
  pow := 1; //начальное значение степеня
  if N <> 0 then begin
   { |N| раз умножаем А само на себя, в результате 
   чего на выходе из цикла получим А в степени |N|: }
    for i := 1 to abs(N) do
      pow := pow * A;
   { Если показатель степени отрицательный, 
   то находим обратное значение: }
    if N < 0 then pow := 1 / pow
  end;
  Power2 := pow
end;

  { Основная программа }

var
  A, pow: real;
  K, L, M: integer;

begin
  write('A = ');
  readln(A); //вводим основание степени А
  write('K = ');
  readln(K); //вводим показатель степени K
  pow := Power2(A, K); //вычисляем A в степени K
  writeln(' Результат: ', pow:0:4); //выводим результат
  writeln;
  write('L = ');
  readln(L); //вводим показатель степени L
  pow := Power2(A, L); //вычисляем A в степени L
  writeln(' Результат: ', pow:0:4); //выводим результат
  writeln;
  write('M = ');
  readln(M); //вводим показатель степени M
  pow := Power2(A, M); //вычисляем A в степени M
  writeln(' Результат: ', pow:0:4); //выводим результат
end.

Proc39. Используя функции Power1 и Power2 из Proc37 и Proc38, описать функцию Power3(A, B) вещественного типа с вещественными параметрами, находящую AB следующим образом: если B имеет нулевую дробную часть, то вызывается Power2(A, N), где N — переменная целого типа, равная числу B; иначе вызывается Power1(A, B). С помощью Power3 найти AP, BP, CP, если даны числа P, A, B, C.

Код 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  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
{ Функция возвращает А в степени B (A и B- вещественные) }
function Power3(A: real; var B: real): real;

  { Функция возвращает А в степени В, 
   если А > 0, и 0, если А ≤ 0 }
  function Power1(A, B: real): real;
  begin
    if A > 0 then Power1 := exp(B * (ln(A)))
    else Power1 := 0;
  end;
  
  { Функция возвращает А в степени N 
   (A - вещественное, N - целое) }
  function Power2(A: real; N: integer): real;
  var
    i: word;
    pow: real;
  begin
    pow := 1; //начальное значение степеня
    if N <> 0 then begin
     { |N| раз умножаем А само на себя, в результате 
     чего на выходе из цикла получим А в степени |N|: }
      for i := 1 to abs(N) do
        pow := pow * A;
     { Если показатель степени отрицательный, 
     то находим обратное значение: }
      if N < 0 then pow := 1 / pow
    end;
    Power2 := pow
  end;

{ Тело основной процедуры: }
begin
 { Если дробная часть равна 0, то нам надо вызвать функцию 
 Power2(A, B). Но поскольку В - вещественного типа, то просто 
 вызвать эту ф-ю мы не можем, так как параметр N в функции Power2 
 целого типа. В этом случае надо число В преобразовать к целому 
 типу. Для этого надо вместо В поставить Round(B): }
  if frac(B) = 0 then //дробная часть равна 0
    Power3 := Power2(A, round(B)) //вызываем ф-ю Power2
  else //дробная часть больше 0
    Power3 := Power1(A, B) //вызываем ф-ю Power1
end;

  { Основная программа }

var
  P, A, B, C: real;

begin
  write('P = ');
  readln(P); //вводим показатель степени P
  write('A = ');
  readln(A); //вводим основание степени А 
  write('B = ');
  readln(B); //вводим основание степени В
  write('C = ');
  readln(C); //вводим основание степени С
  writeln;
  writeln(' A^', P, ' = ', Power3(A, P):0:4);
  writeln(' B^', P, ' = ', Power3(B, P):0:4);
  writeln(' C^', P, ' = ', Power3(C, P):0:4)
end.


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