0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 13
1

Оптимизация кода готовой программы

26.10.2018, 20:58. Показов 611. Ответов 3
Метки нет (Все метки)

Всем привет!
Есть условие задачи:

"Входной файл INPUT.TXT содержит две строки. В первой строке задано время отправления, а во второй строке – время в пути. Время отправления задается в формате «HH:MM», где HH время в часах, которое принимает значение от 00 до 23, ММ – время в минутах, которое принимает значение от 00 до 59. Время в пути задается двумя неотрицательными целыми числами – количество часов и количество минут. Числа разделяются одним пробелом. Количество часов не превышает 120, минут – 59.

Выходные данные
Выходной файл OUTPUT.TXT должен содержать одну строку – время прибытия поезда на конечную станцию. Формат вывода этого времени совпадает с форматом ввода времени отправления."

Есть и код, который с задачей справляется.
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
int main()
{
    short HH, MM;
    cin >> HH;
    system("cls");
    if (( HH < 0) || (HH > 23))
    {
        exit(0);
    }
    cout << HH << ":";
    cin >> MM;
    if (( MM < 0) || (MM > 59))
    {
        exit(0);
    }
    short a,b;
    cin >> a >> b;
    if (((a > 23) || (a<0)) || ((b>59) || (b<0)))
    {
        exit(0);
    }
    HH = HH + a;
    while (HH / 24 >= 1)
    {
        HH = HH - 24;
    }
    MM = MM + b;
    while (MM / 60 >=1)
    {
        MM = MM - 60;
        HH++;
        if (HH / 24>=1)
        {
            HH = HH - 24;
        }
    }
    cout << HH << ":" << MM;
    _getch();
    return 0;
}
Вопрос:
1) Как можно обойтись без костыля system("cls") который приводит время в читабельный вид? Без него получается ситуация на выводе
C++
1
2
23
:59
2) Как устроить ввод так, чтобы пользователь вводил в строке ("HH:MM") с клавиатуры, что благополучно бы обрабатывалось.
Заранее спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2018, 20:58
Ответы с готовыми решениями:

Оптимизация кода программы
Задача В качестве самостоятельного задания исследуйте предельные значения N! (1*2*3*..*n) для двух...

Оптимизация кода программы
Здравствуйте, уважаемые форумчане! У меня, как всегда, небольшая проблема с кодом. Парочка тестов...

Оптимизация кода программы (сортировка подсчетом)
Здравствуйте, уважаемые форумчане! Подскажите, пожалуйста, как еще можно оптимизировать данный код?...

Перевод готовой программы
Добрый день! Помогите мне перевести готовую программу на с++. И нужно сделать классы по...

3
15 / 12 / 3
Регистрация: 25.10.2018
Сообщений: 113
26.10.2018, 21:47 2
Тут мой топорный метод ввода даты, который я делал в 1 семестре и проверка правильности ввода даты
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
    int k = 0;
    bool log = false;
    char ch, data[8];
    do// Цикл проверки корректности даты
    {
        k = 0;
        do
        {
            cout << "Дата получения: ";
            data[2] = '/';
            data[5] = '/';
            data[0] = _getch();
            cout << data[0];
            if (data[0] < 48)   break;
            if (data[0] > 57)   break;
            if (data[0] > 51)   break;
            k++;
            data[1] = _getch();
            cout << data[1];
            if (data[1] < 48)   break;
            if (data[1] > 57)   break;
            if (data[0] == 51)
                if (data[1]>50) break;
            k++;
            cout << data[2];
            data[3] = _getch();
            cout << data[3];
            if (data[3] < 48)   break;
            if (data[3] > 57)   break;
            if (data[3] > 49)   break;
            k++;
            data[4] = _getch();
            cout << data[4];
            if (data[4] < 48)   break;
            if (data[4] > 57)   break;
            if (data[3] == 49)
                if (data[4] > 50)   break;
            k++;
            cout << data[5];
            data[6] = _getch();
            cout << data[6];
            if (data[6] < 48)   break;
            if (data[6] > 57)   break;
            k++;
            data[7] = _getch();
            cout << data[7];
            if (data[7] < 48)   break;
            if (data[7] > 57)   break;
            k++;
            if (k == 6) break;
        } while (k != 6);
        _getch();
        if (k != 6)
        {
            system("cls");
            cout << "Введите дату правильно!\n";
            log = false;
        }
        else
        {
            log = true;
            data[7] = '\0';
        }
    } while (log != true);
0
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
26.10.2018, 21:54 3
Цитата Сообщение от Synim Посмотреть сообщение
обойтись без костыля system("cls")
Громкое заявление

Не по теме:

я бы сказал костыль это ваш код


он просто очищает экран, обойтись без него, не вводить данные с консоли.
Цитата Сообщение от Synim Посмотреть сообщение
Как устроить ввод так, чтобы пользователь вводил в строке ("HH:MM") с клавиатуры, что благополучно бы обрабатывалось
Да как угодно, используя char[], std::string, std::stringstream + std::string, std::regex наверное тоже
0
15 / 12 / 3
Регистрация: 25.10.2018
Сообщений: 113
26.10.2018, 21:59 4
Цитата Сообщение от PeterVl Посмотреть сообщение
Тут мой топорный метод ввода даты, который я делал в 1 семестре и проверка правильности ввода даты
Немного упростил этот ужас
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
    int k = 0;
    bool log = false;
    char ch, data[8];
    do// Цикл проверки корректности даты
    {
        k = 0;
        do
        {
            cout << "Дата получения: ";
            data[2] = '/';
            data[5] = '/';
            data[0] = _getch();
            cout << data[0];
            if ((data[0] < 48) || (data[0] > 57) || (data[0] > 51)) break;
            k++;
            data[1] = _getch();
            cout << data[1];
            if ((data[1] < 48) || (data[1] > 57) || ((data[0] == 51) && (data[1] > 50)))    break;
            k++;
            cout << data[2];
            data[3] = _getch();
            cout << data[3];
            if ((data[0] < 48) || (data[0] > 57) || (data[3] > 49)) break;
            k++;
            data[4] = _getch();
            cout << data[4];
            if ((data[1] < 48) || (data[1] > 57) || ((data[0] == 49) && (data[1] > 50)))    break;
            k++;
            cout << data[5];
            data[6] = _getch();
            cout << data[6];
            if ((data[6] < 48) || (data[6] > 57))   break;
            k++;
            data[7] = _getch();
            cout << data[7];
            if ((data[7] < 48) || (data[7] > 57))   break;
            k++;
            if (k == 6) break;
        } while (k != 6);
        _getch();
        if (k != 6)
        {
            system("cls");
            cout << "Введите дату правильно!\n";
            log = false;
        }
        else
        {
            log = true;
            data[7] = '\0';
        }
    } while (log != true);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 21:59
Помогаю со студенческими работами здесь

Запуск готовой программы
Ребят всем привет, помогите пожалуйста с запуском алгоритма с сайта: ...

Прошу объяснить работу готовой программы
Что требуется: При описании решения задачи следует отдельно выделить постановку задачи с указанием...

Блок-схема для готовой программы
Здравствуйте! В данной теме я хотел бы попросить вас указать на мои ошибки в составлении блок-схемы...

нужно описать что делают строки готовой программы
нужно описать что делают строки готовой программы #include &lt;iostream&gt; #include &lt;string&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru