Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно / 17 сообщений из 17, страница 1 из 1
02.11.2007, 09:45
    #34912031
FasterHarder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Код: 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
02.11.2007, 09:55
    #34912051
FasterHarder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Код: 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
02.11.2007, 09:57
    #34912054
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Код: plaintext
(a <  1 ) And (a >  3 )
&

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

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
02.11.2007, 10:04
    #34912075
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
если отсекать по началу имени параметра, то
Код: plaintext
If a Not Like "W[SD]1_*" Then

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



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
02.11.2007, 10:05
    #34912080
g_frost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
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
02.11.2007, 10:08
    #34912099
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Мне с точки зрения читабельности и поддержки больше нравится так
Код: 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
02.11.2007, 10:12
    #34912122
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
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
02.11.2007, 10:26
    #34912172
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
А для более сложных вычислений может подойти такой вариант
Код: plaintext
 If Evaluate("And({2.7,4.2,10.5}<>" & Str(a) & ")") Then
...
Рейтинг: 0 / 0
02.11.2007, 10:28
    #34912175
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
DeggasadА для более сложных вычислений может подойти такой вариант
Код: plaintext
 If Evaluate("And({2.7,4.2,10.5}<>" & Str(a) & ")") Then


Упс недосмотрел, это я про Эксель
...
Рейтинг: 0 / 0
02.11.2007, 11:09
    #34912363
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
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
02.11.2007, 11:10
    #34912374
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Смотрите:
Код: 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
02.11.2007, 11:12
    #34912384
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Код: 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
02.11.2007, 15:13
    #34913453
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
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
03.11.2007, 16:48
    #34915185
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
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
04.11.2007, 15:09
    #34915827
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
Да ладно - смеяться. Что бы так легко вертеть логическими выражениями, надо было в ВУЗе не прогуливать скучные занятия по алгебре логики. Русская речь алогична по природе, так что и предмет - скучный. Я уже молчу о логие во временной области.
...
Рейтинг: 0 / 0
04.11.2007, 16:27
    #34915902
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно
WorobjoffДа ладно - смеяться. Что бы так легко вертеть логическими выражениями, надо было в ВУЗе не прогуливать скучные занятия по алгебре логики. Русская речь алогична по природе, так что и предмет - скучный. Я уже молчу о логие во временной области.
Ладно, согласен, не буду смеяться))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / if(( a <> 1 ) or ( a <>2 ) or ( a <> 3 ) ) как записать более правильно / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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