Используется формула Гаусса (формула "шнурования").
// PascalABC.NET 3.3, сборка 1583 от 25.11.2017 // Внимание! Если программа не работает, обновите версию!
- с функцией:
function SPolygonGauss(a:array of real):real; // Возвращает вычисленную по формуле Гаусса площадь многоугольника, // координаты вершин которого заданы массивами х и у begin var (n,i):=(a.Length-4,0); Result:=0.0; while i<=n do begin Result+=a[i]*a[i+3]-a[i+1]*a[i+2]; i+=2 end; Result:=Abs(0.5*Result) end;
begin var x:=ReadArrReal('Введите координаты вершин 5-угольника:',10); SetLength(x,12); x[10]:=x[0]; x[11]:=x[1]; Writeln('Площадь равна ',SPolygonGauss(x)) end.
Пример Введите координаты вершин 5-угольника: 0.6 2.1 1.8 3.6 2.2 2.3 3.6 2.4 3.1 0.5 Площадь равна 3.915
- с процедурой:
procedure SPolygonGauss(a:array of real; var s:real); // Вычисляет по формуле Гаусса площадь многоугольника, // координаты вершин которого заданы массивами х и у begin var (n,i):=(a.Length-4,0); s:=0.0; while i<=n do begin s+=a[i]*a[i+3]-a[i+1]*a[i+2]; i+=2 end; s:=Abs(0.5*s) end;
begin var x:=ReadArrReal('Введите координаты вершин 5-угольника:',10); SetLength(x,12); x[10]:=x[0]; x[11]:=x[1]; var s:real; SPolygonGauss(x,s); Writeln('Площадь равна ',s) end.
// PascalABC.NET 3.3, сборка 1583 от 25.11.2017
// Внимание! Если программа не работает, обновите версию!
- с функцией:
function SPolygonGauss(a:array of real):real;
// Возвращает вычисленную по формуле Гаусса площадь многоугольника,
// координаты вершин которого заданы массивами х и у
begin
var (n,i):=(a.Length-4,0);
Result:=0.0;
while i<=n do begin
Result+=a[i]*a[i+3]-a[i+1]*a[i+2];
i+=2
end;
Result:=Abs(0.5*Result)
end;
begin
var x:=ReadArrReal('Введите координаты вершин 5-угольника:',10);
SetLength(x,12);
x[10]:=x[0];
x[11]:=x[1];
Writeln('Площадь равна ',SPolygonGauss(x))
end.
Пример
Введите координаты вершин 5-угольника: 0.6 2.1 1.8 3.6 2.2 2.3 3.6 2.4 3.1 0.5
Площадь равна 3.915
- с процедурой:
procedure SPolygonGauss(a:array of real; var s:real);
// Вычисляет по формуле Гаусса площадь многоугольника,
// координаты вершин которого заданы массивами х и у
begin
var (n,i):=(a.Length-4,0);
s:=0.0;
while i<=n do begin
s+=a[i]*a[i+3]-a[i+1]*a[i+2];
i+=2
end;
s:=Abs(0.5*s)
end;
begin
var x:=ReadArrReal('Введите координаты вершин 5-угольника:',10);
SetLength(x,12);
x[10]:=x[0];
x[11]:=x[1];
var s:real;
SPolygonGauss(x,s);
Writeln('Площадь равна ',s)
end.
// Example program#include <iostream>#include <string>
using namespace std;
int count_;const unsigned int DIM1 = 6;const unsigned int DIM2 = 6;int m[DIM1][DIM2] = { { 'S', '.', '.', '.', '#', '#' }, { '#', '.', '#', '.', '.', '.' }, { '.', '.', '#', '.', '.', '#' }, { '.', '.', '#', '#', '#', '.' }, { '#', '.', '.', '.', '#', '#' }, { '#', '#', '#', '.', '.', 'F' }};int find_p(int x, int y) { if (x < 0 || x > 5 || y < 0 || y > 5) return 0; if (m[y] [x] == 'F') return 1; if (m[y] [x] != '.' && m[y] [x] != 'S') return 0; m[y] [x] = '+'; count_++; if (find_p (x, y - 1)) return 1; if (find_p (x + 1, y)) return 1; if (find_p (x, y + 1)) return 1; if (find_p (x - 1, y)) return 1; m[y] [x] = 'x'; return 0;}int main(){ find_p(0, 0); cout<<"\n Otvet="<<count_;}