michal123 Temat założony przez niniejszego użytkownika |
Badanie własności trójkąta [wzór Herona] » 2013-11-11 12:46:17 Witam, napisałem program który oblicza pole trójkąta na układzie współrzędnych za pomocą wzoru Herona. Na końcu program ma badać czy trójkąt jest równoboczny , równoramienny, prostokątny czy dowolny. Nie wiem czmeu ale program nie zaleznie od danych jakie wpisze wyrzuca mi że trójkat jest równoramienny. #include <iostream> #include <iomanip> #include <cmath>
using namespace std;
double odcinek( double xa, double ya, double xb, double yb ) { return sqrt(( xb - xa ) *( xb - xa ) +( yb - ya ) *( yb - ya ) ); }
int main() { double xa, ya, xb, yb, xc, yc; double a, b, c, p, S; cout << fixed << setprecision( 4 ); cout << "Obliczanie pola trojkata wzorem Herona\n" "======================================\n\n"; cout << "xa = "; cin >> xa; cout << "ya = "; cin >> ya; cout << endl; cout << "xb = "; cin >> xb; cout << "yb = "; cin >> yb; cout << endl; cout << "xc = "; cin >> xc; cout << "yc = "; cin >> yc; cout << endl; a = odcinek( xa, ya, xb, yb ); b = odcinek( xb, yb, xc, yc ); c = odcinek( xc, yc, xa, ya ); p =( a + b + c ) / 2; S = sqrt( p *( p - a ) *( p - b ) *( p - c ) ); cout << "\n------------\n\n" "S = " << S << endl << endl; double ak, bk, ck, EPS; ak = a * a; bk = b * b; ck = c * c; EPS = 0.00001; if(( fabs( ak + bk - ck ) < EPS ) ||( fabs( bk + ck - ak ) < EPS ) ||( fabs( ck + ak - bk ) < EPS ) ) cout << "Trojkat jest prostokatny\n\n"; else cout << "trojkat nie jest prostokatny\n\n"; if( fabs( a - b ) < EPS && fabs( a - c ) < EPS && fabs( c - a ) < EPS && fabs( c - b ) < EPS && fabs( b - a ) < EPS && fabs( b - c ) < EPS ) cout << "Trojkat jest rownoboczny\n\n"; else cout << "trojkat nie jest rownoboczny\n\n"; if( fabs( a - b < EPS ) || fabs( b - c < EPS ) || fabs( a - c < EPS ) ) cout << "Trojkat jest rownoramienny\n\n"; else cout << "trojkat nie jest rownoramienny\n\n"; return 0; }
|
|
Monika90 |
» 2013-11-11 13:13:45 < EPS ma być poza nawiasami. |
|
michal123 Temat założony przez niniejszego użytkownika |
» 2013-11-11 15:14:36 ok super, a jak stworzyć warunek na trójkąt dowolny? Tzn warunek który mówi coś takiego
Jeśli nie zachodzą powyższe trzy warunki to > cout "Trójkąt dowolny" |
|
Monika90 |
» 2013-11-11 15:53:15 Przed sprawdzaniem warunków dodaj zmienną Jak jakiś warunek jest spełniony, to oprócz wypisania komunikatu ustaw dowolny na false A na koniec: if( dowolny ) std::cout << "trojkat dowolny";
|
|
michal123 Temat założony przez niniejszego użytkownika |
» 2013-11-11 17:06:06 Super, działa, wielkie dzięki @Monika90. Do zamknięcia, jeszcze wklejam ostateczną wersję;) #include <iostream> #include <iomanip> #include <cmath>
using namespace std;
double odcinek( double xa, double ya, double xb, double yb ) { return sqrt(( xb - xa ) *( xb - xa ) +( yb - ya ) *( yb - ya ) ); }
int main() { double xa, ya, xb, yb, xc, yc; double a, b, c, p, S; cout << fixed << setprecision( 4 ); cout << "Obliczanie pola trojkata wzorem Herona\n" "======================================\n\n"; cout << "xa = "; cin >> xa; cout << "ya = "; cin >> ya; cout << endl; cout << "xb = "; cin >> xb; cout << "yb = "; cin >> yb; cout << endl; cout << "xc = "; cin >> xc; cout << "yc = "; cin >> yc; cout << endl; a = odcinek( xa, ya, xb, yb ); b = odcinek( xb, yb, xc, yc ); c = odcinek( xc, yc, xa, ya ); p =( a + b + c ) / 2; S = sqrt( p *( p - a ) *( p - b ) *( p - c ) ); cout << "\n------------\n\n" "S = " << S << endl << endl; double ak, bk, ck, EPS; ak = a * a; bk = b * b; ck = c * c; EPS = 0.00001; bool dowolny = true; if(( fabs( ak + bk - ck ) < EPS ) ||( fabs( bk + ck - ak ) < EPS ) ||( fabs( ck + ak - bk ) < EPS ) ) cout << "Trojkat jest prostokatny\n\n" && dowolny == false; else cout << "Trojkat nie jest prostokatny\n\n"; if( fabs( a - b ) < EPS && fabs( a - c ) < EPS && fabs( c - a ) < EPS && fabs( c - b ) < EPS && fabs( b - a ) < EPS && fabs( b - c ) < EPS ) cout << "Trojkat jest rownoboczny\n\n" && dowolny == false; else cout << "Trojkat nie jest rownoboczny\n\n"; if( fabs( a - b ) < EPS || fabs( b - c ) < EPS || fabs( a - c ) < EPS ) cout << "Trojkat jest rownoramienny\n\n" && dowolny == false; else cout << "Trojkat nie jest rownoramienny\n\n"; if( dowolny ) std::cout << "Ale za to trojkat jest dowolny\n\n"; return 0; }
|
|
« 1 » |