Исключение детали из модели по нескольким условиям

Автор Nemyheim, 21.09.19, 13:51:18

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Nemyheim

Здравствуйте, Друзья!
Есть следующая задача.

Есть переменные:
Nbalka1 со значением "0"
Qbalka 1 со значением "0"

Есть деталь, в которой прописываю следующие параметры при которых она должна быть исключена из модели:
Nbalka1==0?1:0||Qbalka1==1?0:1

Т.е. сейчас деталь должна быть исключена из модели, т.к. совпадает одно из условий Nbalka1==0?1:0. Вернее совпадают даже оба, но значение переменной присваивается как "0"
Почему так?
Скриншоты во вложении.

Упреждающий ответ: модель перестраивал. F5 нажимал, кнопочку перестроить нажимал.

Nemyheim

По отдельности оба параметра работают и ставят значение переменной "1", но в месте получается как "минус на минус будет плюс"

Получается, что загвоздка в операторе || "или"
Я его неправильно применяю? Может заменить другим параметром?

Aleksei

1 вариант.  Заключите тернарные операторы в скобки:
(Nbalka1==0?1:0) || (Qbalka1==1?0:1)

2 вариант. Выражение можно написать проще:
!Nbalka1 || !Qbalka1

Nemyheim

Спасибо! Как-то выпал из моего поля зрения оператор ! Очень даже помогает в работе)

SergAK

Объясните, пожалуйста, кто опытный, - как работает оператор "!"
Если можно с примером и объяснением.

Петрович-47

Учитывая что К не имеет логических переменных их роль играют 0-Ложь и все другие цифры-Истина
Оператор "!" является логическим отрицанием и соответственно переворачивает логические переменные наоборот
Например
!0==1 это истина
0==1 это ложь
!(0==1) это истина

1==1 это истина
1!=1 это ложь
1!=0 это истина

Надеюсь ещё больше не запутал :)

KiDim


SergAK

То есть в примере выше:
!Nbalka1 || !Qbalka1
программа будет проверять включены ли переменные Nbalka1 или Qbalka1 (равно ли значение нулю), и если равно, то ставить единицу. В случае же обратном ставить 0
Меня вот как раз интересует (для начала), является ли !x полным аналогом формулы x==0?1:0    ?
То есть этот оператор рассматривает понятия - истина-ложь, и меняет на обратное. Если истина, то ложь, если ложь, то истина?
И работает исключительно с 0-1.
____
Немного понятно, спасибо за ответы. Будем посмотреть.

Петрович-47

Цитата: SergAK от 02.10.19, 10:51:24
...
То есть этот оператор рассматривает понятия - истина-ложь, и меняет на обратное. Если истина, то ложь, если ложь, то истина?
...

Да!

Цитата: SergAK от 02.10.19, 10:51:24
...
И работает исключительно с 0-1.
...

Нет!

Во первых с одно стороны 0, а с другой стороны все остальные числа
Во вторых, работает и с логическими выражениями.

           (x>100)     !(x>100)
x=50      Ложь       Истина
х=100    Ложь       Истина
ч=101   Истина      Ложь

Цитата: SergAK от 02.10.19, 10:51:24
...
Меня вот как раз интересует (для начала), является ли !x полным аналогом формулы x==0?1:0    ?
...

Да!

SergAK

Последнее объяснение меня немного запутало.
Я полез проверять, и понял, что каким то неправильным образом использую условие больше ста, оно у меня всегда ложь.
Я привык работать обычно с условиями типа g и h - см. картинку - обратный оператор пока поддаётся моей логике только в самом простейшем случае. .

Петрович-47

02.10.19, 15:39:55 #10 Последнее редактирование: 02.10.19, 17:37:28 от Петрович-47
Отрицание вполне можно не использовать и жить спокойно
Лично я его использую для удобоваримости кода, чистатаквизуально

SergAK

Я то и не использую - вернее в своё время самостоятельно не разобрался в том, как с ним работать, попытался поставить его в виде оператора  " != " ожидая, что он будет работать противоположно оператору  "  ==  ", но что-то к моему глубокому сожалению  пошло не так. Я очень сильно расстроился и про оператор ! забыл.
Просто обратил внимание в этой теме, насколько изящно условие (Nbalka1==0?1:0) || (Qbalka1==1?0:1)  заменили на   !Nbalka1 || !Qbalka1 - и понял, что некоторые многоэтажные формулы которыми описываются у меня обратные условия можно было написать много проще.