Помощь - Поиск - Пользователи - Календарь
Полная версия: Является ли решение задачи рациональным?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Extraneo
Текст задачи такой:
Цитата
Запросить стороны треугольника и определить, является ли он разносторонним, равнобедренным или равносторонним. Учесть условие : третья сторона не должна превышать сумму двух других, иначе треугольник не существует.

я немного усложнил условие и ввел возможность определения прямоугольного треугольника.
Рационально ли написана программа или можно упростить код? я новичок, и у меня есть привычка все усложнять.
uses
crt;
var
a,b,c: integer;
begin
clrscr;
writeln ('Vvedite dliny storon treugolnika ');
readln (a,b,c);
if (a=b) and (b=c)
then
writeln ('Treugolnik ravnostoronniy ')
else
if ((a=b) or (b=c) or (a=c)) and ((a<(b+c)) and (b<(a+c)) and (c<(a+b)))
then
writeln ('Treugolnik ravnobedrenniy ')
else
if ((a<>b) and (a<>c) and (b<>c)) and ((a<(b+c)) and (b<(a+c)) and (c<(a+b))) and not ((sqr(a)+sqr(b)=sqr©) or (sqr(b)+sqr©=sqr(a)) or (sqr(a)+sqr©=sqr(b)))
then
writeln ('Treugolnik raznostoronniy ')
else
if (sqr(a)+sqr(b)=sqr©) or (sqr(b)+sqr©=sqr(a)) or (sqr(a)+sqr©=sqr(b))
then
writeln ('Treugolnik prjamougolniy ')
else
writeln ('Dannogo treugolnika ne sushestvuet ');
readln;
end.
TarasBer
Ну я бы существование треугольника проверил первый делом.
Если if стоит сразу после else, то между ними не надо делать перенос и лишний отступ, потому что получается такая лесенка.
Условие
sqr(a)+sqr(b)=sqr©) or (sqr(b)+sqr©=sqr(a)) or (sqr(a)+sqr©=sqr(b) я бы вычислил заранее и сохранил в отдельную булевскую переменную.

(a=b) or (b=c) or (a=c) - тоже вычислил бы отдельно, тогда будет проще определять равнобедренные прямоугольные треугольники.
romku
Не хочу навязывать свое решение, но я сделал так:

var
a,b,c: integer;
begin
writeln('Введите стороны треугольника');
readln(a,b,c);
write('Треугольник ');
if (a<=(b+c)) and (b<=(a+c)) and (c<=(a+b)) then
begin
if (a=b) or (b=c) or (a=c) then
begin
if (a=b) and (b=c) then writeln('равносторонний')
else writeln('равнобедренный ');
end
else
if (sqr(a)+sqr(b)=sqr©) or (sqr(b)+sqr©=sqr(a)) or (sqr(a)+sqr©=sqr(b)) then writeln('прямоугольный')
else writeln('разносторонний');
end
else writeln('не существует');
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.