#include <iostream>
using namespace std;
struct Punkt {
double x;
double y;
};
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);
}
void czytaj_punkt(Punkt &P) {
cout << "Podaj wspolrzedne punktu P (x y): ";
cin >> P.x >> P.y;
}
bool punkt_w_odcinku(Punkt A, Punkt B, Punkt P) {
if (det(A,B,P) != 0)
return false;
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 = {0,0};
Punkt B = {2,2};
Punkt P;
czytaj_punkt(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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFB1bmt0IHsKICAgIGRvdWJsZSB4OwogICAgZG91YmxlIHk7Cn07Cgpkb3VibGUgZGV0KFB1bmt0IEEsIFB1bmt0IEIsIFB1bmt0IFApIHsKICAgIHJldHVybiAoQi54IC0gQS54KSAqIChQLnkgLSBBLnkpIC0gKEIueSAtIEEueSkgKiAoUC54IC0gQS54KTsKfQoKdm9pZCBjenl0YWpfcHVua3QoUHVua3QgJlApIHsKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBQICh4IHkpOiAiOwogICAgY2luID4+IFAueCA+PiBQLnk7Cn0KCmJvb2wgcHVua3Rfd19vZGNpbmt1KFB1bmt0IEEsIFB1bmt0IEIsIFB1bmt0IFApIHsKCiAgICBpZiAoZGV0KEEsQixQKSAhPSAwKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoUC54ID49IG1pbihBLngsQi54KSAmJiBQLnggPD0gbWF4KEEueCxCLngpICYmCiAgICAgICAgUC55ID49IG1pbihBLnksQi55KSAmJiBQLnkgPD0gbWF4KEEueSxCLnkpKQogICAgICAgIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CgogICAgUHVua3QgQSA9IHswLDB9OwogICAgUHVua3QgQiA9IHsyLDJ9OwogICAgUHVua3QgUDsKCiAgICBjenl0YWpfcHVua3QoUCk7CgogICAgaWYgKHB1bmt0X3dfb2RjaW5rdShBLEIsUCkpCiAgICAgICAgY291dCA8PCAiUHVua3QgUCBuYWxlenkgZG8gb2RjaW5rYSBBQiIgPDwgZW5kbDsKICAgIGVsc2UKICAgICAgICBjb3V0IDw8ICJQdW5rdCBQIG5pZSBuYWxlenkgZG8gb2RjaW5rYSBBQiIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==