Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм хранения и проверки условий


Автор: HappyLife 26.6.2012, 15:10
Необходимо реализовать алгоритм проверки условий.
Предположим у нас есть параметры: x = 10, y = 4.
Есть разные методы. необходимо выполнить тот метод, фильтр которого соответствует тем параметрам, что пришли.

Фильтры такого плана

((x = 1) or (y=2)) and (z = 10) -> Выполняем то-то и то-то

(x = 3) and (z = 10) -> Выполняем то-то и то-то

(y = 4) -> Выполняем то-то и то-то

Здесь у нас правильный фильтр будет третий.

Фильтры и приходящие параметры - это текстовые строки и они могут быть любыми.

Автор: Akina 26.6.2012, 15:28
Цитата(HappyLife @  26.6.2012,  16:10 Найти цитируемый пост)
Фильтры и приходящие параметры - это текстовые строки и они могут быть любыми.

Если речь о том, что ищется ТОЧНОЕ совпадение параметров и фильтров - то достаточно формализовать частные условия фильтров. При этом набор из примера будет трансформирован в:

u1) x = 1
u2) y=2
u3) z = 10
u4) x = 3
u5) z = 10
u6) y = 4

p1) (u1 or u2) and u3
p2) u4 and u5
p3) u6

Далее выполняется парсинг и распознание параметров, и присвоение true тем частным условиям, котрые соответствуют этим параметрам. В примере u1..u5 будут false, u6 будет true, параметр x = 10 будет проигнорирован как отсутствующий в списке частных условий.

После чего выполняется вычисление значений фильтров. p1 и p2 дадут false, а p3 даст true - вот его метод и нужно выполнить.

Автор: HappyLife 26.6.2012, 16:13
Как эти данные хранить, проверять? был бы даже признателен за ссылку реализации.

Автор: Akina 26.6.2012, 16:40
Хранить и проверять - наверное, в базе данных. А вот конкретных ссылок, тем более на похожие реализации, от меня можно не ждать. Не программист я.

Автор: W4FhLF 26.6.2012, 18:44
muParser попробуйте, он понимает логические выражение любой сложности. 

Автор: _Y_ 26.6.2012, 21:48
Если в условии для каждой проверочной функции разнятся только числа, в ходе выбора функции можно использовать регулярные выражения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)