Имя: Пароль:
1C
 
Алгоритм проверки пересечения двух периодов
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 см - это то, чем думается или того, чем по клавиатуре долбится? :-)
Основная теорема систематики: Новые системы плодят новые проблемы.