17 / 42
Feb 2018

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

poszukałem trochę po tym wątku, kombinowałem sam, ale przy takim czymś nie mogę nadal znaleźć błędu.tu był link może ktoś podać jakiś zestaw, który nie działa

nie bardzo rozumiem, jak chcesz podać odpowiedź bez wczytywania danych (ja w każdym razie tak nie potrafię :slight_smile: )

naprawdę czytałeś ten wątek ? - jeżeli tak, to niedokładnie lub bez próby zrozumienia co czytasz - bo już w 2 poście tego wątku masz wyraźnie napisane, jak masz wczytywać dane