|
Алгоритм проверки пересечения двух периодов | ☑ | ||
|---|---|---|---|---|
|
0
Голодный студент
21.03.07
✎
12:15
|
Есть два периода.
Нужно проверить пересекаются ли они. Первый период: Начало1 - Конец1 Второй период: Начало2 - Конец2. Кому не влом, проверьте мою логику. А то сомнения какие то.... Подскажите, что не так. Как то криво вроде работает... Делаю так: ((&Начало1 >= Начало2) И (&Начало1 <= Конец2) и (&Конец1 > Конец2)) ИЛИ ((&Конец1 >= Начало2) И (&Конец1 <= Конец2) и (&Начало1 < Начало2)) ИЛИ ((&Начало1 >= Начало2) И (&Конец1 <= Конец2)) ИЛИ ((&Начало1 <= Начало2) И (&Конец1 >= Конец2)) Повторюсь, задача стоит в том чтоб выяснить пересекаются ли два периода времени или нет... |
|||
|
1
Три буквы
21.03.07
✎
12:20
|
многовато условий
нач2>=нач1 и кон1>=нач2 или нач1>=нач2 и кон2>=нач1 |
|||
|
2
Три буквы
21.03.07
✎
12:24
|
то есть, проверяем, принадлежит ли конец одного из отрезков другому.
если принадлежит, значит, пересекаются |
|||
|
3
Три буквы
21.03.07
✎
12:25
|
поскольку, верно и обратное - если отрезки пересекаются, то конец одного из отрезков обязательно содержится в другом - то этой проверки достаточно
|
|||
|
4
Голодный студент
21.03.07
✎
12:25
|
Неправильно. Конец может не принадлежать, но периоды могут все равно пересекаться...
|
|||
|
5
Три буквы
21.03.07
✎
12:25
|
(4)пример?
|
|||
|
6
Голодный студент
21.03.07
✎
12:27
|
+(4) 1. 01.02.83 - 10.02.83
2. 05.02.83 - 15.02.83 пересекаются, хотя конец второго периода не принадлежит первому отрезку времени... |
|||
|
7
igork1966
21.03.07
✎
12:27
|
(2) 10.01.2007-20.01.2007 и 01.01.2007-30.01.2007
|
|||
|
8
Голодный студент
21.03.07
✎
12:28
|
(7)+1
|
|||
|
9
Три буквы
21.03.07
✎
12:36
|
(7)начало первого отрезка (10/01/2007) внутри второго, то есть вторая часть или в (1).
(6)начало второго (05/02/83) внутри первого, то есть, первая часть ИЛИ в (1) +(3)более того, если отрезки пересекаются, то начало(именно начало) одного из них обязательно принадлежит другому. |
|||
|
10
TormozIT
гуру
21.03.07
✎
12:38
|
Типичная задачка для проверки сообразительности соискателя.
Советую всем заучить этот алгоритм на зубок ;-) |
|||
|
11
Feofan
21.03.07
✎
12:41
|
я бы так сделал:
1 - сравнивается НачПер1 и НачПер2, определяется который раньше, допустим НачПер1 2 - Если КонПер1 > НачПер2 значит пересекаются, иначе - нет. |
|||
|
12
Feofan
21.03.07
✎
12:45
|
Ну, или переходя на 1с:
Пересекаются = Ложь; Если НачПер1 > НачПер2 тогда Если КонПер2 > НачПер1 тогда Пересекаются = Истина; КонецЕсли; Иначе Если КонПер1 > НачПер2 тогда Пересекаются = Истина; КонецЕсли; КонецЕсли; |
|||
|
13
Голодный студент
21.03.07
✎
12:51
|
(9)Догнал:)
Спасибо большое ! |
|||
|
14
France
21.03.07
✎
12:56
|
Студент, признавайся - дали тестовое задание в рарусе?
|
|||
|
15
Vozhd
21.03.07
✎
12:56
|
(12) Ужасно...
|
|||
|
16
Feofan
21.03.07
✎
13:00
|
(15) зато всего 2 раза проверка условия идет
|
|||
|
17
Vozhd
21.03.07
✎
13:01
|
(16) Зачем так много сравнений?
|
|||
|
18
Feofan
21.03.07
✎
13:03
|
(17)текста может и много, а выполняться зато быстрее будет чем (1).
Предложи более быстрый вариант |
|||
|
19
Голодный студент
21.03.07
✎
13:15
|
(14)Нет. Мне это нужно для конфигурации "Аренда оборудования". Когда документ проводят, мне нужно проверить, а не занято ли оборудование в определенный период времени, если занято то не давать провести документ.
А что, когда в Рарусе дают тестовое задание, то разрешают пользоваться инетом ? |
|||
|
20
cost10
21.03.07
✎
13:15
|
А если так?
Если Макс(Начало1,Начало2) < Мин(Конец1,Конец2) Тогда Прерсекаются = Истина; КонецЕсли; |
|||
|
21
АП
21.03.07
✎
13:24
|
(20) блин не успел написать :)
|
|||
|
22
Vozhd
21.03.07
✎
13:29
|
(20) Можно еще короче!
|
|||
|
23
АП
21.03.07
✎
13:31
|
(22) низя ... короче 22см никак низя ;)
|
|||
|
24
Vozhd
21.03.07
✎
13:33
|
(23) 22 см - это то, чем думается или того, чем по клавиатуре долбится? :-)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |