Дано N точок c координатами (х,у) найти три точки которые есть координатами треугольника с наибольшим углом — Pascal(Паскаль)

Программа

program Moduli;{íàçâà ïðîãðàìè}
uses Crt,Vectors;{ï³äêëþ÷åííÿ ìîäóë³â}
var A:array[1..1000] of Vector;{ìàñèâ âåêòîð³â}
    i,j,l,N,ik,jk,lk:integer;{i,j,l-ë³÷èëüíèê,N-ê³ëüê³ñòü òî÷îê,ik,jk,lk-øóêàí³ òî÷êè}
    Max:real;{Max-ìàêñèìàëüíèé êóò}
    M1,M2,M3:Vector;{äîäàòêîâi çì³ííà}
begin
clrscr;{î÷èñòêà åêðàíó}
randomize;{àêòèâàö³ÿ ãåíåðàòîðà âèïàäêîâèõ ÷èñåë}
writeln('Ïîøóê 3 òî÷îê ÿê³ º êîîðäèíàòàìè òðèêóòíèêà ç íàéá³ëüøèì êóòîì.');
write('Ââåä³òü ê³ëüê³ñòü òî÷îê N -> ');
read(N);{ç÷èòóâàííÿ N}
for i:=1 to 2*N do begin{çàïîâíåííÿ ìàñèâó âèïàäêîâèìè ÷èñëàìè}
                    A[i].x:=random(25)+1;
                    A[i].y:=random(25)+1;
                   end;
for i:=1 to 2*N do writeln('Âåêòîð ¹',i,' õ=',A[i].x:3:2,'ó=',A[i].y:3:2);{âèâ³ä çôîðìîâàíèõ òî÷îê}
ik:=1;{çà ïîòð³áí³ òî÷êè ïðèéìàºì 1,2,3}
jk:=2;
lk:=3;
max:=0;
for i:=1 to 2*N-2 do
 for j:=2 to 2*N-1 do
  for l:=3 to 2*N do begin
                      vSMn(A[i],A[j],M1);{ñêàëÿðíå ìíîæåííÿ}
                      vSMn(A[j],A[l],M2);
                      vSMn(A[l],A[i],M3);
                      if((vDovz(M1)/vDovz(A[j])*vDovz(A[l]))>Max)or
                        (vDovz(M2)/vDovz(A[l])*vDovz(A[i]))>Max)or
                        (vDovz(M3)M3/vDovz(A[i])*vDovz(A[j]))>Max))
                      then begin
                            Max:=M/vDovz(A[j])*vDovz(A[l]);
                            ik:=i;
                            jk:=j;
                            lk:=l;
                           end;
                     end;
 
                           
writeln(' ',ik,' ',jk,' ',lk);
 
readln;
readln;
end.

Модуль

Unit Vectors;{³ì'ÿ ìîäóëÿ}
interface
{²íòåðôåéñíà ÷àñòèíà. Òóò çáåð³ãàþòüñÿ îïèñè âñèõ ãëîáàëüíèõ îá'ºêò³â ìîäóëÿ
 (òèï³â, êîíñòàíò, çì³ííèõ ³ ï³äïðîãðàì), ÿê³ ïîâèíí³ áóòè äîñòóïí³ â îñíîâí³é
 ïðîãðàì³ ÷è ³íøèì ìîäóëÿì Ïàñêàëÿ}
 Type Vector=record{îãîëîøåííÿ çàïèñó Vector}
    x,y:real;
   end;
 procedure vPlus(t1,t2,t3:Vector);{Îïèñ ïðîöåäóðè äîäàâàííÿ âåêòîð³â}
 procedure vMinus(t1,t2,t3:Vector);{Îïèñ ïðîöåäóðè â³äí³ìàííÿ âåêòîð³â}
 function vSMn(t1,t2,t3:Vector):real;{Îïèñ ôóíêö³¿ ñêàëÿðíîãî ìíîæåííÿ âåêòîð³â}
 procedure vMnCh(t1:Vector;Ch:real;t2:Vector);{Îïèñ ïðîöåäóðè ìíîæåííÿ
                                                  âåêòîðà íà ÷èñëî}
 function vDovz(t:Vector):real;{Îïèñ ôóíêö³¿ äîâæèíà âåêòîðà}
implementation
{Âèêîíóâàíà ÷àñòèíà. ̳ñòèòü îïèñè ïðîãðàì, îá'ÿâëåíèõ  ³íòåðôåéñí³é ÷àñòèí³.
  í³é ìîæóòü îá'ÿâëÿòèñÿ ëîêàëüí³ äëÿ ìîäóëÿ îá'ºêòè - äîïîì³æí³ òèïè,
 êîíñòàíòè, çì³íí³ ³ áëîêè, à òàêîæ ì³òêè}
{ uses crt;}{----------------------------------------------------------------------------}
 procedure vPlus;{Îïèñ ïðîöåäóðè äîäàâàííÿ âåêòîð³â}
  begin
   t3.x:=t1.x+t2.x;{äîäàâàííÿ õ}
   t3.y:=t1.y+t2.y;{äîäàâàííÿ ó}
  end;
 procedure vMinus;{Îïèñ ïðîöåäóðè â³äí³ìàííÿ âåêòîð³â}
  begin
   t3.x:=t1.x-t2.x;{â³äí³ìàííÿ õ}
   t3.y:=t1.y-t2.y;{â³äí³ìàííÿ ó}
  end;
 function vSMn;{Îïèñ ôóíêö³¿ ñêàëÿðíîãî ìíîæåííÿ âåêòîð³â}
  begin
   vSMn:=t1.x*t2.x+t1.y*t2.y;{ñêàëÿðíå ìíîæåííÿ âåêòîð³â}
  end;
 procedure vMnCh;{Îïèñ ïðîöåäóðè ìíîæåííÿ âåêòîðà íà ÷èñëî}
  begin
   t2.x:=t1.x*Ch;{ìíîæåííÿ õ íà ÷èñëî}
   t2.y:=t1.y*Ch;{ìíîæåííÿ ó íà ÷èñëî}
  end;
 function vDovz;{Îïèñ ôóíêö³¿ äîäàâàííÿ âåêòîð³â}
  begin
   vDovz:=sqrt(sqr(t.x)+sqr(t.y));
  end;
 end.{çàê³í÷åííÿ âèêîíóâàíî¿ ÷àñòíèíè}

Leave a Comment

8 + 2 =