powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / маненькый вопросик про вычисления логических выражений
25 сообщений из 36, страница 1 из 2
маненькый вопросик про вычисления логических выражений
    #36839144
Тёмa i ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернее, про порядок вычисления.
Столкнулся с тем, что в в операторе
If len("строка")<>0 AND msgbox("тра-ля-ля") then
..........................................
получаю вывод msgbox, хотя len("строка") у меня точно ноль - вижу при пошаговом выполнении.
то есть обязательно вычисляются все выражения? ну при "ИЛИ" это понятно, а зачем по "И"?
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839154
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вычисляется полностью все логическое выражение.

В .NET это можно избежать, а в VB6/VBA пользуйтесь вложенным IF-ом.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839178
Тёмa i ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
избыточно, однако.
понял, спасибо.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839183
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тёмa i koизбыточно, однако.
понял, спасибо.

Не согласен. Если я указываю функцию в выражении, я ХОЧУ, чтобы она была выполнена, вне зависимости от результатов других функций, мало ли что она делает....
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839288
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите сказать, что в скрипте:
Строка = ""
If Len(Строка) <> 0 And MsgBox("тра-ля-ля") Then MsgBox ("трали-вали")
Трали-вали выводится??????
Вы говорите: при "ИЛИ" это понятно, а зачем по "И"
Так ведь это же первая часть условия, выполнится всегда, а вторая в зависимости от обстоятельств
Не забывайте про существование Or, Xor, And, Eqv, Imp
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839415
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Я тебя уже просил, не лезь давать советы в вопросы, в которые ты даже не врубаешься
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36839538
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Я тебя уже просил, не лезь давать советы в вопросы, в которые ты даже не врубаешься

Первое правило студента, не знаешь сам, помоги товарищу


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840821
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, самому интересно в чём же я тут не понимаю
Был вопрос:
то есть обязательно вычисляются все выражения?
Мой ответ:
Так ведь это же первая часть условия, то есть левая и она выполнится всегда, а вторая, то есть правая в зависимости от обстоятельств
Что не так?
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840831
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюShocker.Pro, самому интересно в чём же я тут не понимаю
Был вопрос:
то есть обязательно вычисляются все выражения?
Мой ответ:
Так ведь это же первая часть условия, то есть левая и она выполнится всегда, а вторая, то есть правая в зависимости от обстоятельств
Что не так?

Твой ответ неверен
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840850
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Ципихович Эндрю
> Что не так?

Где пример подтверждающий твои слова?



З.Ы. Эндрю, пожалуйста, понятнее формулируй свои мысли.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840864
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюВы хотите сказать, что в скрипте:
Строка = ""
If Len(Строка) <> 0 And MsgBox("тра-ля-ля") Then MsgBox ("трали-вали")
Трали-вали выводится??????
Вы говорите: при "ИЛИ" это понятно, а зачем по "И"
Так ведь это же первая часть условия, выполнится всегда, а вторая в зависимости от обстоятельств
Не забывайте про существование Or, Xor, And, Eqv, Imp
Нет, он хочет сказать, что траляля выводится. В ряде языков при включенной оптимизации компилятор, увидев что Len(Строка) <> 0 не выполнилось, вторую часть после AND выполнять не будет, т.к. и так ясно, что условие не выполнится. А в общем случае следует писать так

If Len(Строка) <> 0 Then If MsgBox("тра-ля-ля") Then MsgBox ("трали-вали")
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840882
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon, совершенно с Вами согласен, и правильно Вы мои мысли высказали
Такую запись
If Len(Строка) <> 0 Then If MsgBox("тра-ля-ля") Then MsgBox ("трали-вали")
впервые вижу, проверил, работает как надо
Век живи век учись
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840969
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю
Такую запись
If Len(Строка) <> 0 Then If MsgBox("тра-ля-ля") Then MsgBox ("трали-вали")
впервые вижу, проверил, работает как надо
Век живи век учись
)))

Ну так это не одна конструкция, а две - один if, вложенный в другой if.

If () Then
If () Then
EndIf
EndIf

В точности как в голове мысль развивается, так и записали - "если строка не пустая, то тогда если пользователь в диалоге нажал да, то тогда делаем ченить".
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36840986
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon,
всё понятно но тяжеловата для восприятия в этой части:
If MsgBox("тра-ля-ля") , далее нет = ... или <> ...
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841031
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюEdd.Dragon,
всё понятно но тяжеловата для восприятия в этой части:
If MsgBox("тра-ля-ля") , далее нет = ... или <> ...
А, ну тут я не в курсе, что возвращает в VB функция MsgBox, потому написал как было выше.

Если она возвращает значения, трактуемые как True/False, то незачем их дополнительно сравнивать с True/False, получая в ответ снова True/False.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841093
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon,

не, автор привел умозрительный пример, трактовать возвращаемое этой функцией значение как булевое нельзя в любом случае (она никогда не возвращает ноль), но автор ведь не об этом спрашивал. А ЦЭ объяснять типы данных все равно бесполезно, он за несколько месяцев не выучил, что такое "логическое выражение"
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841098
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, мой ответ от сегодня, 16:27 не верный почему???
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841106
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюShocker.Pro, мой ответ от сегодня, 16:27 не верный почему???

Сколько раз нужно тебе ответить на один и тот же вопрос?
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841127
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вот ситуация мне оправдываться приходится, что я не знаю, что знаю
Типы данных:
B o o l e a n
B y t e
I n t e g e r
Long
S i n g l e
D o u b l e
C u r r e n c y
D e c i m a l
Date
Obj ect
S t r i n g
V a r i a n t

Логические операторы

Логические операторы в языке VBA используются для манипулирования логическими значениями — True (в числовом представлении это 1) и False (в числовом представлении это 0). При выполнении этих операторов логическим переменным присваивается результат вычисления логических выражений, указанных в правой части операторов.

Обычно результатом логических операций является значение типа Boolean. В табл. 5.2 кратко описаны логические операторы, поддерживаемые в языке VBA.

В табл. 5.2 логический оператор And обозначает операцию конъюнкции, результатом выполнения которой будет значение True тогда и только тогда, когда оба операнда имеют значение True. В остальных случаях результатом выполнения этой операции будет значение False.
(3 > 2) And (4 > 3) (3 > 6) And (4 > 3)
Результатом вычисления первого выражения будет значение True, так как оба операнда имеют значение True. Результатом вычисления второго выражения будет значение False, поскольку первый операнд имеет значение False.

Логический оператор Or обозначает операцию дизъюнкции, результатом выполнения которой будет значение True, если хотя бы один из операндов имеет значение True. Результат будет иметь значение False тогда и только тогда, когда оба операнда имеют значение False.
(3 > 5) Or (4 > 2) (2 > 3) Or (2 > 4)
Результатом вычисления первого выражения будет значение True, так как один из операндов (второй) имеет значение True. Результат вычисления второго выражения будет иметь значение False, так как оба операнда имеют значение False.

Логический оператор Not обозначает операцию логического отрицания и имеет только один операнд. Результатом выполнения этой операции будет значение True, если исходно операнд имеет значение False, и наоборот, результатом будет значение False, если операнд имеет значение True.
D1 = ((2 > 5) Or (7 > 3)) And Not ((3 > 1) Or (8 < 10))
После вычисления приведенного выше выражения переменной D1 будет присвоено значение False, поскольку, хотя оба помещенные в скобки логические выражения Or имеют значения True, оператор Not превращает второе значение True в False, а значит и результатом всего оператора And будет значение False.

Логический оператор Xor обозначает логическую операцию «исключающее ИЛИ», результатом выполнения которой будет значение True, если операнды имеют различные значения, и значение False, если оба операнда имеют одинаковые значения (оба — True или оба — False).
D2 = ((2 > 5) Xor (7 > 3)) And ((3 > 1) Xor (8 < 10))
В приведенном выше примере переменной D2 будет присвоено значение False, поскольку, хотя первый помещенный в скобки оператор Xor дает значение True, второй оператор Xor дает значение False, а значит результатом всего оператора And будет значение False.

Логический оператор Eqv обозначает логическую операцию эквивалентности двух выражений, результатом выполнения которой будет значение True, если оба операнда имеют одинаковые значения (оба — True или оба — False), и значение False, если только один из операндов имеет значение False.

Логический оператор Imp обозначает логическую операцию импликации (следования) двух выражений, результатом выполнения которой будет значение False, если первый операнд имеет значение True, а второй операнд имеет значение False, и значение True во всех остальных случаях.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841150
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа сам написал
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841158
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, копи паст
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841168
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что это доказывает? Что ты что-то знаешь?

Ципихович ЭндрюTrue (в числовом представлении это 1)
все читать не стал, но вот эта ошибка сразу бросилась в глаза, что навевает нехорошие мысли об источнике
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841186
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
к чёрту все эти первоисточники, как Вам что покажешь всё обхаете, ну Вы то мне верите что это я откуда то копирнул, а не сам придумал???
Ну откуда уже не вспомнить!!!
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841189
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Какая разница, верю - не верю? Просто непонятно, зачем ты сюда притащил эту простыню, что ты хотел этим сказать...

ЗЫ: Вдали послышались тяжелые шаги модератора....
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36841203
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
что я хотел этим сказать, мне бы узнать первоисточник и его с Вами свести, Вы бы между собой поговорили а я послушал бы стоя рядом, может бы Вы подрались, но знаю, что это не реально
догадываюсь, что Ваш ответ будет такой: а кто тебе сказал, что я буду с ним спорить
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / маненькый вопросик про вычисления логических выражений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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