С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 8

Объясните, почему нужно совершать дополнительное умножение числа

17.09.2019, 19:17. Показов 1380. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть программа которая запрашивает количество секунд и отображает эквивалентное значение в сутках, часах, минута. И я не могу понять её логику дополнительного перемножение дней на 60 для того, чтобы программа работала корректно. Вот рабочая версия программы:
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
#include<iostream>
 
const int Conv_min = 60;
const int Conv_hours = 60;
const int Conv_days = 24;
 
int main()
{
    using namespace std;
    setlocale(LC_ALL,"RUSSIAN");
    long long seconds;
    int sec, min, days, hours;
    cout << "Enter a number of seconds: ";
    cin >> seconds;
    days = seconds / Conv_min / Conv_hours / Conv_days;
    hours = seconds / Conv_min / Conv_hours % Conv_days;
    min = seconds / Conv_min % Conv_hours % (Conv_hours * Conv_days);
    sec = seconds % Conv_min % Conv_hours % (Conv_hours * Conv_days);
    cout << seconds << " seconds = " << days << " days, " << hours << " hours, "
         << min << " minutes, " << sec << " seconds." << endl;
    cin.get();
    cin.get();
    return 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
#include<iostream>
 
const int Conv_min = 60;
const int Conv_hours = 60;
const int Conv_days = 24;
 
int main()
{
    using namespace std;
    setlocale(LC_ALL,"RUSSIAN");
    long long seconds;
    int sec, min, days, hours;
    cout << "Enter a number of seconds: ";
    cin >> seconds;
    days = seconds / Conv_min / Conv_hours / Conv_days;
    hours = seconds / Conv_min / Conv_hours % Conv_days;
    min = seconds / Conv_min % Conv_hours % Conv_days;
    sec = seconds % Conv_min % Conv_hours % Conv_days;
    cout << seconds << " seconds = " << days << " days, " << hours << " hours, "
         << min << " minutes, " << sec << " seconds." << endl;
    cin.get();
    cin.get();
    return 0;
}
Она будет работать некорректно, зачем это перемжножение Conv_hours * Conv_days для минут и секунд?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.09.2019, 19:17
Ответы с готовыми решениями:

Почему тег <a> занимает дополнительное место
В общем если сделать картинку ссылкой, то консоль Хрома показывает, что тег &lt;a&gt; уходит чуть ниже картинки. Буквально на 3-4 пикселя и на...

Так ли нужно дополнительное питание
Всем привет. Агрегат: GeForce 9800 GT. Проблема: Нет разъёма для дополнительного питания. Так ли необходимо это...

Нужно настроить rdp-доступ через дополнительное интернет-соединение
Нужно настроить rdp-доступ через дополнительное интернет-соединение Условие: Есть 2 интернет-провайдера и 2 ADSL-роутера. Роутер...

7
17.09.2019, 19:43

Не по теме:

Может просто программу переписать так, чтоб логика была понятнее?..

0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 8
17.09.2019, 19:46  [ТС]
Rius, Ну может и можно, но ты хоть дай мне ориентир, чтобы сделать это. Я новичок, и не знаю как её еще можно переписать
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,181
Записей в блоге: 14
17.09.2019, 19:51
Лучший ответ Сообщение было отмечено Казах_010 как решение

Решение

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
#include <iostream>
 
using namespace std;
 
const int sec_per_min = 60;
const int sec_per_hour = sec_per_min * 60;
const int sec_per_day = sec_per_hour * 24;
 
int main()
{
    setlocale(LC_ALL, "RUSSIAN");
    long long seconds;
    int sec, min, days, hours;
    cout << "Enter a number of seconds: ";
    cin >> seconds;
 
    days = seconds / sec_per_day;
    hours = (seconds - (days * sec_per_day)) / sec_per_hour;
    min = (seconds - (days * sec_per_day) - (hours * sec_per_hour)) / sec_per_min;
    sec = seconds - (days * sec_per_day) - (hours * sec_per_hour) - (min * sec_per_min);
    
    cout << seconds << " seconds = " << days << " days, " << hours << " hours, "
        << min << " minutes, " << sec << " seconds." << endl;
 
    cin.get();
    cin.get();
    return 0;
}
1
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 8
17.09.2019, 19:53  [ТС]
Rius, Понял, я ошибся в константах, спасибо за ответ
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,181
Записей в блоге: 14
17.09.2019, 19:54
Не уверен, что ошиблись. И это не ответ на ваш вопрос. Просто лучше писать понятно, если не стоит задача оптимизации или обфускации...
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 8
17.09.2019, 19:56  [ТС]
Rius, Не ответ конечно, но с помощью него теперь я сделал как и изначально хотел. Так-что в какой-то мере это можно считать ответом.
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
18.09.2019, 11:34
Цитата Сообщение от Казах_010 Посмотреть сообщение
И я не могу понять её логику дополнительного перемножение дней на 60 для того, чтобы программа работала корректно.
Человек просто неиллюзорно заморочился))

Его формула:
C++
1
min = seconds / Conv_min % Conv_hours % (Conv_hours * Conv_days);
Здесь seconds / Conv_min % Conv_hours - количество минут прошедшее с начала эпохи
А (Conv_hours * Conv_days) - количество минут в сутках.

В результате он получает количество минут прошедшее с начала дня.

Всё тоже самое можно получить гораздо-гораздо проще:
C++
1
const size_t m  = (milliseconds / 1000 / 60) % 60;
https://rextester.com/NWR92445

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
#include <iostream>
#include <cassert>
#include <string>
 
template<class T>
::std::string stringize(const T& value)
    { return ::std::to_string(value); }
 
::std::string stringFrom(
    const size_t ms, 
    const size_t sec,   
    const size_t min,   
    const size_t hours,
    const size_t days)
{
    ::std::string result; 
 
    if(days == 1)
        result = ", " + stringize(days) + " day";
    else if(days > 1)
        result = ", "+ stringize(days) + " days";
 
    if(hours == 1)
        result += ", " + stringize(hours) + " hour";
    else if(hours > 1)
        result += ", " + stringize(hours) + " hours";
 
    if(min != 0)
        result += ", " + stringize(min) + " min";
 
    if(sec != 0)
        result += ", " + stringize(sec) + " sec";
 
    if(ms != 0)
        result += ", " + stringize(ms) + " ms";
 
    if(result.empty())
        return "0 ms";
    assert(result[0] == ',');
    assert(result[1] == ' ');
    result.erase(0, 2);
    return result;
}
 
::std::string stringFromMilliseconds(const size_t milliseconds)
{
    const size_t ms = milliseconds                  % 1000;
    const size_t s  = (milliseconds / 1000)           % 60;
    const size_t m  = (milliseconds / 1000 / 60)      % 60;
    const size_t h  = (milliseconds / 1000 / 60 / 60) % 24;
    const size_t d  = (milliseconds / 1000 / 60 / 60 / 24);
    return stringFrom(ms, s, m, h, d);
}
 
 
int main()
{
    ::std::cout << stringFromMilliseconds(100'000'000) << '\n';
}

Вывод в консоль:
Code
1
1 day, 3 hours, 46 min, 40 sec
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2019, 11:34
Помогаю со студенческими работами здесь

Почему нужно использовать только нечетные числа в данной реализации программы Лабиринт?
Ребят, помогите! Не могу понять, почему нужно использовать только нечетные числа. И если можно использовать четные, то был бы премного...

Как совершать действие с N-ым picturebox?
У меня такой вопрос: есть 8 picturebox и с некоторыми из них нужно совершать действия по определенному алгоритму, но пользователь сам...

Найти двухзначные числа, сумма которых при умножение не меняется числа на 2, 3, 4
1.Найти двухзначные числа, сумма которых при умножение не меняется числа на 2,3,4,5,6,7,8,9. 2.Повышенная сложность: Определить...

С каким периодом будет совершать колебания шарик?
ни в какую не получаются, помогите, пожалуйста. 1. На концах тонкой стеклянной трубки длиной l закреплены равные по величине точечные...

Процедуры: деление / умножение числа на n-ю степень числа 2
Составить программу (с разными способами передачи параметров в процедуру), содержащую процедуру, выполняющую действия: 1. Исследовать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru