PTA(四十七)面向对象程序设计 第六章 作业 7-2 利用函数模板,求若个类型数中的最大值 (50 point(s))

7-2 利用函数模板,求若个类型数中的最大值 (50 point(s))

要求设计一个函数模板:

template
T Max(T x[],int len)
可以对int、float、Time(时间类)和Date(日期类)或其他基本类型的数据求最大值。 主函数有如下数据成员: int intArray[100]; double douArray[100]; Time timeArray[100]; date dateArray[100]; 【提示】:定义时间类:Time,其含有三个数据成员:hours、minutes、seconds,分别代表时、分和秒,并定义构造函数、输出函数及重载的>(或<)运算符函数等成员函数。 定义日期类:Date,其含有三个数据成员:year、month、day,分别代表年、月、日,定义构造函数、重载的>(或<)运算符函数等成员函数。

输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型。若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据:hour1 month1 second1 hour2 month2 second2……,以0结束。若为Date型数据,输入Date型数据:year1 month1 day1 year2 month2 day2 ……,以0结束。输入-1时表示全体输入结束。

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

输入样例:
在这里给出一组输入。例如:

4 2020 1 1 2012 5 11 2013 4 1 0
4 2020 1 1  2020 3 1 2020 12 1 0
3 18 21 11  23 34 56 2 56 59 0
1 4 5  9 3 7 0
2 2.7 3.2 6.9 4  5 0
1 7 3 9 5 4 0
1 0
2 0
3 0
4 0
-1

输出样例:
在这里给出相应的输出。例如:

2020/1/1
2020/12/1
23:34:56
9
6.9
9
0
0
0:0:0
0/1/1

收获

  • 找最值元素,赋初值的时候,要把最大值设成数组中的第一个,然后再更改。
#include<iostream>
using namespace std;

class Time{
    private:
    int hours,minutes,seconds;
    public:
    Time(int hours=0,int minutes=0,int seconds=0):hours(hours),minutes(minutes),seconds(seconds){};
    bool operator<(Time t){
        if(hours<t.hours){
            return true;
        }else if(hours>t.hours){
            return false;
        }else if(minutes<t.minutes){
            return true;
        }else if(minutes>t.minutes){
            return false;
        }else if(seconds<t.seconds){
            return true;
        }else{
            return false;
        }
    }
    void output(){
        cout<<hours<<":"<<minutes<<":"<<seconds<<endl;
    };
}timeArray[100];
class Date{
    private:
    int hours,minutes,seconds;
    public:
    Date(int hours=0,int minutes=1,int seconds=1):hours(hours),minutes(minutes),seconds(seconds){};
    bool operator<(Date t){
        if(hours<t.hours){
            return true;
        }else if(hours>t.hours){
            return false;
        }else if(minutes<t.minutes){
            return true;
        }else if(minutes>t.minutes){
            return false;
        }else if(seconds<t.seconds){
            return true;
        }else{
            return false;
        }
    }
    void output(){
        cout<<hours<<"/"<<minutes<<"/"<<seconds<<endl;
    };
}dateArray[100];
// class Date{
//     private:
//     int year,month,day;
//     public:
//     Date(int year=0,int month=1,int day=1):year(year),month(month),day(day){};
//     bool operator

// };



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



int main(){
    int n,count;
    int intArray[100];
    double doubArray[100];
    cin>>n;
    while(n!=-1){
        switch(n){
            case 1:{
                count=0;
                int temp;
                cin>>temp;
                if(temp==0){
                    cout<<0<<endl;
                    cin>>n;
                    break;
                }
                while(temp!=0){
                    intArray[count++]=temp;
                    cin>>temp;
                }
                int max=Max(intArray,count);
                cout<<max<<endl;
                cin>>n;
                break;
            }
            case 2:{
                count=0;
                double temp;
                cin>>temp;
                if(temp==0){
                    cout<<0<<endl;
                    cin>>n;
                    break;
                }
                while(temp!=0){
                    doubArray[count++]=temp;
                    cin>>temp;
                }
                double max=Max(doubArray,count);
                cout<<max<<endl;
                cin>>n;
                break; 
            }
            case 3:{
                int hours,minutes,seconds;
                Time temp;
                count=0;
                cin>>hours;
                while(hours!=0){
                    cin>>minutes>>seconds;
                    temp=Time(hours,minutes,seconds);
                    timeArray[count++]=temp;
                    cin>>hours;
                }
                Time max=Max(timeArray,count);
                max.output();
                cin>>n;
                break;
            }
            case 4:{
                int hours,minutes,seconds;
                Date temp;
                count=0;
                cin>>hours;
                while(hours!=0){
                    cin>>minutes>>seconds;
                    temp=Date(hours,minutes,seconds);
                    dateArray[count++]=temp;
                    cin>>hours;
                }
                Date max=Max(dateArray,count);
                max.output();
                cin>>n;
                break;
            }
            default:{
                break;
            }
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值