субота, 26 березня 2016 р.

10 клас. Розв'язування задач

Тема: Розв’язування задач
Задача 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.

Немає коментарів:

Дописати коментар