0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 31
1

Посчитать количество дней между двумя датами

22.03.2015, 01:08. Показов 8308. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
читал на форуме похожие темы, даже нашел целый код, но он мне кажется мудреным, да и использовать мне массивы нельзя, мы их типо не прошли, как и циклы, правда без циклов я так и не придумал, в общем насозидал нечто и тепрь не могу понять откуда берутся значения переменных d,m,y и d1,m1,y1 потому что я с ними ничего не делаю но после проверки на корректность введенной даты у меня вместо к примеру 5 3 2015 получается то что на сриншоте, а ведь при проверке на корректность все правильно выдает

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
161
162
163
164
165
166
167
168
/*
Подчитать колечество прошедших дней между датами
*/
 
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "RUSSIAN");
    int d, m, y;
    printf("Введите первую дату\n");
    data:
    printf("Введите день ");     scanf("%d", &d);
     if( d > 31 )
    {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data;
    }
    printf("Введите месяц ");    scanf("%d", &m);
    if( m > 12 )
    {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data;
    }
    printf("Введите год ");      scanf("%d", &y);
 
 
 
// Проврка 1ой даты
    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
    {
        if(d > 31)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data;
        }
    }
    if(m == 4 || m == 6 || m == 9 || m == 11)
    {
        if(d > 30)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data;
        }
    }
    if(m == 2)
    {
        if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
            if(d>29)
            {
                printf("Дата введена неверно,");
                printf("введите дату заново.\n");
                goto data;
            }
        if(y % 4 != 0 || y % 100 == 0 && y % 400 != 0)
            if(d>28)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data;
        }
    }
    printf("\nДата введена верно.\n");
 
// Ввод 2ой даты
    int d1, m1, y1;
    printf("\nВведите вторую дату\n");
    data1:
    printf("Введите день ");     scanf("%d", &d1);
     if( d1 > 31 )
    {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data1;
    }
    printf("Введите месяц ");    scanf("%d", &m1);
    if( m1 > 12 )
    {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data1;
    }
    printf("Введите год ");      scanf("%d", &y1);
 
 
 
 
//Проверка 2ой даты
    if(m1 == 1 || m1 == 3 || m1 == 5 || m1 == 7 || m1 == 8 || m1 == 10 || m1 == 12)
    {
        if(d1 > 31)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data1;
        }
    }
    if(m1 == 4 || m1 == 6 || m1 == 9 || m1 == 11)
    {
        if(d1 > 30)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data1;
        }
    }
    if(m1 == 2)
    {
        if(y1 % 4 == 0 && y1 % 100 != 0 || y1 % 400 == 0)
            if(d1 > 29)
            {
                printf("Дата введена неверно,");
                printf("введите дату заново.\n");
                goto data1;
            }
        if(y1 % 4 != 0 || y1 % 100 == 0 && y1 % 400 != 0)
            if(d1 > 28)
        {
            printf("Дата введена неверно,");
            printf("введите дату заново.\n");
            goto data1;
        }
    }
    printf("\nДата введена верно.\n");
 
    printf("\n%d %d %d  -  %d %d %d\n", &d, &m, &y, &d1, &m1, &y1);
 
    int counter = 1, year, month, day, n;
    for( year = y; year <= y1; year++)
    {
        for( month = m; month <= 12; month++)
        {
            if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
            {
                n = 31;
            }
            if(month == 4 || month == 6 || month == 9 || month == 11)
            {
                n = 30;
            }
            if(month == 2)
            {
                if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                {
                    n = 29;
                }
                if(year % 4 != 0 || year % 100 == 0 && year % 400 != 0)
                {
                    n = 28;
                }
            }
            for( day = d; day <= n; day++)
            {
                    counter++;
            }
            d = 1;
        }
        m = 1;
    }
    printf("\n\n\nКоличество прошедших дней равно %d", &counter);
    return 0;
}
Миниатюры
Посчитать количество дней между двумя датами  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2015, 01:08
Ответы с готовыми решениями:

Количество дней между двумя датами
Здравствуйте, у меня есть неполный код от задачи: Найти количество дней между двумя датами. можете...

Количество дней между двумя датами
Хочу спросить кто знает как найти количество дней между двумя датами. ПРИМЕР input ...

Высчитать количество дней между двумя датами
Короче,много тем на форуме по этому поводу,но нету ниодной правильной,которая мне нужна. Суть...

Определить количество дней между двумя датами
Всем привет. Знаю была уже подобная задачка решена ранее, и не раз: Пользователь вводит две даты...

3
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 31
22.03.2015, 01:11  [ТС] 2
еще забыл дописать, много раз слышал что не очень хорошо использовать goto, хотя когда пишем на fortran там всё отлично, так вот, как конкретно в моем коде при проверке на корректность даты обойтись без goto?
0
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
22.03.2015, 09:07 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
 
using std::cout;
using std::endl;
namespace dt = boost::gregorian;
 
int main()
{
    dt::date end_date (dt::day_clock::local_day());
    dt::date initial_date (2015, dt::Jan, 1);
    cout <<"Initial date: " <<initial_date <<endl
         <<"End date: " <<end_date <<endl;
    dt::date_duration days = end_date - initial_date;
    cout <<"Days: " <<days <<endl;
}
0
1371 / 594 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
22.03.2015, 09:40 4
Даты ввод вывод разность
0
22.03.2015, 09:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2015, 09:40
Помогаю со студенческими работами здесь

Вычислить количество дней между двумя датами
Даны натуральные числа a1, b1, c1, a2, b2, c2, которые указывают две даты (число, месяц, год)....

Рассчитать количество дней, прошедших между двумя датами
Помогите решить ТОЛЬКО с помощью циклов и условного оператора 3.Два дать заданные натуральными...

Функция, считающая количество дней между двумя датами
нужна вот сюда функция, считающая количество дней между двумя датами всё задание звучит так:...

Вычислить количество дней и количество полных лет между двумя датами
Ввести натуральные числа а(1), b(1), c(1), a(2), b(2), c(2), которые указывают две даты (число,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru