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

Ошибка в задаче - C++

Восстановить пароль Регистрация
 
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
14.02.2014, 23:05     Ошибка в задаче #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
#include <iostream>
using namespace std;
 
int main(int argc, char*argv[]){
    setlocale(LC_ALL, "Russian");
    
    int min, sec, hours, min_1, sec_1, hours_1, m, s, h;
 
    cout << "Введите начальный интервал" << endl;
 
    cout << "Введите время в часах -> ";
    cin >> hours;
 
    cout << "Введите время в минутах -> ";
    cin >> min;
 
    cout << "Введите время в секундах -> ";
    cin >> sec;
 
    cout << endl;
    cout << "==================================";
    cout << endl << endl;
 
    cout << "Введите конечный интервал" << endl;
 
    cout << "Введите время в часах -> ";
    cin >> hours_1;
 
    cout << "Введите время в минутах -> ";
    cin >> min_1;
 
    cout << "Введите время в секундах -> ";
    cin >> sec_1;
 
    m = min_1 - min;
    s = sec_1 - sec;
    h = hours_1 - hours;
 
    cout << endl;
    cout << "==================================";
    cout << endl << endl;
 
    if (m < 0) {
        m = m + 60;
        min_1 = min_1 - 1;
    }
 
    if (s < 0) {
        s = s + 60;
        sec_1 = sec_1 - 1;
    }
    
    if (h < 0) h = h + 24;
 
    cout << "Продолжительность: " << endl;
    cout << "В часах ->" << h << endl;
    cout << "В минутах ->" << m << endl;
    cout << "В секундах ->" << s << endl;
 
return 0;
}
Если первые величины такие 23 часа 30 минут 55 секунд, а вторые 1 час 7 минут 6 секунд то результат будет 2 часа 36 минут 11 секунд, а нужно что бы было так 1 часа 36 минут 11 секунд, что то с часами
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
14.02.2014, 23:32     Ошибка в задаче #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ошибка здесь:
Цитата Сообщение от PriZrаK Посмотреть сообщение
if (m < 0) {
* * * * m = m + 60;
* * * * min_1 = min_1 - 1;
* * }
if (s < 0) {
* * * * s = s + 60;
* * * * sec_1 = sec_1 - 1;
* * }
if (h < 0) h = h + 24;
Попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  if (s < 0) {
m--;
        s = s + 60;
        sec_1 = sec_1 - 1;
    }
  
if (m < 0) {
h--
        m = m + 60;
        min_1 = min_1 - 1;
    }
 
    
    if (h < 0) h = h + 24;
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
15.02.2014, 18:40  [ТС]     Ошибка в задаче #3
Цитата Сообщение от Amandosov Посмотреть сообщение
Ошибка здесь:

Попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  if (s < 0) {
m--;
        s = s + 60;
        sec_1 = sec_1 - 1;
    }
  
if (m < 0) {
h--
        m = m + 60;
        min_1 = min_1 - 1;
    }
 
    
    if (h < 0) h = h + 24;
реально ли решить задачу без использования ветвлений?
stikkas
 Аватар для stikkas
19 / 19 / 6
Регистрация: 26.01.2014
Сообщений: 56
15.02.2014, 22:36     Ошибка в задаче #4
а нельзя начало и конец привести к секундам
((hours * min_per_hour + mins ) * sec_per_min + secs) потом произвести необходимые действия (в данном случае вычитание) а потом результат приветсти к нужному виду:
hours = res_secs / sec_per_min / min_per_hour
mins = res_secs / sec_per_min % min_per_hour
secs = res_secs % sec_per_min
?

Добавлено через 16 минут
В условии задачи стоит оговорка что в пределах одних суток, т.е. с 00:00:00 до 23:59:59
Если без учета этой оговорки, то перед вычитанием сравнить первую величину и вторую,
если вторая меньше, тогда найти разницу между 24:00:00 и стартом, и прибавить вторую точку (конец).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int hStart, mStart, sStart, hEnd, mEnd, sEnd;
// here comes initialization
int startSecs = (hStart * 60 + mStart) * 60 + sStart;
int endSecs = (hEnd * 60 + mEnd) * 60 + sEnd;
int resSecs;
if (startSecs < endSecs) {
  resSecs = endSecs - startSecs;
} else {
  resSecs = 24 * 60 * 60 - startSecs + endSecs;
}
 
int hDist, mDist, sDist;
hDist = resSesc / 60 / 60;
mDist = resSecs / 60 % 60;
sDist = resSecs % 60;
Yandex
Объявления
15.02.2014, 22:36     Ошибка в задаче
Ответ Создать тему
Опции темы

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