Мітки. Оператор GOTO. Процедура Halt b>
p>
С.А. Григор'єв p>
Оператори в Паскалі можуть бути помічені. Теги - це
ідентифікатори, або цілі числа від 0 до 9999, вони можуть записуватися перед
будь-яким виконуються оператором і відділяються від нього двокрапкою. Оператор може
мати будь-яку кількість позначок. Усі мітки, використані в програмі, повинні
бути описані в розділі описів з ключовим словом LABEL. В одному операторі
LABEL можна описати кілька міток, тоді вони розділяються комами. Оператор
безумовного переходу p>
GOTO мітка; p>
передає управління оператору з відповідною
міткою, при цьому всі оператори, розташовані між оператором GOTO і
оператором, якому передається управління, не виконуються. За допомогою оператора
GOTO не можна передати управління: всередину циклу, всередину умовного оператора і
всередину оператора вибору. p>
Загальновизнано, що оператор GOTO є шкідливим
оператором, він ускладнює алгоритми, ускладнює читання програми і є
джерелом помилок. Постарайтеся не застосовувати цей оператор у своїх програмах. P>
Одним з випадків, коли програмісту може здатися
корисним оператор GOTO, є необхідність припинити виконання програми
при виникненні тієї чи іншої помилки. Нехай, наприклад, програма обчислює
деяку функцію від квадратного кореня з заданого числа: p>
VAR x: Real; p>
BEGIN WRITE ( 'Введіть число'); READ (x); p>
x: = SQRT (x); p>
(обчислення
функції від x) p>
END. p>
Якщо введено негативне число, то в третьому
операторі програми відбудеться аварійне переривання. Прагнучи уникнути цього,
ми могли б записати програму у вигляді: p>
VAR x: Real; p>
LABEL Finish; p>
BEGIN WRITE ( 'Введіть число'); READ (x); p>
IF x <0 THEN GOTO Finish; p>
x: = SQRT (x); p>
(обчислення
функції від x) p>
Finish: END. p>
Однак можна не використовувати GOTO: p>
VAR x: Real; p>
BEGIN WRITE ( 'Введіть число'); READ (x); p>
IF x <0 THEN WRITELN ( 'помилка !') p>
ELSE BEGIN p>
x: = SQRT (x); p>
(обчислення функції від x) p>
END; p>
END. p>
Як бачите, програма навіть стало краще, тому що тепер
вона повідомляє про неправильному введенні. Але вона все-таки має один недолік --
умовний оператор ускладнив структуру програми. У цьому і в інших подібних
випадках дуже зручно користуватися стандартною процедурою Паскаля HALT, яка
зупиняє виконання програми, будучи викликана в будь-якому її місці: p>
VAR x: Real; p>
BEGIN WRITE ( 'Введіть число'); READ (x); p>
IF x <0 THEN BEGIN WRITELN ( 'помилка!); HALT; END; p>
x: = SQRT (x); p>
(обчислення функції від x) p>
END. p>
Наша програма стала майже ідеальною. Доведемо її до
досконалості: p>
VAR x: Real; p>
BEGIN REPEAT p>
WRITE ( 'Введіть невід'ємне
число'); p>
READ (x); p>
WRITELN; p>
UNTIL x> = 0; p>
x: = SQRT (x); p>
(обчислення функції від x) p>
END. p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://elib.albertina.ru/
p>