實驗內容
[問題描述]
設計實現抽象數據類型“三元組”。每個三元組由任意三個實數的序列構成,基本操作包括:創建一個三元組,取三元組的任意一個分量,置三元組的任意一個分量,求三元組的最大分量,求三元組的最小分量,兩個三元組的對應分量相加或相減,給三元組的各分量同乘一個比例因子,顯示三元組,銷毀三元組等。
[基本要求]
實現創建一個三元組,取三元組的任意一個分量,置三元組的任意一個分量,求三元組的最大分量,求三元組的最小分量,顯示三元組等基本操作。
【代碼】
#include<iostream>
using namespace std;
template <class Elem> class Triple
{
private:
Elem e1;
Elem e2;
Elem e3;
public:
Triple(Elem v1,Elem v2,Elem v3)
{
e1=v1;
e2=v2;
e3=v3;
}
Elem Get(int i)//初始條件:三元組已經存在,1≤i≤3;操作結果:返回三元組的第i個分量
{
if(i >= 1 && i <=3)
{
Elem a[3]={e1,e2,e3};
return a[i-1];
}
else
{
cout<<"\n";
cout<<"錯誤,輸入值范圍是1~3"<<endl;
}
}
bool Put(int i,Elem e)//初始條件:三元組已經存在,1≤i≤3;
//操作結果:將三元組的第i個分量賦值為e,成功返回true,否則返回false
{
if(i >= 1 && i <=3)
{
if(i==1)
e1=e;
else if(i==2)
e2=e;
else if(i==3)
e3=e;
return true;
}
else
return false;
}
Elem GetMax()//初始條件:三元組已經存在,操作結果:返回三元組中最大分量值e
{
Elem a[3]={e1,e2,e3};
Elem max=a[0];
if(a[1]>a[0])
max=a[1];
if(a[2]>max)
max=a[2];
return max;
}
Elem GetMin()//初始條件:三元組已經存在,操作結果:返回三元組中最小分量值e
{
Elem a[3]={e1,e2,e3};
Elem min=a[0];
if(a[1]<a[0])
min=a[1];
if(a[2]<min)
min=a[2];
return min;
}
void Output()//初始條件:三元組已經存在,操作結果:輸出三元組中所有分量值
{
Elem a[3]={e1,e2,e3};
cout<<"現在三元組所有分量值為:";
for(int i=0;i<3;i++)
cout<<a[i]<<" ";
}
Elem Sum(int i,int j)//輸入進行相加運算的序號,返回相加後的結果
{
Elem a[3]={e1,e2,e3};
return a[i-1]+a[j-1];
}
void Proportion(float a,float b,float c)//三元組的各分量同乘一個比例因子
{
e1=e1*a;
e2=e2*b;
e3=e3*c;
}
void Destroy()//銷毀三元組
{
e1=0;
e2=0;
e3=0;
cout<<"三元組已初始化為0";
}
};
//測試
int main()
{
Triple<float> t(10,33,-44);
cout<<"測試結果:"<<endl;
cout<<"三元組第一個數為:"<<t.Get(1)<<endl;
t.Output();
cout<<"\n";
cout<<"\n將第一個數修改為55後";
t.Put(1,55);
t.Output();
cout<<"\n";
cout<<"\n三元組最大值為:"<<t.GetMax()<<endl;
cout<<"三元組最小值為:"<<t.GetMin()<<endl;
cout<<"\n";
t.Output();
cout<<"\n三元組中第一個和第三個數的和為:"<<t.Sum(1,3);
cout<<"\n";
cout<<"\n為三元組中各元素分別乘以0.1,0.4,0.5後";
t.Proportion(0.1,0.4,0.5);
cout<<"\n";
t.Output();
cout<<"\n";
cout<<"\n銷毀三元組"<<endl;
t.Destroy();
cout<<"\n";
t.Output();
system("pause");
}
注:以上內容僅供參考,如有問題請指正。
作者“心海新航”