С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lewis_Husk
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 13
#1

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

28.03.2012, 10:00. Просмотров 1074. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс «Дата» - поля данных и перегруженные операции (C++):

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

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

Перегруженные операции - C++
Создать перегруженную операцию ~, которая будет вычислять отклонение в процентах курсов продажи и покупки доллара США от курса ЦБ РФ.

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

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

Класс вектор с арифметическими операциями, перегруженные операторы - C++
Добрый день! Нужна помощь. Реализовываю класс вектор с арифметическими операторами с помощью контейнера &lt;vector&gt;. У меня имеются рабочие...

2
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 10:02 #2
Lewis_Husk, А где ваши попытки сделать перегрузку < ? Наработки покажите, и мы поправим.
0
panicwassano
592 / 560 / 20
Регистрация: 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
Привет! Вот еще темы с ответами:

Создать класс, содержащий поля, которые можно использовать для хранения данных - C++
Создать класс &lt;имя класса&gt; (имя класса задается в соответствии с выбранным вариантом), содержащий поля, которые можно использовать для...

Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. - C++
Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции:...

класс дата - C++
Создать класс типа - дата с полями: день (1-31), месяц (1-12), год(целое число).Класс имеет конструктор:с параметрами, без...

Дата класс - C++
Перешарила интернет. Помогите описать Класс даты,чтобы работало+вычисляла новые даты путем слож/вычит


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

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

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