JiaWei Lee Ответов: 2

Функция сравнения двух назначений


Пользователь введет две встречи

Какой расчет для сравнения является конфликтом или нет

int main(){

    struct Appointment aptOne, aptTwo;
    make_appointment(&aptOne, "Appointment One",
    				2018, 1, 23, 11, 30, 12, 45);
    
    make_appointment(&aptTwo, "Appointment Two",
    				2018, 1, 23, 12, 45, 13, 15);


}


Что я уже пробовал:

Цитата:
попытка иметь функцию и логическое значение

struct Appointment {
    char description;
    int year;
    int month;
    int day;
    int startHour;
    int startMinute;
    int endHour;
    int endMinute;
};

bool has_conflict( struct Appointment* pAptA,
                  struct Appointment* pAptB)
{
   return true;

}


}


int main(){

    -----

    if (has_conflict( &aptOne, &aptTwo)){
    		printf("Appointments CLASH!\n");
    } else {
    		printf("Appointments Fine!\n");
    }
}

2 Ответов

Рейтинг:
16

OriginalGriff

Подумайте сами: что бы вы делали в "реальном мире"?
Вы бы сказали: назначение A начинается с X и заканчивается на Y. попадает ли начало назначения B внутрь этого? Попадает ли конец назначения B внутрь этого?
Если оба вопроса верны, они накладываются друг на друга.

Но... чтобы сделать все намного проще, не храните свои встречи таким образом.
Существует структура под названием время[^] который хранит значение даты и времени и который включает в себя функции сравнения, которые сделают вашу жизнь намного проще - особенно если встреча может длиться до полуночи.
Если вы храните два значения time_t в своей встрече, чтобы представить начальную и конечную точки встречи, вы можете использовать время[^] чтобы сравнить два целых объекта datetime очень легко.


JiaWei Lee

тем не менее, вопросы, необходимые для определения назначения структуры

OriginalGriff

Да. А структура может содержать начальную дату/время, конечную дату/время и описание (которое, кстати, должно быть больше одного символа!)
Там говорится, что вы должны хранить каждую часть каждой даты отдельно?
Не изобретайте велосипед: если система предоставляет вам структуры и функции для выполнения "тяжелой работы", то используйте их!

Richard Deeming

Небольшое упрощение: если начинается раньше, чем заканчивается B, и B начинается прежде, чем заканчивается, то они пересекаются.

Рейтинг:
1

JiaWei Lee

сделайте это тупым способом сравните каждый из элементов

bool has_conflict( struct Appointment* pAptA,
                  struct Appointment* pAptB)
{
    if((*pAptA).year == (*pAptB).year &&
       (*pAptA).month == (*pAptB).month &&
       (*pAptA).day == (*pAptB).day &&
       (*pAptA).startHour == (*pAptB).startHour &&
       (*pAptA).startMinute == (*pAptB).startMinute &&
       (*pAptA).endHour == (*pAptB).endHour &&
       (*pAptA).endMinute == (*pAptB).endMinute){
        return true;
    }else {return false;}


OriginalGriff

Это работает только в том случае, если встречи точно такие же. А что, если один из них начинается на полчаса раньше другого, а оба они длятся по часу?

KarstenK

это сравнение isEqualTime, а не проверка конфликта.