15 / 42
Feb 2018

https://ideone.com/398hZS16

Wydaje mi się, że zrozumiałem co chciałeś mi przekazać Mariusz, wtedy permutacje nie działały odpowiednio, bo nie dałem w konstrukcji if przerywnika gdy znalazł odpowiednią liczbę.
Dodałem jedną linijkę ale to wciąż nie to co chce sędzia, mimo iż teraz działa też dla każdej permutacji wpisywanych danych.
Czy w takim razie błąd jest w samej metodzie sprawdzania tych rodzai trójkątów?

P.S. Programu z linku nie wysyłałem do sprawdzenia. Chciałem zobaczyć co w ogóle zapisuje się do tej tablicy.

6 months later

Witam,
Czy ktos moze mi powiedziec co jest nie tak z tym programem?

#include
#include

using namespace std;

int main()
{
long double a,b,c;

while (cin>>a>>b>>c)
{
if (a+b>c&&a+c>b&&b+c>a&&a>0&&b>0&&c>0&&a<10000&&b<10000&&c<10000)
{
if(aa==bb+cc || bb==cc+aa || cc==aa+bb)
cout <<“prostokatny”;
else if(a
a<bb+cc || bb<cc+aa || cc<aa+bb)
cout<<“ostrokatny”;
else cout<<“rozwartokatny”;
}
else cout<<“brak”;
cout <<endl;
}

return 0;

}

przekaż program przez ideone.com3 lub przynajmniej poprawnie wklej - bo obecnie to co wkleiłeś nie ma żadnego sensu, a mnie nie chce się tego poprawiać

warunków <10000 nie trzeba pewnie wprowadzac

w code blocks chodzi

tutaj nie

mam pare tez innych zadan zrobionych ktore chodza w code blocks a tutaj nie

nie trzeba, ale ich brak nic nie zmieni

tutaj też chodzi, tyle, że wyniki ma złe :slight_smile: - nawet dla danych testowych podanych w zadaniu

tu też chodzą, tyle że podobnie jak w tym zadaniu niedokładnie testujesz, sędzia robi to dokładniej i nie zalicza

Nie ten kod wkleilem
Przepraszam

Co z tym jest nie tak? On jest bez warunków <10000

Dolozylem jeszcze warunków o tym, ze dlugosci bokow nie moga byc rowne i mniejsze 0 i tez nie zalicza sedzia

tu był kod…

Co przeoczyłem?

@dziabagooo
Pokolei:

Czy możesz opowiedzieć co robi klamra po klamrze w Twojej pętli while’a?

while(cin>>a>>b>>c)
{
    {

Podobnie co rozumiesz przez:

else
{
if

w szczególności z chęcią się dowiem czym się różni od zwykłego else if {

Jak już poprawisz kod na czytelny, to możesz zastanowić się czy masz poprawny out (czyt. nie masz) dla danych:

1 2 3

PS. W 99% (w 99.99% ?) przypadków gdy twierdzisz, że Tobie działa, a na spoju nie to twierdzisz źle. Twój program źle działa np. dla powyższego testu, ale takiego nie sprawdzałeś, albo nie wiesz kiedy można zbudować trójkąt.

Wiem, Kiedy mozna zbudowac trojkat - skonczylem Politechnike Warszawska :slight_smile:

ZLe dalem warunek sprawdzania dlugosci bokow

Powinno byc i zamiast lub

Czyli

if (a<b+c && b<a+c && c<a+b && a>0 && b>0 && c>0 && a<10000 && b<10000 && c<10000)

Co rozumie hmm najpierw chcialem sprawdzic ifem czy da sie zbudowac trojkat (czyli kazdy bok mniejszy od sumy dwoch pozostalych i wiekszy zero)

Jezeli tak jest to ma sprawdzic jaki to typ trojkata

Pewnie za duzo klamerek dalem

Popracuje nad tym jeszcze :slight_smile:

Cieszę się.
Twój kod, który podałeś na forum jest bliski tego, który Ci sędzia zaliczył. W takim razie skasuj/zakomentuj link do ideone na forum coby innych nie kusiło.

Dla danych 10001 twój program wypisze “brak” a przecież to nie prawda. Powinien wyświetlić coś w rodzaju: “dane wejściowe niezgodne z założeniem”.

Takie ograniczenia podane są przez autorów tylko po to, aby rozwiązujące osoby mogły dobrać odpowiedni typ zmiennych czy ewentualnie [w innych zadaniach] wielkości tablic statycznych.
Tutaj wartość 10000 sugeruje, że można użyć trypu short int. Ale przecież wykonujemy mnożenia, więc 10000 * 10000 = 10 0000 000, a dla takich wartości short to za mało, ale wystarczy w zupełności typ int. W zadaniach łatwych można w ciemno na 90% [99%] przyjąć, że typ int jest wystarczający i wskazany. Jeżeli w tym zadaniu użyjemy c’ = sqrt ( a² + b²) lub c" = hypot(a, b), to wtedy i tylko wtedy musimy użyć typów zmiennoprzecinkowych (double).

Zamiast wielokrotnego liczenia:

 a*a, b*b, c*c,

można zrobić to [pomnożyć] raz i potem używać:

aa = a*a, bb = b*b, cc = c*c 

ale jeszcze lepiej[?], na początek znaleźć najdłuższy odcinek i wtedy nie potrzeba pisać tak skomplikowanych [rozbudowanych] warunków. Po stwierdzeniu [sprawdzeniu], że można zbudować trójkąt, wystarczy już tylko:
diff = c² - (a² + b²), a następnie:
if diff == 0 to trójkąt taki
if diff < 0 to trójkąt siaki
else trójkąt inny :wink:

PS
Podejrzewam, że moje pierwsze rozwiązania tego zadania, też nie były takie ładne i proste, ale wolę tego teraz jeszcze nie sprawdzać. :wink:

1 month later

#include
#include
#include

using namespace std;

int main()
{
vector tab(3);
while(cin>>tab[0]>>tab[1]>>tab[2])
{
sort(tab.begin(),tab.end());
if((tab[0]+tab[1])<tab[2]) cout<<“brak”<<endl;
else if((tab[0]*tab[0]+tab[1]*tab[1])>(tab[2]*tab[2])) cout<<“ostrokatny”<<endl;
else if((tab[0]*tab[0]+tab[1]*tab[1])==(tab[2]*tab[2])) cout<<“prostokatny”<<endl;
else if((tab[0]*tab[0]+tab[1]*tab[1])<(tab[2]*tab[2])) cout<<“rozwartokatny”<<endl;
}
return 0;
}

Chciałbym się dowiedzieć gdzie jest błąd i czy dopuszczalna jest funkcja sort()?

Cześć, jedna poprawka i będzie AC
Mały test który uświadomi Ci brak w algorytmie:
7 4 3

Dzięki, super że dałeś mi pomocny test a nie od razu powiedziałeś w czym rzecz, rzeczywiście jak po złożeniu tych odcinków nie wyjdzie trójkąt tylko nic. Wielkie dzięki propsy dla ciebie kolego :slight_smile:

1 year later

Proszę o pomoc w tym zadaniu w miejscu w którym ma być nieokreślona liczba pomiarów, jak to wykonać,
próbowałem to zrobić z nieskończoną pętlą(odrzuca przez czas,tu był link) i z pętlą mającą się wykonać kilka razy(odrzuca przez błędną odp., tu był link)

rozwiązanie dla twojego problemu jest gdzieś powyżej - wystarczy przeczytać ten wątek