Требуется написать программу, на вход которой подаются 3 стороны прямоугольника и ,если этот прямоугольник тупоугольный - то она вычислит его площадь и выведет стороны в порядке убывания. Написал программу, которая работает с данными 3,3,5 и 5,3,3 например. Но вот 3,5,3 - не работает. Помогите понять, где ошибка...
Причем еще из наблюдений - если убрать проверку на тупоугольность - то он неправильно выведет числа , а именно 3,5,3 ... Так что скорее всего ошибка именно в сравнении 3-х чисел.
var
a,b,c,a1,b1,c1: integer;
S,p:real;
begin
a:= strtoint (Edit_a.Text);
b:= strtoint (Edit_b.Text);
c:= strtoint (Edit_c.Text);
a1:=a;
b1:=b;
c1:=c;
//Предполагается, что все эти ужасные 6 условий ниже затолкают большую сторону треугольника в С, а две другие в А и B.
if (a<=b) and (a<=c) and (b<=c) then begin a:=a1;b:=b1;c:=c1; end;
if (a<=b) and (a<=c) and (c<=b) then begin a:=a1;b:=c1;c:=b1; end;
if (b<=a) and (b<=c) and (a<=c) then begin a:=b1;b:=a1;c:=c1; end;
if (b<=a) and (b<=c) and (c<=a) then begin a:=b1;b:=c1;c:=a1; end;
if (c<=a) and (c<=b) and (a<=b) then begin a:=c1;b:=a1;c:=b1; end;
if (c<=a) and (c<=b) and (b<=a) then begin a:=c1;b:=b1;c:=a1; end;
//Проверка на равность 2-х сторон
if not ((a=b) or (a=c) or (c=b)) then
begin
ShowMessage('Треугольник не равнобедренный !');
exit;
end;
//Если квадрат гипотенузы > суммы квадратов катетов - треугольник будет тупоугольным,на это и проверяю
if not ((a*a+b*b<c*c)) then
begin
ShowMessage('Треугольник не тупоугольный !');
exit;
end;
//Подсчитывается полупериметр, а затем площадь , но проблема точно не в этом
p:=(a+b+c)/2;
S:=Sqrt(p*(p-a)*(p-b)*(p-c));
Edit_result.Text:= 'S=' + formatfloat('0.000',S) + '. Стороны в порядке возрастания: ' + floattostr(a)+', '+ floattostr(b) + ', ' + floattostr(c);
end;
end.