25 мин. | III. Актуализация знаний. Как правило, оператор goto состоит из двух частей: собственно оператора и метки, указывающей целевую точку перехода в программе: goto метка. Метка, в зависимости от правил языка, может быть либо числом (как, например, в классическом Бейсике), либо идентификатором используемого языка программирования. Для меток-идентификаторов метка, как правило, ставится перед оператором, на который должен осуществляться переход, и отделяется от него двоеточием (метка:). Действие оператора перехода состоит в том, что после его исполнения следующими будут исполняться операторы программы, идущие в тексте непосредственно после метки (до следующего оператора перехода, ветвления или цикла). Для машинных языков инструкция перехода копирует в регистр процессора, содержащий адрес следующей выполняемой команды, адрес команды, помеченной меткой. Необходимо знать, что всегда можно обойтись без оператора goto. Его использование затрудняет чтение и понимание программы. Оператор goto осуществляет переход к оператору, помеченному специальной меткой, которая отделяется от самого оператора двоеточием. В качестве метки может быть использовано любое целое число без знака, содержащее более четырех цифр, или любое имя. Чтобы можно было использовать метку, она должна быть в обязательном порядке объявлена в разделе меток в описательной части программы. Этот раздел начинается служебным словом label, после которого через запятую перечисляются метки. Чтобы перейти к помеченному оператору, используется оператор перехода, имеющий следующий вид: goto метка; label goback; var num: real; begin goback: write ('Введите число: '); readln (num); if num 0 then goto goback; num := sqrt (num); write ('Квадратный корень: ', num:5:2); readln end. goto метка; Метка представляет собою число без знака в диапазоне 1-9999 либо последовательность латинских букв и цифр. Перед использованием метка должна быть объявлена в разделе описания меток, который срузу следует за разделом описания используемых модулей: Uses Crt, Graph; Label Metka1, Metka2; Const P=3.14; Var x : integer; | После описания метки ее можно использовать в программе. Метка записывается перед помечаемым оператором и отделяется от него двоеточием. А оператор goto должен помещен в то место программы, откуда выполняется переход. Оператор goto передает управление на оператор с заданной меткой. Оператор goto можно вставлять в любое место программы, где могут располагаться операторы языка. Например, Begin . . . if Alpha = 360 then goto Metka1 else writeln (‘Эта фигура - не окружность‘); . . . Metka1 : Arc(X,Y,0,Alpha,R); . . . End. | Приведём пример уже знакомой Вам программы, применив в ней оператор безусловного перехода. Program Number2; Label Metka; Var a, b, c : integer; Begin Metka : writeln(‘Введите цифру ‘); readln(a); case a of 0 : writeln (‘ноль‘); 1 : writeln (‘один‘); 2 : writeln (‘два‘); 3 : writeln (‘три‘); 4 : writeln (‘четыре‘); 5 : writeln (‘пять‘); 6 : writeln (‘шесть‘); 7 : writeln (‘семь‘); 8 : writeln (‘восемь‘); 9 : writeln (‘девять‘) else begin writeln (‘Это число не является цифрой‘); goto Metka; end; end; readln; End. | Теперь в этой программе мы заставляем пользователя правильно ввести цифру. Сколько бы раз пользователь ни вводил числа не из промежутка 0..9, программа будет выдавать сообщение об ошибочном вводе и снова просить ввести цифру. |