Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Badanie własności trójkąta [wzór Herona]

Ostatnio zmodyfikowano 2013-11-11 17:06
Autor Wiadomość
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.

C/C++
#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;
}
P-96016
Monika90
» 2013-11-11 13:13:45
C/C++
fabs( a - b < EPS )
< EPS ma być poza nawiasami.
P-96024
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"
P-96036
Monika90
» 2013-11-11 15:53:15
Przed sprawdzaniem warunków dodaj zmienną
C/C++
bool dowolny = true;
Jak jakiś warunek jest spełniony, to oprócz wypisania komunikatu ustaw
dowolny
 na
false

A na koniec:
C/C++
if( dowolny )
     std::cout << "trojkat dowolny";

P-96039
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ę;)


C/C++
#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;
}
P-96050
« 1 »
  Strona 1 z 1