Root /ArchiveAbout
()

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.

{ Функция возвращает знак вещественного числа 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.

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

{ Функция возвращает площадь круга радиуса 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.

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

{ Функция возвращает площадь кольца радиусов 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.

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

{ Функция возвращает периметр равнобедренного
 треугольника по его основанию 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