Помощь - Поиск - Пользователи - Календарь
Полная версия: Является ли решение задачи рациональным?
Форум «Всё о Паскале» > 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(c)) or (sqr(b)+sqr(c)=sqr(a)) or (sqr(a)+sqr(c)=sqr(b)))
                      then
                          writeln ('Treugolnik raznostoronniy ')
                      else
                          if (sqr(a)+sqr(b)=sqr(c)) or (sqr(b)+sqr(c)=sqr(a)) or (sqr(a)+sqr(c)=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(c)) or (sqr(b)+sqr(c)=sqr(a)) or (sqr(a)+sqr(c)=sqr(b)) then writeln('прямоугольный')
						else writeln('разносторонний');				
		end
		else writeln('не существует');
end.

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