jerryxyz Temat założony przez niniejszego użytkownika |
problem ze sprawdzaniem typu trójkąta o podanych bokach » 2011-12-01 16:11:39 Witam. Dopiero zaczynam uczyć się c++. Mam do napisania program, który po podaniu trzech boków ma sprawdzić czy da się z nich utworzyć trójkąt. Następnie sprawdzić jaki to będzie trójkąt (rozwartokątny, prostokątny czy ostrokątny), a także obliczyć jego pole. Coś tam już napisałem ale nie wiem co dalej. Muszę użyć do tego funkcji enum a nie mam pojęcia jak to zrobić. |
|
pekfos |
» 2011-12-01 16:21:22 enum to nie funkcja a typ wyliczeniowy enum Triangle { T_PRTOST, T_ROZW, T_OSTR }; najpierw znajdź najdłuższy bok. jak masz to w tablicy to możesz też ją posortować. jeżeli suma dwóch krótszych boków jest większa od najdłuższego to taki trójkąt istnieje. Jest prostokątny gdy równanie oparte na twierdzeniu Pitagorasa jest prawdziwe. Pozostałe typy są już proste. To podstawy matematyki! |
|
jerryxyz Temat założony przez niniejszego użytkownika |
» 2011-12-01 16:27:28 Tak wiem, że to typ wyliceniowy. Pomyliło mi się. Mniej wiecej coś takiego juz mam. A właściwie: #include <cstdlib> #include <iostream> #include <cmath>
using namespace std;
enum RodzTr { prost, ostr, rozwart, };
bool BokMax( float a, float b, float c ) { float max; max = a; if( b > max ) max = b; if( c > max ) max = c; return max; }
bool CzyBedzieTr( float a, float b, float c ) { float max, suma; max = BokMax( a, b, c ); suma = a + b + c - max; return suma > max; }
bool JakiTr( float a, float b, float c ) { float max, suma; max = BokMax( a, b, c ); suma =( a * a + b * b + c * c - max * max ); if( suma == max ) return prost; if( suma > max ) return ostr; if( suma < max ) return rozwart; }
float PoleTr( float a, float b, float c ) { float p, s; p = 0.5 *( a + b + c ); s = sqrt( p *( p - a ) *( p - b ) *( p - c ) ); return s; }
int main() { cout << "Podaj dl. bokow trojkata:\n"; float a, b, c; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c;
chodzi o to jak dalej to zrobic? |
|
pekfos |
» 2011-12-01 16:35:16 wywołaj funkcje. bool JakiTr( float a, float b, float c ) { float max, suma; max = BokMax( a, b, c ); suma =( a * a + b * b + c * c - max * max ); if( suma == max ) return prost; if( suma > max ) return ostr; if( suma < max ) return rozwart; } tu masz duży błąd. zwracaj wartość swojego typu wyliczeniowego a nie bool bo tracisz informacje. |
|
jerryxyz Temat założony przez niniejszego użytkownika |
» 2011-12-01 16:41:37 Jak pisałem na początku dopiero się uczę c++. Czy moglibyście dokładniej napisać co mam źle i jak to poprawić? |
|
pekfos |
» 2011-12-01 16:43:49 piszesz z funkcjami nie znając ich? w przytoczonym przeze mnie fragmencie zmień bool na RodzTr. |
|
jerryxyz Temat założony przez niniejszego użytkownika |
» 2011-12-01 17:19:31 Wiem, że trochę przynudzam, ale nie potrafię ogarnąć tego programu przez użycie enuma, a był nakaz, żeby go zastosować. Jak mam zrobić, żeby mi wypisywało jaki trojkąt z podanych boków otrzymam? Czego użyć? If? Case? |
|
pekfos |
» 2011-12-01 17:20:22 If lub case. Krócej będzie z case. |
|
« 1 » 2 |