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

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

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

Время - C++

09.06.2014, 17:09. Просмотров 528. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 17:09     Время
Посмотрите здесь:

В сообщении может содержаться время в формате чч:мм. Увеличите время на n минут - C#
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Обработать...

Можно ли вставить сравнение с графиком работ время первого входа и время начала дневных часов по графику? - 1С
Помогите новичку. В док отработанное время заполняет первый вход и последний выход по физлицу, как, можно-ли вставить сравнение с графиком...

Joomla 3 время требуется сократить время отклика - Joomla
Добрый день господа! Требуется ускорить загрузку сайта сайт moscowbrand.ru работает более 5 лет, шаблон, время отклика 500-1000 мс. ...

Вычислить время простоя в рабочее время - MS Excel
Мне нужно узнать сколько времени простоя занимает в раб. время(только будни) с 8:30-17:30 если: дата начала простоя 01.01.2017...

Таблица содержит результаты спортивных соревнований: Ф.И.О., время на 100 м, время на 1 км, прыжок в высоту, прыжок в длину. Составить массив записей - Pascal
Таблица содержит результаты спортивных соревнований: Ф.И.О., время на 100 м, время на 1 км, прыжок в высоту, прыжок в длину. Составить...

Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах. - Turbo Pascal
Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах. Можете помочь написать программу!? p.s. Буду...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tehnar5
31 / 31 / 12
Регистрация: 03.05.2011
Сообщений: 84
09.06.2014, 17:15     Время #2
Все понимаете правильно. Либо надо делать цикл
C++
1
while (minutes >= 60)
Либо делать как Вы, Ваш способ даже лучше, так как работает быстрее
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;
}
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
09.06.2014, 17:22  [ТС]     Время #4
tehnar5, спасибо за ответ, а то я думал что это я что-то не так понимаю.
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
09.06.2014, 17:25     Время #5
Цитата Сообщение от tehnar5 Посмотреть сообщение
Ваш способ даже лучше, так как работает быстрее
сумлеваюсь я
проверять нужно
ибо / % не самые быстрые операции
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:25     Время #6
dicros, можно и без цикла,как я написал,так проще,ты выделяешь целую часть,то есть допустим у тебя 249 мин minute/60 будет равняться 4 (так как у тебя инт)
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
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 секунд никак в один час не превратятся
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.
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;
    }
}
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
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);
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
Закомпиль и проверь
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
09.06.2014, 17:39     Время #12
Цитата Сообщение от dicros Посмотреть сообщение
minutes-minutes/60*60
не имеет смысла ведь там всегда будет 0, при любом значении minutes.
не совсем
это пример как по другому сделать остаток от деления
например 119 минут
119/60 =1 ( целочисленное деление, дробная часть выбрасывается)
1*60=60
119-60=59
Kverter
35 / 35 / 16
Регистрация: 30.10.2013
Сообщений: 211
09.06.2014, 17:40     Время #13
а так полностью согласен с ValeryS что так делать не логично, просто легче организовать вывод
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;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 17:45     Время
Еще ссылки по теме:

когда захожу на страницу у меня все время страница вверх вниз вверх вниз и так продолжается все время - Видеокарты
У меня была видеокарта Gt 7300 256 mb!Игры ишли,даже сталкер ишел хоть и насреднем и она меня устраивала,но недавно сломалась! мне...

компьютер вырубается во время игр каждый раз через разное время. - Компьютерное железо
помогите пожалуйста* компьютер Acer aspire m3201. * ** ** * Тип ЦП* ** ** ** ** ** ** ** ** ** ** ** ** ** ** TripleCore AMD Phenom X3...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
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,
Yandex
Объявления
09.06.2014, 17:45     Время
Ответ Создать тему
Опции темы

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