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

Подсчитать разницу в днях между 2 датами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.68
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
21.11.2011, 21:30     Подсчитать разницу в днях между 2 датами #1
Здравствуйте, нужно подсчитать сколько дней между определенными датами(1 января 2001 и 31 декабря 2020)
У меня есть код:
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
#include <iostream>
 
using namespace std;
 
int main()
{
    //С учетом весокосных годов получаем что разница между датами 20*365 + 4 = 7304 дня
    int allDays = 0;
    for(int currentYear = 2001;currentYear<=2020;currentYear++)
    {
        //Проходим месяцы
        for(int currentMonth = 1;currentMonth<=12;currentMonth++)
        {
            //Проходим дни
            int daysInThisMonth;
            if(currentMonth%2==0)
                daysInThisMonth = 30;
            else
                daysInThisMonth = 31;
            //Если февраль
            if(currentMonth == 2)
                if(currentYear%4==0) //Про остальные правила вычисления можно забыть тк они не срабатывают
                    daysInThisMonth = 29;
                else
                    daysInThisMonth = 28;
            for(int days = 1;days<=daysInThisMonth;days++)
            {
                allDays++;
            }
        }
    }
    cout << allDays;
    system("pause");
    return 0;
}
Но вместо 7304 он выводит 7285, не подскажите в чем ошибка
Заранее спасибо!

Добавлено через 5 минут
Получилось что в каждом году не считает какой-то 1 день

Добавлено через 33 секунды
Конечно можно тупо прибавить, но не подскажите в чем же все-таки неточность алгоритма
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 21:30     Подсчитать разницу в днях между 2 датами
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
St1ck_man
9 / 9 / 1
Регистрация: 21.11.2011
Сообщений: 36
21.11.2011, 23:22     Подсчитать разницу в днях между 2 датами #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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream.h>
#include <conio.h>
using namespace std;
 
class Date
{
private:
    int day;
    int month;
    int year;
 
    int cmp(Date d1, Date d2)
    {
        if (d1.year>d2.year)
            return 1;
        else
            if (d1.year<d2.year)
                return -1;
            else
                if (d1.month>d2.month)
                    return 1;
                else
                    if (d1.month<d2.month)
                        return -1;
                    else
                        if (d1.day>d2.day)
                            return 1;
                        else
                            if (d2.day<d2.day)
                                return -1;
        return 0;
    }
 
    bool vys(int year)
    {
        bool res= false;
        if (year%4==0)
            res= true;
        if (year%100==0)
            res= false;
        if (year%400==0)
            res= true;
        return res;
    }
 
    void Add(Date &d)//функция увеличивает дату на 1, то есть показывает слудуущий день
{
    int mes[]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (vys(d.year))//если высокосный год то в фефрале 29 дней
        mes[1]= 29;
    d.day++;//увеличиваем день
    if (d.day>mes[d.month-1])//если привысили месяц, то увеличиваем месяц
    {
        d.day= 1;
        d.month++;
        if (d.month>12)
        {
            d.month= 1;
            d.year++;
        }
    }
}
 
 
public:
    Date(int day, int month, int year)
    {
        SetDay(day);
        SetMonth(month);
        SetYear(year);
    }
    Date()
    {
        day=0;
        month=0;
        year=0;
    }
 
    int GetDay()
    {
        return day;
    }
    int GetMonth()
    {
        return month;
    }
    int GetYear()
    {
        return year;
    }
 
    void SetDay(int day)
    {
        this->day= day;
    }
    void SetMonth(int month)
    {
        this->month= month;
    }
    void SetYear(int year)
    {
        this->year= year;
    }
 
    void Vvod()
    {
        cout<<"Vvedite datu v formate dd.mm.yyyy: ";
        scanf("%d.%d.%d", &day, &month, &year);
    }
 
    void Vyvod()
    {
        printf("%.2d.%.2d.%.4d", day, month, year);
    }
 
    int raz(Date d)
    {
        Date date1= *this;
        Date date2= d;
 
        if (cmp(date1, date2)>0)
            swap(date1, date2);
 
        int kol=0;
 
        for (int i=date1.year; i<date2.year; i++)
        {
            kol+= 365;
            if (vys(i))
                kol++;
        }
 
        while ((date1.day!=date2.day)||(date1.month!=date2.month))
        {
            kol++;
            Add(date1);
        }
 
        return kol;
    }
 
};
 
 
 
int main()
{
    Date d1;
    Date d2;
 
 
    d1.Vvod();
    d2.Vvod();
 
    int q= d1.raz(d2);
 
    cout<<"Kol-vo dney: "<<q;
    getch();
    return 0;
}
когда-то делал подобную задачу посмотите функцию raz() находит разность в днях между дамати
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 10:46     Подсчитать разницу в днях между 2 датами #3
hepr, посмотрите на уже решённую ранее вашу задачу
Класс "Историческое событие"
и сюда также можете заглянуть
программа которая по номеру дня в году выводит число и месяц
Yandex
Объявления
22.11.2011, 10:46     Подсчитать разницу в днях между 2 датами
Ответ Создать тему
Опции темы

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