#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;
}
};
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()<<endl;
C=line_and_mid.midpoint();
cout<<"Midpoints are :"<<"("<<C.get_x()<<","<<C.get_y()<<")"<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgcG9pbnR7CnByaXZhdGU6CiAgICAgIGRvdWJsZSB4LHk7CgpwdWJsaWM6CiAgICAgIHZvaWQgc2V0X3BvaW50KGRvdWJsZSB4MSxkb3VibGUgeTEpewogICAgICB4PXgxOwogICAgICB5PXkxOwogICAgICB9CiAgICAgIGRvdWJsZSBnZXRfeCgpewogICAgICByZXR1cm4geDsKICAgICAgfQogICAgICBkb3VibGUgZ2V0X3koKXsKICAgICAgcmV0dXJuIHk7CiAgICAgIH0KfTsKCmNsYXNzIGxpbmV7CnByaXZhdGU6CiAgICAgIHBvaW50IHN0YXJ0LGVuZHM7CnB1YmxpYzoKICAgICAgdm9pZCBzZXRfZW5kcyhwb2ludCBhLHBvaW50IGIpewogICAgICBzdGFydD1hOwogICAgICBlbmRzPWI7CiAgICAgIH0KICAgICAgZG91YmxlIGxlbmd0aCgpewogICAgICBkb3VibGUgZHgsZHk7CiAgICAgIGR4PXN0YXJ0LmdldF94KCktZW5kcy5nZXRfeCgpOwogICAgICBkeT1zdGFydC5nZXRfeSgpLWVuZHMuZ2V0X3koKTsKICAgICAgcmV0dXJuIHNxcnQoZHgqZHgrZHkqZHkpOwogICAgICB9CiAgICAgIHBvaW50IG1pZHBvaW50KCl7CiAgICAgIGRvdWJsZSBtaWRfeCxtaWRfeTsKICAgICAgbWlkX3g9KHN0YXJ0LmdldF94KCkrZW5kcy5nZXRfeCgpKS8yOwogICAgICBtaWRfeT0oc3RhcnQuZ2V0X3koKStlbmRzLmdldF95KCkpLzI7CiAgICAgIHBvaW50IG1pZDsKICAgICAgbWlkLnNldF9wb2ludChtaWRfeCxtaWRfeSk7CiAgICAgIHJldHVybiBtaWQ7CiAgICAgIH0KCn07CmludCBtYWluKCl7CnBvaW50IEEsQixDOwpsaW5lIGxpbmVfYW5kX21pZDsKY291dDw8IkVudGVyIGZpcnN0IHR3byBwb2ludCA6IjsKZG91YmxlIHgxLHkxOwpjaW4+PngxPj55MTsKQS5zZXRfcG9pbnQoeDEseTEpOwpjb3V0PDwiRW50ZXIgc2Vjb25kIHR3byBwb2ludCA6IjsKCmNpbj4+eDE+PnkxOwpCLnNldF9wb2ludCh4MSx5MSk7Cgpjb3V0PDxlbmRsOwpsaW5lX2FuZF9taWQuc2V0X2VuZHMoQSxCKTsKY291dDw8Ikxlbmd0aCBvZiB0aGUgbGluZSA6Ijw8Zml4ZWQ8PHNldHByZWNpc2lvbigyKTw8bGluZV9hbmRfbWlkLmxlbmd0aCgpPDxlbmRsOwpDPWxpbmVfYW5kX21pZC5taWRwb2ludCgpOwpjb3V0PDwiTWlkcG9pbnRzIGFyZSA6Ijw8IigiPDxDLmdldF94KCk8PCIsIjw8Qy5nZXRfeSgpPDwiKSI8PGVuZGw7CnJldHVybiAwOwp9CgoKCg==