2023.5.25编程一小时打卡

发布时间 2023-05-25 14:37:04作者: 信2211-8李欣垚

一、问题描述:

数据的间距问题(函数模板) 类point有三个数据成员:x、y和z, 分别代表x坐标、y坐标和z坐标,并有若干构造函数和一个重载-(减号,计算两点距离)的成员函数。 要求设计一个函数模板,

template < class T> double dist(T a, T b)

对int,float,point或者其他类型的数据,返回间距。

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为point类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为point型元素,输入两个point型数据(x1 y1 z1 x2 y2 z2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

二、解题思路:

首先定义一个点类,有私有函数成员x,y,z,并构造一个减号的运算符重载函数计算俩点之间的距离,在定义一个函数模板,计算俩个数据之间差值,最后,在主函数中的使用while函数进行循环,通过标记值的输入进行输入数据,最后若标记值为0就停止运行。

三、代码实现:

 1 #include <iostream>
 2 #include<string>
 3 #include<cmath>
 4 #include<iomanip>
 5 using namespace std;
 6 class point
 7 {
 8 private:
 9     double x,y,z;
10 public:
11     point(){}
12     point(double a,double b,double c):x(a),y(b),z(c){}
13     double operator-(point &p)
14     {
15         point a;
16         a.x=x-p.x;
17         a.y=y-p.y;
18         a.z=z-p.z;
19         return sqrt(a.x*a.x+a.y*a.y+a.z*a.z);
20     }
21 };
22 template<class T>double dist(T a,T b)
23 {
24     return abs(a-b);
25 }
26 int main()
27 {
28     int a,b;
29     float p,q;
30     double x1,x2,y1,y2,z1,z2;
31     int flag;
32     while(1)
33     {
34         cin>>flag;
35         if(flag==0)
36         {
37             break;
38         }
39         else if(flag==1)
40         {
41             cin>>a>>b;
42             cout<<dist<int>(a,b)<<endl;
43         }
44         else if(flag==2)
45         {
46             cin>>p>>q;
47             cout<<dist<float>(p,q)<<endl;
48         }
49         else if(flag==3)
50         {
51             cin>>x1>>y1>>z1>>x2>>y2>>z2;
52             point p1(x1,y1,z1),p2(x2,y2,z2);
53             double s;
54             s=p2-p1;
55             cout<<s<<endl;
56         }
57     }
58 }