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

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

Войти
Регистрация
Восстановить пароль
 
 
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 293
#1

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

10.01.2014, 13:26. Просмотров 438. Ответов 16
Метки нет (Все метки)

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

STL vector превратить в stack - C++
Всем привет! немогли бы вы помочь с таким заданием по STL :) Построить вектор "колода карт". превратить вектор в стэк, прежде...

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

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

Превратить вектор цифр в число - C++
Не могу написать этот фрагмент.Дан вектор как пример {5 1 7} надо превратить его в число 517 c помощью функции accumulate.

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

Число в int превратить в точку или * - C++
Есть массив int которые есть числа! Как заменить число одного из них в точку или *

Как превратить число из char в int ? - C++
Здрасте всем... Начал я учится и тут же непонятки, помогите плиз. Как мне на самом простом С++ превратить число из чар в инт ? ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
10.01.2014, 14:44     Превратить дату в минуты #2
Цитата Сообщение от Insane__ Посмотреть сообщение
Ее нужно перевести в минуты.
Т.е. сколько минут прошло с начала года до этой даты или сколько минут в 2013 годах, 10 месяцах и 15 дней?
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 293
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
1429 / 766 / 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
Сообщений: 293
10.01.2014, 15:32  [ТС]     Превратить дату в минуты #5
DiffEreD, тот вариант не пройдет, так как нужно чтобы эта задача прошла на eolimp.
MicM
821 / 488 / 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
370 / 269 / 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
Сообщений: 293
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
370 / 269 / 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
Сообщений: 293
10.01.2014, 19:17  [ТС]     Превратить дату в минуты #10
Цитата Сообщение от gromo Посмотреть сообщение
Как видишь, можно посчитать буквально одной строкой.
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
10.01.2014, 19:28     Превратить дату в минуты #11
Цитата Сообщение от Insane__ Посмотреть сообщение
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
Какие там тесты ? скинь сюда
Insane__
43 / 42 / 4
Регистрация: 10.09.2013
Сообщений: 293
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
370 / 269 / 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
Сообщений: 293
10.01.2014, 20:02  [ТС]     Превратить дату в минуты #14
Цитата Сообщение от gromo Посмотреть сообщение
Может там проблема во вводе данных?
Уже по разному пробовал вводить, пробовал менять тип результата, ничего не помогло! Буду дальше думать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 20:17     Превратить дату в минуты
Еще ссылки по теме:

Односвязный список превратить в массив структур - C++
Есть структура: struct StructWords { char Word; char Name; StructWords *Next, *Prev; }; Создал односвязный список. Проверял...

Можно ли превратить строку string в stringstream? - C++
Сабж.

Как двузначное число из строки превратить в integer - C++
Допустим есть строка str = &quot;AVHDSC12ASD&quot;. Известно, что на позициях 6 и 7 стоят числа 1 и 2 соответственно. Как одной командой их...

Превратить консольное приложение на C++ в DLL для использования в C# - C++
Есть довольно крупное консольное приложение - несколько классов, десятки методов. Оно принимает с клавиатуры вначале некие параметры и...

с++ . минуты - C++
определить полное количество часов и минут, которые прошли от начала суток до того мгновения, когда часовая стрелка обернулась на f...


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

Или воспользуйтесь поиском по форуму:
gromo
370 / 269 / 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;
}
Yandex
Объявления
10.01.2014, 20:17     Превратить дату в минуты
Ответ Создать тему
Опции темы

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