超简单pascal题

来源:百度知道 编辑:UC知道 时间:2024/05/28 07:42:18
题目:三条直线段的长度是整数。用这三条直线段是否能构成一个三角形;若能则确定是否能构成直角三角形。输出结果为一下三种情况之一:can form a triangle(能构成三角形)、can form a right triangle(能构成直角三角形)和can not form a triangle(不能构成三角形)。

我编的是这样的:
program a4;
var a,b,c:integer;
begin
readln(a,b,c);
if (((a>0) and (b>0) and (c>0))and((a+b>c) and (a+c>b) and (b+c>a))) then writeln('can form a triangle')
else writeln('can not form a triange');
if (a*a+b*b=c*c) then writeln('can form a right triangle');
readln;
end.

问题在于:如果打进去3、4、5,出来的就不只一种情况了,可题目要求输出三种情况之一,该如何改呢?
那位技术高超的网友能帮助我,好的有追加……

program a4;
var a,b,c:integer;
begin
readln(a,b,c);
if (((a>0) and (b>0) and (c>0))and((a+b>c) and (a+c>b) and (b+c>a))) then
if (a*a+b*b=c*c)or(a*a+c*c=b*b)or(b*b+c*c=a*a)
then writeln('can form a right triangle')
else writeln('can form a triangle')
else writeln('can not form a triange');
readln;
end.

其实用不到那么多if嵌套 还容易错...上来对3条边进行一个小排序 程序就简单多了
因为如果是直角三角形 必然2条较短边平方和等于长边平方
否则的话 用2较小边之和与第三边大小比较即可
program a4;
var a,b,c,t:integer;
begin
readln(a,b,c);
if a>b then begin t:=a; a:=b; b:=t; end;
if b>c then begin t:=b; b:=c; c:=t; end;
if a>c then begin t:=a; a:=c; c:=t; end;
if sqr(a)+sqr(b)=sqr(c)then writeln('can form a right triangle')
else if a+b>c then writeln('can form a triange')
else writeln('can not form a triange');
readln;
end.

先排序,再判断两短边的平方和是否等于第三边,不是的话再判断能