Определить возможность существования треугольника по сторонам

Задача

Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей.

Дано: a, b, c – стороны предполагаемого треугольника.

Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.

Решение

Ниже приведены решения задачи на языке программирования Паскаль двумя способами. В первом случае все стороны проверяются в одном операторе if; во втором случае каждое условие проверяется отдельно, а программа содержит вложенные операторы if-else.

Программа 1 (предпочтительный способ решения):

В языке Паскаль логический оператор and имеет приоритет над операторам >, < и т. п. Поэтому для изменения последовательности выполнения действий в заголовке условного оператора используются скобки.

В условии if проверяется, что каждая из сторон меньше суммы других. Если хотя бы одна будет больше, то все логическое выражение вернет ложь (false). В таком случае сработает ветка else.

var a, b, c: integer;
 
begin
    write (' Длины сторон: ');
    readln (a,b,c);
 
    if (a < b+c) and (b < a+c) and (c < a+b) then
        writeln ('Треугольник существует.')
    else
        writeln ('Треугольник не существует.');
 
readln
end.

Программа 2:

В данном случае существование треугольника проверяется по-этапно. Если первое условие возвращает ложь, то программа переходит к последнему else. Если же первое условие соблюдено, то поток выполнения программы оказывается у вложенного if. Здесь проверяется уже второе условие. Если оно возвращает ложь, то программа переходит к предпоследнему else. Если и второе логическое выражение возвращает истину (true), то программа идет к третьему условию. При его соблюдении выполняется тело самого вложенного оператора if. При его несоблюдении сработает самое вложенное else.

Несмотря на то, что данная программа кажется длиннее, в определенных ситуациях она может выполняться быстрее, чем первая. Здесь если внешнее if возвращает ложь, то остальные логические выражения вообще не проверяются. В первой программе могут и проверяться (это зависит от особенностей языка программирования).

var a, b, c: integer;
 
begin
    write ('Длины сторон: ');
    readln (a,b,c);
 
    if a < b+c then
        if b < a+c then
            if c < a+b then
                writeln ('Треугольник существует.')
            else
                writeln ('Треугольник не существует.')
        else
            writeln ('Треугольник не существует.')
    else
        writeln ('Треугольник не существует.');
 
readln
end.

Тема

Условные операторы

Уровень

Простые задачи

Последняя редакция

Комментарии

Вы забыли добавить еще условие, не только больше но и равны.

if (a <= b+c) and (b <= a+c) and (c <= a+b) then

Пример 1 2 3 (стороны) - треугольник существует. Это будет отрезок в 3 см. Вырожденный треугольник тоже треугольник.

Требуется сравнить длину каждого отрезка с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует. Дополнительно вывести на экран то, каким является треугольник(р\б, р\с, п\у). Дополнительно вывести на экран S= и P= треугольников.

uses crt;
var a,b,c,t,P:integer;
    h,S:real;
begin
writeln('введите длины сторон треугольника abc ');
readln(a,b,c);
t:=0;
if (a+b>c) and (b+c>a) and (c+a>b) then
 begin
 writeln('такой треугольник существует!');
 readln;
 t:=t+1;
 end
else
 begin
 writeln('такой треугольник НЕ существует!');
 readln;
 end;
if t=1 then
 begin
 if (a=b) and (a<>c) then
  begin
  writeln('Треугольник равнобедренный');
  readln;
  P:=a+b+c;
  h:=sqrt(sqr(a)-sqr(c/2))
  S:=0.5*h*c;
  writeln('Периметр р\б треугольника=',P);
  readln;
  writeln('Площадь р\б треугольника=',S:0:1);
  readln;
  end;
  if (a=c) and (a<>b) then
   begin
   writeln('Треугольник равнобедренный');
   readln;
   P:=a+b+c;
   h:=sqrt(sqr(a)-sqr(b/2))
   S:=0.5*h*b;
   writeln('Периметр р\б треугольника=',P);
   readln;
   writeln('Площадь р\б треугольника=',S:0:1);
   readln;
   end;
   if (b=c) and (b<>a) then
    begin
    writeln('Треугольник равнобедренный');
    readln;
    P:=a+b+c;
    h:=sqrt(sqr(c)-sqr(a/2))
    S:=0.5*h*a;
    writeln('Периметр р\б треугольника=',P);
    readln;
    writeln('Площадь р\б треугольника=',S:0:1);
    readln;
    end;
 if (a=b) and (a=c) then
  begin
  writeln('Треугольник равносторонний');
  readln;
  P:=a+b+c;
  h:=(a*sqrt(3))/2;
  S:=0.5*h*a;
  writeln('Периметр р\б треугольника=',P);
  readln;
  writeln('Площадь р\б треугольника=',S:0:1);
  readln;
  end;
 if (sqr(a)=sqr(b)+sqr(c)) then
  begin
  writeln('Треугольник прямоугольный');
  readln;
  P:=a+b+c;
  S:=0.5*b*c;
  writeln('Периметр р\б треугольника=',P);
  readln;
  writeln('Площадь р\б треугольника=',S:0:1);
  readln;
  end;
  if (sqr(c)=sqr(b)+sqr(a))then
   begin
   writeln('Треугольник прямоугольный');
   readln;
   P:=a+b+c;
   S:=0.5*b*a;
   writeln('Периметр р\б треугольника=',P);
   readln;
   writeln('Площадь р\б треугольника=',S:0:1);
   readln;
   end;
   if (sqr(b)=sqr(a)+sqr(c)) then
    begin
    writeln('Треугольник прямоугольный');
    readln;
    P:=a+b+c;
    S:=0.5*a*c;
    writeln('Периметр р\б треугольника=',P);
    readln;
    writeln('Площадь р\б треугольника=',S:0:1);
    readln;
    end;
 end;
end.

Program Treugolnik;
 
var a,b,c:real;
 
Begin
   write('Введите значение a='); readln(a);
   write('Введите значение b='); readln(b);
   write('Введите значение c='); readln(c);
   if ((a+b)>c) and ((a+c)>b) and ((b+c)>a) then
      if (a=b) and (a=c) and (c=b) then
         writeln('Треугольник равносторонний')
      else 
         if (a=b) or (b=c) or (a=c) then
            writeln('Треугольник равнобедренный')
         else 
            writeln('Треугольник разносторонний')
   else 
      writeln('Извините, треугольника с такими сторонами быть не может');
 
end.

А если не городить несколько вложенных else-if, а сделать одним, вот так:

var a, b, c: integer;
begin
write('Введите длины сторон треугольника: ');
read(a, b, c);
if (a<(c+b)) and (b<(a+c)) and (c<(a+b)) then write('Такой треугольник существует.')
else write('Такой треугольник не существует.');
read;
end.