不是VIP会员,不能显示答案

题目解答

题目:
问题描述:共14分(4+2+3+3+2分)
给出一个凸多边形,可以取得若干个内接三角形,同时约定内接三角形必 须有一条边(仅能有一条边)与凸多边形的边相重合,例如:下面的5边形中,可能有 的内接三角形有5种:

问题:当依次给出凸多边形的每个顶点的2个坐标之后,找出一个面积最大的内接三角
形,输出该三角形的面积与三个顶点的坐标。
[算法说明]:凸多边形的每个顶点用一对坐标(x,y)表示;
用数组p:array[1..2*n] of point; 存贮输入的顶点坐标;
同时编制一个由三角形的三个顶点计算其面积的函数sea。
program exp5(input,output);
  const n=6;
  type point=record x,y:real end;
  var p           :array[1..2*n] of point;
     i,j           :integer;
     q1,q2,q3     :point;
     smax        :real;
 function sea(p1,p2,p3:point):real;
   var s1,s2,s3,p4:real;
     begin
       s1:=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
       s2:=sqrt((p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p1.y-p3.y));
       s3:=sqrt((p2.x-p3.x)*(p2.x-p3.x)+(p2.y-p3.y)*(p2.y-p3.y));
       p4:= (S1+S2+S3)/2  ; sea:=sqrt(p4*(p4-s1)*(p4-s2)*(p4-s3));
     end;
   begin
     for i:=1 to n do readln(p[i].x,p[i].y);  smax:=0;
     for i:=1 to n-1 do  P[n+i]:=P[i]    
     for i:=1 to n do
     for j:=   i+3 TO i+2+n-4    do
     if   Smax<Sea(P[i],P[i+1],P[j])   then 
       begin
         smax:=sea(p[i],p[i+1],p[j]); 
         q1:=p[i];  q2:=  P[i+1]    ;   q3:=p[j]
       end;
     writeln(smax,q1.x,q1.y,q2.x,q2.y,q3.x,q3.y)
   end.
考点:
分析:
解答:
评论:
老师: