7-1 数据的间距问题 (20分) -- PTA

7-1 数据的间距问题 (20分)

复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,计算两个复数的距离)的成员函数。
要求设计一个函数模板
template < class T >
double dist(T a, T b)
对int,float,Complex或者其他类型的数据,返回两个数据的间距。
输入格式:
每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。
输出格式:
对每个输入,每行输出一个间距值。

输入样例:
1 2 5
3 2 4 5 9
2 2.2 9.9
0
输出样例:
3
5.83095
7.7

注意:本博客代码未进行运算符重载(即未完全满足题目要求,但是满足pta所有测试点,也即答案完全正确),而是使用了更容易理解的函数调用;想要获取含有运算符重载的代码,请参考https://www.cnblogs.com/wzzdeblog/p/10828308.html
7-1 数据的间距问题 (20分) -- PTA_第1张图片

#include
#include
using namespace std;
class Complex{
private:  
	double a, b;
public:
    Complex(){    
        a = 0;    
        b = 0;    
    }    
    Complex(double x, double y){    
        a = x;    
        b = y;    
        }
 };
template < class T >
double dist(T a, T b)
{    
	return abs(a-b);
}
double s(double m1, double m2)
{       
	return pow(abs(m2-m1), 2);
}

int main()
{    
	int n;    
	while(cin >> n, n != 0){     
	   if(n == 1){       
	        int a, b;      
	        cin >> a >> b;            
	        cout << dist(a, b) << endl;        
	    }        
	    else if(n == 2){       
	         float a, b;            
	         cin >> a >> b;            
	         cout << dist(a, b) << endl;        
	    }        
	    else if(n == 3){      
	          double a, b;           
	          double a1, b1, a2, b2;            
	          cin >> a1 >> b1 >> a2 >> b2;            
	          a = s(a1, a2);           
	          b = s(b1, b2);            
	          cout << sqrt(a+b) << endl;        
	     }    
       }
       return 0;
}

你可能感兴趣的:(7-1 数据的间距问题 (20分) -- PTA)