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

Odpowiedz Nowy wątek
2019-03-13 21:56
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")

Yy może coś mnie ominęło na wykładach, jak pole miałoby wyjść ujemne? Bok trójkąta będzie miał - 1cm? - axelbest 2019-03-13 22:23

Pozostało 580 znaków

2019-03-13 22:06
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
...


nic takiego, po prostu tam jest zły operator - alternatywa zamiast koniunkcji przez co to zdanie jest w zasadzie zawsze prawdziwe - grski 2019-03-13 22:09
No jak zły? Żeby dało się zbudować niezerowy trójkąt potrzeba, żeby dwa z jego boków były w sumie dłuższe niż trzeci albo dwa inne, albo dwa jeszcze inne. Jak wsadzisz tam and, to zadziała tylko dla niektórych trójkątów. - Freja Draco 2019-03-13 22:19
@grski ma rację. Powinno być and. - Delor 2019-03-13 22:46
Dobra, faktycznie zabrakło mi wyobraźni: 1 + 100 + 90 spełnia warunek dla or ale trójkąta z tego zrobić się nie da. - Freja Draco 2019-03-14 11:16

Pozostało 580 znaków

2019-03-13 22:28

http://zsedabrowa.edu.pl/2016[...]a-warunku-istnienia-trojkata/
jesteś pewien, że operator dobry? or a nie and?

Pozostało 580 znaków

2019-03-14 00:07
0

Jeśli o to Ci chodzi, to tu jest: C++ trójkąty kod do sprawdzenia czy podane liczby mogą utworzyć trójkąt.


Pozostało 580 znaków

2019-03-14 01:06
0

"trójkąt o polu dodatnim."

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

Nigdy nie słyszałem w matematycznej definicji skalaru, że musi to być liczba dodatnia https://pl.wikipedia.org/wiki/Skalar_(matematyka) - Kamil Żabiński 2019-03-15 09:51
racja, ZERO MOŻE BYĆ. - AnyKtokolwiek 2019-03-15 09:54
1) pola mogą być ujemne 2) skalar może być dowolną liczbą rzeczywistą (bo w końcu skalar to nie wektor). Pierwsza uwaga szczególnie się przydaje, gdy zauważymy że wyznacznik macierzy to skierowana hiperobjętość kolumn macierzy potraktowanych jako rozpinające krawędzie hiperprostopadłościanu. W przypadku 2D sprowadza się to do skierowanego pola. - enedil 2019-03-15 22:25

Pozostało 580 znaków

2019-03-14 11:11
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".


1+1+2 to nawet na "niby" nie będzie trójkąt. - axelbest 2019-03-14 11:20
Ha! Widać pora wrócić do podstawówki. Na wiki podają, że te trzy nierówności są faktycznie warunkiem zaistnienia trójkąta, czyli nie ma "trójkątów zerowych". "Trójkąt istnieje wtedy i tylko wtedy, gdy spełnione są te trzy nierówności. Można je zapisać w równoważnej postaci: | b − c | < a < b + c ". - Freja Draco 2019-03-14 11:27
Podstaw sobie te wartości do podanego przez Ciebie wzoru. a=1, b=1,c=2. -> 1<1 <3 no to chyba fatkycznie muszę wracać do podstawówki. - axelbest 2019-03-14 11:50
Po podstawieniu wartości: a=1 b=1 c=2 do podanego przeze mnie wzoru, wychodzi 1 < 1 < 1. Czyli "prawie" dobrze ;) - Freja Draco 2019-03-14 20:58

Pozostało 580 znaków

2019-03-15 05:33
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.


Linux Mint
Arduino / Python 3.5.2
edytowany 2x, ostatnio: Guaz, 2019-03-15 05:35
Kurcze, algorytm podoba mi się. Jest (prawie) dokładnie taki, jakby żywy człowiek miał to wykonywać. Daję plusa. - AnyKtokolwiek 2019-03-15 09:42
w kwestii formalnej, określenie maksimum przez bibliotekę standardową zawiera ukryte porównania. - AnyKtokolwiek 2019-03-15 09:55
Faktycznie, zapomniałem że max też przyrównuje. Niemniej, nie testowałem czy ten sposób byłby szybszy czy wręcz odwrotnie :). To zadanie w sumie jest dla trójkątów mało wymagające więc sposobów są setki. Ale gdybyśmy na przykład rozpatrywali figurę o stu kątach, i chcemy sprawdzić czy jeden z boków nie jest tak ekstremalnie duży że uniemożliwia stworzenie tej figury, to wtedy możliwe że byśmy na tym zyskali :). Adekwatnie do kodu superdurszlaka który w sumie działa dokładnie tak samo, poza innym podejściem w postaci mnożenia zamiast odjęcia :). - Guaz 2019-03-15 15:46

Pozostało 580 znaków

2019-03-15 06:16
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


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 1x, ostatnio: superdurszlak, 2019-03-15 06:19
Pokaż pozostałe 3 komentarze
W sensie, że co jest źle? :-P - Patryk27 2019-03-15 09:01
to nie jest kod który ma przejść przez code review, no chyba że OP się nie przyznał że dostał taska weź napisz nam checkera który zwaliduje trójkąty w naszej EnterpriseFizzBuzzApp i zamierza pchać to w PR. - superdurszlak 2019-03-15 09:02
@Patryk27: pewnie nie podoba mu się użycie *args zamiast zdefiniowania argumentów explicite i pongliszowe nazewnictwo, tak zgaduję - superdurszlak 2019-03-15 09:03
Likwidując len i zmieniając funkcję na 'czy_figura' albo coś podobnego, twoja funkcja zadziała dla dowolnego wielokąta który sprawdzamy czy istnieje, tak jak powyższy kod który wkleiłem :) - Guaz 2019-03-15 15:53
Wspomniałem o tym :) - superdurszlak 2019-03-15 16:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot