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

Временной интервала - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
30.04.2011, 08:05     Временной интервала #1
Имеется задание :
Заданы моменты начала и конца некоторого промежутка вре-мени в часах, мину¬тах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах1.
Исходными данными для этой задачи являются шесть целых величин, задающих моменты начала и конца интервала, результатами — три целых величины. Вы уже знаете, что тип переменной выбирается, исходя из диапазона и требуемой точности представ-ления данных, а имя дается в соответствии с ее содержимым. Нам потребуется хранить исходные данные, не превышающие величины 60 для минут и секунд и величины 24 для часов, поэтому можно ограничиться коротким целым типом (short 1nt. сокращенно short). Назовем переменные для хранения начала интервала hourl, mini и seel, для хранения конца интервала — hour2. ш1п2 и sec2. а резуль-тирующие величины- hour, ml пи sec.
Для решения этой задачи необходимо преобразовать оба мо-мента времени в секунды, вычесть первый из второго, а затем пре-образовать результат обратно в часы, минуты и секунды. Следова-тельно, нам потребуется промежуточная переменная, в которой бу-дет храниться интервал в секундах. Она может иметь весьма боль-шие значения, ведь в сутках 86400 секунд. В величинах типа short могут храниться значения, не превышающие 32767 для величин со знаком (signed short) и 65535 для величин без знака (unsigned short), поэтому тип short здесь использовать нельзя. Вот почему для этой переменной следует выбрать длинный целый тип (long Int. сокра-щенно long). «Обычный» целый тип int в зависимости от архитек-туры компьютера может совпадать либо с коротким, либо с длинным целым типом.
У меня вышел код :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
using namespace std;
 
int main()
{
    setlocale (LC_ALL,".1251"); // 2 - ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ ðóñ. ñèìâîëû, Гў ñâÿçè Г± "ÓÃ" ГЋГ‘ ... ГЇГЁГёГҐГ¬ .1251 =)
    short hour_1, min_1, sec_1, hour_2, min_2, sec_2, hour_, min_, sec_;
    long sum_sec;
    cout << "Ââåäèòå âðåìÿ Г*Г*Г·Г*Г«Г* ГЁГ*òåðâГ*ГЇГ* (Г·Г*Г± ìèГ* Г±ГҐГЄ) ";
    cin >> hour_1 >> min_1 >> sec_1;
    cout << endl << "Ââåäèòå âðåìÿ  ГЄГ®Г*Г¶Г* ГЁГ*òåðâГ*Г«Г* (Г·Г*Г± Г±ГҐГЄ Г±ГҐГЄ) ";
    cin >> hour_2 >> min_2 >> sec_2;
    sum_sec = (hour_2 - hour_1) * 3600 * ((min_1-min_2) * 60 * (sec_2 - sec_1));
    hour_ = sum_sec / 3600;
    min_ = ((sum_sec - hour_) * 3600)  * 60 - min_; 
    sec_ = sum_sec - hour_ * 3600 - min_ * 60;
    
    cout << "ÏðîäîëæèòåëüГ*îñòü ïðîêåæóòêГ* îò " << hour_1 <<':'; 
    cout << min_1 << ':' << sec_1 << " äî " << hour_2 << ':'<< min_2 << ':';
    cout << sec_2 << " Г°Г*ГўГ*Г* "<< hour_  << ':'<< min_ << ':' << sec_ << "\n";
    system("pause");
    return 0;
}
если задавать параментры 12 00 00 и 13 00 00 , мы должны получить результат 1 00 00(как я понимаю)

у меня вызывает затруднение формула

C++
1
2
3
4
    sum_sec = (hour_2 - hour_1) * 3600 * ((min_1-min_2) * 60 * (sec_2 - sec_1));
    hour_ = sum_sec / 3600;
    min_ = ((sum_sec - hour_) * 3600)  * 60 - min_; 
    sec_ = sum_sec - hour_ * 3600 - min_ * 60;
sum_sec как я понимаю вычислять во сколько сек разница между заданным временем
час
минуты
секунды

Мне программа выдает следующее :

Введите время начала интервапа (час мин сек) 13 00 00

Введите время конца интервала (час сек сек) 14 00 00
Продолжительность прокежутка от 13:0:0 до 14:0:0 равна 0:-19008:26368
Прошу помощи в разбирании формулы(не прошу её писать, хочу сам разобраться в написании.
Но прошу объяснить что и как должно высчитываться.

Изначала был дан код с кучей ошибок, данные ошибки исправил, но затруднение вызвала формула, т.к. немного не понимаю её.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2011, 08:05     Временной интервала
Посмотрите здесь:

2 разных интервала C++
C++ установить временной интервал
Избавится от временной переменной C++
C++ Переход из одного интервала к другому
Расчет интервала C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
30.04.2011, 14:21     Временной интервала #2
Я вам приведу немного другой алгоритм, помоему, он более понятный.

Вот у вас пользователь ввел:
C++
1
int hour_1, min_1, sec_1, hour_2, min_2, sec_2
Затем, переведите оба времени в секунды, то есть:
C++
1
2
int in_sec_1 = hour_1 * 3600 + min_1 * 60 + sec_1;
int in_sec_2 = hour_2 * 3600 + min_2 * 60 + sec_2;
И теперь смело находите разницу и переводите в формат ЧЧ:ММ:СС.
C++
1
2
3
4
5
6
7
8
int diff = in_sec_2 - in_sec_1;
int hour = diff / 3600;
diff %= 3600;
int minute = diff / 60;
diff %= 60;
int second = diff;
 
std::cout << "Difference: " << hour << ":" << minute << ":" << second;

Не по теме:

Могут быть неточности, не проверял.

prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
30.04.2011, 15:12     Временной интервала #3
Скорее всего ваш код был криво отсканирован
Этот код, думаю, будет понятен вам без объяснений:
C++
1
2
3
4
    sum_sec = (hour_2 - hour_1) * 3600 + ((min_2-min_1) * 60 + (sec_2 - sec_1));
    hour_ = sum_sec / 3600;
    min_ = (sum_sec - hour_ * 3600)  / 60 ; 
    sec_ = sum_sec - hour_ * 3600 - min_ * 60;
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
30.04.2011, 17:13  [ТС]     Временной интервала #4
Блин вот бестолочь
Все делал уже поздно ночью, формула оказалась с ошибками.

Спасибо, можно закрывать.
Yandex
Объявления
30.04.2011, 17:13     Временной интервала
Ответ Создать тему
Опции темы

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