powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка логических условий.
49 сообщений из 49, показаны все 2 страниц
Обработка логических условий.
    #39182203
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу в С под микроконтроллер.
я хочу выполнять разные задачи в камне. скажем включи вентилятор после 17:00 если температура больше 30* C и выключи его после 22:00 или если температура упала ниже 27* C.
я бы мог записать в терминале.
Код: plaintext
1.
2.
time >= 17:00 AND temp > 30 out1 = 1
time >= 22:00 OR temp < 27 out1 = 0


это легко распарсить в структуру и потом проверить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct sTaskParam
{
	float *variable;
	float limit;
	uint32_t compare;    //0 = '==', 1 = '>', 2 = '<', 3 = '>=', 4 = '<=', 5 = '!='
	uint32_t logicGate;  //0=none, 1=or, 2=and
};
Struct sTaskParam taskParam[4]; 


и потом заполнить (это псевдо код чтоб не усложнять. в реале немного подругому.)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
taskParam[0].variable =time;
taskParam[0].compare = “>=”;
taskParam[0].limit =17.00;
taskParam[0].logicGate = and;

taskParam[1].variable =temperature;
taskParam[1].compare = “>=”;
taskParam[1].limit =30;
taskParam[1].logicGate = none;


taskParam[2].variable = time;
taskParam[2].limit = 22.00;
taskParam[2].compare = “>=”;
taskParam[2].logicGate = or;

taskParam[3].variable =temperature;
taskParam[3].limit =27;
taskParam[3].compare = “<=”;
taskParam[3].logicGate = none;


и потом для условия time >= 17:00 AND temp > 30 out1 = 1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
uint32_t EvaluateParamCondition(float *val, float val_lim, uint32_t compare)
{
	switch (compare)
	{
	    case 0: return (*val == val_lim); break;
	    case 1: return (*val > val_lim);  break;
	    case 2: return (*val < val_lim);  break;
	    case 3: return (*val >= val_lim); break;
	    case 4: return (*val <= val_lim); break;
	    case 5: return (*val != val_lim); break;
	    default : return BAD_PARAM;
	}
}
uint32_t condition[2];
uint32_t global_result;
for (int i = 0; i < 3; i++)
{
    condition[i] = EvaluateParamCondition(taskParam[i].variable, taskParam[i].limit, taskParam[i].compare);
}

for (int i = 0; i < 3; i++)
{
    if (taskParam[i].logicGate == OR)
        global_result |= condition[i];
    else if (taskParam[i].logicGate == AND)
        global_result &= condition[i];
}
if (global_result)
{
    out1 = 1;
}


ну и похожим образом для второго условия.

но при усложнении логики и добавлении скобок парсинг резко усложняется и не понятно какую структуру изобрести для сложных логических выражений.

вот тут я впал в ступор - time > 17:00 OR (temperature > 30 AND in1 = 1) out1=1
как хранить и обрабатывать логические группы?
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182261
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
time = 23:00 
temp = 31


Что будет при таких данных?
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182270
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Код: sql
1.
2.
time = 23:00 
temp = 31


Что будет при таких данных?

мда. вопрос поставлен верно. тут наверно надо выставлять границы time>17:00 and time<18:00
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182309
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храни в массиве в Польской нотации и напиши свой вычислятор. Это не не сложно.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182316
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7как хранить и обрабатывать логические группы?
Начать можно с подхода "по-дилетантски". Снять нагрузку с парсера и переложить её на оператора. Т.е. пойти по пути разбиения на элементарные выражения. И трансформировать
jenya7time > 17:00 OR (temperature > 30 AND in1 = 1) out1=1
в вид

time > 17:00 => memory1
temperature > 30 => memory2
in1 = 1 => memory3
memory2 AND memory3 => memory2
memory1 OR memory2 => memory1
memory1 IS TRUE => SET out1=1
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182323
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TХрани в массиве в Польской нотации и напиши свой вычислятор. Это не не сложно.

пользователь ничего не знает о польской нотации и програмировании.
он может написать простое логическое условие понятное каждому.
и потом зачем влезать в - форты, стеки, польские нотации - это все прекрасно но есть место и для других решений.
мой способ прекрасно работает и занимает пару строк. единственно что надо это модифицировать его.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182331
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7пользователь ничего не знает о польской нотации и програмировании.На калькуляторе он считать умеет? ячейкой памяти на нём пользоваться умеет? этой квалификации достаточно...
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182333
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7как хранить и обрабатывать логические группы?
Начать можно с подхода "по-дилетантски". Снять нагрузку с парсера и переложить её на оператора. Т.е. пойти по пути разбиения на элементарные выражения. И трансформировать
jenya7time > 17:00 OR (temperature > 30 AND in1 = 1) out1=1
в вид

time > 17:00 => memory1
temperature > 30 => memory2
in1 = 1 => memory3
memory2 AND memory3 => memory2
memory1 OR memory2 => memory1
memory1 IS TRUE => SET out1=1

вот тут как раз затык :) как знать програмно что memory2 AND memory3 - это одна группа а memory1 OR memory2 вторая.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182335
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7пользователь ничего не знает о польской нотации и програмировании.На калькуляторе он считать умеет? ячейкой памяти на нём пользоваться умеет? этой квалификации достаточно...
у меня нет никакой математики. только логические условия.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182344
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TХрани в массиве в Польской нотации и напиши свой вычислятор. Это не не сложно.

пользователь ничего не знает о польской нотации и програмировании.
он может написать простое логическое условие понятное каждому.
и потом зачем влезать в - форты, стеки, польские нотации - это все прекрасно но есть место и для других решений.
мой способ прекрасно работает и занимает пару строк. единственно что надо это модифицировать его.
При чем тут пользователь? Вопрос стоял так
jenya7но при усложнении логики и добавлении скобок парсинг резко усложняется и не понятно какую структуру изобрести для сложных логических выражений.
вот и парси то что ввел пользователь в польскую нотацию, а при проверках вычисляй. Можешь просто парсить каждый раз, но с предобработкой быстрее.

ИМХУ тут код не сложнее твоего будет. Но универсальный, любое выражение пользователя в такую структуру впишется.

PS Akina, по сути тоже самое предлагает.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182349
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7пропущено...


пользователь ничего не знает о польской нотации и програмировании.
он может написать простое логическое условие понятное каждому.
и потом зачем влезать в - форты, стеки, польские нотации - это все прекрасно но есть место и для других решений.
мой способ прекрасно работает и занимает пару строк. единственно что надо это модифицировать его.
При чем тут пользователь? Вопрос стоял так
jenya7но при усложнении логики и добавлении скобок парсинг резко усложняется и не понятно какую структуру изобрести для сложных логических выражений.
вот и парси то что ввел пользователь в польскую нотацию, а при проверках вычисляй. Можешь просто парсить каждый раз, но с предобработкой быстрее.

ИМХУ тут код не сложнее твоего будет. Но универсальный, любое выражение пользователя в такую структуру впишется.

PS Akina, по сути тоже самое предлагает.
боюсь польскую нотацию мне не потянуть. :)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182362
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7боюсь польскую нотацию мне не потянуть. :)
Но в конце-концов именно ее ты и "изобретешь"
Все придумано до нас :)
Почитай про Обратную польскую запись Там все вплоть до алгоритмов как из обычной преобразовать.
Примеры кода там же
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182373
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если смущает что у тебя >=, OR, AND а там +,- и т.д. рассматривай >=, OR, AND как такие же действия как и +,-
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182389
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7как знать програмно что memory2 AND memory3 - это одна группа а memory1 OR memory2 вторая.ЗАЧЕМ?
То, что я привёл - это именно то, что оператор должен передать контроллеру.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182443
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7как знать програмно что memory2 AND memory3 - это одна группа а memory1 OR memory2 вторая.ЗАЧЕМ?
То, что я привёл - это именно то, что оператор должен передать контроллеру.
я понял. да это неплохое решение. но дело в том что я не хочу сильно загружать пользователя. ему должно быть максимально комфортно.
представте себе что вы купили какой нибудь прибор и вам предлагают писать там скрипты чтоб запустить его а вы на минуточку не програмист а водитель автобуса. я немного утрирую но дрифт такой. :)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182454
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

как устроен пользовательский интерфейс? физически
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182501
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7представте себе что вы купили какой нибудь прибор и вам предлагают писать там скрипты чтоб запустить его а вы на минуточку не програмист а водитель автобуса.
Пример некорректен.

jenya7дело в том что я не хочу сильно загружать пользователя. ему должно быть максимально комфортно.Ну так и сделайте ему комфортный интерфейс программирования. С унифицированными блоками и конструкциями, отслеживанием, автогенерацией, контекстной справкой, эмуляцией выполнения с отладкой...
А если оператор, в должностные обязанности которого входит программирование контроллера, не умеет этого делать и неспособен во вменяемые сроки научиться - надо ставить вопрос о его профнепригодности, а не подтирать ему задницу.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182532
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7,

как устроен пользовательский интерфейс? физически

обычный терминал.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182547
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7представте себе что вы купили какой нибудь прибор и вам предлагают писать там скрипты чтоб запустить его а вы на минуточку не програмист а водитель автобуса.
Пример некорректен.

jenya7дело в том что я не хочу сильно загружать пользователя. ему должно быть максимально комфортно.Ну так и сделайте ему комфортный интерфейс программирования. С унифицированными блоками и конструкциями, отслеживанием, автогенерацией, контекстной справкой, эмуляцией выполнения с отладкой...
А если оператор, в должностные обязанности которого входит программирование контроллера, не умеет этого делать и неспособен во вменяемые сроки научиться - надо ставить вопрос о его профнепригодности, а не подтирать ему задницу.

это расчитано на обычного пользователя. я сделаю со временем десктопную апликацию но нужно дать возможность работать с обычного терминала.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182761
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7но нужно дать возможность работать с обычного терминала.
значит командный язык внятный разработать нужно и задокументировать,
внутреннее представление - вторично
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182803
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7это расчитано на обычного пользователя. я сделаю со временем десктопную апликацию но нужно дать возможность работать с обычного терминала.
Помнится, во времена ROM-BASIC распрекрасно программа вводилась в режиме терминала, и никого это не парило. Сделай аналогичный BASIC для своего контроллера - и всего-то делов, что нумеровать строки и иметь операцию вставки строки с заданным номером (при наличии такого номера выполняя замещение) и удаление строки с заданным номером. Всё равно созданный тобой код работает в режиме интерпретации.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182957
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7это расчитано на обычного пользователя. я сделаю со временем десктопную апликацию но нужно дать возможность работать с обычного терминала.
Помнится, во времена ROM-BASIC распрекрасно программа вводилась в режиме терминала, и никого это не парило. Сделай аналогичный BASIC для своего контроллера - и всего-то делов, что нумеровать строки и иметь операцию вставки строки с заданным номером (при наличии такого номера выполняя замещение) и удаление строки с заданным номером. Всё равно созданный тобой код работает в режиме интерпретации.
да. действительно. всего то делов. и чего я на форум за помощью пришел. :)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182964
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7но нужно дать возможность работать с обычного терминала.
значит командный язык внятный разработать нужно и задокументировать,
внутреннее представление - вторично
да вот как раз внутренняя реализация это проблема. парсинг такой или другой я сделаю.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182969
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7да. действительно. всего то делов. и чего я на форум за помощью пришел. :)
Это 18881581 почитал? Там все элементарно. Не изобретай велосипед, потрать чуть больше времени на разбор и напиши один раз на всю оставшуюся жизнь.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182975
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7да. действительно. всего то делов. и чего я на форум за помощью пришел. :)
Это 18881581 почитал? Там все элементарно. Не изобретай велосипед, потрать чуть больше времени на разбор и напиши один раз на всю оставшуюся жизнь.

да. там есть один пример где учитываются скобки. пытаюсь его вкурить. спасибо.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39182986
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7да вот как раз внутренняя реализация это проблема. парсинг такой или другой я сделаю.
если сделаешь парсинг - что будет результатом его работы?
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183257
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offtopjenya7чего я на форум за помощью пришел

Насколько я понимаю, ты ДОЛЖЕН БЫЛ прийти за идеями. Но всё больше кажется, что пришёл ты за кодом для кнопки "Сделать песдато".
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183331
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7да вот как раз внутренняя реализация это проблема. парсинг такой или другой я сделаю.
если сделаешь парсинг - что будет результатом его работы?
у меня в моем первом посте все разложено по полочкам. в том числе и результат работы. более подробно я объяснить не могу.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183335
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
offtopjenya7чего я на форум за помощью пришел

Насколько я понимаю, ты ДОЛЖЕН БЫЛ прийти за идеями. Но всё больше кажется, что пришёл ты за кодом для кнопки "Сделать песдато".
идей у меня тоже - громадьё. хотелось бы рабочую реализацию.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183401
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7у меня в моем первом посте все разложено по полочкам. в том числе и результат работы.
вроде не устраивает такая структура?

значит в виде дерева получить результат синтаксического анализа нужно , идей то - громадьё )
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183590
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7у меня в моем первом посте все разложено по полочкам. в том числе и результат работы.
вроде не устраивает такая структура?

значит в виде дерева получить результат синтаксического анализа нужно , идей то - громадьё )

структура вполне себе. если добавить к ней член group_number то можно уже группировать в соответствии со скобками. единственно что непонятно - как обрабатывать логический элемент между группами.
(A1 OR A2 AMD A3) AND (B1 OR B2 OR B3)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183597
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7структура вполне себе. если добавить к ней член group_number то можно уже группировать в соответствии со скобками. единственно что непонятно - как обрабатывать логический элемент между группами.
(A1 OR A2 AMD A3) AND (B1 OR B2 OR B3)
структура - негодная, изобрази выражение в виде дерева
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183630
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7структура вполне себе. если добавить к ней член group_number то можно уже группировать в соответствии со скобками. единственно что непонятно - как обрабатывать логический элемент между группами.
(A1 OR A2 AMD A3) AND (B1 OR B2 OR B3)
структура - негодная, изобрази выражение в виде дерева
а как это выражается в коде?
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183631
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если полноценное дерево (или польскую нотацию) не хочешь делать - делай два уровня:
1. элементы (как сейчас)
2. группы элементов (п.1.)
в итоге будет массив массивов:
a[0] = (A1 OR A2 AMD A3)
a[1] = (B1 OR B2 OR B3)
считаешь сначала a[0] затем a[1] затем AND посчитанного.

PS но это плохой велосипед, т.к. сюда не впишется (A1 OR (A2 AND A3)) AND (B1 OR B2 OR B3)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183645
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь попробовать скобки раскрыть. Тогда в твою структуру все ляжет.
Правила как в алгебре: AND это умножение, OR сложение, например
Код: sql
1.
2.
(A and B) or C = A and B or C
(A or B) and C = A and C or B and C



PS у тебя косяк в первом посте, AND и OR имеют одинаковый приоритет, сначала должны выполнится все AND .
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183650
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЕсли полноценное дерево (или польскую нотацию) не хочешь делать - делай два уровня:
1. элементы (как сейчас)
2. группы элементов (п.1.)
в итоге будет массив массивов:
a[0] = (A1 OR A2 AMD A3)
a[1] = (B1 OR B2 OR B3)
считаешь сначала a[0] затем a[1] затем AND посчитанного.

PS но это плохой велосипед, т.к. сюда не впишется (A1 OR (A2 AND A3)) AND (B1 OR B2 OR B3)
ну почему
A1 – group #1
A2,A3 – group #2
B1,B2,B3 - group #3
мне придется вводить еще одну структуру которая будет содержать группы и логические элементы между ними. получается громоздко.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183656
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TМожешь попробовать скобки раскрыть. Тогда в твою структуру все ляжет.
Правила как в алгебре: AND это умножение, OR сложение, например
Код: sql
1.
2.
(A and B) or C = A and B or C
(A or B) and C = A and C or B and C



PS у тебя косяк в первом посте, AND и OR имеют одинаковый приоритет, сначала должны выполнится все AND .

это таки интересно. надо придумать как раскрывать скобки програмно. это все таки строка от пользователя.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183668
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7а как это выражается в коде?
например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
enum OP{
	lit,
	get,
	let,
	call,
	lt,
	gt,
	eq,
	ne,
	le,
	ge,
	add,
	sub,
	mul,
	div
};
struct NODE{
	enum OP op;
	NODE * left;
	NODE * right;
	int32_t value;
};
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183783
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7это таки интересно. надо придумать как раскрывать скобки програмно. это все таки строка от пользователя.
Это тоже корявый велосипед плавно везущий к нормальному решению. В Обратной польской записи прекрасно расписано как распарсить.

Если у тебя задача "как бы так написать чтобы ничего особо не менять в уже написанном", то могу еще велосипед предложить:
заведи справочник формул:
Код: sql
1.
2.
3.
4.
1. (A1 OR A2 AMD A3)
2. (A1 OR A2 OR A3)
3. (A1 OR A2 AMD A3) AND (B1 OR B2 OR B3)
... и т.д. все возможные варианты


я так понимаю вариантов у тебя немного ожидается.

Дальше прописываешь распознавание какую из формул ввел пользователь, запоминаешь все параметры и номер формулы. Для каждой формулы прописываешь свой код расчета.

Как и в других корявых решениях - корявость в ограниченном количестве обрабатываемых выражений.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183808
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7это таки интересно. надо придумать как раскрывать скобки програмно. это все таки строка от пользователя.
Это тоже корявый велосипед плавно везущий к нормальному решению. В Обратной польской записи прекрасно расписано как распарсить.

Если у тебя задача "как бы так написать чтобы ничего особо не менять в уже написанном", то могу еще велосипед предложить:
заведи справочник формул:
Код: sql
1.
2.
3.
4.
1. (A1 OR A2 AMD A3)
2. (A1 OR A2 OR A3)
3. (A1 OR A2 AMD A3) AND (B1 OR B2 OR B3)
... и т.д. все возможные варианты


я так понимаю вариантов у тебя немного ожидается.

Дальше прописываешь распознавание какую из формул ввел пользователь, запоминаешь все параметры и номер формулы. Для каждой формулы прописываешь свой код расчета.

Как и в других корявых решениях - корявость в ограниченном количестве обрабатываемых выражений.

ха. пользователь может ввести любую логическую комбинацию. я не знаю что ему захочется съэндить или съорить. вот сижу с польской записью разбираюсь. тот еще бубен. :)
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183816
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7ха. пользователь может ввести любую логическую комбинацию
тебя предупреждали.
простой, но полноценный синтаксический анализатор нужен.
а перед написанием анализатора - с языком определиться нужно
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183926
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилjenya7ха. пользователь может ввести любую логическую комбинацию
тебя предупреждали.
простой, но полноценный синтаксический анализатор нужен.
а перед написанием анализатора - с языком определиться нужно
разобрать лексером на токены не проблема. вот как потом токены обрабатывать.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183954
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7разобрать лексером на токены не проблема. вот как потом токены обрабатывать.
Гугл сломался?

Вот например
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39183962
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7разобрать лексером на токены не проблема. вот как потом токены обрабатывать.
синтаксическим анализатором
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39184571
Доктар123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TМожешь попробовать скобки раскрыть. Тогда в твою структуру все ляжет.
Правила как в алгебре: AND это умножение, OR сложение, например
Код: sql
1.
2.
(A and B) or C = A and B or C
(A or B) and C = A and C or B and C



PS у тебя косяк в первом посте, AND и OR имеют одинаковый приоритет, сначала должны выполнится все AND .

Правильно,
приоритеты соотвествуют математическим
AND - умножене- деление
OR - сложение- вычитаение.

Что касается разбора конструкций внутри скобок,
то их нужно завернуть в рекурсию.
Уровень рекурсии будут соотвесвовать уровню вложенности скобок.

По реализации на С :
двигаешь указатель по строке , встретил открывающуюся
скобку впрыгнул в рекурсивный вызов, встретил закрывающуюся
выпрыгнул на уровень выше.
И будет вам выше предложенное дерево....
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39184578
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктар123,

рекурсивный спуск называется
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39184590
Доктар123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилДоктар123,

рекурсивный спуск называется

Я уже не помню как это в учебнике называется....
Приоретизация сложения и умножения делается также.

А польская нотация нужна , что бы не запрыгивать
наперед указателя строки , что бы посмотреть нужна ли
следующая итерация рекурсии
или операция выполняется на текущем уровне вложенности.

В польской нотации алгоритм проще реализуется
меньше переменных и расход памяти, но суть алгоритма не меняется.
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39184600
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктар123А польская нотация нужна , что бы не запрыгивать
наперед указателя строки
наверное пора снова учебник в руки взять.....
...
Рейтинг: 0 / 0
Обработка логических условий.
    #39192156
Мудроглюков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

можешь попробовать Prolog (без перекомпиляции - добавляешь и убираешь разные условия в любых количествах, отслеживая лишь логику)
например, SWI-Prolog с C
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка логических условий.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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