В задаче 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;
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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Proc17. Описать функцию RootCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A·x2 + B·x + C = 0 (A, B, C — вещественные параметры, A ≠ 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта:
D = B2 − 4·A·C.
{ Функция возвращает количество корней квадратного уравнения }
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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Proc18. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S = π·R2. В качестве значения π использовать 3.14.
{ Функция возвращает площадь круга радиуса 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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Proc19. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π·R2. В качестве значения π использовать 3.14.
{ Функция возвращает площадь кольца радиусов 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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 * * *
Еще один вариант описания функции RingS(R1, R2) для вычисления площади кругового кольца. В этом случае мы используем функцию CircleS(R) из предыдущей задачи Proc18, в которой вычисляется площадь круга. Эту функцию можно использовать в задаче Proc19, а основную часть программы оставить без изменения:
{ Функция возвращает площадь кольца радиусов 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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните эту задачу с заданием Begin13.
Proc20. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора:
b2 = (a/2)2 + h2.
{ Функция возвращает периметр равнобедренного
треугольника по его основанию 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.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x.**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255