Номер §9 ПМ 4

ГДЗ по информатике 11 класс, Босова 2024, страница 128

§ ПМ Функция площади многоугольника

Выполните программу на компьютере. На основе этой программы напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. Используйте эту функцию для вычисления площади n-угольника.

Решение

В программе примера переменная p участвует в выражении p := p + .... Перед ним следует записать p := , чтобы вычисление не зависело от начального содержимого переменной. Для проверки введём вершины , , : длины сторон равны , и , поэтому программа должна вывести периметр .

Для площади используем формулу по координатам. Сначала вычислим величину

.

Она равна удвоенной площади треугольника со знаком, определяемым порядком обхода вершин. Обычная площадь неотрицательна, поэтому .

Оформим оба вычисления функциями, как предусмотрено в п. .. Функция DoubleArea сохранит знак, а требуемая функция TriangleArea вернёт именно площадь треугольника. Координаты храним как целые числа; функции принимают вещественные параметры, чтобы умножение выполнялось с вещественным результатом.

program PolygonArea;
var
  x, y: array[..] of longint;
  n, i: integer;
  total, d, s: real;

function DoubleArea(x, y, x, y, x, y: real): real;
begin
  DoubleArea := (x - x) * (y - y)
              - (y - y) * (x - x);
end;

function TriangleArea(x, y, x, y, x, y: real): real;
begin
  TriangleArea := abs(DoubleArea(x, y, x, y, x, y)) / ;
end;

begin
  readln(n);
  if (n < ) or (n > ) then
    writeln('Неверное число вершин')
  else
  begin
    for i :=  to n do
      readln(x[i], y[i]);
    total := ;
    for i :=  to n -  do
    begin
      d := DoubleArea(x[], y[], x[i], y[i], x[i + ], y[i + ]);
      s := TriangleArea(x[], y[], x[i], y[i], x[i + ], y[i + ]);
      if d <  then
        total := total - s
      else
        total := total + s;
    end;
    writeln('S = ', abs(total)::);
  end;
end.

Вершины вводим по порядку обхода границы простого многоугольника. Цикл рассматривает треугольники , и далее до : у них общая первая вершина. Для выпуклого многоугольника они составляют разбиение на треугольники, и их площади складываются. Для невыпуклого многоугольника некоторые треугольники могут заходить за границу; знак d позволяет вычесть лишние участки. Поэтому модуль берём после суммирования.

Пример: квадрат со стороной разбивается диагональю на два треугольника.

22ABCD

Для треугольника ABC получаем .

По формуле площади .

Для треугольника ACD получаем .

Следовательно, .

Оба знака положительны, поэтому площадь квадрата . При вводе этих четырёх вершин программа выводит S = ..

Ответ

Функция TriangleArea возвращает площадь треугольника . Площадь простого n-угольника вычисляется суммированием площадей треугольников с общей первой вершиной с учётом знака обхода. Для квадрата со стороной программа выводит S = ..

Помогло?

Нет твоего задания?Сфоткай, и ДЗмэн решит за пару секунд.

Решить по фото