Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Lewis_Husk
0 / 0 / 1
Регистрация: 28.03.2012
Сообщений: 13
1

Класс «Дата» - поля данных и перегруженные операции

28.03.2012, 10:00. Просмотров 1203. Ответов 2
Метки нет (Все метки)

Привет! ребят помогите с заданием:" Класс «Дата» должен включать поля данных: день, месяц, год; методы: вывод даты и времени года и перегруженные операции: добавление (+) к дате целого числа (количества дней), сравнение двух дат (< , >). "
не могу сделать сравнение дат.
нароботка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <conio.h>
#include <string.h>
#include <iostream>
using namespace std;
class Date{
private:
        bool leapyear;
        int day;
        int month;
        int year;
        bool leap(int)const;
        int maxday()const;
public:
        Date(int d,int m,int y):leapyear(leap(y)),day(d),month(m),year(y){};
        Date& operator+=(int);
        Date& operator-=(int);
        string operator-(Date&)const;
        bool operator==(Date&)const;
        friend ostream& operator<<(ostream&, const Date&);
};
bool Date::leap(int y)const{ 
        return ((y % 4 == 0 && y% 100 != 0) || y % 400);
}
int Date::maxday()const{
        int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        if(leapyear)days[1]=29;
        return days[month-1];
}
Date& Date::operator+=(int d){
        if(day+d>maxday()){
                d-=maxday()-day;
                if(++month>12){
                        month=1;
                        year++;
                }
                while(d/maxday()){
                        if(++month>12){
                                month=1;
                                year++;
                        }
                        d-=maxday();
                }
                day=d;
        }
        else day+=d;
        return *this;
}
Date& Date::operator-=(int d){
        if(day-d<1){
                d-=day;
                if(--month==0){
                        month=12;
                        year--;
                }
                while(d/maxday()){
                        d-=maxday();
                        if(--month==0){
                                month=12;
                                year--;
                        }
                }
                day=maxday()-d;
        }
        else day-=d;
        return *this;
}
#include <sstream>            
string Date::operator-(Date &dt)const{
        int d,m,y;
        if(year>=dt.year){
                y=year-dt.year;
                if(month>dt.month){
                        m=month-dt.month;
                        d=day+dt.maxday()-dt.day;
                        if(d>dt.maxday())d-=dt.maxday();
                        else --m;
                        --y;
                }
                else {
                        m=12-month+dt.month;
                        d=dt.day+maxday()-day;
                        if(d>maxday())d-=maxday();
                        else --m;
                }
        }
        else {
                y=dt.year-year;
                if(month>dt.month){
                        m=12-month+dt.month;
                        d=day+dt.maxday()-dt.day;
                        if(d>dt.maxday())d-=dt.maxday();
                        else --m;
                        --y;
                }
                else {
                        m=dt.month-month;
                        d=maxday()-day+dt.day;
                        if(d>maxday())d-=maxday();
                        else --m;
                }
        }
        string s;
        stringstream ss;
        ss<<d<<" days "<<m<<" month "<<y<<" years";
        getline(ss,s);
        return s;
}
bool Date::operator==(Date& dt)const{
        return day==dt.day && month==dt.month && year==dt.year;
}
ostream& operator<<(ostream &os, const Date &dt){
        string m[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
        os<<dt.day<<" "<<m[dt.month-1]<<" "<<dt.year;
        return os;
}       
        
int main(){
        int d,m,y,reduce;
        cout<<"Введите первую дату (день месяц год): ";
        cin>>d>>m>>y;
        Date date(d,m,y);
        cout<<"Дата = "<<date<<endl;
        cout<<"Увеличить на дней : ";//уменьшить дату на столько то дней
        cin>>reduce;
        date+=reduce;
        cout<<"Дата = "<<date<<endl;
        cout<<"Введите вторую дату (день месяц год): ";
        cin>>d>>m>>y;
        Date date2(d,m,y);
        cout<<"Дата 2 = "<<date2<<endl;
        
        if(date==date2)cout<<"даты равны";
        return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 10:00
Ответы с готовыми решениями:

Реализовать класс Vector и перегруженные операции сложения (+), скалярного (%) и векторного (*) произведения
Создайте класс Vector (вектор), включающий поля: координаты вектора. Реализуйте методы вывода...

Создать класс Date – дата, содержащая поля: день, месяц, год.
Создать класс Date – дата, содержащая поля: день, месяц, год. Определить операторы &quot;+&quot; и &quot;-&quot;, как...

Перегруженные операции
Задача: Класс «Прямая» должен включать поля данных: коэффициенты прямой y = ax +b; методы: вывод...

Перегруженные операции
Создать перегруженную операцию ~, которая будет вычислять отклонение в процентах курсов продажи и...

Перегруженные конструктор/деструктор и операции
Дополнить класс перегруженным конструктором, деструктором и перегруженными операциями: +...

2
soon
2547 / 1312 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 10:02 2
Lewis_Husk, А где ваши попытки сделать перегрузку < ? Наработки покажите, и мы поправим.
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
28.03.2012, 11:02 3
C++
1
2
3
bool Date::operator==(Date& dt)const{
        return day==dt.day && month==dt.month && year==dt.year;
}
равно реализовали, теперь больше или меньше догадаетесь как сделать? поменять знак равно на больше и меньше соответственно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2012, 11:02

Написать программу на языке С + + реализующая класс содержащий поля данных и методы ввода и вывода данных
Написать программу на языке С + + реализующая класс содержащий поля данных и методы ввода и вывода...

Класс Эллипс. Перегруженные операторы
#include &lt;iostream&gt; using namespace std; class Ellipse { private: double bigRadius;...

Класс вектор с арифметическими операциями, перегруженные операторы
Добрый день! Нужна помощь. Реализовываю класс вектор с арифметическими операторами с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru