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

Превратить дату в минуты - C++

Восстановить пароль Регистрация
 
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 13:26     Превратить дату в минуты #1
Есть дата вот такого типа:
year = 2013
mounth = 10
day = 15
Ее нужно перевести в минуты. В принципе не трудно, но мне не получается..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 13:26     Превратить дату в минуты
Посмотрите здесь:

C++ STL vector превратить в stack
C++ Как превратить число из char в int ?
C++ Превратить заданную пользователем дату в формате "дд.мм.гг" в формат "месяц дд. год"
Написать программу, которая предлагает пользователю ввести дату в формате YYYY MM DD и выводит в консоль, следующую за ней дату C++
C++ Написать программу, которая предлагает пользователю ввести дату в формате YYYY MM DD и выводит в консоль, следующую за ней дату
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
10.01.2014, 14:44     Превратить дату в минуты #2
Цитата Сообщение от Insane__ Посмотреть сообщение
Ее нужно перевести в минуты.
Т.е. сколько минут прошло с начала года до этой даты или сколько минут в 2013 годах, 10 месяцах и 15 дней?
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 15:02  [ТС]     Превратить дату в минуты #3
Нужно решить вот такую ​​задачу:

http://www.e-olimp.com/ru/problems/4552

Сначала я перевожу всю дату в минуты, затем нахожу разницу этих дат, и от этой разницы отнимаю по 15 до тех пор пока разница не будет меньше 15. И соответственно сколько раз я отнял столько и "пробъют" часы. Но почему-то мой вариант проходит только два теста, почему?
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
#include <stdio.h>
#include <iostream>
 
int getDays( int month, int year )
{
  const int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  int result = -1;
 
  if( month < 0 || month > 11 )
    return result;
 
  result = days[ month ];
  if( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ))
    ++result;
 
  return result;
}
 
int main()
{
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    double sum_minute1 = 0,sum_minute2 = 0;
    std::cin >> year1 >> mounth1 >> day1 >> hour1 >> minute1;
    std::cin >> year2 >> mounth2 >> day2 >> hour2 >> minute2;
    sum_minute1 += day1 * 24 * 60;
    sum_minute1 += mounth1 * getDays(mounth1 - 1,year1) * 24 * 60;
    if(year1%4)
        sum_minute1 += year1 * 525600;
    else
        sum_minute1 += year1 * 527040;
    sum_minute1 += minute1 + (hour1*60);
 
    sum_minute2 += day2 * 24 * 60;
    sum_minute2 += mounth2 * getDays(mounth2 - 1,year2) * 24 * 60;
    if(year2%4)
        sum_minute2 += year2 * 525600;
    else
        sum_minute2 += year2 * 527040;
 
    sum_minute2 += minute2 + (hour2*60);
 
    long int minute = sum_minute2 - sum_minute1;
    int count = 0;
    while(minute >= 15){
        count++;
        minute -= 15;
    }
    std::cout << count << std::endl;
    return 0;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.01.2014, 15:28     Превратить дату в минуты #4
Количество дней, минут можно легко получить используя Boost.Date_Time:
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>
#include <boost/lexical_cast.hpp>
 
namespace gr = boost::gregorian;
namespace dt = boost::date_time;
 
int main()
{
   gr::date_period period(gr::date(2013, 10, 15), gr::date(dt::day_clock<gr::date>::local_day()));
   int days = boost::lexical_cast<int>(period.length());
   std::cout << "days: " << days << "\n";
   std::cout << "minuts: " << (days * 24 * 60) << "\n";
 
   return 0;
}
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 15:32  [ТС]     Превратить дату в минуты #5
DiffEreD, тот вариант не пройдет, так как нужно чтобы эта задача прошла на eolimp.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
10.01.2014, 16:14     Превратить дату в минуты #6
Insane__, вот что намудрил
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
#include <iostream>
using namespace std;
 
int main()
{
    unsigned long long year1,day1,mounth1,hour1,minute1;
    unsigned long long year2,day2,mounth2,hour2,minute2;
    cin >> year1 >> mounth1 >> day1 >> hour1 >> minute1;
    cin >> year2 >> mounth2 >> day2 >> hour2 >> minute2;
    int count = 0;
    if (year2 > year1)
    {
        count = (year2 - year1)*35712;
        year1 = year2;
    }
    if (mounth2 > mounth1)
    {
        count+=(mounth2 - mounth1)*2976;
        mounth1 = mounth2;
    }
    if (day2 > day1)
    {
        count+=(day2 - day1)*96;
        day1 = day2;
    }
    if (minute1!=0)
        while (minute1!=15 && minute1!=30 && minute1!=45 && minute1!=60)
            ++minute1;
    while (year1!=year2 || mounth1!=mounth2 || hour1!=hour2 || minute1+15<=minute2)
    {
            ++count;
            if (minute1==60)
            {
                ++hour1;
                minute1 = 0;
                if (hour1==24)
                {
                    hour1==0;
                    ++day1;
                    if (day1==32)
                    {
                        day1 = 1;
                        ++mounth1;
                        if (mounth1==13)
                        {
                            ++year1;
                            mounth1 = 1;
                        }
                    }
                }
            }
            minute1+=15;
    }
    cout <<count <<endl;
    return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 16:41     Превратить дату в минуты #7
Зачем столько вычислений? есть стандартная функция difftime()
http://www.cplusplus.com/reference/c...e/?kw=difftime
Возвращает время в секундах между двумя датами. Потом просто возьмите остаток от деления на 15.

Не по теме:

Программу не выкладываю, потому что дико глючит терминал и IDE, невозможно что-либо запустить. Я в бешенстве

Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 17:32  [ТС]     Превратить дату в минуты #8
gromo, вот пробую сделать через difftime, но программа почему-то выводит 0 независимо от того какие числа я введу.

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
#include <stdio.h>
#include <iostream>
#include <time.h>
 
//int getDays( int month, int year )
//{
//  const int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//  int result = -1;
 
//  if( month < 0 || month > 11 )
//    return result;
 
//  result = days[ month ];
//  if( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ))
//    ++result;
 
//  return result;
//}
 
int main()
{
    unsigned long year1,day1,month1,hour1,minute1;
    unsigned long year2,day2,month2,hour2,minute2;
    double sum_minute1 = 0,sum_minute2 = 0;
    std::cin >> year1 >> month1 >> day1 >> hour1 >> minute1;
    std::cin >> year2 >> month2 >> day2 >> hour2 >> minute2;
 
    time_t now =23;
    struct tm date1;
    struct tm date2;
    double seconds;
    date1.tm_hour = hour1;
    date1.tm_mon = month1;
    date1.tm_year = year1;
    date1.tm_min = minute1;
    date1.tm_mday = day1;
 
    date2.tm_hour = hour2;
    date2.tm_mon = month2;
    date2.tm_year = year2;
    date2.tm_min = minute2;
    date2.tm_mday = day2;
    std::cout << difftime(mktime(&date2),mktime(&date1));
//    sum_minute1 += day1 * 24 * 60;
//    sum_minute1 += mounth1 * getDays(mounth1 - 1,year1) * 24 * 60;
//    if(year1%4)
//        sum_minute1 += year1 * 525600;
//    else
//        sum_minute1 += year1 * 527040;
//    sum_minute1 += minute1 + (hour1*60);
 
//    sum_minute2 += day2 * 24 * 60;
//    sum_minute2 += mounth2 * getDays(mounth2 - 1,year2) * 24 * 60;
//    if(year2%4)
//        sum_minute2 += year2 * 525600;
//    else
//        sum_minute2 += year2 * 527040;
 
//    sum_minute2 += minute2 + (hour2*60);
 
//    long int minute = sum_minute2 - sum_minute1;
//    int count = 0;
//    while(minute >= 15){
//        count++;
//        minute -= 15;
//    }
//    std::cout << count << std::endl;
    return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 19:10     Превратить дату в минуты #9
Insane__, что-то типа этого
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    // Здесь всё понятно, я думаю ;D
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    scanf("%lu %lu %lu %lu %lu", &year1,&day1,&mounth1,&hour1,&minute1);
    scanf("%lu %lu %lu %lu %lu", &year2,&day2,&mounth2,&hour2,&minute2);
 
    // Задаем начальное время для функции difftime()
    struct tm begin;
    begin.tm_year = year1 - 1900;  // Года в структуре задаются since 1900
    begin.tm_mday = day1;
    begin.tm_mon  = mounth1 - 1;   // Количество месяцев SINCE january
    begin.tm_hour = hour1;
    begin.tm_min  = minute1;
    begin.tm_sec  = 0;            // секунды не берем во внимание, но они нужны для mktime()
 
    // Задаем конечное время для функции difftime()
    struct tm end;
    end.tm_year = year2 - 1900;
    end.tm_mday = day2;
    end.tm_mon  = mounth2 - 1;
    end.tm_hour = hour2;
    end.tm_min  = minute2;
    end.tm_sec  = 0;
    double diff = difftime(mktime(&end), mktime(&begin));
 
    // Сколько раз ударят часы за этот промежуток?
    div_t divresult = div((int)(diff/60.0), 15);
 
    printf("%d\n", divresult.quot);
    return 0;
}
Добавлено через 9 минут
Как видишь, можно посчитать буквально одной строкой.
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 19:17  [ТС]     Превратить дату в минуты #10
Цитата Сообщение от gromo Посмотреть сообщение
Как видишь, можно посчитать буквально одной строкой.
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 19:28     Превратить дату в минуты #11
Цитата Сообщение от Insane__ Посмотреть сообщение
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
Какие там тесты ? скинь сюда
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 19:31  [ТС]     Превратить дату в минуты #12
В том и прикол, тесты хз какие, просто выводить вот такое:

Результат по тестам:
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. Неверный ответ
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 19:40     Превратить дату в минуты #13
Цитата Сообщение от Insane__ Посмотреть сообщение
В том и прикол, тесты хз какие, просто выводить вот такое:
Не знаю, что они там хотят, но программа учитывает и високосные года (например между 28 февраля и 1 марта 2016 года пройдет двое суток - результат 192 удара).
Может там проблема во вводе данных? Хз какими кусками оно там на их "тестере" считывает.

Не по теме:

P.s. Лично я никогда не понимал "спортивного" программирования, стремное оно какое-то...

Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 20:02  [ТС]     Превратить дату в минуты #14
Цитата Сообщение от gromo Посмотреть сообщение
Может там проблема во вводе данных?
Уже по разному пробовал вводить, пробовал менять тип результата, ничего не помогло! Буду дальше думать
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 20:17     Превратить дату в минуты #15
Попробуй так.
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    // Здесь всё понятно, я думаю ;D
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    scanf("%lu %lu %lu %lu %lu", &year1,&mounth1,&day1,&hour1,&minute1);
    scanf("%lu %lu %lu %lu %lu", &year2,&mounth2,&day2,&hour2,&minute2);
 
    // Задаем начальное время для функции difftime()
    struct tm begin;
    begin.tm_year = year1 - 1900;  // Года в структуре задаются since 1900
    begin.tm_mday = day1;
    begin.tm_mon  = mounth1 - 1;   // Количество месяцев SINCE january
    begin.tm_hour = hour1;
    begin.tm_min  = minute1;
    begin.tm_sec  = 0;            // секунды не берем во внимание, но они нужны для mktime()
 
    // Задаем конечное время для функции difftime()
    struct tm end;
    end.tm_year = year2 - 1900;
    end.tm_mday = day2;
    end.tm_mon  = mounth2 - 1;
    end.tm_hour = hour2;
    end.tm_min  = minute2;
    end.tm_sec  = 0;
    double diff = difftime(mktime(&end), mktime(&begin));
 
    // Сколько раз ударят часы за этот промежуток?
    div_t divresult = div((int)(diff/60.0), 15);
 
    printf("%d\n", divresult.quot);
    return 0;
}
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 292
10.01.2014, 20:27  [ТС]     Превратить дату в минуты #16
Все равно то же.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 20:43     Превратить дату в минуты
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 20:43     Превратить дату в минуты #17
Цитата Сообщение от Insane__ Посмотреть сообщение
Все равно то же.
В первом варианте из-за моей невнимательности в переменную дня считывались месяцы и наоборот. Теперь поменял местами и все равно так же? Ясненько...
Yandex
Объявления
10.01.2014, 20:43     Превратить дату в минуты
Ответ Создать тему
Опции темы

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