Головна > Розгалуження: оператори умовного та безумовного переходів, оператор вибору в Turbo Pascal

Створення розгалужень у програмі.

У мові Паскаль використовується два оператори для реалізації умовних переходів - IF і CASE, а також оператор безумовного переходу GOTO. Вони дозволяють обійти послідовний порядок виконання інструкцій програми.

Оператор умовного переходу

Оператор умовного переходу в Турбо Паскаль має вигляд:

if умова then оператор 1 else оператор 2;

умова - це логічний вираз, в залежності від якого обирається одна з двох альтернативних гілок алгоритму. Якщо значення умови істинно (TRUE), то буде виконуватися оператор 1, записаний після ключового слова then. В іншому випадку буде виконуватись оператор 2, що слідує після слова else, при цьому оператор 1 пропускається. Після виконання зазначених операторів програма переходить до виконанню команди, яка стоїть безпосередньо після оператора if.

Необхідно пам'ятати, що перед ключовим словом else крапка з комою ніколи не ставиться!

else - частина в операторі if може бути відсутня:

if умова then оператор 1;

Тоді, в разі невиконання логічної умови, керування відразу передається оператору, який стоїть у програмі після конструкції if.

Слід пам'ятати, що синтаксис мови допускає запис тільки одного оператора після ключових слів then і else, тому групу інструкцій обов'язково треба поєднувати в складений оператор (обмежовувати оператор дужками begin ... end). В іншому випадку виникає, найчастіше, логічна помилка програми, коли компілятор мови помилок не видає, але програма, проте, працює неправильно.

Приклади.

if x > 0 then modul := x else modul := -x;

if k > 0 then WriteLn('k - число додатнє');

if min > max then begin
     t := min;
     min := max;
     max := t;
  end;
				

Оператор вибору

Часто виникають ситуації, коли доводиться здійснювати вибір одного з декількох альтернативних шляхів виконання програми. Незважаючи на те, що такий вибір можна організувати за допомогою оператора if .. then, зручніше скористатися спеціальним оператором вибору. Його формат:

case вираз of
    варіант : оператор;
    ...
    варіант : оператор;
end;
				

або

case вираз of
    варіант : оператор;
    ...
    варіант : оператор;
    else оператор
end;
				

вираз, що записується після ключового слова case, називається селектором, він може бути будь-якого перелічуваного типу. Варіант складається з однієї або більшої кількості констант або діапазонів, розділених комами. Вони повинні належати до того ж типу, що і селектор, причому не допускається більше ніж одне вказування варіантів запису інструкції case. З перерахованої множини операторів буде обраний тільки той, перед яким зазначений варіант, що співпадає зі значенням селектора. Якщо такого варіанту немає, виконується оператор, наступний за словом else (якщо він є).

Приклад

case ch of
    'A'..'Z', 'a'..'z' : WriteLn('Літера');
    '0'..'9'           : WriteLn('Цифра');
    '+', '-', '*', '/' : WriteLn('Оператор');
    else WriteLn('Спеціальний символ')
end;
				

Оператор безумовного переходу

Крім операторів умовного переходу існує також оператор безумовного переходу goto. Формат:

goto мітка

Оператор goto переходить при виконанні програми до певного оператора програми, перед яким знаходиться мітка. Мітка повинна бути описана в розділі опису міток тієї програми (процедури або функції), в якій вона використовується. Не можна перейти з однієї процедури або функції в іншу.

Необхідно, щоб в програмі існував оператор, позначений даною міткою. Вона записується перед оператором і відокремлюється від нього двокрапкою.

Приклад

label 1;
begin
  ...
  goto 1;
  ...
  1: WriteLn('Перехід до мітки 1');
end.
				

Врахуйте! Саме поняття структурного програмування і загальноприйнятий стиль програмування на структурних мовах ЗАСТЕРІГАЄ від застосування міток і операторів переходу в програмах. Це ускладнює розуміння програми як автором, так і користувачами, крім того, застосування міток негативно позначається на ефективності генерованого коду.

У вас є питання? Щось не розумієте? Будемо раді вас бачити на українському форумі програмістів.