Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
UrbanFool
0 / 0 / 1
Регистрация: 11.11.2011
Сообщений: 15
#1

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) - C++

22.12.2015, 11:28. Просмотров 2096. Ответов 5
Метки нет (Все метки)

Задачка
Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими двумя датами. Для расчетов учитывать високосные года, а также корректное число дней в месяцах (март – 31, сентябрь – 30, февраль невисокосного года – 28 и т.д.).

Решение:
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
#include <iostream>
using namespace std;
void main()
{
    setlocale(LC_CTYPE, "rus");
 
 
int a, b, c, d, e, f, x, y = 0;
    cout<<"\nВведите начальную дату через пробел :";
    cin>>b>>c;
    cout<<"\nВведите конечную дату через пробел :";
    cin>>d>>e>>f;
 
    int /*jan*/m1 = 31;
    int /*feb*/m2 = 28;
    int /*mar*/m3 = 31;
    int /*apr*/m4 = 30;
    int /*may*/m5 = 31;
    int /*jun*/m6 = 30;
    int /*jul*/m7 = 31;
    int /*aug*/m8 = 31;
    int /*sep*/m9 = 30;
    int /*oct*/m10 = 31;
    int /*nov*/m11 = 30;
    int /*dec*/m12 = 31;
 
    /*case 1 */ if (b == 1) { x = a; }
    /*case 2 */ else if (b == 2) { x = m1 + a; }
    /*case 3 */ else if (b == 3) { x = m1 + m2 + a; }
    /*case 4 */ else if (b == 4) { x = m1 + m2 + m3 + a; }
    /*case 5 */ else if (b == 5) { x = m1 + m2 + m3 + m4 + a; }
    /*case 6 */ else if (b == 6) { x = m1 + m2 + m3 + m4 + m5 + a; }
    /*case 7 */ else if (b == 7) { x = m1 + m2 + m3 + m4 + m5 + m6 + a; }
    /*case 8 */ else if (b == 8) { x = m1 + m2 + m3 + m4 + m5 + m6 + m7 + a; }
    /*case 9 */ else if (b == 9) { x = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + a; }
    /*case 10 */ else if (b == 10) { x = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + a; }
    /*case 11 */ else if (b == 11) { x = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + a; }
    /*case 12 */ else if (b == 12) { x = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + a; }
 
    /*case 1 */ if (e == 1) { y = d + y; }
    /*case 2 */ else if (e == 2) { y = m1 + d + y; }
    /*case 3 */ else if (e == 3) { y = m1 + m2 + d + y; }
    /*case 4 */ else if (e == 4) { y = m1 + m2 + m3 + d + y; }
    /*case 5 */ else if (e == 5) { y = m1 + m2 + m3 + m4 + d + y; }
    /*case 6 */ else if (e == 6) { y = m1 + m2 + m3 + m4 + m5 + d + y; }
    /*case 7 */ else if (e == 7) { y = m1 + m2 + m3 + m4 + m5 + m6 + d + y; }
    /*case 8 */ else if (e == 8) { y = m1 + m2 + m3 + m4 + m5 + m6 + m7 + d + y; }
    /*case 9 */ else if (e == 9) { y = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + d + y; }
    /*case 10 */ else if (e == 10) { y = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + d + y; }
    /*case 11 */ else if (e == 11) { y = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + d + y; }
    /*case 12 */ else if (e == 12) { y = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + d + y; }
    if (c == f) 
    { cout<<"\nКоличество дней между этими двумя датами :"<<y - x;
    }
    else
        cout<<"\nКоличество дней между этими двумя датами :"<<(f - c) * 365 + (y - x);
 
}
Код проходит проверку без замечаний, но при запуске выдается ошибка:
 Комментарий модератора 

Запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах.


Подскажите пожалуйста, как это исправить или что я не так делаю в решении поставленной задачи, заранее спс =3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2015, 11:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) (C++):

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

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

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

Посчитать количество дней между двумя датами
читал на форуме похожие темы, даже нашел целый код, но он мне кажется мудреным,...

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

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

5
Tyoma
51 / 51 / 15
Регистрация: 12.05.2010
Сообщений: 167
Завершенные тесты: 3
22.12.2015, 12:00 #2
Лучший ответ Сообщение было отмечено UrbanFool как решение

Решение

Возможно проблема в этой строке
C++
1
cin>>b>>c;
Вы вместо 3 параметров считываете 2 и b у вас больше 12, соответственно x не объявлен
1
A1t0r
9 / 9 / 3
Регистрация: 11.05.2015
Сообщений: 26
22.12.2015, 12:02 #3
Лучший ответ Сообщение было отмечено UrbanFool как решение

Решение

Вы пропустили присвоение номера дня переменной a.
0
UrbanFool
0 / 0 / 1
Регистрация: 11.11.2011
Сообщений: 15
22.12.2015, 16:38  [ТС] #4
Цитата Сообщение от Tyoma Посмотреть сообщение
Возможно проблема в этой строке
C++
1
cin>>b>>c;
Вы вместо 3 параметров считываете 2 и b у вас больше 12, соответственно x не объявлен
а как сделать что были и високосные года?
0
Tyoma
51 / 51 / 15
Регистрация: 12.05.2010
Сообщений: 167
Завершенные тесты: 3
22.12.2015, 17:40 #5
UrbanFool, год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400.
0
AmmBraT
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 1
09.11.2017, 12:04 #6
Я долго ломал голову над этим заданием и кое как дошел до такого кода:

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
#include <iostream>
using namespace std;
 
void main() {
 
    setlocale(LC_ALL, "rus");
 
    int day, day1, month, month1, year, year1, diffye, diffmon, diffmon1;
    cout << "Введите день первой даты: ";
    cin >> day;
    cout << "Введите месяц первой даты: ";
    cin >> month;
    cout << "Введите год первой даты: ";
    cin >> year;
    cout << "Введите день второй даты: ";
    cin >> day1;
    cout << "Введите месяц второй даты: ";
    cin >> month1;
    cout << "Введите год второй даты: ";
    cin >> year1;
 
    if (day <= 31 && day1 <= 31 && month <= 12 && month1 <= 12) {
        diffye = (year1 - year) * 365;
 
        if (month > 8) diffmon = ((month - 1) * 30) + ((month - 1) / 2) + ((month - 1) % 2) - 1 + day;
        else if (month  > 2) diffmon  = ((month  - 1) * 30) + ((month  - 1) / 2) + ((month  - 1) % 2) - 2 + day ;
        else diffmon = ((month - 1) * 30) + ((month - 1) / 2) + ((month - 1) % 2) + day;
 
        if (month1 > 8) diffmon1= ((month1 - 1) * 30) + ((month1 - 1) / 2) + ((month1 - 1) % 2) - 1 + day1;
        else if (month1 > 2) diffmon1 = ((month1 - 1) * 30) + ((month1 - 1) / 2) + ((month1 - 1) % 2) - 2 + day1;
        else diffmon1 = ((month1 - 1) * 30) + ((month1 - 1) / 2) + ((month1 - 1) % 2) + day1;
 
        if (diffye > 0) {
            (diffye -=diffmon)+=diffmon1;
        }
        else {
            diffye = diffmon1 - diffmon;
        }
 
        if (((year1 - year) / 2) > 1 && month1 >  2) diffye += ((year1 - year) / 4) + 1;
 
        cout << "Количество дней между этими датами " << diffye << "\n";
    }
    else cout << "Вы ввели некорректные даты!\n";
    
}
0
09.11.2017, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2017, 12:04
Привет! Вот еще темы с решениями:

Вывести разницу дней между двумя датами
Всем привет. Ребят, прошу вашей помощи#include &lt;iostream&gt; using namespace std;...

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

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

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


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

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

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