Pascal. Оператор перехода Goto, метки.

В предыдущей статье упоминалось о операторе Goto, теперь пришло время разобраться и с ним, хотя он и используется довольно редко. Итак, Goto в переводе с английского означает «иди к …»

В Паскале он используется, когда присутствуют метки, о которых было рассказано в статье «Структура программы, первая программа». Вот синтаксис этого оператора. Сначала в разделе Label объявляется метка.

В основной части программы описывается сама метка (действия, которые нужно повторить). Это делается так

<Имя метки>:<Повторяющиеся действия>; если действий нужно повторять несколько, то пишем Begin…End; И в любом месте программы мы можем написать строку «goto <имя нашей метки>;» Вот простейший пример программы.

Program FirstLabel;
Label m1; 
Begin 
m1: Write ('Привет  ');
goto m1;
End.

Итак, в разделе Label мы объявили метку m1, описали ее, это строка «m1: Write (‘Привет ‘);» Написав далее «goto m1;» мы заставляем компилятор зацикливаться и бесконечно писать «Привет «. Вот именно из-за подобных зацикливаний и вообще принципа работы этого оператора программисты практически не используют «goto». Ну раз это оператор цикла, давайте напишем программу, выводящую числа от 1 до 10.

Program SecondLabel;
label metka; 
var i: integer; 
begin 
i := 1;
writeln('Начнем счет! ');
metka: 
begin 
  writeln(i, ' '); 
  inc(i);
end;
if i <= 10 then  goto metka
else write('Это конец счета!'); 
End.

Теперь напишем небольшой диалог с пользователем. Попросим его ввести свое имя, проверим, верно ли оно написано, спросим, сколько ему лет, также проверим, что он ввел и выведем последнюю реплику. Причем, если данные пользователь вводит неверно, с помощью меток мы будем заставлять его вводить заново. Вот код такой программы.

Program ThirdLabel; 
label m1, m2;
var st:string; i, age:integer;
Begin
m1: writeln('Ведите Ваше имя по-русски и без цифр'); 
readln(st); 
for i:=1 to length(st) do 
if not(st[i] in ['А'..'Я', 'а'..'я']) then goto m1;
writeln('Привет, ',  st);
m2: writeln('Сколько Вам лет?');
readln(age);
if (age<0) then goto m2;
writeln('Спасибо за ответы! Всего Вам доброго!'); 
End.

Здесь мы считали строку (имя пользователя) и в цикле проверяем каждые ее символ, является ли он буквой русского алфавита. В данном случае использован такой тип данных, как множество, о которых мы поведем речь несколько позже. Не будем проверять, является ли возраст числом, потому что программа сама выведет ошибку несоответствия типов и закончит свою работу.

Итак, надеюсь, что Вам стало ясно, что такое оператор перехода goto и метки. Еще раз замечу, что не следует использовать этот оператор в больших программах, как видите, в примерах из этой статьи все предельно ясно, но в больших программах Вы только запутаетесь и вообще поведете себя так, что любой программист скажет Вам, что Вы совершаете глупость.

Рейтинг
( Пока оценок нет )
Загрузка ...