Найдите стороны треугольника - Pascal ABC

Формулировка задачи:

Периметр треугольника ABC равен 15 см.Сторона ВС больше стороны АВ на 2 см, а сторона AB меньше стороны АС на 1 см. Найдите стороны треугольника. Нужна программа на ПАСКАЛЬ с рисунком

Код к задаче: «Найдите стороны треугольника - Pascal ABC»

textual
uses graphABC;
var x0,y0,x1,y1,x2,y2,x3,y3:integer;
    a,b,c,p,h,x,l,m:real;
begin
p:=15;
//решаем
//a+b+c=p
//c=a-2
//b=a-1
//a+a-2+a-1=3a-3=p->a=(p+3)/3
a:=(p+3)/3;
b:=a-1;
c:=a-2;
//определим центр экрана
x0:=windowwidth div 2;
y0:=windowheight div 2;
p:=p/2;{полупериметр}
h:=2*sqrt(p*(p-a)*(p-b)*(p-c))/a;//длина высоты, опущенной на сторонону а
if a*a+c*c<b*b then
 begin
  x:=sqrt(c*c-h*h);//дополнение стороны а влево
  l:=a+x;//длина горизонтальной проекции треугольника
 end
else if a*a+b*b<c*c then
 begin
  x:=sqrt(b*b-h*h);{вправо}
  l:=a+x;
 end
else
 begin
  x:=sqrt(b*b-h*h);//часть нижней стороны а слева от основания высоты
  l:=a;
 end;
//определим масштаб изображения на экран
m:=(y0-40)/(h/2);//по вертикали
if (2*x0-60)/l<m then m:=(2*x0-60)/l;//если по горизонтаи меньше, то этот масштаб
if a*a+c*c<b*b then
 begin
  x3:=x0+round(l*m/2);
  x2:=x3-round(x*m);
  x1:=x2-round(a*m);
 end
else if a*a+b*b<c*c then
 begin
  x3:=x0-round(l*m/2);
  x1:=x3+round(x*m);
  x2:=x1+round(a*m);
 end
else
 begin
  x1:=x0-round(l*m/2);//левая вершина
  x2:=x0+round(l*m/2);//правая вешина
  x3:=x1+round(x*m);//верхняя вершина
 end;
y1:=y0+round(h*m/2);
y2:=y1;
y3:=y0-round(h*m/2);
setpencolor(clRed);//рисуем треугольник красным
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);
textout(x3-5,y3-15,'A');
textout(x1-10,y1,'C');
textout(x2+10,y2,'B');
textout((x1+x2)div 2,y1+10,'a='+floattostr(a));
textout((x1+x3)div 2-30,(y1+y3) div 2-10,'b='+floattostr(b));
textout((x3+x2)div 2+10,(y3+y2) div 2-10,'c='+floattostr(c));
end.

12   голосов, оценка 3.917 из 5


СОХРАНИТЬ ССЫЛКУ