if. У такому випадку говорять про вкладеності операторів. При вкладеності операторів кожне else відповідає тому then, яке безпосередньо йому передує. Наприклад:
Console;
{$ APPTYPE CONSOLE} ;: Integer; (A); A gt;=0 thenA lt;=100 then ( A потрапляє в діапазон 0 - 100. ) ( A більше 100. ) ( A менше 0. ); ( Press Enter to exit ... ) ;;
end.
Оператор розгалуження case:
Оператор розгалуження case є зручною альтернативою оператору if, якщо необхідно зробити вибір з кінцевого числа наявних варіантів. Він складається з виразу, званого перемикачем, і альтернативних операторів, кожному з яких передує свій список допустимих значень перемикача:
lt; перемикач gt; of
lt; список? 1 значень перемикача gt ;: lt; оператор 1 gt ;;
lt; список? 2 значень перемикача gt ;: lt; оператор 2 gt ;;
lt; список? N значень перемикача gt ;: lt; оператор N gt ;; lt; оператор N + 1 gt ;;
Оператор case обчислює значення перемикача (який може бути заданий виразом), потім послідовно переглядає списки його допустимих значень у пошуках обчисленого значення і, якщо це значення знайдено, виконує відповідний йому оператор. Якщо перемикач не потрапляє в один із списків, виконується оператор, що стоїть за словом else. Якщо частина else відсутня, управління передається наступному за словом end оператору.
Перемикач повинен належати порядковому типу даних. Використовувати речові і рядкові типи в якості перемикача не допускається.
Список значень перемикача може складатися з довільної кількості констант і діапазонів, відокремлених один від одного комами. Межі діапазонів записуються двома константами через розмежувач у вигляді двох крапок (..). Всі значення перемикача повинні бути унікальними, а діапазони не повинні перетинатися, інакше компілятор повідомить про помилку. Тип значень повинен бути сумісний з типом перемикача. Наприклад:
Console;
{$ APPTYPE CONSOLE} ;: 1..31; (Day); Day of
20..31: Writeln ( День потрапляє в діапазон 20 - 31. );
, 5..10: Writeln ( День потрапляє в діапазон 1, 5 - 10. );
else Writeln ( День не потрапляє в задані діапазони. );
end; ( Press Enter to exit ... ) ;;
end.
Якщо значення перемикача записані в зростаючому порядку, то пошук необхідного оператора виконується значно швидше, так як в цьому випадку компілятор будує оптимізований код. Враховуючи сказане, перепишемо попередній приклад:
Console;
{$ APPTYPE CONSOLE};
Var: 1..31; (Day); Day of
, 5..10: Writeln ( День потрапляє в діапазон 1, 5 - 10. );
.. 31: Writeln ( День потрапляє в діапазон 20 - 31. ); Writeln ( День не потрапляє в задані діапазони. Raquo;);
end; ( Press Enter to exit ... ) ;;
end.
1.2.4 Оператори організації циклу
Умовні оператори (оператори вибору) і оператор безумовного переходу GOTO дозволяють в залежності від необхідності виконувати один блок операторів, обходячи при цьому інший. Однак часто при написанні програм потрібно вирішити задачу іншого плану - багаторазово виконувати один і той же блок операторів. Програмна конструкція, що дозволяє організувати багаторазове виконання блоку операторів, називається циклом.
Цикл можна організувати за допомогою умовного оператора і оператора GOTO. Для цього, наприклад, у процедурі можна оголосити целочисленную змінну, яка буде служити лічильником. Перед входом в групу операторів, що підлягають багаторазовому виконанню (така група операторів називається тілом циклу), лічильнику присвоюється значення 0. Потім слідують оператори тіла циклу, серед яких необхідно обов'язково розмістити оператор, що збільшує значення лічильника на 1. Завершує всю конструкцію умовний оператор, в якому перевіряється значення лічильника. Якщо воно ще не перевищує заздалегідь заданого граничного значення, то за допомогою оператора GOTO здійснюється перехід до першого оператору тіла циклу. Оператори тіла циклу виконаються ще раз, і так буде тривати до тих пір, поки значення лічильника не перевищить задану межу.
Однак, як вже говорилося вище, оператор безумовного переходу GOTO є свого роду операторних ізгоєм і застосовувати його благопристойним програмістам не рекомендується. Крім того, Visual Basic містить чотири зручних у використанні оператора циклу: FOR ... NEXT, FOR EACH ... NEXT...