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

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

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

Класс Date дополнить прогу - C++

24.05.2011, 12:19. Просмотров 730. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста дополнить программу что бы она правильно считала разность дат и распознавала високосный год.

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
135
#include <iostream>
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);
        std::string operator-(Date&)const;
        bool operator==(Date&)const;
        friend std::ostream& operator<<(std::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> //stringstream               
std::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;
                }
        }
        std::string s;
        std::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;
}
std::ostream& operator<<(std::ostream &os, const Date &dt){
        std::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,increase;
        std::cout<<"Enter first date (day month year): ";
        std::cin>>d>>m>>y;
        Date date(d,m,y);
        std::cout<<"Date = "<<date<<std::endl;
        std::cout<<"reduce  date by : ";//уменьшить дату на столько то дней
        std::cin>>reduce;
        date-=reduce;
        std::cout<<"Date = "<<date<<std::endl;
        std::cout<<"Increase date by : ";//увеличить дату 
        std::cin>>increase;
        date+=increase;
        std::cout<<"Date = "<<date<<std::endl;
        std::cout<<"Enter second date (day month year): ";
        std::cin>>d>>m>>y;
        Date date2(d,m,y);
        std::cout<<"Date2 = "<<date2<<std::endl;
        std::cout<<"Dates are "<<(date==date2 ? "equal":"not equal")<<std::endl;
        std::cout<<"Date1 - Date2 = "<<date-date2<<std::endl;
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2011, 12:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс Date дополнить прогу (C++):

Дополнить готовую прогу,апгрейд сделать:) - C++
//В двумерном массиве все числа различны.В каждой строке находится мин.элемент,затем среди этих чисел находится выбирается...

Создайте класс Date. Добавить в строковый класс функцию - C++
3)Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите...

Дополнить и проанализировать класс - C++
Дано описание классов. Проанализировать его и дополнить код программы таким образом, чтобы функции-члены класса были встроенными. Показать...

Дополнить класс динамическим массивом - C++
Доброго всем времи суток!!! Возникла проблема - создан класс &quot;sequence&quot; нужно дописать его так, чтобы он использовал динамический...

Создать класс Date - C++
Товарищи программисты! Смиренно прошу о помощи, ибо не понимаю я си++ , а осталось пару дней до сдачи практических заданий. Кому не сложно...

С++ проверить класс Date - C++
Проблемы в задаче по классам (типа календаря) с системной датой date sysd и Today. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

4
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:28 #2
Для вычисления разности, приводи дату к количеству дней и уже их вычитай. Потом можно обратно в условное количество месяцев/лет преобразовать.
0
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
24.05.2011, 13:52 #3
Определить високосный ли год можно так:
C++
1
2
3
4
5
6
7
8
bool leapYear( int testYear ) const
{
   if ( testYear % 400 == 0 || 
      ( testYear % 100 != 0 && testYear % 4 == 0 ) )
      return true; // високосный год
   else
      return false; // не високосный год
}
0
SIDX
0 / 0 / 0
Регистрация: 06.05.2011
Сообщений: 33
24.05.2011, 22:30  [ТС] #4
Можно поподробнее о том, как реализовать вычисление кол-ва дней между датами? буду очень признателен
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
24.05.2011, 22:35 #5
Цитата Сообщение от SIDX Посмотреть сообщение
Можно поподробнее о том, как реализовать вычисление кол-ва дней между датами?
См. тут или тут.

Добавлено через 48 секунд
И кстате, поиск на форуме работает.
0
24.05.2011, 22:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 22:35
Привет! Вот еще темы с ответами:

Создать класс Date - C++
Задача заключается в том что нужно создать класс Date. Поля класса год, месяц, день. Реализовать метод вычисления даты через заданное...

Реализовать класс Date (дата) - C++
в общем, утопающий студент просит о помощи, потому как сам уже себя не успеет спасти. нужно к понедельнику сдать 5 лабораторных на с++ ...

Создать класс с именем Date - C++
Создайте класс Date, включающий в качестве элементов данных три информационных пункта: месяц (тип int), день (тип int) и год (тип int). Ваш...

Класс Date найти день недели - C++
Создайте класс «Дата» со свойствами год, високосный год, месяц, день месяца и день недели. Создайте для него метод котрый бы...


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

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

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