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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.68
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
#1

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

21.11.2011, 21:30. Просмотров 4297. Ответов 2
Метки нет (Все метки)

Здравствуйте, нужно подсчитать сколько дней между определенными датами(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 секунды
Конечно можно тупо прибавить, но не подскажите в чем же все-таки неточность алгоритма
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчитать разницу в днях между 2 датами (C++):

Вывести разницу в днях между двумя датами - C++
Надо определить количество прошедших дней(даты ввести в формате dd/mm/yyyy)(можно считать что в году 365 дней) например: вход: ...

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

Определение разницы между датами в днях - C++
Всем привет! :) Задача в том что есть две даты ( день, месяц, год ) нужно определить разницу дв днях между ними)

Расчет длительности в днях промежутка времени между двумя датами - C++
ВСем Привет! Пфф,у кого-нибудь такая задачка встречалась? Можеть быть есть у кого? Помогите пожалуйста. В голову ничего не приходит,как...

Вычислить разницу между двумя датами - C++
1. есть ли функция которая вычислит сколько прошло например с 1934 до 2014. 2. как вычислить сраж роботы есть год поступления на роботу и...

Вывести разницу дней между двумя датами - C++
Всем привет. Ребят, прошу вашей помощи#include &lt;iostream&gt; using namespace std; class Date{ private: int raz, sch; int day,...

2
St1ck_man
9 / 9 / 1
Регистрация: 21.11.2011
Сообщений: 36
21.11.2011, 23:22 #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() находит разность в днях между дамати
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 10:46 #3
hepr, посмотрите на уже решённую ранее вашу задачу
Класс "Историческое событие"
и сюда также можете заглянуть
программа которая по номеру дня в году выводит число и месяц
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 10:46
Привет! Вот еще темы с ответами:

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

Перегрузка операторов. Инкапсуляция. Сделать так, чтобы оператор >> находил разницу между датами. - C++
Задание: Сделать так чтобы оператор &gt;&gt; находил разницу между датами. Программа рабочая. Написана на С++ Возникли проблемы с...

Найти разницу в днях - C++
Найти разницу в днях между двумя заданными датами. Даты вводить с клавиатуры. Не знаю как написать,возникают вопросы , а как быть с...

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


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

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

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