Оператор розгалужень в мові Паскаль
У мові Паскаль умову можна відтворити бульовим виразом, як правило, із
змінними. Його значеннями можуть бути true або false – це залежить від
значень змінних. Звичайно, умови можуть бути тотожно істинними або
тотожно хибними – вони відтворюються виразами, швидше за все, без
змінних. Втім, вирази z or not z і z and not z мають значення відповідно
true і false незалежно від значення z.
Перевірка умови при виконанні програми – це обчислення відповідного
бульового виразу.
Перевірка умов і виконання залежно від цього різних дій задається в мові
Паскаль операторами розгалуження. Вони мають дві форми – повну та
скорочену. Оператор розгалуження в повній формі має вигляд:
if умова then оператор else оператор
Ключові слова if, then, else – це англійські "якщо", "то", "інакше". Для
полегшення читаності програми оператор розгалуження часто записують
"східцями":
if умова
then
оператор
else
оператор
або
if умова then
оператор
else оператор
Виконання його полягає в тім, що спочатку обчислюється значення умови,
записаної після слова if. Далі, якщо цим значенням є true, виконується
оператор, записаний після слова then, і на цьому виконання закінчується.
Але якщо це значення хибне, те виконується не перший, а другий оператор,
записаний після else. Наприклад, при виконанні послідовності операторів
readln(x);
if x>=0 then z := 1 else z := -1
змінна z одержить значення 1, якщо прочитано невід'ємне значення x. Якщо ж прочитано значення від'ємне, то z одержить значення –1.
Оператор розгалуження в скороченій формі має вигляд:
if умова then оператор
Він відрізняється лише тим, що якщо обчислення умови дає значення false,
то на цьому його виконання закінчується.
Як бачимо, оператори розгалуження містять умови, з обчислення яких і
починається їх виконання. Тому ці оператори ще називаються умовними.
Застосуємо оператори розгалуження для перекладу алгоритму обчислення
коренів на мову Паскаль. Пункт (3) можна, здавалося б, перекласти так:
if d>0 then x1:=(-b- sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a)
else
if d=0 then x1:=-b/(2*a);
{інакше нічого не робити}
Але це неправильно! Оператор розгалуження закінчується оператором
присвоювання змінній x1. Оператор x2 := (-b+sqrt(d))/(2*a) записано уже
за роздільником ";", тобто після оператора розгалуження. Те, що написано
далі, взагалі не є оператором.
Як же записати послідовність із двох або більше операторів там, де має
бути один? Напрошується відповідь, що їх треба взяти в дужки. І такі
дужки, що перетворюють послідовність операторів у один оператор, у мові
Паскаль є. Це так звані відкриваюча та закриваюча операторні дужки:
ключові слова begin і end (початок і кінець).
Відображення документу є орієнтовним і призначене для ознайомлення із змістом, та може відрізнятися від вигляду завантаженого документу