Mam stwierdzić czy z podanych boków można zbudować trójkąt o polu dodatnim.

0

8 7 5 - tak
1 10 2 - nie
4 4 8 - nie

Jak wpisuje dane i ma wyjść nie to wychodzi tak. Dla dobrych trójkątów wychodzi tak , a dla złych też tak . Tak jakby omijało else: print("Nie")

x=input()
a, b, c=x.split()
a=int(a)
b=int(b)
c=int(c)
if a + b > c or a + c > b or b + c > a:
print("Tak")
else:
print("Nie")

0

Rozbij to sobie na operacje elementarne. Nie znam języka, ale obstawiam, że trzeba dodać jakieś nawiasy, żeby wymusić właściwą kolejność operatorów.

wynik = nie;
if a + b > c wynik = tak
...

0

Jeśli o to Ci chodzi, to tu jest: https://4programmers.net/Forum/C_i_C++/323414-c_trojkaty?p=1571934#id1571934 kod do sprawdzenia czy podane liczby mogą utworzyć trójkąt.

0

"trójkąt o polu dodatnim."

Pole figury to skalar, nie wektor i o znaku trudno mówić.

0
AnyKtokolwiek napisał(a):

"trójkąt o polu dodatnim."

Pole figury to skalar, nie wektor i o znaku trudno mówić.

Ale może być zero. 1 + 1 + 2 to też niby "trójkąt".

2

Operator and. Dlatego że dowolnie wybrane dwa boki, muszą być dłuższe od pozostałego. Więc jedyny sens jest tutaj w wybraniu dwóch najkrótszych.

A upraszczając ogromny warunek i zmuszając do sprawdzenia wyłącznie jednej nierówności i czterech podstawowych operacji arytmetycznych. Mogłoby to wyglądać tak:

a = ...
b = ...
c = ...
triangle = [a, b, c]
max_length = max(triangle)
others_length = sum(triangle) - max_leng 
if others_length > max_leng:
    print("Tak")
else:
    print("Nie")

Oczywiście nie twierdzę że sposób jest lepszy, ale jest na pewno czytelniejszy.

0

W sumie to można to walnąć tak:

def czy_trojkat(*args):
  return len(args) == 3 and sum(args) > 2 * max(args)

print(czy_trojkat(2, 3, 4)) # True
print(czy_trojkat(1, 1, 3, 4)) # False
print(czy_trojkat(2, 1, 4)) # False

Możesz nawet wyrzucić sprawdzenie, czy ktoś podał dokładnie trzy punkty i sprawdzać w ten sposób cokolwiek :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1