В задаче 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.
{ Функция возвращает знак вещественного числа X }function Sign(X:real):integer;
beginif X <0then Sign :=-1elseif X =0then Sign :=0else Sign :=1end;
{ Основная программа }var
A, B:real;
beginwriteln('Введите вещественные числа А и В:');
readln(A, B);
writeln('Результат: ', Sign(A)+ Sign(B));
readlnend.
Proc17. Описать функцию RootCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A·x2 + B·x + C = 0 (A, B, C — вещественные параметры, A ≠ 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта:
{ Функция возвращает количество корней квадратного уравнения }function RootCount(A, B, C:real):byte;
var
D:real;
begin
D :=sqr(B)-4* A * C; { <- вычисляем дискриминант }if D <0then RootCount :=0{ <- при D<0 нет корней }elseif D =0then RootCount :=1{ <- один корень }else RootCount :=2{ <- два корня }end;
{ Основная программа }const
n =3; { количество квадратных уравнений для проверки }var
A, B, C:real; { <-- коэффициенты }
i:byte;
beginfor i :=1to n dobegin{ <- вводим коэффициенты в цикле n раз }writeln('Введите коэффициенты:');
{ Коэффициент А должен быть не равен 0, поэтому ввод
запрашивается до тех пор пока не введем отличное от 0 число: }repeatwrite(' A = ');
readln(A);
until A <>0; { <-- если А ≠ 0, то идем далее }write(' B = ');
readln(B); { <- вводим В }write(' C = ');
readln(C); { <- вводим С }{ Вызываем функцию по определению количества
корней квадратного уравнения: }writeln('Количество корней: ', RootCount(A, B, C));
writelnend;
readlnend.
Proc18. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S = π·R2. В качестве значения π использовать 3.14.
{ Функция возвращает площадь круга радиуса R }function CircleS(R:real):real;
constpi=3.14; { <- округленное до сотен число "пи" }begin
CircleS :=pi*sqr(R){ <- площадь круга }end;
{ Основная программа }const
n =3; { <- количество кругов для вычисления площади }var
R:real; { <- радиус круга }
i:byte;
beginfor i :=1to n dobeginwrite('R = ');
readln(R);
writeln('Площадь круга: ', CircleS(R):0:2); { <- вызываем функцию }writelnend;
readlnend.
Proc19. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π·R2. В качестве значения π использовать 3.14.
{ Функция возвращает площадь кольца радиусов R1 и R2 }function RingS(R1, R2:real):real;
constpi=3.14; { <- округленное до сотен число "пи" }begin{ Вычисляем площадь кольца с радиусами R1 и R2.}
RingS :=pi*(sqr(R1)-sqr(R2))end;
{ Основная программа }const
n =3;
var
R1, R2:real;
i:byte;
beginfor i :=1to n dobeginwriteln('Введите радиусы R1 и R2 кольца:');
write('R1 = ');
readln(R1); { <- вводим радиус R1 }repeatwrite('R2 = ');
readln(R2); { <- вводим радиус R2 }until R1 > R2; { <- условие существования кольца }writeln('Площадь кольца: ', RingS(R1, R2):0:2);
writelnend;
readlnend.
* * *
Еще один вариант описания функции RingS(R1, R2) для вычисления площади кругового кольца. В этом случае мы используем функцию CircleS(R) из предыдущей задачи Proc18, в которой вычисляется площадь круга. Эту функцию можно использовать в задаче Proc19, а основную часть программы оставить без изменения:
{ Функция возвращает площадь кольца радиусов R1 и R2 }function RingS(R1, R2:real):real;
constpi=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;
beginfor i :=1to n dobeginwriteln('Введите радиусы R1 и R2 кольца (R1>R2):');
write('R1 = ');
readln(R1); { <- вводим радиус R1 }repeatwrite('R2 = ');
readln(R2); { <- вводим радиус R2 }until R1 > R2; { <- условие существования кольца }writeln('Площадь кольца: ', RingS(R1, R2):0:2);
writelnend;
readlnend.
Proc20. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора:
{ Функция возвращает периметр равнобедренного
треугольника по его основанию 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;
beginfor i :=1to3dobeginwrite(' a = ');
readln(a); { <-основание треугольника }write(' h = ');
readln(h); { <- высота }writeln('Периметр треугольника: ', TriangleP(a, h):0:2);
writelnend;
readlnend.