powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Пересечение периодов
12 сообщений из 12, страница 1 из 1
Пересечение периодов
    #36179370
Виктор В
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеются две даты D1 и D2 начала и конца одного периода, D3 и D4 - другого периода. Как определить, пересекаются ли эти периоды? Важен сам факт пересечения.
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179397
Виктор В,
ну и вопросик. А самому подумать?

Код: plaintext
?iif(D4>D1 and D2>D3, 'Есть', 'Нет')
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179412
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
не-а :) , вот так:
Код: plaintext
1.
d2<d3 or d4<d1
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179419
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя, и так и так :)
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179465
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор ВИмеются две даты D1 и D2 начала и конца одного периода, D3 и D4 - другого периода. Как определить, пересекаются ли эти периоды? Важен сам факт пересечения.

если записать условие непересечения:

d3>d2 - дата начала второго периода больше даты конца первого периода
и
d1>d4 - дата начала первого периода больше даты конца второго

то, условием пересечения будет

!(d3>d2 or d1>d4)

что равносильно

d3<=d2 and d1<=d4
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179503
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка:
Анатолий Широковесли записать условие непересечения:

d3>d2 - дата начала второго периода больше даты конца первого периода
или
d1>d4 - дата начала первого периода больше даты конца второго
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179572
Виктор В
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широков, Ваш вариант наилучший по полноте и кстати единственно правильный, так как должно быть <= , а не просто < , равенство дат это тоже пересечение. Всё равно всем спасибо, просто придираюсь. Я на самом деле ожидал какую-нибудь функцию FoxPro, но такой по видимому не существует.
А если первый период равен полному месяцу, алгоритм проверки такой же, т.е. определяю D1, D2 и далее как обычно?
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179591
Виктор ВАнатолий Широков, Ваш вариант наилучший по полноте и кстати единственно правильный, так как должно быть <= , а не просто < , равенство дат это тоже пересечение.А это смотре где, когда и при каких условиях. К тому же, ВСЕ условия задач в приличном обществе ссобщают ДО решенияя, а не после. Всё равно всем спасибо, просто придираюсь. Я на самом деле ожидал какую-нибудь функцию FoxPro,На каком основании, позвольте полюбопытствовать? но такой по видимому не существует. Видимо, так как нигде еще такой не видел.
А если первый период равен полному месяцу, алгоритм проверки такой же, т.е. определяю D1, D2 и далее как обычно?А где хоть раз был какие-то упоминания про месяцы и их полноту? Или еще одно из словий задачи?
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179753
Виктор В
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий., ну вот Вы тоже придираетесь. Дополнительных условий нет, скорее это вторая задача, частный случай первой. А мысль про функцию появилась потому что думать не хотелось, конец пятницы...
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179807
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор В,
насчёт единственно правильного варианта - как Вам такой:
Код: plaintext
least(d2,d4)>=greatest(d1,d2)
В предыдущем варианте нужно проверять ещё, что сами интервалы заданы верно, а в моём нет ))
ЗЫ. А причём тут полные месяцы?
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179840
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirнасчёт единственно правильного варианта - как Вам такой:
Код: plaintext
least(d2,d4)>=greatest(d1,d2)

В синтаксисе FoxPro это записыается так

Код: plaintext
1.
2.
* Интервал от d1 до d2 и интервал от d3 до d4
min(d2,d4) >= max(d1,d3)

Однако проблема в том, что подобную конструкцию невозможно будет использовать напрямую в командах Select-SQL, поскольку существуют внутреннии функции собственно команды Select-SQL с теми же именами. Поэтому придется оборачивать такую конструкцию в функцию или макроподстановку. Что не очень удобно.

tanglirВ предыдущем варианте нужно проверять ещё, что сами интервалы заданы верно, а в моём нет ))
В вашем варианте тоже надо это проверять. Если, например, поменяли местами даты начала и конца интервала, то результат будет не корректным. Так что, в смысле проверки варианты равнозначны.

Если вы имели в виду, что предыдущий вариант как-то зависит от того, какой интервал первый, а какой второй, так он от этого не зависит. Условие пересечение интервалов формулируется так:

Дата окончания первого интервала должна быть не больше даты начала второго (d3 <= d2)
И
Дата окончания второго интервала должна быть не больше даты начала первого (d1 <= d4)

Как видите, в таком условии совершенно не важно, какой интервал "первый", а какой "второй", поскольку условие "симметрично". Если поменять местами интервалы, то просто поменяются местами два условия объединенных по "И". Результат от этого не изменится.
...
Рейтинг: 0 / 0
Пересечение периодов
    #36179907
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМtanglirнасчёт единственно правильного варианта - как Вам такой:
Код: plaintext
least(d2,d4)>=greatest(d1,d2)

В синтаксисе FoxPro это записыается так
Код: plaintext
1.
2.
* Интервал от d1 до d2 и интервал от d3 до d4
min(d2,d4) >= max(d1,d3)
Однако проблема в том, что подобную конструкцию невозможно будет использовать напрямую в командах Select-SQL, поскольку существуют внутреннии функции собственно команды Select-SQL с теми же именами. Поэтому придется оборачивать такую конструкцию в функцию или макроподстановку. Что не очень удобно.
Я в mysql-ном синтаксисе написал. Задумался, видно. Про фоксовый синтаксис в курсе.
О, нашёл очепятку. Если по-фоксовому, то min(d2,d4)>=max(d1,d3). Т.е. минимальное завершение больше либо равно максимальному началу. Будет симметрично, но проверять валидность дат начала и конца придётся, тут я прошляпил, признаю.
И кстати, min(d2,d4)-max(d1,d3) = длина интервала (если отрицательная, то длина отрезка между интервалами).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Пересечение периодов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]