marenno Temat założony przez niniejszego użytkownika |
Funkcja liniowa » 2018-10-28 16:39:13 Witam informatyczne świry ;). Napisałem program który wylicza pole i obwód trójkąta o współrzędnych podanych przez użytkownika. Muszę dopisać jednego ifa który zabezpieczy program przed tym że punkty będą leżały na jednej prostej. Pomożecie?
#include <iostream> #include <cstdio> #include <cmath>
using namespace std;
long int potega(int p, int w) { if (w==0) return 1; else return p*potega(p,w-1); }
const double eps = 0.000001;
double pierwiastek(double P, double eps) { double a = 1., b = P;
while(fabs(a-b)>=eps) { a = (a+b)/2.; b = P/a; }
return a; }
int main() { int x, y, x1, y1, x2, y2; float obwod, pole, bok1, bok2, bok3, wysokosc; cout << "podaj wspolczynni 1 wierzcholka " << endl; cin >> x; cin >> y; cout << "podaj wspolczynni 2 wierzcholka " << endl; cin >> x1; cin >> y1; cout << "podaj wspolczynni 3 wierzcholka " << endl; cin >> x2; cin >> y2;
bok1= potega(y-y1,2) + potega(x-x1,2); bok2= potega(y-y2,2) + potega(x-x2,2); bok3= potega(y1-y2,2) + potega(x1-x2,2); bok1= pierwiastek(bok1,eps); bok2= pierwiastek(bok2,eps); bok3= pierwiastek(bok3,eps);
if ( y==y1 || x==x1 & y2==y1 || x2==x1 & y2==y || x2==x) { cout<< "taki trojkat nie istnieje"; return 0; }
obwod = bok1 + bok2 + bok3; cout<<"obwod= "<<obwod<<endl; obwod = obwod/2; pole=obwod * (obwod-bok1)* (obwod-bok2)* (obwod-bok3); pole=pierwiastek(pole,eps); pole=pole*2; cout<<"pole= "<<pole<<endl;
return 0;
}
|
|
ksardias |
» 2018-10-28 16:54:27 if( x == x1 ) &&( x1 == x2 ) ||( y == y1 ) &&( y1 == y2 ) { cout << "nieodpowiednie dane wejściowe"; }
|
|
marenno Temat założony przez niniejszego użytkownika |
@ksardias » 2018-10-28 16:58:38 ale punkty mogą być na 1,1 2,2 i 3,3 z tego też trójkąt nie powstanie, a ten if tgeo nie wyłapie |
|
ksardias |
» 2018-10-28 17:05:19 fakt, mój błąd, to może obliczysz długość boków i takie są warunki powstania trójkąta: -a+b >c -a+c >b -b+c >a |
|
marenno Temat założony przez niniejszego użytkownika |
» 2018-10-28 17:11:32 robiłem to na samym początku ale jako że program sam sobie robi boki warunek będzie zawsze spełniony |
|
ksardias |
» 2018-10-28 17:13:57 nie bardzo rozumiem, podaj przykład gdzie te 3 wyżej opisane warunki są spełnione, a mimo to trójkąt nie istnieje |
|
marenno Temat założony przez niniejszego użytkownika |
» 2018-10-28 17:15:17 wydaje mi się żę w jakiś sposób trzeba zastosować wzóz y=ax+b albo Ax+By+C=0 |
|
marenno Temat założony przez niniejszego użytkownika |
» 2018-10-28 17:28:07 ogólnie machnąłeś się tam bo chyba nie powinno tam być minusa. mam coś takiego if (bok1 > bok2 + bok3 || bok2 > bok1 + bok3 || bok3 > bok2 + bok1 )
{ cout<< "taki trojkat nie istnieje"; return 0; } i program wypisuje mi głupoty przy punktach 1,1 2,2 i 3,3 |
|
« 1 » 2 |