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

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

Войти
Регистрация
Восстановить пароль
 
 
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
#1

Время - C++

09.06.2014, 17:09. Просмотров 536. Ответов 20
Метки нет (Все метки)

Здравствуйте недавно начал изучать C++ смотрю примеры в книги, а на те примеры которые в учебнике нет ответов сверяюсь с их решение у вас на сайте в теме Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"


И возникает вот такой вопрос приведу пример

Допустим у нас есть часы, минуты, секунды

C++
1
2
3
int hours;
int minutes;
int seconds;
Я хочу сделать проверку, как известно всего минут может быть 60, а значит если у меня в программе их 80 то должен прибавиться час а в минутах сохраниться число 20.


Вот как такую проверку делают в книги, а также на сайте в решенных примерах(h-hours, m-minutes, s-seconds)

C++
1
2
3
4
5
6
7
8
9
   if(m>=60) 
          {
              h++; m-=60;
          }
 
          if(s>=60) 
         {
             m++; s-=60;
         }

Неужели это правильно???
Ведь если я допустим запишу вот так:

C++
1
2
3
4
5
6
7
int minutes=320;
 
if(minutes>=60)
{
   hours++;
   minutes-=60;
}
То у меня переменная hours повысится всего лишь на 1 час, а в переменной minutes все равно останется значение 260. Или я что то не так понимаю???


Просто я когда этот пример писал я делал таким образом

C++
1
2
3
4
5
if(minutes>=60)
{
   hours=minutes/60;
   minutes%=60;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 17:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Время (C++):

Выводить текущее время в определенные позиции консоли во время работы - C++
Портирую консольное приложение. Есть код, который работал после компиляции в BC++ 3.1, после компиляции под MinGW GCC программа не...

Записи. Дано время t1 и время t2. Определить, сколько времени пройдет от t1 до t2 - C++
Дано время t1 и время t2. Гарантируется, что t1 и t2 -время одного дня, а также что t1<t2. Определить, сколько времени пройдет от t1 до t2....

Функция: Написать функцию next(t, t1, d), которая присваивает параметру t1 время на d секунд больше, чем время t. - C++
Прошу помочь. Ввести структуру time с полями часы, минуты, секунды. Составить и протестировать функции: next(t, t1, d), которая...

Ввести время и от него отнять системное время - C++
Необходимо ввести время и от него отнять системное время,необходимо сделать так Введите часы : 17 минуты : 00 и результат к примеру...

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

Определить общее число и общее время удалений за время матча - C++
В ходе хоккейного матча игроки обеих команд удалялись в общей сложности 24 раза. По каждому удалению известен номер команды удаленного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
tehnar5
31 / 31 / 12
Регистрация: 03.05.2011
Сообщений: 84
09.06.2014, 17:15 #2
Все понимаете правильно. Либо надо делать цикл
C++
1
while (minutes >= 60)
Либо делать как Вы, Ваш способ даже лучше, так как работает быстрее
1
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:20 #3
C++
1
2
3
4
5
if (minutes>=60)
{
h=h+minutes/60;
minutes = minutes-minutes/60*60;
}
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
09.06.2014, 17:22  [ТС] #4
tehnar5, спасибо за ответ, а то я думал что это я что-то не так понимаю.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.06.2014, 17:25 #5
Цитата Сообщение от tehnar5 Посмотреть сообщение
Ваш способ даже лучше, так как работает быстрее
сумлеваюсь я
проверять нужно
ибо / % не самые быстрые операции
0
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:25 #6
dicros, можно и без цикла,как я написал,так проще,ты выделяешь целую часть,то есть допустим у тебя 249 мин minute/60 будет равняться 4 (так как у тебя инт)
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.06.2014, 17:30 #7
Цитата Сообщение от dicros Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
if(m>=60) 
          {
              h++; m-=60;
          }
 
          if(s>=60) 
         {
             m++; s-=60;
         }
алгоритмическая ошибка
сначала надо секунды проверять
иначе 2ч 59м 60сек превратятся в 2ч 60м 00сек
а насчет того что
Цитата Сообщение от dicros Посмотреть сообщение
То у меня переменная hours повысится всего лишь на 1 час, а в переменной minutes все равно останется значение 260.
этот вариант хорош когда прибавляешь по одной минуте/секунде
например работает счетчик( таймер)
а если вводить то не подходит
если написать 3600 секунд никак в один час не превратятся
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
09.06.2014, 17:32  [ТС] #8
Kverter, я конечно не математик и не особо еще разбираюсь в C++, но мне кажется у вас в строке

C++
1
minutes = minutes-minutes/60*60;
Написано не совсем правильно, ведь насколько я знаю сначала выполняются * и /, а только после этого выполняется + и -. А значит ваш пример

minutes-minutes/60*60

не имеет смысла ведь там всегда будет 0, при любом значении minutes.
0
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:35 #9
C++
1
2
3
4
5
6
7
8
9
10
11
if (sec>=60)
{
    minutes=minutes+sec/60;
    sec=sec-sec/60*60;
    if (minutes>=60)
    {
    
    h=h+minutes/60;
    minutes = minutes-minutes/60*60;
    }
}
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.06.2014, 17:36 #10
вообще время лучше хранить в секундах( десятых/сотых)
тогда таких вопросов не возникнет и работать будет быстрее
а при выводе подгонять под человеческий вид
например
C++
1
2
3
int sec=36065;
 
printf(" h=%d m=%d s=%d",sec/3600,(sec%3600)/60,sec%60);
0
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:38 #11
dicros, ни как нет
У тебя значения все типа int,допустим у тебя 249 минут...
249/60=4,15 , но у тебя все переменные типа инт значит это будет равно 4 а 4,15, дальше 249-4*60=9
Закомпиль и проверь
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.06.2014, 17:39 #12
Цитата Сообщение от dicros Посмотреть сообщение
minutes-minutes/60*60
не имеет смысла ведь там всегда будет 0, при любом значении minutes.
не совсем
это пример как по другому сделать остаток от деления
например 119 минут
119/60 =1 ( целочисленное деление, дробная часть выбрасывается)
1*60=60
119-60=59
0
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:40 #13
а так полностью согласен с ValeryS что так делать не логично, просто легче организовать вывод
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
09.06.2014, 17:43  [ТС] #14
Цитата Сообщение от ValeryS Посмотреть сообщение
если написать 3600 секунд никак в один час не превратятся
а так

C++
1
2
3
4
5
6
7
8
9
10
11
    if (seconds >= 60)
    {
        minutes = seconds / 60;
 
        if (minutes >= 60)
        {
            hours = minutes / 60;
            minutes %= 60;
        }
        seconds %= 60;
    }
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
09.06.2014, 17:45 #15
Kverter,
ошибка у тебя в другом
Цитата Сообщение от Kverter Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
if (sec>=60)
{
    minutes=minutes+sec/60;
    sec=sec-sec/60*60;
    if (minutes>=60)
    {
    
    h=h+minutes/60;
    minutes = minutes-minutes/60*60;
    }
}
как поведет себя время 2ч 120мин 5 сек???

Добавлено через 1 минуту
Цитата Сообщение от dicros Посмотреть сообщение
а так
та же ошибка что и у Kverter,
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 17:45
Привет! Вот еще темы с ответами:

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

Время - C++
Даётся часы и минуты к примеру 12ч 00м и нам надо их перевести на 30 минут назад тоесть будет 11 30 :(

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

время - C++
с клавиатуры вводится время в 24-часовом формате xx:xx, затем нужно считать целые числа до и после двоеточия scanf ("%i%c%i", &chas,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.06.2014, 17:45
Ответ Создать тему
Опции темы

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