powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка логических условий.
25 сообщений из 49, страница 1 из 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
25 сообщений из 49, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка логических условий.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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