模板习题打卡5.5

发布时间 2023-05-06 00:00:02作者: po3a

两个类如下设计:类Time有三个数据成员,hhmmss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,yearmonthday分别代表年月日,并有若干构造函数和一个重载><)(大于号或者小于号)的成员函数。

要求设计一个函数模板

template <class T>

T maxn(T x[], int len);

intfloattimedate或者其他类型的数据,返回最大值。

main主函数有如下变量的定义:

int intArray[100];

double douArray[100];

Time timeArray[100];

Date dateArray[100];

其中,hh = 3600 ssmm = 60 ssyear = 365 daymonth = 30 day,对于TimeDate类型,数据在转换成ss或者day后进行运算。

输入格式:

每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3Time类型,4Date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为Date型数据,输入Date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。

输出格式:

对每次输入,输出一个最大值。

样例输入:

1 4 5 9 3 7 0

2 4.4 5.5 6.9 3.2 2.7 0

3 18 21 22 18 20 31 18 21 49 0

4 2013 5 14 2013 5 15 2013 4 1 0

-1

样例输出:

9

6.9

18 21 49

2013 5 15

#include<bits/stdc++.h>
using namespace std;

template<class T>
T maxn(T x[],int len){
    T max;
    max=x[0];
    for(int i=0;i<len;i++){
        if(x[i]>max){
            max=x[i];
        }
    }
    cout<<max<<endl;
    return max;
} 

class Time
{
    private:
        int hh;
        int mm;
        int ss;
    public:
        Time()
        {
            hh=0;
            mm=0;
            ss=0;
        }
        void get(int h,int m,int s)
        {
            hh=h;
            mm=m;
            ss=s;
        }
        friend bool operator >(Time &t1,Time &t2);
        friend ostream & operator <<(ostream &,Time &);
};
bool operator >(Time &t1,Time &t2)
{
    int ti1=t1.hh*3600+t1.mm*60+t1.ss;
    int ti2=t2.hh*3600+t2.mm*60+t2.ss;
    return ti1>ti2?true:false;
}
ostream &operator<<(ostream &output,Time&t)
{
    output<<t.hh<<" "<<t.mm<<" "<<t.ss;
    return output;
}

class date
{
    private:
        int year;
        int month;
        int day;
    public:
        date()
        {
            year=0;
            month=0;
            day=0;
        }
        void get(int y,int m,int d)
        {
            year=y;
            month=m;
            day=d;
        }
        friend bool operator >(date &d1,date &d2);
        friend ostream & operator <<(ostream &,date &); 
};
bool operator >(date &d1,date &d2)
{
    int da1=d1.year*365+d1.month*30+d1.day;
    int da2=d2.year*365+d2.month*30+d2.day;
    return da1>da2?true:false;
}
ostream &operator<<(ostream &output,date &d){
    output<<d.year<<" "<<d.month<<" "<<d.day;
    return output;
}
int main()
{
    int intArray[100];
    double douArray[100];
    Time TimeArray[100];
    date dateArray[100];
    int f;
    int i=0;
    while(cin>>f){
        if(f==-1){
            break;
        }
        if(f==1)
        {
            while(cin>>intArray[i])
            {
                if(intArray[i]==0)
                {
                    break;
                }
                i++;
            }
            maxn(intArray ,i);
        }
        if(f==2)
        {
            while(cin>>douArray[i])
            {
                if(douArray[i]==0)
                {
                    break;
                }
                i++;
            }
            maxn(douArray,i);
        }
        if(f==3)
        {
            int hour,minute,second;
            while(cin>>hour){
                if(hour==0)
                {
                    break;
                }
                cin>>minute>>second;
                TimeArray[i].get(hour,minute,second);
                i++;
            }
            maxn(TimeArray,i);
        }
        if(f==4)
        {
            int year1,month1,day1;
            while(cin>>year1){
                if(year1==0)
                {
                    break;
                }
                cin>>month1>>day1;
                dateArray[i].get(year1,month1,day1);
                i++;
            }
            maxn(dateArray,i);
        }
    }
    return 0;
}