ВВЕРХ
ВНИЗ
  • Home
  • Proc
  • Proc 16 - 20

Proc 16 - 20

В задаче Proc16 задачника Абрамяна мы описываем функцию Sign(x) по определению знака числа; задача Proc17 - функция определения количества корней квадратного уравнения в зависимомти от коэффициентов; в 18-й задаче описываем функцию вычисения площади круга по его радиусу, а в 19-й - площадь кругового кольца; наконец, задача Proc20 решает задачу вычисления периметра равнобедренного треугольника по его основанию и высоте.

Proc16. Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения:

−1, если X < 0;    0, если X = 0;    1, если X > 0.

С помощью этой функции найти значение выражения Sign(A) + Sign(B) для данных вещественных чисел A и B.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
{ Функция возвращает знак вещественного числа X }
function Sign(X: real): integer;
begin
  if X < 0 then Sign := -1
  else
    if X = 0 then Sign := 0
    else Sign := 1
end;

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

var
  A, B: real;

begin
  writeln('Введите вещественные числа А и В:');
  readln(A, B);
  writeln('Результат: ', Sign(A) + Sign(B));
  readln
end.

Proc17. Описать функцию RootCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A·x2 + B·x + C = 0 (A, B, C — вещественные параметры, A ≠ 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта:

D = B2 − 4·A·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  
{ Функция возвращает количество корней квадратного уравнения }
function RootCount(A, B, C: real): byte;
var
  D: real;
begin
  D := sqr(B) - 4 * A * C; { <- вычисляем дискриминант }
  if D < 0 then RootCount := 0 { <- при D<0 нет корней }
  else
    if D = 0 then RootCount := 1 { <- один корень }
    else RootCount := 2 { <- два корня }
end;

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

const
  n = 3; { количество квадратных уравнений для проверки }

var
  A, B, C: real; { <-- коэффициенты }
  i: byte;

begin
  for i := 1 to n do begin { <- вводим коэффициенты в цикле n раз }
    writeln('Введите коэффициенты:');
    { Коэффициент А должен быть не равен 0, поэтому ввод 
    запрашивается до тех пор пока не введем отличное от 0 число: }
    repeat
      write(' A = ');
      readln(A);
    until A <> 0; { <-- если А ≠ 0, то идем далее }
    write(' B = ');
    readln(B); { <- вводим В }
    write(' C = ');
    readln(C); { <- вводим С }
    { Вызываем функцию по определению количества 
    корней квадратного уравнения: }
    writeln('Количество корней: ', RootCount(A, B, C));
    writeln
  end;
  readln
end.

Proc18. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S = π·R2. В качестве значения π использовать 3.14.

Площадь круга в Pascal

Код 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  
{ Функция возвращает площадь круга радиуса R }
function CircleS(R: real): real;
const
  pi = 3.14; { <- округленное до сотен число "пи" }
begin
  CircleS := pi * sqr(R) { <- площадь круга }
end;

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

const
  n = 3; { <- количество кругов для вычисления площади }

var
  R: real; { <- радиус круга }
  i: byte;

begin
  for i := 1 to n do begin
    write('R = ');
    readln(R);
    writeln('Площадь круга: ', CircleS(R):0:2); { <- вызываем функцию }
    writeln
  end;
  readln
end.

Proc19. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π·R2. В качестве значения π использовать 3.14.

Площадь кругового кольца в Pascal

Код 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  
{ Функция возвращает площадь кольца радиусов R1 и R2 }
function RingS(R1, R2: real): real;
const
  pi = 3.14; { <- округленное до сотен число "пи" }
begin
 { Вычисляем площадь кольца с радиусами R1 и R2.}
  RingS := pi * (sqr(R1) - sqr(R2))
end;

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

const
  n = 3;

var
  R1, R2: real;
  i: byte;

begin
  for i := 1 to n do begin
    writeln('Введите радиусы R1 и R2 кольца:');
    write('R1 = ');
    readln(R1); { <- вводим радиус R1 }
    repeat
      write('R2 = ');
      readln(R2); { <- вводим радиус R2 }
    until R1 > R2; { <- условие существования кольца }
    writeln('Площадь кольца: ', RingS(R1, R2):0:2);
    writeln
  end;
  readln
end.

*   *   *

Еще один вариант описания функции RingS(R1, R2) для вычисления площади кругового кольца. В этом случае мы используем функцию CircleS(R) из предыдущей задачи Proc18, в которой вычисляется площадь круга. Эту функцию можно использовать в задаче Proc19, а основную часть программы оставить без изменения:

Код 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  
{ Функция возвращает площадь кольца радиусов R1 и R2 }
function RingS(R1, R2: real): real;
const
  pi = 3.14; { <- округленное до сотен число "пи" }

  { Функция возвращает площадь круга радиуса R }
  function CircleS(R: real): real;
  begin
    CircleS := pi * sqr(R) { <- площадь круга }
  end;

{ Тело основной процедуры RingS(R1,R2) }  
begin
  { Вычисляем площадь кольца с радиусами R1 и R2. Для этого от 
  площади круга с большим радиусом надо отнять площадь круга с 
  меньшим радиусом. Для вычисления площади два раза вызываем 
  функцию CircleS(R) определения площади круга: }
  RingS := CircleS(R1) - CircleS(R2)
end;

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

const
  n = 3;

var
  R1, R2: real;
  i: byte;

begin
  for i := 1 to n do begin
    writeln('Введите радиусы R1 и R2 кольца (R1>R2):');
    write('R1 = ');
    readln(R1); { <- вводим радиус R1 }
    repeat
      write('R2 = ');
      readln(R2); { <- вводим радиус R2 }
    until R1 > R2; { <- условие существования кольца }
    writeln('Площадь кольца: ', RingS(R1, R2):0:2);
    writeln
  end;
  readln
end.

Сравните эту задачу с заданием Begin13.

Proc20. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора:

b2 = (a/2)2 + h2.

Периметр равнобедренного треугольника в Pascal

Код 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  
{ Функция возвращает периметр равнобедренного
 треугольника по его основанию a и высоте h }
function TriangleP(a, h: real): real;
var
  b: real;
begin
  b := sqrt(sqr(a / 2) + sqr(h)); { <- боковая сторона }
  TriangleP := 2 * b + a { <- периметр треугольника }
end;

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

var
  a, h: real; { <- основание и высота равноб. треуг. }
  i: byte;

begin
  for i := 1 to 3 do begin
    write(' a = ');
    readln(a); { <-основание треугольника }
    write(' h = ');
    readln(h); { <- высота }
    writeln('Периметр треугольника: ', TriangleP(a, h):0:2);
    writeln
  end;
  readln
end.


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