Заявление Ruby -If-Else (Тест треугольника) - PullRequest
1 голос
/ 19 июля 2011

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

мой ответ:

def is_triangle(a,b,c)

  if a+b > c
    return true
  elsif a+c>b
    return true
  elsif b+c>a
    return true
  else
    return false
  end
end

Дело в том, что мое предполагаемое ложное возвращение продолжает возвращаться как истинное,пожалуйста, помогите!

Ответы [ 7 ]

4 голосов
/ 19 июля 2011

Эта логика должна работать для поиска вашего треугольника

def is_triangle?(a,b,c)
  sorted = [a,b,c].sort
  greatest_side = sorted.pop
  greatest_side < sorted.sum
end
3 голосов
/ 20 июля 2011

Еще один подход:

def is_triangle?(a,b,c)
  [a,b,c].max < [a,b,c].sum/2.0
end

Или для Ruby вне Rails:

def is_triangle?(a,b,c)
  [a,b,c].max < [a,b,c].inject(:+)/2.0
end
2 голосов
/ 19 июля 2011

Ваша проблема в том, что, если все 3 числа не равны 0, одно из ваших if всегда будет истинным. То, что вы хотите, это что-то вроде

def is_triangle(a,b,c)
  a + b > c && a + c > b && b + c > a
end
is_triangle(3,6,8) #=> true
is_triangle(3,6,80) #=> false
1 голос
/ 19 июля 2011

Ничто из того, что вы передадите этому, не вернет false.Ваш метод неверен.

Вы можете определить, составляют ли три стороны треугольник, найдя самую длинную сторону, а затем добавив оставшиеся две стороны.Если они больше самой длинной стороны, то стороны могут сделать тралинг.

0 голосов
/ 09 января 2015

Это также решение этой проблемы:

if 2*[a,b,c].max < a + b + c
    true
else
    false
end

Теоретически возможны различные неравенства:

http://en.wikipedia.org/wiki/Triangle_inequality

0 голосов
/ 25 января 2013
puts " enter a, b and c values"

a=gets.to_i
b=gets.to_i
c=gets.to_i

  if a+b > c    
   print true
  elsif a+c>b  
    print true
  elsif b+c>a
    print true
  else
   print false
 end

you can also use this code too.. this is much easy
0 голосов
/ 19 июля 2011

Я предлагаю, если вы уверены, что ваша логика верна, измените метод на

def is_triangle?(a, b, c)
   a+b > c or b+c > a or c+a > b
end

Но, по-моему, это не так, метод должен быть

def is_triangle?(a, b, c)
   a+b>c and b+c>a and c+a>b
end

Некоторые моментыпримечание о соглашениях ruby:

  1. Метод, который возвращает логическое значение, заканчивается на «?»
  2. Метод ruby ​​возвращает последнее вычисленное выражение, поэтому запись return здесь избыточна.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...