powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
17 сообщений из 17, страница 1 из 1
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912031
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! Как правильно записать следующее логическое условиe: если переменная "а" ни равна ни одному из перечисленных значений(например 1, 2, 3). Можно записать так:
Код: plaintext
if(( a <>  1  ) or ( a <> 2  ) or ( a <>  3  ) ) then ...
но думаю есть более эффективный вариант. Подскажите как быть то?
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912051
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

пока сделал так, но так ведь не очень как смотриться:
Код: plaintext
1.
2.
3.
4.
5.
  ' отсеиваем добавление ненужных параметров
                If (param.ParameterName <> "WS1_AVE" Or param.ParameterName <> "WS1_MAX" Or _
                    param.ParameterName <> "WS1_MIN" Or param.ParameterName <> "WD1_AVE" Or _
                    param.ParameterName <> "WD1_MAX" Or param.ParameterName <> "WD1_MIN") Then
                    sql_comm.Parameters.Add(param)
                End If
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912054
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
(a <  1 ) And (a >  3 )
&

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912073
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так

dim t as string
dim a as integer

t="1;2;3;4;"
a=5
if not instr(t, cstr(a & ";") then
.......
end if
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912075
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если отсекать по началу имени параметра, то
Код: plaintext
If a Not Like "W[SD]1_*" Then

можно также использовать регекспрешены



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912080
g_frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot
Код: plaintext
(a <  1 ) And (a >  3 )
&

I Have Nine Lives You Have One Only
THINK!

Согласен но с одним но!
стоит посмотреть на условие задачи, ваш вариант работает только для целых чисел, в случае если могут быть "правильные" числа с точка (1.1 или 2.12) то более корректный ответ действительно
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) )
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912099
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне с точки зрения читабельности и поддержки больше нравится так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub CheckA()
    Dim a As Long
    a= 2 
    Select Case a
        Case  1 ,  2 ,  3 
            Exit Sub
        Case Else
            ' do something
    End Select
End Sub

...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912122
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FasterHarder
Код: plaintext
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! Как правильно записать следующее логическое условиe: если переменная "а" ни равна ни одному из перечисленных значений(например 1, 2, 3). Можно записать так:
Код: plaintext
if(( a <>  1  ) or ( a <> 2  ) or ( a <>  3  ) ) then ...
но думаю есть более эффективный вариант. Подскажите как быть то?

Для данного конкретного случая
можно просто
Код: plaintext
Not "123" Like "*" & a & "*"
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912172
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для более сложных вычислений может подойти такой вариант
Код: plaintext
 If Evaluate("And({2.7,4.2,10.5}<>" & Str(a) & ")") Then
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912175
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadА для более сложных вычислений может подойти такой вариант
Код: plaintext
 If Evaluate("And({2.7,4.2,10.5}<>" & Str(a) & ")") Then


Упс недосмотрел, это я про Эксель
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912363
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FasterHarder
Код: plaintext
I started in 1983, in 2007 i still on a case!

пока сделал так, но так ведь не очень как смотриться:
Код: plaintext
1.
2.
3.
4.
5.
  ' отсеиваем добавление ненужных параметров
                If (param.ParameterName <> "WS1_AVE" Or param.ParameterName <> "WS1_MAX" Or _
                    param.ParameterName <> "WS1_MIN" Or param.ParameterName <> "WD1_AVE" Or _
                    param.ParameterName <> "WD1_MAX" Or param.ParameterName <> "WD1_MIN") Then
                    sql_comm.Parameters.Add(param)
                End If

У вас ошибка в логике.
Данный код пропустит абсолютно любую сточку внутрь Then
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912374
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Option Explicit
Dim a As Long
Private Sub Form_Load()
   a =  1 : Test
   a =  2 : Test
   a =  100 : Test
End Sub
Private Sub Test()
   If ((a <>  1 ) Or (a <>  2 ) Or (a <>  3 )) Then
      Debug.Print "OK!"
   Else
      Debug.Print "No!"
   End If
End Sub
РезультатOK!
OK!
OK!
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34912384
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
select case param.ParameterName 
case "WS1_AVE", "WS1_MAX", "WS1_MIN", "WD1_AVE", "WD1_MAX", "WD1_MIN"   
   'do nothing
case else
   sql_comm.Parameters.Add(param)
End select
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34913453
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FasterHarder
Код: plaintext
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! Как правильно записать следующее логическое условиe: если переменная "а" ни равна ни одному из перечисленных значений(например 1, 2, 3). Можно записать так:
Код: plaintext
if(( a <>  1  ) or ( a <> 2  ) or ( a <>  3  ) ) then ...
но думаю есть более эффективный вариант. Подскажите как быть то?

Ну, для начала научиться различать "ни" от "не". Это критично в матлогике. Потом, прежде чем думать об оптимизации, научиться различать Or от And. У вас вместо Or нужно And. Если через Ifы. Но лучше через Select Case, как было показано.

Успехов
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34915185
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot
Код: plaintext
(a <  1 ) And (a >  3 )
&

I Have Nine Lives You Have One Only
THINK!
о-о-ох ты блин посоветовал
HandKot, Я б тебе посоветовал прислушаться к твоей же фразе, сказанной после кода

FasterHarder
Короче, варианты:
big-duke
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub CheckA()
    Dim a As Long
    a= 2 
    Select Case a
        Case  1 ,  2 ,  3 
            Exit Sub
        Case Else
            ' do something
    End Select
End Sub

Код: plaintext
if(( a <>  1  ) and ( a <> 2  ) and ( a <>  3  ) ) then ...
Код: plaintext
if(( a <  1  ) or ( a >  3  ) ) then ...

P.S.

g_frost....... в случае если могут быть "правильные" числа с точка (1.1 или 2.12) то более корректный ответ действительно
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) )
Поржал.
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34915827
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ладно - смеяться. Что бы так легко вертеть логическими выражениями, надо было в ВУЗе не прогуливать скучные занятия по алгебре логики. Русская речь алогична по природе, так что и предмет - скучный. Я уже молчу о логие во временной области.
...
Рейтинг: 0 / 0
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
    #34915902
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffДа ладно - смеяться. Что бы так легко вертеть логическими выражениями, надо было в ВУЗе не прогуливать скучные занятия по алгебре логики. Русская речь алогична по природе, так что и предмет - скучный. Я уже молчу о логие во временной области.
Ладно, согласен, не буду смеяться))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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