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

Задача I-A. Таймер - C++

Восстановить пароль Регистрация
 
Ярослав Никитин
 Аватар для Ярослав Никитин
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 70
01.05.2014, 19:44     Задача I-A. Таймер #1
Формат Входных данных.
В первой строке входного файла записано текущее время в формате ЧЧ:ММ:СС (с ведущими нулями). При этом оно удовлетворяет ограничениям: ЧЧ - от 00 до 23, ММ и СС - от 00 до 59.
Во второй строке записан интервал времени, который должен быть измерен. Интервал записывается в формате Ч:М:С (где Ч,М,С - от 0 до 109, без ведущих нулей) Дополнительно, если Ч=0 (или Ч=0 и М=0), то они могут быть опущены. Например, 100:60, означает 100 минут, 60 секунд, что то же самое, что 101:0 или 1:41:0. А 42 обозначает 42 секунды. 100:100:100 - 100 часов, 100 минут, 100 секунд, что то же самое, что 101:41:40.

Формат выходных данных.
В выходной файл выведите в формате ЧЧ:ММ:СС время, когда прозвучит звуковой сигнал. При этом, если сигнал прозвучит не в текущие сутки, то дальше должна следовать запись +<кол-во> days. Например, если сигнал прозвучит на следующий день, то +1 days.

Примеры.
Ввод
01:01:01
48:0:0
Вывод
01:01:01+2 days
Ввод
01:01:01
58:119
Вывод
02:01:00
Ввод
23:59:59
1
Вывод
00:00:00+1 days
Я смог написать программу, которая отлично работала с первым примером, то есть если введенные данные будут формата ЧЧ:ММ:СС. Потом попробовал полностью переписать программу, чтобы она работала со всеми примерами. Вот что получилось, только она не рабочая:
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
/*Задача I-A. Таймер
 *Первая строка входного значения текущее время: ЧЧ:ММ:СС
 *Вторая строка входного значения таймер       : ЧЧ:ММ:СС
 *Выходные: ЧЧ:ММ:СС+N day, где N - это количество дней, которые пройдут.
 *Если в эти же сутки, то вывод ЧЧ:ММ:СС
 *Интервал записывается в формате  Ч:М:С, где Ч, М и С - от 0 до 10(в девятой степени)
 *без ведущих нулей). Дополнительно, если Ч = 0 (или Ч = 0 и М = 0). то они могут буть опущенны.
 */
 
 /*Пример 1: 
  *Ввод:  01:01:01          [Кол-во сек 3661   ]
  *       48:0:0            [Кол-во сек 172 800]
  *Вывод: 01:01:01+2 days   []
  */
 
 /*Пример 2: 
  *Ввод:  01:01:01          []
  *       58:119            []
  *Вывод: 02:01:00          []
  */
 
 /*Пример 3: 
  *Ввод:  23:59:59          []
  *       1                 []
  *Вывод: 00:00:00+1 days   []
  */
#include <iostream>
#include <conio.h>
using namespace std;
 
 
int main(){ 
    int hour, min, sek, MoSek; /*Время. MoSek - общее кол-вo сек.*/
    int Thour, Tmin, Tsek, TMoSek = 0; /*Таймер. TMoSek - общее кол-вo сек.*/
    int Ohour, Omin, Osek, day, OMoSek; /*Вывод. OMoSek - общее кол-вo сек.*/
    Omin = 0; day = 0; Osek = 0; Ohour = 0; //Обнулим для теста
    const int time = 60;
    char sign = ':'; //Код ":" (58 в ASCII)
 
    /*Ввод текущего времени*/
    cin >> hour >> sign >> min >> sign >> sek;
 
 
    /*В ASCII, ентер = 13*/
    int Fone, FMoSek, Fcount = 2;
    int Tcount = 0; /*Таймер. TMoSek - общее кол-вo сек.*/
    /*Tcount - количество знаков.*/
    /*Пока не "ентер", принимать значения.*/
    /*Если Ч=0 или (Ч=0 и М=0)*/
    char enter = '0';
    while(enter != '\n'){
        cin >> Fone >> enter;
        TMoSek = TMoSek + Fone * (time * Fcount);
        --Fcount;
        ++Tcount;
    }
    /*Если два знака*/
    if (Tcount = 2){
        TMoSek /= time * 2; /*36:01 == 129 660 != 36 минут, 1 секунда*/
    }
    /*Если три знака*/
    if (Tcount = 3){
        TMoSek = TMoSek; /*36:01:01 == 129 661 === 36 часов, 1 минута, 1 секунда*/
    }
 
    MoSek = (hour * time * time) +   
            (min  *  time)       +   
            (sek)                ;   
 
    /*Деление кол-ва секнду в настоящие время, на кол-во секунд таймера
     * Перевод в часы
     * Перевод в минуты
     * Перевод в секунды
     */
    OMoSek = 0;
    OMoSek = MoSek % TMoSek;
    Ohour = ((OMoSek / (time * time)) % 24) % 24; /*Часы для вывода*/
    Omin = (OMoSek / time) % 60; /*Минуты для вывода*/
    Osek = (OMoSek % time) % 60; /*Секунды для вывода*/
 
    /*Подсчет кол-ва дней*/
    day = Thour / 24;
 
    /*Различные условия:
     * Если часов  < 10, то добавляем ноль перед числом
     * Если минут  < 10, то добавляем ноль перед числом
     * Если секунд < 10, то добавляем ноль перед числом
     */
 
    //cout << MoSek << endl << TMoSek; /*Для теста MoSek и TMoSek*/
    //cout << OMoSek; /*Тест деления MoSek % TMoSek*/
 
    cout << Ohour << sign << Omin << sign << Osek << "+" << day << " days"; /*Вывод ответа*/
    _getch();
    return 0;
}
Код программы, которая подходила для первого примера, не сохранился, точнее я его переписал на новый, который выше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 19:44     Задача I-A. Таймер
Посмотрите здесь:

C++ Таймер
C++ таймер c++
Таймер на С/С++ C++
C++ Таймер
таймер C++
Таймер C++
Таймер c++ C++
C++ Задача Таймер. Считывание из консоли

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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