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

Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный - C++

Восстановить пароль Регистрация
 
SvI
-79 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 45
22.05.2013, 21:39     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #1
Здравствуйте! Помогите, пожалуйста, мне решить вот такую задачу (желательно, чтобы работало в Qt Creator):

Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный.

Добавлено через 12 часов 5 минут
Вверх!

Добавлено через 1 минуту
Вверх!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 21:39     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный
Посмотрите здесь:

C++ Программа для вычисления кол-во дней между двумя датами
находится ли дата между двумя другими датами C++
C++ Определить число часов, прошедших между двумя датами
Реализовать функцию вычисления количества дней между двумя датами. C++
Рассчитать количество дней, прошедших между двумя датами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
22.05.2013, 21:57     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #2
Вывод переделаете для Qt
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct Date
{
    Date(size_t d, size_t m, size_t y):
        day(d), month(m), year(y) {}
    size_t day, month, year;
 
    double Factor() const
    {
        if (month == 1 || month == 2) {
            return double(365 * year + day + 31 * (month - 1)
                        + floor((year - 1) / 4) - floor(3 / 4 * (floor(year - 1) / 100 + 1)));
        } else {
        return double(365 * year + day + 31*(month - 1)
                        - floor(0.4 * month + 2.3) + floor(year / 4)
                        - floor(3 / 4 * (floor(year / 100) + 1)));
        }
    }
    friend int operator - (const Date &l, const Date &r)
    { return int(l.Factor() - r.Factor()); }
};
 
int main()
{
    Date Today(22, 5, 2013);
    Date NewYear(1, 1, 2013);
    Date Yesterday(21, 5, 2013);
    cout << Today - NewYear;
    return 0;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.05.2013, 22:13     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #3
Цитата Сообщение от Olivеr Посмотреть сообщение
floor(3 / 4 * (floor(year / 100) + 1)))
3/4 выполняется первой. Т.к. 3<4, то результат деления целого на целое
всегда равен НУЛЮ. Поправьте.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
23.05.2013, 00:41     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #4
zss, поправил. Всегда забываю. Спасибо.
Проверил в Excel. Результат 141.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct Date
{
    Date(size_t d, size_t m, size_t y):
        day(d), month(m), year(y) {}
    size_t day, month, year;
 
    double Factor() const
    {
        double d = static_cast<double>(day);
        double m = static_cast<double>(month);
        double y = static_cast<double>(year);
        if (month == 1 || month == 2) {
            return double(365.0 * y + d + 31.0 * (m - 1.0)
                        + floor((y - 1.0) / 4.0) - floor(3.0 / 4.0 * (floor(y - 1.0) / 100.0 + 1.0)));
        } else {
        return double(365.0 * y + d + 31.0 * (m - 1.0)
                        - floor(0.4 * m + 2.3) + floor(y / 4.0)
                        - floor(3.0 / 4.0 * (floor(y / 100.0) + 1.0)));
        }
    }
    friend int operator - (const Date &l, const Date &r)
    { return int(l.Factor() - r.Factor()); }
};
 
int main()
{
    Date Today(22, 5, 2013);
    Date NewYear(1, 1, 2013);
    Date Yesterday(21, 5, 2013);
    cout << Today - NewYear;
    return 0;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
23.05.2013, 11:06     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #5
Цитата Сообщение от Olivеr Посмотреть сообщение
3.0 / 4.0
А что мешает сразу написать 0.75
SvI
-79 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 45
26.05.2013, 13:34  [ТС]     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #6
а может кто-нибудь сделать это в виде программы? Чтобы можно было вводить в нее данные и выводился в ней же ответ.
naHuka
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 28
16.09.2013, 12:51     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #7
У меня возник такой вопрос. Я так понимаю ответ выводиться в днях, а можно как-нибудь преобразовать ответ в вид "количество лет"."количество месяцев"."количество дней"
я так понял, для этого придется перегружать операторы?
Raali
16.09.2013, 13:41
  #8

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
А что мешает сразу написать 0.75
зачем, пусть компьютер сам считает, все равно это на этапе компиляции произойдет

Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
16.09.2013, 14:46     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #9
В 4 посте в коде есть ошибка. Вечером выложу исправленный вариант.
naHuka
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 28
16.09.2013, 20:03     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #10
Цитата Сообщение от naHuka Посмотреть сообщение
У меня возник такой вопрос. Я так понимаю ответ выводиться в днях, а можно как-нибудь преобразовать ответ в вид "количество лет"."количество месяцев"."количество дней"
я так понял, для этого придется перегружать операторы?
вверх!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 20:24     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный
Еще ссылки по теме:

C++ Вывести разницу дней между двумя датами
Определение количества дней между двумя датами одного года C++
Посчитать количество дней между двумя датами C++

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

Или воспользуйтесь поиском по форуму:
naHuka
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 28
17.09.2013, 20:24     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный #11
Вверх!
Yandex
Объявления
17.09.2013, 20:24     Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный
Ответ Создать тему
Опции темы

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