Имя: Пароль:
1C
1С v8
В какой диапазон попало число
0 Anttonnio
 
13.04.16
18:50
Добрый день!

Чисто технический вопрос:
У меня есть несколько диапазонов чисел
Допустим от 1 до 28
От 29 до 104
От 105 до 280
И т.д(таких диапазонов 20)
Можно ли как-то быстро понять в каком диапазоне число?
Чем
Если че<=28 и че>=1 тогда
Одын();
Иначеесли че<=104 и че >=29 тогда
Дыдва()
И т.д.
1 Cyberhawk
 
13.04.16
18:54
Беги из центральной границы диапазонов в какую-то сторону
2 Cyberhawk
 
13.04.16
18:55
И дели пополам каждый из оставшихся, далее снова от середины беги
3 GROOVY
 
13.04.16
18:56
Если диапазоны не вложенные, ИМХО, достаточно на иначеесли проверять границы в порядке убывания или возрастания. Ну собстно (1).
4 Cyberhawk
 
13.04.16
18:56
Допустим у тебя диапазоны 1-10 11-20 21-30 и т.д. до 91-100

Сравниваешь сначала х > 50, если да, то отсекаешь первую половину диапазона. В оставшейся половине

51-60 61-70 ... 91-100 сравниваешь опять с границей среднего диапазона (70 или 80) и отсекаешь опять
5 Cyberhawk
 
13.04.16
18:57
Можно и последовательно, как в (3), но итераций будет больше, если нужный диапазон находится в "дальней" половине
6 Anttonnio
 
13.04.16
18:59
(1)  Ага) ну ясно из разряда быстрой сортировки)

Еще думал вычислить изначально вероятность попадания в конкретный диапазон и по мере убывания вероятности - будет ли это быстрее предложенного?
7 Карупян
 
13.04.16
19:01
можно методом деления пополам
8 Карупян
 
13.04.16
19:01
но для 20 нет смысла заморачиваться
9 Cyberhawk
 
13.04.16
19:06
(6) Как вычислять вероятность, по длине даипазона?
Насчет "быстрее" - нужно сравнивать на большом числе итераций поиска
10 Anttonnio
 
13.04.16
19:09
(9)  ну т.е. Я примерно знаю в какой диапазон попадает чаще, а в какой реже - в таком порядке и выстроить?
11 Карупян
 
13.04.16
19:10
Ну можно проверить предполагаемый диапазон, а потом методом деления пополам
12 Anttonnio
 
13.04.16
19:12
А если упростить задачу - отсортировать таблицу чисел и тогда мы точно будем знать в каком диапазоне было предыдущее число, следовательно текущее может быть ли в текущем либо в одном из следующих?
13 Cyberhawk
 
13.04.16
19:12
(12) Сортировка тоже стОит времени :)
14 Anttonnio
 
13.04.16
19:16
(13) сортировку можно и на уровне запроса сделать

Что-то вроде:
ТекДиапазон
для каждого жи = 1 по 100 000 Цикл

Если Че[жи]>ТекДиапазон.Максимум тогда
Переопределитьдиапазон();
КонецЕсли
Конеццмкла
15 Два Волшебника
 
13.04.16
19:21
(0) Если критична скорость - я бы сделал массив из диапазонов и смотрел, обращаясь по индексу.

Либо в массив запихнуть структуры с минимальным и максимальным значением диапазона:
Массив[0] - от 0 до 5
Массив[1] - от 0 до 5
Массив[2] - от 0 до 5
Массив[3] - от 0 до 5
Массив[4] - от 0 до 5
Массив[5] - от 0 до 5
Массив[6] - от 6 до 10
Массив[7] - от 6 до 10
Массив[8] - от 6 до 10

либо использовать два массива:
МассивМин[0] = 0, МассивМакс[0] = 5
МассивМин[1] = 0, МассивМакс[1] = 5
МассивМин[2] = 0, МассивМакс[2] = 5
МассивМин[3] = 0, МассивМакс[3] = 5
МассивМин[4] = 0, МассивМакс[4] = 5
МассивМин[5] = 0, МассивМакс[5] = 5
МассивМин[6] = 6, МассивМакс[6] = 10
МассивМин[7] = 6, МассивМакс[7] = 10
МассивМин[8] = 6, МассивМакс[8] = 10

Массивы, разумеется, генерировать автоматически.

И вычислять ничего не надо! Profit!
16 mistеr
 
13.04.16
20:01
(0) Если чисел много и они в базе, то диапазоны тоже в базу и джойнить.
17 PR пять
 
13.04.16
20:09
О чем вы вообще трындите, массивов всего 20 штук.
Ни. О. Чем.

Если
ИначеЕсли
Иначе
КонецЕсли

Без вариантов.
18 Anttonnio
 
14.04.16
08:25
Ясно!)

Спасиоб всем за комментарии
19 FIXXXL
 
14.04.16
09:32
загони в ВТ и запросом получи, без всяких если
20 Тролль главный
 
14.04.16
09:38
+(19)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.