#include <iostream>
using namespace std;
struct Punkt {
double x;
double y;
};
// funkcja obliczająca wyznacznik
double det(Punkt A, Punkt B, Punkt P) {
return (B.x - A.x) * (P.y - A.y) - (B.y - A.y) * (P.x - A.x);
}
// funkcja wczytująca punkt
void czytaj_punkt(Punkt &P, string nazwa) {
cout << "Podaj wspolrzedne punktu " << nazwa << " (x y): ";
cin >> P.x >> P.y;
}
// funkcja sprawdzająca czy punkt P należy do odcinka AB
bool punkt_w_odcinku(Punkt A, Punkt B, Punkt P) {
// sprawdzenie współliniowości
if (det(A, B, P) != 0)
return false;
// sprawdzenie czy P leży w zakresie odcinka
if (P.x >= min(A.x, B.x) && P.x <= max(A.x, B.x) &&
P.y >= min(A.y, B.y) && P.y <= max(A.y, B.y))
return true;
return false;
}
int main() {
Punkt A, B, P;
czytaj_punkt(A, "A");
czytaj_punkt(B, "B");
czytaj_punkt(P, "P");
if (punkt_w_odcinku(A, B, P))
cout << "Punkt P nalezy do odcinka AB." << endl;
else
cout << "Punkt P nie nalezy do odcinka AB." << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFB1bmt0IHsKICAgIGRvdWJsZSB4OwogICAgZG91YmxlIHk7Cn07CgovLyBmdW5rY2phIG9ibGljemFqxIVjYSB3eXpuYWN6bmlrCmRvdWJsZSBkZXQoUHVua3QgQSwgUHVua3QgQiwgUHVua3QgUCkgewogICAgcmV0dXJuIChCLnggLSBBLngpICogKFAueSAtIEEueSkgLSAoQi55IC0gQS55KSAqIChQLnggLSBBLngpOwp9CgovLyBmdW5rY2phIHdjenl0dWrEhWNhIHB1bmt0CnZvaWQgY3p5dGFqX3B1bmt0KFB1bmt0ICZQLCBzdHJpbmcgbmF6d2EpIHsKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSAiIDw8IG5hendhIDw8ICIgKHggeSk6ICI7CiAgICBjaW4gPj4gUC54ID4+IFAueTsKfQoKLy8gZnVua2NqYSBzcHJhd2R6YWrEhWNhIGN6eSBwdW5rdCBQIG5hbGXFvHkgZG8gb2RjaW5rYSBBQgpib29sIHB1bmt0X3dfb2RjaW5rdShQdW5rdCBBLCBQdW5rdCBCLCBQdW5rdCBQKSB7CgogICAgLy8gc3ByYXdkemVuaWUgd3Nww7PFgmxpbmlvd2/Fm2NpCiAgICBpZiAoZGV0KEEsIEIsIFApICE9IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIHNwcmF3ZHplbmllIGN6eSBQIGxlxbx5IHcgemFrcmVzaWUgb2RjaW5rYQogICAgaWYgKFAueCA+PSBtaW4oQS54LCBCLngpICYmIFAueCA8PSBtYXgoQS54LCBCLngpICYmCiAgICAgICAgUC55ID49IG1pbihBLnksIEIueSkgJiYgUC55IDw9IG1heChBLnksIEIueSkpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKICAgIFB1bmt0IEEsIEIsIFA7CgogICAgY3p5dGFqX3B1bmt0KEEsICJBIik7CiAgICBjenl0YWpfcHVua3QoQiwgIkIiKTsKICAgIGN6eXRhal9wdW5rdChQLCAiUCIpOwoKICAgIGlmIChwdW5rdF93X29kY2lua3UoQSwgQiwgUCkpCiAgICAgICAgY291dCA8PCAiUHVua3QgUCBuYWxlenkgZG8gb2RjaW5rYSBBQi4iIDw8IGVuZGw7CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiUHVua3QgUCBuaWUgbmFsZXp5IGRvIG9kY2lua2EgQUIuIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9