А куда без логики ? часть 2

Во второй части статьи "A куда без логики?" , мы познакомимся с логическим блоком Select Case-End Select. В принципе можно обойтись без этого блока, ведь блок IF-ENDIF универсален, но есть некоторые вещи, которые в блоке Select Case - End Select делаются намного удобнее. Начнем с простейшей блок схемы:

SELECT CASE  проверяемая переменная

CASE значение(я), сравниваемое со значением в переменной

        команды если значение(я) совпало и выход из блока

CASE  следующее значение(я) сравниваемое со значением в переменной

        команды если значение(я) совпало и выход из блока

CASE ELSE

       команды по умолчанию, выполнятся только, если ни одно из значений выше не совпало

END SELECT

Блок объявляется с команды из двух слов SELECT CASE , после идет имя переменной или вычисления,  заканчивается тоже командой из двух слов END SELECT. Внутри блока идут сравнивающие команды CASE и одна необязательная CASE ELSE  (означающая по умолчанию). Действует это так, как и в случаях с IF - ENDIF, сравнение идет сверху вниз. Сначала первая команда CASE сравнивает свое значение (записанное после него) со значением проверяемой переменной, записанной после SELECT CASE .

Если результат истинный:

то выполняются команды, идущие на следующей строчке до следующей команды CASE или CASE ELSE или CASE IS или END SELECT и происходит выход из блока. То есть остальные нижние CASE не сравниваются.

Если же команда CASE после сравнения возвращает ложный результат:

то сравнение переходит к следующей существующей команде CASE или CASE IS или CASE ELSE.

Замечу, что сравнивающих команд CASE или  CASE IS , может быть столько, сколько вам требуется, но команда CASE ELSE всегда одна. После нее в строке, не надо задавать каких либо значений.

Кроме того, в блок схеме я написал не зря таким форматом: значение(я), поскольку сравнивать можно не только одно значение,  а несколько через запятую (1,2,3,4) или диапазон значений (1 TO 9). Вспомогательный оператор TO как раз для указания, что используется диапазон значений а не 2 числа:

CASE 1 TO 5 

CASE 1,2,3,4,5

Записи эквивалентны. 

 

С другой стороны через запятую можно записать не по порядку: CASE 1,6,19

Сравнение нескольких значений, записанных после команды CASE, происходит слева направо.  Как только результат окажется истинным, остальные значения не сравниваются. Выше я написал еще одну команду CASE IS. Эта команда позволяет сравнивать не только на равенство, но и на больше , меньше и т. п. А теперь несколько простых примеров.


ПРИМЕР_1:

Dim A As Ubyte =2 Select Case A Case 1 Print "A=1" Case 2 Print "A=2" Case Else Print "A=0" End Select Sleep


ПРИМЕР_2:

Select Case 55+122 Case 300 Print "Value=300" Case 200 Print "Value=200" Case 177 Print "Value=177" End Select Sleep


ПРИМЕР_3:

Select Case (12*3)+64 Case 15*2 Print "Value=30" Case 120-50 Print "Value=70" Case 2*50 Print "Value=100" End Select Sleep


ПРИМЕР_4:

Dim A As Ubyte =20 Select Case A Case 2,4,6,8,10 Print "Found to be one of 2,4,6,8,10" ' найдено среди чисел 2,4,6,8,10 Case 12,15,20 Print "Found to be one of 12,15,20" ' найдено среди чисел 12,15,20 Case Else Print "Not found" 'Не найдено End Select Sleep


ПРИМЕР_5:

Dim A As Ubyte =15 Select Case A Case 1 To 10 Print "Value is in the range of 1 to 10" ' значение в диапазоне от 1 до 10 Case 11 To 20 Print "Value is in the range of 11 to 20" ' значение в диапазоне от 11 до 20 Case Else Print "Not found" 'Не найдено End Select Sleep


ПРИМЕР_6:

Dim A As Ubyte =15 Select Case A Case Is <5 Print "A<5" Case Is >=15 Print "A>=15" Case Else Print "Not found" 'Не найдено End Select Sleep


Я думаю, что вы уже с достоинством сумели оценить блок SELECT CASE - END SELECT . А теперь общие объединяющиеся возможности для блоков IF - ENDIF  и  SELECT CASE - END SELECT . Вы можете вкладывать в любой из блоков множество других блоков сравнения в неограниченном кол-ве.


ПРИМЕР_1:

Dim As Ubyte A=15 , C=10 Select Case A Case 5 Print "A=5" Case 15 If C=10 Then Print "A=15 and C=10" End Select Sleep


ПРИМЕР_2:

Dim As Ubyte A=15 , C=10 If A=10 Then Print "A=10" Else Select Case C Case 10 Print "C=10" End Select Endif Sleep


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

содержание | назад | вперед