Тема: Оператор If на два условия

Существуют два if
If  условие Then  утверждения  Else elseВыражения
и
If  условие  Then
     утверждения
условие-n
    elseifВыражения  . . .
Else
     elseВыражения
End If
можно ли сразу в операторе IF сделать чтобы проверялись сразу два условия
If  условие1 и условие2 Then  утверждения  Else elseВыражения

Re: Оператор If на два условия

Методом подбора у меня получилось что можно сделать так
If условие Then If условие Then утверждение Esle утверждение
Может еще как нибудь можно это сделать?

Re: Оператор If на два условия

Может быть несколько условий разделённых логическими операторами (and or not xor)
например >>>>>>>
If a > 0 and a < 4 Then

Re: Оператор If на два условия

Возникла проблема с оператором
Вот цикл
A="[Количествополюсов]"
B="[Ток_цепи]"
==If A="1" Then  If B>="0" Then If B<="10" Then RESULT="1/10" Else RESULT="" End if
If A="3" Then  If B>="0" Then If B<="10" Then RESULT="3/10" Else RESULT="" End if
==
If A="1" Then  If B>="10" Then If B<="15" Then RESULT="1/16" Else RESULT="" End if
If A="3" Then  If B>="10" Then If B<="15" Then RESULT="3/16" Else RESULT="" End if
.....
If A="1" Then  If B>="24.001" Then If B<="31" Then RESULT="1/32" Else RESULT="" End if
If A="3" Then  If B>="24.001" Then If B<="31" Then RESULT="3/32" Else RESULT="" End if
......
Где подчеркнуто возникает ошибка! Если А=1 В=9,12 то по сути он должен поставить 1/10 а на самом деле RESULT=""
Если ток А=3 В=3,31 то он ставит 3/32 хотя ток меньше 10 А и автомат стоять должен 3/10.
Если ток А=3 В=2,52 то он ставит 3/25 хотя ток меньше 10 А и автомат стоять должен 3/10.
С остальными условиями все проходит нормально если А=1 В=26.45 автомат 1/32
Вот почему то если ток меньше 10А возникает такая путаница! Перепробовал даже убирать и ставить нули в конце и начале не помогает!!!! Заметил еще одну путаницу.

Re: Оператор If на два условия

Антон,
Вы напишите, что хотите вычислить, а этот ... метод отбора не годится! ))

Re: Оператор If на два условия

Должен подобраться автомат по току и почему не годится? и какая существует альтернатива? на всех числах больше 10 все проходит нормально а меньше 10 возникает путаница!!!!

(изменено: Владимир, 12 ноября 2010г. 03:14:17)

Re: Оператор If на два условия

Антон коротко говоря вы не понимаете смысла использования ковычек в Vbscript. В указанном примере сравниваются не числа, а строки (побайтно). Перепишите свой пример в как указано ниже, при этом поле Количествополюсов долно быть либо действительное, либо целое, а поле Ток_цепи действительное.

A=[Количествополюсов]
B=[Ток_цепи]
If A=1 Then If B>=0 Then If B<=10 Then RESULT=1/10 Else RESULT="" End if
If A=3 Then If B>=0 Then If B<=10 Then RESULT=3/10 Else RESULT="" End if
If A=1 Then If B>=10 Then If B<=15 Then RESULT=1/16 Else RESULT="" End if
If A=3 Then If B>=10 Then If B<=15 Then RESULT=3/16 Else RESULT="" End if

Пример http://rapidshare.com/files/430284949/111.dwg

Re: Оператор If на два условия

Все бы хорошо, но эти две переменные не вручную забиваются а берутся из объекта, который привязан через epd файл а ток рассчитывается по формуле!!!

Re: Оператор If на два условия

Антон,

Все бы хорошо, но эти две переменные не вручную забиваются а берутся из объекта, который привязан через epd файл а ток рассчитывается по формуле!!!

и что? Из какого объекта? Из цепи наверно? Так есть поля в которых содержатся величина тока и количество полюсов!
А автоматы подбираются в менеджере цепей по цвету, если покраснел, значит перегрузка, меняем автомат...!

Re: Оператор If на два условия

<quote>
Все бы хорошо, но эти две переменные не вручную забиваются а берутся из объекта, который привязан через epd файл а ток рассчитывается по формуле!!!
</quote>
И что? Кто Вам мешает использовать встроенные поля? В примере я показал на ошибку использования ковычек в формуле. Использование встроенных полей результат не изменит.

Re: Оператор If на два условия

спасибо всем за помощь)

Re: Оператор If на два условия

При таком большом кол-ве условий "Если..." всегда есть шанс запутаться. Я бы применил такую конструкцию выбора:

Sub Main()
    Dim RESULT As Single
    Dim A As Single
    Dim B As Single
     
    A = 1
    B = 5
    RESULT = GetResult(A, B)
    
    MsgBox RESULT
End Sub

Function GetResult(A As Single, B As Single) As Single
    Dim RESULT As Single
    
    RESULT = 0
    
    Select Case A
        Case 1
            If (B >= 0) And (B <= 10) Then
                RESULT = 1 / 10
            ElseIf (B >= 10) And (B <= 15) Then
                RESULT = 1 / 16
            End If
        Case 3
            If (B >= 0) And (B <= 10) Then
                RESULT = 3 / 10
            ElseIf (B >= 10) And (B <= 15) Then
                RESULT = 3 / 16
            End If
    End Select
    
    GetResult = RESULT
End Function

Кроме того, в предыдущих обсуждениях осталась неясность с типом данных для переменной RESULT, то ли это число, то ли - строка?

(изменено: Vitaly, 13 ноября 2010г. 16:17:15)

Re: Оператор If на два условия

Я бы применил такую конструкцию выбора:

В AMEP она бы выглядела так >>>>>>>

      Select Case [A]
        Case 1 
            If ([b] >= 0) And ([b] <= 10) Then 
                RESULT = 1/10 
            ElseIf ([b] >= 10) And ([b] <= 15) Then 
                RESULT = 1/16 
            End If 
        Case 3 
            If ([b] >= 0) And ([b] <= 10) Then 
                RESULT = 3/10 
            ElseIf ([b] >= 10) And ([b] <= 15) Then 
                RESULT = 3/16 
            End If
    Case Else
        RESULT = "No circuit"
    End Select 

Но дело не в этом, предполагаю, что нашему молчаливому товарищу интересно получить
динамическую связь для отчётов.
Но автоматы лишь условно присутствуют в щитах, как атрибут. Щит следит за нагрузкой цепи
и сигнализирует цветом в случае перегрузки. Тогда варьируя значением тока (Circuit Rating) автомата добиваемся
баланса цепи. Есть некие поля, в к-рых автоматически вычисляется ток данной цепи, кол-во полюсов и др.
Они могут использоваться в таблицах и марках и будут отображать значение если мы промаркируем ими объекты подключенные к цепи.
Так что вопрос остаётся открытым! ))

(изменено: Антон, 15 ноября 2010г. 03:59:32)

Re: Оператор If на два условия

В принципе я решил свою проблемку вот так
If A=1 Then  If B<=10 Then RESULT="1/10" Else RESULT="1/10" End if
If A=3 Then  If B<=10 Then RESULT="3/10" Else RESULT="1/10" End if
If A=1 Then  If B>=10.001 Then If B<=15 Then RESULT="1/16" Else RESULT="1/10" End if
If A=3 Then  If B>=10.001 Then If B<=15 Then RESULT="3/16" Else RESULT="1/10" End if
If A=1 Then  If B>=15.001 Then If B<=19 Then RESULT="1/20" Else RESULT="1/10" End if
1/10 - это просто текст а не число!
Все рассчиталось оптимально
Это всю методику с if затеял чтобы проверять самого себя и не ошибиться при составление ГОСт таблицы
Стандартные расчеты в автокадовских таблицах завязаны на файле epd а у меня они связаны с набором характеристик на каждом приемнике.
Также я проверю ваши предложения про расчету и проверки моих условий!