#include<bits/stdc++.h>
using namespace std;
class point{
private:
double x,y;
public:
void set_point(double x1,double y1){
x=x1;
y=y1;
}
double get_x(){
return x;
}
double get_y(){
return y;
}
};
class line{
//private:
// point start,ends;
public:
// void set_ends(point a,point b){
// start=a;
// ends=b;
// }
// double length(){
// double dx,dy;
// dx=start.get_x()-ends.get_x();
// dy=start.get_y()-ends.get_y();
// return sqrt(dx*dx+dy*dy);
// }
// point midpoint(){
// double mid_x,mid_y;
// mid_x=(start.get_x()+ends.get_x())/2;
// mid_y=(start.get_y()+ends.get_y())/2;
// point mid;
// mid.set_point(mid_x,mid_y);
// return mid;
// }
double length(point a, point b) {
double dx = a.get_x() - b.get_x();
double dy = a.get_y() - b.get_y();
return sqrt(dx*dx + dy*dy);
}
point midpoint(point a, point b) {
double mid_x = (a.get_x() + b.get_x()) / 2;
double mid_y = (a.get_y() + b.get_y()) / 2;
point mid;
mid.set_point(mid_x, mid_y);
return mid;
}
};
int main(){
point A,B,C;
line line_and_mid;
cout<<"Enter first two point :";
double x1,y1;
cin>>x1>>y1;
A.set_point(x1,y1);
cout<<"Enter second two point :";
cin>>x1>>y1;
B.set_point(x1,y1);
cout<<endl;
//line_and_mid.set_ends(A,B);
cout<<"Length of the line :"<<fixed<<setprecision(2)<<line_and_mid.length(A,B)<<endl;
C=line_and_mid.midpoint(A,B);
cout<<"Midpoints are :"<<"("<<C.get_x()<<","<<C.get_y()<<")"<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgcG9pbnR7CnByaXZhdGU6CiAgICAgIGRvdWJsZSB4LHk7CgpwdWJsaWM6CiAgICAgIHZvaWQgc2V0X3BvaW50KGRvdWJsZSB4MSxkb3VibGUgeTEpewogICAgICB4PXgxOwogICAgICB5PXkxOwogICAgICB9CiAgICAgIGRvdWJsZSBnZXRfeCgpewogICAgICByZXR1cm4geDsKICAgICAgfQogICAgICBkb3VibGUgZ2V0X3koKXsKICAgICAgcmV0dXJuIHk7CiAgICAgIH0KfTsKCmNsYXNzIGxpbmV7Ci8vcHJpdmF0ZToKLy8gICAgICBwb2ludCBzdGFydCxlbmRzOwpwdWJsaWM6Ci8vICAgICAgdm9pZCBzZXRfZW5kcyhwb2ludCBhLHBvaW50IGIpewovLyAgICAgIHN0YXJ0PWE7Ci8vICAgICAgZW5kcz1iOwovLyAgICAgIH0KLy8gICAgICBkb3VibGUgbGVuZ3RoKCl7Ci8vICAgICAgZG91YmxlIGR4LGR5OwovLyAgICAgIGR4PXN0YXJ0LmdldF94KCktZW5kcy5nZXRfeCgpOwovLyAgICAgIGR5PXN0YXJ0LmdldF95KCktZW5kcy5nZXRfeSgpOwovLyAgICAgIHJldHVybiBzcXJ0KGR4KmR4K2R5KmR5KTsKLy8gICAgICB9Ci8vICAgICAgcG9pbnQgbWlkcG9pbnQoKXsKLy8gICAgICBkb3VibGUgbWlkX3gsbWlkX3k7Ci8vICAgICAgbWlkX3g9KHN0YXJ0LmdldF94KCkrZW5kcy5nZXRfeCgpKS8yOwovLyAgICAgIG1pZF95PShzdGFydC5nZXRfeSgpK2VuZHMuZ2V0X3koKSkvMjsKLy8gICAgICBwb2ludCBtaWQ7Ci8vICAgICAgbWlkLnNldF9wb2ludChtaWRfeCxtaWRfeSk7Ci8vICAgICAgcmV0dXJuIG1pZDsKLy8gICAgICB9CgoKICAgIGRvdWJsZSBsZW5ndGgocG9pbnQgYSwgcG9pbnQgYikgewogICAgICAgIGRvdWJsZSBkeCA9IGEuZ2V0X3goKSAtIGIuZ2V0X3goKTsKICAgICAgICBkb3VibGUgZHkgPSBhLmdldF95KCkgLSBiLmdldF95KCk7CiAgICAgICAgcmV0dXJuIHNxcnQoZHgqZHggKyBkeSpkeSk7CiAgICB9CgogICAgcG9pbnQgbWlkcG9pbnQocG9pbnQgYSwgcG9pbnQgYikgewogICAgICAgIGRvdWJsZSBtaWRfeCA9IChhLmdldF94KCkgKyBiLmdldF94KCkpIC8gMjsKICAgICAgICBkb3VibGUgbWlkX3kgPSAoYS5nZXRfeSgpICsgYi5nZXRfeSgpKSAvIDI7CiAgICAgICAgcG9pbnQgbWlkOwogICAgICAgIG1pZC5zZXRfcG9pbnQobWlkX3gsIG1pZF95KTsKICAgICAgICByZXR1cm4gbWlkOwogICAgfQoKCn07CmludCBtYWluKCl7CnBvaW50IEEsQixDOwpsaW5lIGxpbmVfYW5kX21pZDsKY291dDw8IkVudGVyIGZpcnN0IHR3byBwb2ludCA6IjsKZG91YmxlIHgxLHkxOwpjaW4+PngxPj55MTsKQS5zZXRfcG9pbnQoeDEseTEpOwpjb3V0PDwiRW50ZXIgc2Vjb25kIHR3byBwb2ludCA6IjsKCmNpbj4+eDE+PnkxOwpCLnNldF9wb2ludCh4MSx5MSk7Cgpjb3V0PDxlbmRsOwovL2xpbmVfYW5kX21pZC5zZXRfZW5kcyhBLEIpOwpjb3V0PDwiTGVuZ3RoIG9mIHRoZSBsaW5lIDoiPDxmaXhlZDw8c2V0cHJlY2lzaW9uKDIpPDxsaW5lX2FuZF9taWQubGVuZ3RoKEEsQik8PGVuZGw7CkM9bGluZV9hbmRfbWlkLm1pZHBvaW50KEEsQik7CmNvdXQ8PCJNaWRwb2ludHMgYXJlIDoiPDwiKCI8PEMuZ2V0X3goKTw8IiwiPDxDLmdldF95KCk8PCIpIjw8ZW5kbDsKcmV0dXJuIDA7Cn0KCgoK