Показать сообщение отдельно
Старый 17.05.2013, 17:03   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от совушка Посмотреть сообщение
1)Пусть даны три числа. Если они могут быть длинами сторон треугольника, определите его вид (прямоугольный, тупоугольный, остроугольный). Вычислите длины его высот и напечатайте их в порядке убывания.
Код:
Var
 a,b,c,Ha,Hb,Hc,p,S,Alpha,Beta,Gamma,h1,h2,h3:Real;

function ArcCos(X:real):real;
begin
 if Round(X*10000000)=10000000 then ArcCos:=0 else
 if Round(X*10000000)=-10000000 then ArcCos:=Pi else
 ArcCos:=(Pi/2)-ArcTan(X/Sqrt(1-X*X));
end;

Begin
 Write('a= ');
 Readln(a);
 Write('b= ');
 Readln(b);
 Write('c= ');
 Readln(c);
 If ((a+b)<=c) or ((a+c)<=b) or ((b+c)<=a) then
  Writeln('It can not be a triangle!')
 else
  begin
   Alpha:=ArcCos((b*b+c*c-a*a)/(2*b*c));
   Beta:=ArcCos((a*a+c*c-b*b)/(2*a*c));
   Gamma:=ArcCos((a*a+b*b-c*c)/(2*a*b));
   If (Round(Alpha*1000)=Round(Pi*500)) or
      (Round(Beta*1000)=Round(Pi*500)) or
      (Round(Gamma*1000)=Round(Pi*500)) then
    Writeln('Right') else
   If (Alpha>Pi/2) or (Beta>Pi/2) or (Gamma>Pi/2) then
    Writeln('Obtuse') else
    Writeln('Acute');
   p:=(a+b+c)/2;
   S:=Sqrt(p*(p-a)*(p-b)*(p-c));
   Ha:=S*2/a;
   Hb:=S*2/b;
   Hc:=S*2/c;
   If (Ha>Hb) and (Ha>Hc) then
    begin
     h1:=Ha;
     if Hb>Hc then
      begin
       h2:=Hb;
       h3:=Hc;
      end else
      begin
       h2:=Hc;
       h3:=Hb;
      end;
    end
   else
   If (Hb>Ha) and (Hb>Hc) then
    begin
     h1:=Hb;
     if Ha>Hc then
      begin
       h2:=Ha;
       h3:=Hc;
      end else
      begin
       h2:=Hc;
       h3:=Ha;
      end;
    end
   else
    begin
     h1:=Hc;
     if Ha>Hb then
      begin
       h2:=Ha;
       h3:=Hb;
      end else
      begin
       h2:=Hb;
       h3:=Ha;
      end;
    end;
   Writeln('H1 = ',h1:0:3);
   Writeln('H2 = ',h2:0:3);
   Writeln('H3 = ',h3:0:3);
  end;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070