iznosdet.PAS

{* Процента износа детали *}

Unit IZNOSDET;
Interface
Implementation
Begin
 writeln('Определение процента износа детали по заданным координатам');
End.

Program pas46663;

Uses iznosdet.pas; {* Эту строку можно удалить *}
Uses wincrt; {* Вызов внешних функций *}
Var {* В работе нам потребуются переменные: *}
  i                : integer;
  j                : integer;
  n                : integer;
  t                : Array[1..100, 1..2] Of real;
  a                : Array[1..100, 1..2] Of real;
  fin              : text;
  fout             : text;
  s1               : real;
  s2               : real;
  q                : real;
Procedure per(x1 : real;
y1               : real;
x2               : real;
y2               : real;
x3               : real;
y3               : real;
x4               : real;
y4               : real;
Var {* Объявление переменных *}
  x : real);
  y : real);
Var {* Объявление переменных *}
  a1                 : real;
  a2                 : real;
  b1                 : real;
  b2                 : real;
  c1                 : real;
  c2                 : real;
  Begin
  a1 := y2 - y1;
  b1 := x1 - x2;
  c1 := - x1 * (y2 - y1) + y1 * (x2 - x1);
  a2 := y4 - y3;
  b2 := x3 - x4;
  c2 := - x3 * (y4 - y3) + y3 * (x4 - x3);
  y := (a1 * c2 - a2 * c1) / (a2 * b1 - a1 * b2);
  x := (b1 * c2 - b2 * c1) / (b2 * a1 - b1 * a2);
Function square(x1 : real);
y1                 : real);
x2                 : real);
y2                 : real);
x3                 : real);
y3                 : real);
Var {* Необходимые переменные *}
  a : real;
  b : real;
  c : real;
  s : real;
  p : real;
  Begin
  a := sqrt(sqr(x2 - x1) + sqr(y2 - y1));
  b := sqrt(sqr(x3 - x1) + sqr(y3 - y1));
  c := sqrt(sqr(x2 - x3) + sqr(y2 - y3));
  p := (a + b + c) / 2;
  s := sqrt(p * (p - a) * (p - b) * (p - c));
  square := s;
  End;
  Begin
  assign(fin, 'figure.In'); {* Привязка переменной fin к файлу 'figure.In' *}
  reset(fin); {* Подготовка переменной fin для чтения из файла *}
  readln(fin, n);
For i := 1 To n * 2 Do {* Увеличиваем i от 1 до n с шагом 1 *}
  read(fin, t[i, 1], t[i, 2]);
j := 1;
For i := 1 To n - 1 Do {* Цикл для i => [1 .. n] *}
  Begin
per(t[j, 1], t[j, 2], t[j + 1, 1], t[j + 1, 2], t[j + 2, 1], t[j + 2, 2], t[j + 3, 1], t[j + 3, 2], a[i, 1], a[i, 2]);
j := j + 2;
End;
per(t[1, 1], t[1, 2], t[2, 1], t[2, 2], t[2 * n - 1, 1], t[2 * n - 1, 2], t[2 * n, 1], t[2 * n, 2], a[n, 1], a[n, 2]);
s1 := 0;
s2 := 0;
For j := 2 To 2 * n - 1 Do {* Увеличиваем j от 2 до 2 с шагом 1 *}
  s1 := s1 + square(t[1, 1], t[1, 2], t[j, 1], t[j, 2], t[j + 1, 1], t[j + 1, 2]);
For j := 2 To n - 1 Do {* Цикл для j => [2 .. n] *}
  s2 := s2 + square(a[1, 1], a[1, 2], a[j, 1], a[j, 2], a[j + 1, 1], a[j + 1, 2]);
writeln(abs(s2 - s1) / s2 * 100 : 5 : 4);
End....