2015-05-23 2 views
-1

Я собираюсь сделать функцию, которая берет время начала двух фильмов: hr1,hr2,min1,min2 и их продолжительность, durmin1,durmin2 и решает, можем ли мы выпить и посмотреть оба фильма.Сравните продолжительность времени в двух фильмах

Критерии того, что они не должны перекрываться и что мы не будем ждать более 30 минут между окончанием одного и началом следующего. Он возвращает true, если критерии удовлетворяются и возвращает false в противном случае. Время начала фильма всегда после 13:00 и до полуночи. Первый всегда начинается раньше. Порядок входных аргументов: hr1, min1, durmin1, hr2, min2, durmin2

Я не могу понять, что будет делать моя функция. Каковы эти сроки hr1,hr2? Почему была дана продолжительность?

Я попытался это:

function mymovies=movies(hr1,min1,dur1,hr2,min2) 
h1=hr1+min/60+dur1; 
h2=hr2+min/60; 

    if h2-h1>=30/60 && h2-h1~=0 
     disp('Ture') 

    else 
     disp('False') 
    end 

end 
+0

Функция mymovies = фильмы (hr1, min1, dur1, hr2, min2) h1 = hr1 + min/60 + dur1; h2 = hr2 + min/60; , если h2-h1> = 30/60 && h2-h1 = 0 ~ дисп ('Туре') еще дисп ('False') конец конец –

+0

, когда я запустить эти коды я получаю error..check я делаю правильный вопрос, который задает вопрос у меня или нет. Если я делаю коррекцию, направляйте меня туда, где мне нужны исправления. Спасибо за помощь –

+0

Я редактировал ваш код в ваш вопрос.Если вы получаете сообщение об ошибке, вы должны нажать 'edit', выше, и добавить ошибку. Я подозреваю, что это просто опечатки, хотя - 'min' - это функция, которая находит минимум, а не одну из ваших переменных. Внимательно проверьте свой код и используйте встроенные инструменты отладчика. – nkjt

ответ

0

-ступенно 1: конвертирование час, мин только минут (мимо 1pm, если вы хотите ...) так:

start_movie_1 = hr1*60 + min1 
end_movie_1 = start_movie_1 + durmin1 

Похожие на фильм 2.

-ступят 2: найдите, если они перекрываются.

if start_movie_1 < start_movie_2 and end_movie_1 > end_movie_2 => there is overlapping (whole movie 2 is inside movie 1) 

if start_movie_1 < start_movie_2 and end_movie_1 > start_movie_2 => there is overlapping (movie 2 will start before movie 1 finish) 

if start_movie_2 < start_movie_1 and end_movie_2 > end_movie_1 => there is overlapping (whole movie 1 is inside movie 2) 

if start_movie_2 < start_movie_1 and end_movie_2 > start_movie_1 => there is overlapping (movie 1 will start before movie 2 finish) 

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

между ними
if start_movie_1 < start_movie_2 => return (start_movie_2 - end_movie_1) <= 30 
else (start_movie_2 < start_movie_1) 
return (start_movie_1 - end_movie_2) <= 30 

Отредактировано для еще более простой ответ

function mymovies=movies(hr1,min1,dur1,hr2,min2,dur2) 
    start_movie_1 = hr1*60 + min1; 
    end_movie_1 = start_movie_1 + dur1; 
    start_movie_2 = hr2*60 + min2; 
    end_movie_2 = start_movie_2 + dur2; 

    if start_movie_1 < start_movie_2 && end_movie_1 > end_movie_2 
     disp('FALSE'); 
    else if start_movie_1 < start_movie_2 && end_movie_1 > start_movie_2 
     disp('FALSE'); 
    else if start_movie_2 < start_movie_1 && end_movie_2 > end_movie_1 
     disp('FALSE'); 
    else if start_movie_2 < start_movie_1 && end_movie_2 > start_movie_1 
     disp('FALSE'); 
    else 
     if start_movie_1 < start_movie_2 && (start_movie_2 - end_movie_1) <= 30 
      disp('TRUE'); 
     else if (start_movie_2 < start_movie_1) && (start_movie_1 - end_movie_2) <= 30 
      disp('TRUE'); 
     else 
      disp('FALSE'); 
     end 
    end 
end 
+0

я получаю больше путаницы после вашего ответа. Пожалуйста, ответьте мне в простой логике. Спасибо @Ignasi –

+0

отредактировал @MuhammadUsmanSaleem – Ignasi

+0

спасибо @lgnasi за вклад ... Когда я запускаю грейдер, который проверяет мое решение программы, я получил ошибку: Проблема 6 (фильмы): Обратная связь: Ваша программа сделала ошибку для аргументов 1, 30, 120, 3 , 45, 90 –

1

ну, с соответствующими переменными и немного думая только один, если этого достаточно решить эту проблему. Насколько я понял, вам определенно не нужно учитывать продолжительность второго фильма. вам нужно только беспокоиться о деталях первого фильма и времени начала второго фильма. Вам также нужно «вернуть» логический результат, не отображая его. Так вот то, что вы должны сделать, учитывая указания в вашем вопросе:

Первое: Преобразовать общее время с момента, когда фильм один начинается до его окончания до нескольких минут

Второе: преобразовать общее время начала фильма два, чтобы минут

Наконец, используйте разницу, чтобы соответствовать условиям, указанным в инструкциях в инструкции simpe if. Попробуйте это со своим грейдером, затем сообщите мне, что произойдет потом. (желательно фильм2 - movie1), так как вы можете предположить, что фильм1 всегда будет начинаться первым) Учитывая ваш уровень, этого должно быть достаточно.