Форум программистов, компьютерный форум CyberForum.ru

Вывести разницу дней между двумя датами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
mercenaryfess
0 / 0 / 0
Регистрация: 02.07.2014
Сообщений: 2
02.07.2014, 08:10     Вывести разницу дней между двумя датами #1
Всем привет. Ребят, прошу вашей помощи
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
136
137
138
139
#include <iostream>
using namespace std;
 
class Date{
private:
    int raz, sch;
    int day, day2;
    int month, month2;
    int year, year2;
public:
    Date(){ //создание объекта по умолчанию.
        year = day = month = 1;
    }
    Date(int d, int m, int y){ //создание объекта с указанной датой.
        year = day = month = 1;
        if (m >= 1 && m <= 12){
            month = m;
        }
        if (y > 0) year = y;
        int dz;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            dz = 31;
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11){
            dz = 30;
        }
        else if (month == 2){
            if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) dz = 29;
            else dz = 28;
        }
        if (d >= 1 && d <= dz) day = d;
    }
    friend ostream& operator << (ostream& out, const Date& dt)
    {
        out << dt.day << '.' << dt.month << '.' << dt.year;
        return out;
    }
    Date operator + (int days){
        if (days < 0) return *this;
        Date date = Date(*this); //копия
        date.day += days;
 
        while (true){
            int dz;
            if (date.month == 3 || date.month == 1 || date.month == 5 || date.month == 7 || date.month == 8 || date.month == 10 || date.month == 12){
                dz = 31;
            }
            else if (date.month == 4 || date.month == 6 || date.month == 9 || date.month == 11){
                dz = 30;
            }
            else if (date.month == 2){
                if ((date.year % 4 == 0) && (date.year % 100 != 0) || (date.year % 400 == 0)) dz = 29;
                else dz = 28;
            }
            if (date.day > dz){
                date.day -= dz;
                date.month += 1;
            }
            else {
                break;
            }
            if (date.month > 12){
                date.month -= 12;
                date.year += 1;
            }
        }
        return date;
    }
    void writeDate(){
        int d, m, y, d2, m2, y2;
        
        cout << "Write 1st date (like 23 05 2009): ";
        cin >> d >> m >> y;
        year = day = month = 1;
        if (m >= 1 && m <= 12){
            month = m;
        }
        if (y > 0) year = y;
        int dz;
        if (month == 3 || month == 1 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            dz = 31;
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11){
            dz = 30;
        }
        else if (month == 2){
            if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) dz = 29;
            else dz = 28;
        }
        if (d >= 1 && d <= dz) day = d;
 
        cout << "Write 2nd date (like 23 05 2009): ";
        cin >> d2 >> m2 >> y2;
        year2 = day2 = month2 = 1;
        if (m2 >= 1 && m2 <= 12){
            month2 = m2;
        }
        if (y2 > 0) year2 = y2;
        int dz2;
        if (month2 == 3 || month2 == 1 || month2 == 5 || month2 == 7 || month2 == 8 || month2 == 10 || month2 == 12){
            dz2 = 31;
        }
        else if (month2 == 4 || month2 == 6 || month2 == 9 || month2 == 11){
            dz2 = 30;
        }
        else if (month2 == 2){
            if ((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) dz2 = 29;
            else dz2 = 28;
        }
        if (d2 >= 1 && d2 <= dz) day2 = d2;
 
    
        if (d != d2 && m != m2 && y != y2)
            raz = 0;
            if (y2 >= y & m2>=m & d2>d){
            while (d < d2 & m<m2)
                    d+=1;
                raz ++;
            }
            else if(y>=y2 ){}
            while (d > d2 & m>m2) {
                d2+=1;
                raz++;
            }
            sch = raz;
                cout << "Raznica v dnyah: " << sch << endl;
    };
};
void main(){
    Date d1 = Date();
    d1.writeDate();
    cout << "Date 1: " << d1 << endl;
    cout << "Date 1 + 20 days: " << d1 + 20 << endl;
    cout << "Date 1 + 1000 days: " << d1 + 1000 << endl;
    cout << "Date 1 + ? days: ";
    int n; cin >> n;
    cout << d1 + n << endl;
    system("PAUSE");
}
В функции writeDate в конце я хочу вывести разницу дней между двумя датами. У меня это не очень получается, выводит на экран какую-то фигню
Миниатюры
Вывести разницу дней между двумя датами  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 08:10     Вывести разницу дней между двумя датами
Посмотрите здесь:

C++ Программа для вычисления кол-во дней между двумя датами
Программа, определяющая разницу в сутках между двумя датами C++
Реализовать функцию вычисления количества дней между двумя датами. C++
Вычислить разницу в днях между двумя заданными датами C++
Рассчитать количество дней, прошедших между двумя датами C++
Вычислить разницу между двумя датами C++
Определение количества дней между двумя датами одного года C++
Посчитать количество дней между двумя датами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
02.07.2014, 08:46     Вывести разницу дней между двумя датами #2
Класс составлен в принципе неправильно:
Цитата Сообщение от mercenaryfess Посмотреть сообщение
private: int raz, sch;
int day, day2;
int month, month2;
int year, year2;
Здесь должны быть только day,month и year.
Остальные переменные вычисляемые, их объявлять надо локально в методах при необходимости.
Тогда бы, в частности, Вы бы заметили, что в методе writeDate()
используется неинициализированная переменная raz.
Yandex
Объявления
02.07.2014, 08:46     Вывести разницу дней между двумя датами
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru