Dzięki za szybką odpowiedź, poprawiłem program według tej wskazówki lecz nadal nie chcą mi go zaliczyć...
Czy to znaczy, że pomysł z twierdzeniem cosinusów jest niewłaściwy dla tego zadania, czy raczej moje wykonanie jest słabe?
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.
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(aa<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ć
@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
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
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
PS
Podejrzewam, że moje pierwsze rozwiązania tego zadania, też nie były takie ładne i proste, ale wolę tego teraz jeszcze nie sprawdzać.
To teraz takie zadanie: http://pl.spoj.com/problems/TTRI/23
Tu wystarczy “tylko” odpowiedzieć, czy da się zbudować trójkąt czy nie.
Dyskutowano już o tym zadaniu tu -> : 1361. Trzy liczby [TTRI]
#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()?