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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Cчитать с клавиатуры строку символов, подсчитать количество положительных чисел. http://www.cyberforum.ru/cpp-beginners/thread532029.html
Написать программу, которая читает с клавиатуры строку символов. Необходимо подсчитать количество положительных чисел. Вывести результат на экран.
C++ Разработать класс Point для представления точки на плоскости Разработать класс Point для представления точки на плоскости. Разработать класс, производный от класса Point. Создать гетерогенный массив из объектов этих классов, задать произвольно координаты и... http://www.cyberforum.ru/cpp-beginners/thread529969.html
C++ С++ для обработки текстового файла.
Помогите пожалуйста "Создать текстовый файл с произвольным числом строк. Заменить самое длинное слово каждой строки на ваше имя."
Поменять в столбце взаимно противоположные числа C++
дан массив 4 на 4 поменять в столбце взаимно противоположные числа (т.е. напр. 3 и -3)
C++ Текстовый файл, который содержит номера телефонов сотрудников http://www.cyberforum.ru/cpp-beginners/thread529734.html
A. Сформировать текстовый файл, который содержит номера телефонов сотрудников учреждения: указываются фамилия, инициалы и номер телефона. B. Используя данные из этого файла, напечатать номер...
C++ Вычислить площадь треугольника Вычислить площадь треугольника со сторонами а, Ь, с по формуле Герона, проверив условие корректности исходных данных (длины всех сторон положительны, сумма длин любых двух сторон больше длины... подробнее

Показать сообщение отдельно
Lewis_Husk
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 13

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

28.03.2012, 10:00. Просмотров 1067. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru