2013-12-10 3 views
0

У меня возникли проблемы с выводом двух объектов класса (t1 и t2) в порядке возрастания после запроса пользователю ввести два значения времени. Я знаю, что есть некоторая ошибка в способе bool, и если конструкции структурированы. Любая помощь будет оценена!Вывести два значения времени в порядке возрастания

bool lessthan(Time t2) //For two Time objects t1 and t2, t1.lessthan(t2) returns true if t1 is less than, or comes before t2. 
{ 
    if (hours < t2.hours) 
    { 
     return true; 
    } 

    if (minutes < t2.minutes) 
    { 
     return true; 
    } 

    if (seconds < t2.seconds) 
    { 
     return true; 
    } 

    return false; 
} 


bool greaterthan(Time t2) //For two Time objects t1 and t2, t1.greaterthan(t2) returns true if t1 is greater than, or comes after t2. 
{ 
    if (hours > t2.hours) 
    { 
     return true; 
    } 

    if (minutes > t2.minutes) 
    { 
     return true; 
    } 

    if (seconds > t2.seconds) 
    { 
     return true; 
    } 

    return false; 
} 


bool equalto(Time t2) //For two Time objects t1 and t2, t1.equalto(t2) returns true if t1 is equal to, or is the same time as t2. 
{ 
    if (hours == t2.hours) 
    { 
     return true; 
    } 

    if (minutes == t2.minutes) 
    { 
     return true; 
    } 

    if (seconds == t2.seconds) 
    { 
     return true; 
    } 

    return false; 
} 

В основных функциях у меня есть следующий код:

cout << "\nTime values entered in ascending order: "<<endl; 
     if (t1.lessthan(t2)) 
      t1.write(); 
     cout << endl; 
      t2.write(); 
     cout << endl; 

ответ

0

Я думаю, равный класс должен быть

bool equalto(Time t2) //For two Time objects t1 and t2, t1.equalto(t2) returns true if t1 is equal to, or is the same time as t2. 
{ 
    if (hours != t2.hours) 
    { 
     return false; 
    } 

    if (minutes != t2.minutes) 
    { 
     return false; 
    } 

    if (seconds != t2.seconds) 
    { 
     return false; 
    } 

    return true; 
} 

В вашем коде было бы достаточно, если часы они же, независимо от минут и секунд. В моей версии я изменил логический порядок.

+0

Большое вам спасибо за ваш ввод! Однако он все еще не работает должным образом. Кроме того, если я набираю два значения, начинающиеся с той же цифры (например, 08:35:45, затем 05:32:56), она выводит только последние. – user3085117

+0

Вы указали полный код вывода в своем вопросе? Поскольку 't1.write()' будет вызываться только в том случае, если t1 меньше, 't2.write()' в любом случае. –

0

Для ваших функций сравнения, попробуйте:

bool equalto(Time t2) //For two Time objects t1 and t2, t1.equalto(t2) returns true if t1 is equal to, or is the same time as t2. 
{ 
    if (hours == t2.hours && minutes == t2.minutes && seconds == t2.seconds) 
    { 
     return true; 
    } 

    return false; 
} 

bool lessthan(Time t2) //For two Time objects t1 and t2, t1.lessthan(t2) returns true if t1 is less than, or comes before t2. 
{ 
    if (hours > t2.hours) 
    { 
     return false; 
    } 

    if (minutes > t2.minutes) 
    { 
     return false; 
    } 

    if (seconds > t2.seconds) 
    { 
     return false; 
    } 

    return true; 
} 

Тогда просто реализовать GreaterThan() в терминах двух других функций

greaterthan(Time t2) 
{ 
    return (!(equalto(t2) || lessthan(t2)); 
} 

Кроме того, вы будете нуждаться, чтобы сделать что-то вроде это, если вы хотите вывести время в порядке возрастания:

cout << "\nTime values entered in ascending order: "<<endl; 
if (t1.lessthan(t2)) 
{ 
    t1.write(); 
    cout << endl; 
    t2.write(); 
    cout << endl; 
} 
else 
{ 
    t2.write(); 
    cout << endl; 
    t1.write(); 
    cout << endl; 
} 

С вашей текущей треской e, последние 3 строки будут всегда выполняться, потому что они не связаны с этим оператором if. Вам нужны скобки.

Смежные вопросы