Оператор безусловного перехода GoTo

Оператор безусловного перехода GoTo означает «перейти к» и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой оператор.

Формат:

GoTo <метка>;

Метка в Pascal – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В качестве метки можно использовать целое число без знака (исключение в правилах написания идентификаторов). Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Оператор можно помечать несколькими метками, которые в этом случае отделяются друг от друга двоеточием. Перед тем как появится в программе, метка должна быть описана (в разделе описания меток). За словом Label (метка) следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой. Максимальная длина метки ограничена 127 символами.

Формат: Label <имя1, имя2,... >;

Label lb1, lb2;

Begin

<операторы>

GoTo lb1;

lb2:<операторы>;

lb1: <операторы>;

<операторы>;

GoTo lb2;

<операторы>

End.

Действие оператора GoTo состоит в передаче управления соответствующему меченному оператору.

При использовании меток необходимо руководствоваться следующими правилами:

ü метка, на которую ссылается оператор GoTo, должна быть описана в разделе описаний и она обязательно должна встретиться где-нибудь в теле программы;

ü метки, описанные в процедуре (функции), локализуются в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.

Например, в результате выполнения программы:

label 1,2; //метки

var i:integer;

begin

i:=6;

2: if i<0 then goto 1; //условие перехода к метке 1

write(i); //выводим значение i

Dec(i); //увеличиваем i на 1

goto 2; //переходим к метке 2

1: //метка 1

end.

будет выведено 6543210.

ТЕМА 7. Оператор выбора Case

Цель лабораторной работы: изучить оператор выбора, применять его в программировании для организации алгоритмов с ветвлениями наряду с условным оператором.

Оператор выбора Case часто используют для замены конструкций из вложенных условных операторов. Управляющая конструкция «выбор» является идеальным средством для обработки ситуаций со многими (более чем двумя) исходами, т.е. в случае, когда условие может принимать более двух значений. Оператор «выбор» имеет следующую структуру:

Case <параметр: порядковая переменная> OF

<значение 1>: <оператор 1>;

<значение 2>: <оператор 2>;

<значение N>: <оператор N>;

[ELSE <оператор N+1>];

END; {для Case}

В этой структуре: < параметр: порядковая переменная> – порядковая переменная, значение которой проверяется; <значение *> – константы, с которыми сравнивается значение порядковой переменной; <оператор *> – операторы, из которых выполняется тот, с константой которого совпадает значение порядковой переменной.

Ветвь оператора else является необязательной. Если она отсутствует и значение порядковой переменной не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора If перед словом else точку с запятой можно ставить.

Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую, сопроводив их одним оператором. Существует возможность указать диапазон возможных значений. Например, диапазон от 1 до 100 включительно указывается так:
1 .. 100.

Пример

CASE i of

0, 2, 4, 6, 8: Writeln('Чётная цифра');

1, 3, 5, 7, 9: Writeln('Нечётная цифра');

10 .. 100: Writeln('Число от 10 до 100');

ELSE

Writeln('Отрицательное число или больше 100');

END;

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

CASE <порядковая переменная> OF

<значение 1>:

begin

<оператор 1_1>;

<оператор 1_n>

end;

<значение 2>:

begin

<оператор 2 _1>;

<оператор 2_n>

end;

<значение N>:

begin

<оператор N­­_1>;

<оператор N_n>

end;

ELSE

begin

<оператор Е_1>;

<оператор Е_n>

end;

END;

Необходимо заметить, что из всех возможных ветвей операторов управляющей конструкции выбор, выполняется только одна ветвь, даже если значение порядковой переменной совпадает с несколькими возможными значениями, отвечающими за разные ветви операторов. Выполняется та ветвь, которая расположена раньше. Значение порядковой переменной сравнивается последовательно со всеми возможными значениями, и как только найдётся значение, которому равна порядковая переменная, выполняется ветвь операторов, сравнения прекращаются и управляющая конструкция прекращает свою работу. Поэтому при составлении программ с использованием управляющей конструкции выбор, раньше необходимо располагать более «строгие» последовательности операторов.

ТЕМА 8. Циклические программы

Цель лабораторной работы: закрепить практические навыки работы с системой PascaABC, научиться правильно использовать различные операторы циклов; научиться составлять программы решения задач с использование циклических структур.

Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же операторов. Число повторений этих операторов может быть задано в явной (цикл с известным числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.

В практике программирования часто встречаются циклические программы. В циклических программах какой-либо алгоритм повторяется многократно, при этом один или несколько параметров изменяются. Операторов цикла (повтора) в Паскале три: for, repeat, while.

Оператор For

Этот оператор применяется, если требуется выполнить тело цикла заранее заданное количество раз. Параметр порядкового типа на каждом проходе цикла автоматически либо увеличивается, либо уменьшается на единицу.

Оператор For состоит из заголовка, в котором определяется порядок изменения переменной параметра цикла и тела цикла, являющегося многократно повторяющимся алгоритмом.

Общий вид оператора:

· For – <параметр цикла>: = <начальное значение> to <конечное значение> do оператор; {тело цикла}.

Этот оператор применяется, если начальное значение < конечного значения;

· For – параметр цикла:= <начальное значение> downto <конечное значение> do оператор;

применяется, если начальное значение > конечного значения.

Пример: найти сумму квадратов целых чисел от 8 до 12.

i sqr(i) s:=s+sqr(i); s
     
0+64=64
64+81=145
145+100=245
245+121=366
366+144=510

Program Prim7_1;

Var i,s: integer;

BEGIN s:=0;

for i:= 8 to 12 do

s:=s+sqr(i); // тело цикла

writeln('Сумма s= ',s);

END.

Работа программы. В разделе Var выделяется ячейка памяти с именем i и s для хранения величин. Поскольку в S мы должны накапливать сумму, то вначале занесем в S ноль. Затем присваивается i=8. Далее выполняется тело цикла: извлекается содержимое ячейки S (а там у нас 0) и к этому содержимому прибавляется sgr(i), т.е. i2=64. Результат присваивается ячейке S, т.е. в S теперь 64.

Проверяется, не стал ли параметр цикла больше конечного значения параметра 12. Это не произошло, поэтому переменной i присваивается следующее значение, равное 9, и вновь выполняется тело цикла, т.е. S:=64+81. Можно сказать так: S присвоить тому S, которое было раньше, + следующее i2. Так как цикл еще не закончился, то i станет равным 10, а S присвоится тому S, которое было раньше, т.е. 145, и к нему прибавится еще текущее i2, т.е. 100. Этот процесс повторяется до тех пор, пока параметр цикла не станет равным 12. Тогда в последний раз 122 прибавляется к накапливаемой сумме.

При i=13 происходит выход из цикла и переход к оператору writeln (' Сумма S=' ,S);

Наши рекомендации