Тема: Розв’язування задач
Задача 1. Даний
трикутник з вершинами (X1, Y1); (X2, Y2); (X3, Y3) і точка (X, Y). Всі Xi, Yi -
дійсні числа. Визначити, чи лежить ця точка всередині цього трикутника.
Приклад
(0, 0),
(3, 0); (0, 3) і (1, 1)
Результат:
TRUE
Варіант
вирішення
Code
(Pascal):
const
eps = 1E-5;
var X1,
Y1, X2, Y2, X3, Y3, X, Y: Real;
S0, S1,
S2, S3: Real;
function
S (X1, Y1, X2, Y2, X3, Y3: Real): Real;
var a,
b, c, p: Real;
begin
a: =
Sqrt (Sqr (X1 - X2) + Sqr (Y1 - Y2));
b: =
Sqrt (Sqr (X1 - X3) + Sqr (Y1 - Y3));
c: =
Sqrt (Sqr (X3 - X2) + Sqr (Y3 - Y2));
p: =
0.5 * (a + b + c);
S: =
Sqrt (p * (p - a) * (p - b) * (p - c));
end;
{func S}
begin
ReadLn
(X1, Y1, X2, Y2, X3, Y3, X, Y);
S0: = S
(X1, Y1, X2, Y2, X3, Y3);
S1: = S
(X, Y, X2, Y2, X3, Y3);
S2: = S
(X1, Y1, X, Y, X3, Y3);
S3: = S
(X1, Y1, X2, Y2, X, Y);
WriteLn
(S0 + eps> = S1 + S2 + S3);
end.
Задача 2. Задана
множина точок на площині. Виберіть з них чотири різні точки, які є вершинами
квадрата найбільшого периметра.
var
a:array [1..1000] of integer;
i,j,k,l,n,mi,mj,mk,ml:integer;
d1,d2,d3,d4,p,mp:real;
{по х}
function
x(i:integer):real;
begin
x:=a[2*i-1];
end;
{по y}
function
y(i:integer):real;
begin
y:=a[2*i]
end;
{довжина
відрізка (використовуємо 2 вище описані функції)}
function
dl(i,j:integer):real;
begin
dl:=sqrt(sqr(x(i)-x(j))+sqr(y(i)-y(j)))
end;
{begin}
begin
writeln('Кількість точок: ');
readln(n);
for i:=1 to n do
begin
write('x[',i,']=');
readln(a[2*i-1]);
write('y[',i,']=');
readln(a[2*i]);
end;
for i:=1 to n-3 do
for j:=i+1 to n-2 do
for l:=j+1 to n-1 do
for k:=l+1 to n do
begin
d1:=dl(j,i);;
d2:=dl(l,j);
d3:=dl(k,l);
d4:=dl(k,i);
if (d1=d2) and (d2=d3) and
(d3=d4) and (d4=d1) then
if (d1<>0) then
begin
p:=d1+d2+d3+d4;
if p>mp then
begin
mi:=i;
mj:=j;
mk:=k;
ml:=l;
mp:=p;
end;
end;
end;
if p<>0 then
begin
writeln('Квадрат с максимальним
периметром: ');
writeln('Точки
:',mi,':',mj,':',ml,':',mk);
writeln('Периметр: ',mp:4:2);
end
else
writeln('НЕМА КВАДРАТА!');
ReadLn;
end.
Немає коментарів:
Дописати коментар