Составной и пустой оператор в языке паскаль. Операторы языка Паскаль. Оператор безусловного перехода GOTO. Использование меток

Пустой оператор не содержит никаких символов и не выполняет никаких действий. Используется для организации перехода к концу блока в случаях, если необходимо пропустить несколько операторов, но не выходить из блока. Для этого перед зарезервированным словом end ставятся метка и двоеточие, например:

Глава 2. Операторы языка Паскаль Структурные операторы

Структурные операторы представляют собой конструкции, построенные из других операторов по строгим правилам. Их можно разделить на три группы: составные, условные и повтора. Применение структурных операторов в вашей программе очень часто просто незаменимо, потому что они позволяют программисту сделать его программу зависимой от каких-либо условий, например введенных пользователем. К тому же применяя операторы повтора вы получаете возможность обрабатывать большие объемы данных за сравнительно малый отрезок времени (это конечно же зависит и от процессора:)

Глава 2. Операторы языка Паскаль Составной оператор

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

Глава 2. Операторы языка Паскаль Условные операторы

Условные операторы предназначены для выбора к исполнению одного из возможных действий, в зависимости от некоторого условия (при этом одно из действий может отсутствовать). Для программирования ветвящихся алгоритмов в Турбо Паскале есть специальные операторы. Одним из них является условный оператор If. Это одно из самых популярных средств, изменяющих порядок выполнения операторов программы.

Он может принимать одну из форм:

If<условие>then<оператор1>

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

If<условие>then<оператор>;

Оператор выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисление получается значение логического (булевского) типа. Если это значение – «истина», то выполняется оператор1, указанный после слова then. Если же в результате имеем «ложь», то выполняется оператор2. В случае, если вместо оператора1 или оператора2 следует серия операторов, то эту серию операторов необходимо заключить в операторные скобкиbegin…end.

Обратить внимание, что перед словом elseточка с запятой не ставится.

Пример 1. Составить программу, которая запрашивает возраст ребенка и затем выдает решение о приеме ребенка в школу (возраст³7лет).

If v>=7 then writeln(‘Принимаем в школу’)

Задание. Модифицировать данную программу, чтобы ограничить верхнюю границу приема в школу 16 годами.

Write(‘Введите возраст ребенка’);

If (v>=7) and (v<=16) then writeln(‘Принимаем в школу’)

else writeln (‘Не принимаем в школу’);

Пример 2. Даны два числа. Меньшее из этих чисел заменить суммой данных чисел, большее - произведением.

Var x, y,s,p: integer;

Write(‘Введите 2 числа’);

then begin y:=s; x:=p; end

else begin x:=s; y:=p; end;

writeln(‘x=’, x);

writeln(‘y=’, y);

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

Общий вид: Case k of

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

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

: <операторN>

else<операторN+1>

Здесь k– выражение-селектор, которое может иметь только простой порядковый тип (целый, символьный, логический). , … - константы того же типа, что и селектор.

Оператор Caseработает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна значению селектора, то выполняется оператор, стоящий за словомelse. Если же это слово отсутствует, то активизируется оператор, находящийся за границейCase, т.е. после словаend.

При использовании оператора Caseдолжны выполняться следующие правила:

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

2. Все константы, которые предшествуют операторам альтернатив, должны иметь тот же тип, что и селектор.

3. Все константы в альтернативах должны быть уникальны в пределах оператора выбора.

Формы записи оператора:

Селектор интервального типа:

1..10: writeln(‘число в диапазоне 1-10’);

11.. 20: writeln(‘число в диапазоне 11-20’);

elsewriteln(‘число вне пределов нужных диапазонов’)

Селектор целого типа:

Пример 1. Составить программу, которая по введенному номеру дня недели выводит на экран его название.

Write(‘Введите номер дня недели’);

1: writeln(‘Понедельник’);

2: writeln(‘Вторник’);

3: writeln(‘Среда’);

4: writeln(‘Четверг’);

5: writeln(‘Пятница’);

6: writeln(‘Суббота’);

7: writeln(‘Воскресенье’)

elsewriteln(‘Такого дня нет’);

Пример 2. Составить программу, которая по введенному номеру месяца выводит на экран название времени года.

Write(‘Введите номер месяца’);

1, 2, 12: writeln(‘Зима’);

3, 4, 5: writeln(‘Весна’);

6, 7, 8: writeln(‘Лето’);

9, 10, 11: writeln(‘Осень’)

elsewriteln(‘Такого месяца нет’);

С одним из наиболее часто используемых операторов языка Турбо Паскаль - оператором присваивания мы уже познакомились. Ниже рассматриваются остальные операторы языка.

Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin… end . Составные операторы - важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода GOTO ).

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

Begin ……. begin ……. begin …… …… end; …… end; …… end;

Фактически, весь раздел операторов, обрамленный словами begin… end , представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ ";" необязательно, и далее во всех примерах мы не будем этого делать.

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

Операторы языка Pascal

1. Составной и пустой операторы

Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки.

Турбо-Паскаль допускает произвольную глубину вложенности:
Begin
...
Begin
...
Begin
...
End;
End;
End;
Наличие; перед End - пустой оператор.

2. Операторы ветвлений

IF <условие> THEN <оператор1>

Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.

Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.

Пример:
Var
A, B, C, D: Integer;
begin
A:=1;
B:=2;
C:=3;
D:=4;
If A > B Then
If C < D Then
If C < 0 Then
C:=0
{обратите внимание, что перед Else}
{пустой оператор ";"не ставится}
Else
A:=B;
end.
а могло быть и так:
If A > B Then
If C < D Then
If C < 0 Then
C:=0
Else
Else
Else A:=B

Рассмотрим программу, которая вводит произвольное целое число от 0 до 15 и выводит его в шестнадцатеричной системе:

Program Hex;
Var
Ch: Char;
N: Integer;
Begin
Write ("N = ");
Readln(N);
If (N >= 0) And (N <= 15) Then
Begin
If N < 10 Then
Ch:= Chr(Ord("0")+N)
Else
Ch:=Chr(Ord("A")+N-10);
End
Else
Writeln("Ошибка");
End.

3. Операторы повторений

For <переменная цикла>:=<начальное значение> To(DownTo) <конечное значение> Do <блок операторов>

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

Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется. Следующая программа подсчитывает сумму чисел от 1 до введенного:

Program Summa;
Var
I, N, S: Integer;
Begin
Write("N = ");
Readln(N);
S:=0;
For I:=1 To N Do
S:=S + I;
Writeln ("Cумма = ", S)
End.

While <условие> Do <блок операторов>

Блок операторов будет исполняться, пока условие имеет значение true. Необходимо, чтобы значение условия имело возможность изменения при исполнении блока операторов, иначе исполнение цикла не закончится никогда (в DOS это приведет к зависанию компыютера). Если условие зарание ложно, блок операторов не исполнится ни разу.

Найдем машинное "эпсилон" для переменной типа Real:
Program Epsilondetect;
Var
Epsilon: Real;
Begin
Epsilon:=1;
While Epsilon + 1 > 1 Do
Epsilon: = Epsilon/2;
Writeln ("Эпсилон = ", Epsilon);
End.

Repeat <тело цикла> Until <условие>

Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.

Пример: программа запрашивает ввод одного символа и выводит его ASCII - код, пока не будет введен пустой символ:

Program Code;
Const
Cr = 13;
Var
Ch:Char;
Begin
Repeat
Readln (Ch);
Writeln (Ch," = ", Ord (Ch));
Until Ord (Ch) = Cr
End.

Case <ключ выбора> Of <список выбора> Else <оператор> End;

<ключ выбора> - выражение любого перечислимого типа,
<список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.

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

2 2
*
Признаком конца работы служит ввод любого символа, отличного от +, -, /, *.

Программа:
Program Calc;
Var
Operation: Char; {Знак Операции}
X, Y, Z: Real;
Stop: Boolean;
Begin
Stop:= False;
repeat
Writeln; {Пустая Строка - Разделитель}
Write ("X, Y = ");
Readln (X,Y);
Write ("Операция: ");
Readln (Operation);
Case Operation Of
"+": Z: = X+Y;
"-": Z: = X-Y;
"*": Z: = X*Y;
"/": Z: = X/Y;
Else
Stop:= True;
End;
If Not Stop Then
Writeln("Z = ",Z);
Until Stop;
End.

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

Goto <метка>

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

Глава 5. ОПЕРАТОРЫ ЯЗЫКА
Турбо Паскаль-7 Операторы языка описывают некоторые алгоритмические действия, которые необходимо выполнить для решения задачи. Тело программы можно представить как последовательность таких операторов. Идущие друг за другом операторы программы разделяются точкой с запятой. Все операторы языка Паскаль можно разбить на две группы: простые и структурированные. 5.1. Простые операторы Простыми являются те операторы, которые не содержат в себе других операторов. К ним относятся: - оператор присваивания; - обращение к процедуре; - оператор безусловного перехода GOTO; - пустой оператор. Обращение к процедуре будет рассмотрено в п. 10.1, остальные - в данном разделе. 5.1.1. Оператор присваивания С помощью этого оператора переменной или функции присваивается значение выражения. Для этого используется знак присваивания:= , слева от которого записывается имя переменной или функции, которой присваивается значение, а справа - выражение, значение которого вычисляется перед присваиванием. Допустимо присваивание значений переменным и функциям любого типа, за исключением типа файл. Тип выражения и тип переменной (или функции) должны быть совместимы для присваивания (см. п. 9.3). Пример. X:= Y; Z:= А + В; Res:= (I>0) and (I<100); I:= Sqr(J) + I*К; 5.1.2. Оператор безусловного перехода GOTO. Использование меток Оператор GOTO позволяет изменить стандартный последовательный порядок выполнения операторов и перейти к выполнению заданного оператора. Оператор, на который происходит переход, должен быть помечен меткой. Эта же метка должна быть указана и в операторе GOTO. Метки, используемые в Turbo Pascal, могут быть двух типов: - целым числом в пределах от 0 до 9999; - обычным идентификатором. Все используемые метки должны быть перечислены в разделе объявления меток, начинающемся зарезервированным словом label, например: label 1, 2, Metka; Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием. Использовать оператор GOTO следует крайне осторожно. Широкое его применение без особых на то оснований ухудшает понимание логики работы программы. Безусловный переход можно осуществлять далеко не из каждого места программы и не в любое место программы. Так, нельзя с помощью этого оператора перейти из основной программы в подпрограмму или выйти из подпрограммы, не рекомендуется осуществлять переход внутрь структурированного оператора, т. к. он может дать неправильный результат, и т. д. Более подробно о таких ограничениях см. [ 1 ]. Пример. Найти частное от деления целых чисел. program EXAMPLE4; label Out; {описание метки} var X, Y, Res: Integer; {описание переменных} begin Write("Введите делимое:"); {вывод сообщения на экран} ReadLn(X); {чтение числа} Write("Введите делитель:"); {вывод сообщения на экран} ReadLn(Y); {чтение числа} if Y = 0 then begin {это - Составной оператор, см. п. 5.2.1} WriteLn("Деление на ноль недопустимо! Выхожу..."); goto Out; {выход при нулевом делителе} end; Res:=X div Y; WriteLn("Частное равно: ",Res); Out: {метка "пустого" оператора} end. 5.1.3. Пустой оператор Пустой оператор не выполняет никакого действия и никак не отображается в программе (за исключением, быть может, метки или точек с запятыми, отделяющих пустой оператор от предыдущих или последующих операторов). Он может потребоваться для осуществления на него безусловного перехода (см. пример в п. 5.1.2). 5.2. Структурированные операторы Структурированными являются такие операторы, которые включают в себя другие операторы. К структурированным операторам относятся: - составной оператор; - условный оператор IF; - условный оператор CASE; - оператор цикла REPEAT; - оператор цикла WHILE; - оператор цикла FOR; - оператор над записями WITH. Оператор над записями WITH будет рассмотрен в разделе 6.4, остальные - в данном разделе. 5.2.1. Составной оператор Составной оператор представляет собой совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin и end: begin <оператор 1>; <оператор 2>; . . . <оператор N> end; Он может потребоваться в тех случаях, когда в соответствии с правилами построения конструкций языка можно использовать ОДИН оператор, а выполнить нужно несколько действий. В такой составной оператор входит ряд операторов, выполняющих требуемые действия. В дальнейшем везде, где будет указываться, что можно использовать один оператор, им может быть и составной оператор. Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой (см. пример в п. 5.1.2, где тело цикла представляет составной оператор). Так как завершающее составной оператор слово end не является отдельным предложением, то перед ним точку с запятой можно не ставить, в противном случае компилятор будет считать, что перед словом end стоит пустой оператор. Можно считать, что и само тело программы, т. к. оно заключено в операторные скобки begin и end, тоже является составным оператором. 5.2.2. Условный оператор IF Оператор IF реализует алгоритмическую конструкцию РАЗВИЛКА и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Существует два варианта оператора: if S then A else В; {полная развилка} и if S then А; {укороченная развилка} В этих операторах: S - некоторое логическое выражение, истинность которого проверяется; А - оператор, который выполняется, если выражение S истинно; В - оператор, который выполняется, если выражение S ложно. Так как условный оператор IF является единым предложением, ни перед then, ни перед else точку с запятой ставить нельзя. Примеры использования оператора: if X < 0 then X:= -Y; if X < 1.5 then Z:= X + Y else Z:= 1.5; Пример. Ввести целое число и вывести символ, соответствующий этому числу в кодировке ASCII, если такой символ есть, или сообщение, что такого символа нет (управляющие символы не учитываются). program EXAMPLE5; var X: Integer; begin Write("Введите целое число: "); ReadLn(X); if (X > 31) and (X < 256) then WriteLn("Соответствующий символ - ", Chr(X)) else WriteLn("Такого символа НЕТ") end. 5.2.3. Условный оператор CASE С помощью этого оператора можно выбрать вариант из любого количества вариантов. Структура этого оператора в Turbo Pascal: case S of Cl:<оператор1>; C2:<оператор2>; . . . CN:<операторN>; else <оператор> end; В этой структуре: S - выражение порядкового типа, значение которого вычисляется; Cl, С2, ..., CN - константы, с которыми сравнивается значение выражения S; <оператор1>, <оператор2>, ..., <операторN> - операторы, из которых выполняется тот, с константой которого совпадает значение выражения S; <оператор> - оператор, который выполняется, если значение выражения S не совпадает ни с одной из констант С1, ..., CN. Ветвь оператора else является необязательной. Если она отсутствует и значение выражения S не совпадет ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора IF перед словом else точку с запятой можно ставить. Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно), сопроводив их одним оператором. Пример. case I of 0,2,4,6,8: WriteLn("Четная цифра"); 1,3,5,7,9: WriteLn("Нечетная цифра"); 10..100: WriteLn("Число от 10 до 100"); else WriteLnC"Отрицательное число или больше 100") end; Пример использования оператора CASE приведен также в п.16.3.21. 5.2.4. Оператор цикла REPEAT Оператор цикла REPEAT организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности некоторого логического выражения. Структура этого оператора: repeat <Оператор1>; <Оператор2>; . . . <ОператорN>; until S; В этой структуре: <Оператор1>; <Оператор2>; <ОператорN> - выполняемые операторы, составляющие тело цикла; S - логическое выражение, истинность которого проверяется в конце каждой итерации. Так как слова repeat и until являются своеобразными операторными скобками, точку с запятой перед словом until ставить не обязательно. Пример. Усовершенствованная программа, вычисляющая сумму двух чисел (см. пример п. 2). program EXAMPLE6; var X, Y, Sum: Real; Ch: Char; begin repeat {начало цикла} Write("Введите числа X и У "); ReadLn(X, Y); Sum:= X + Y; WriteLn("Сумма чисел X и Y равна ",Sum); Write("Завершить программу? "); ReadLn(Ch); until (UpCase(Ch) = "Y") or (Ch = "д") or (Ch = "Д") {Функция UpCase - возвращает соответствующую заглавную букву.} end. 5.2.5. Оператор цикла WHILE Оператор цикла WHILE организует выполнение одного оператора неизвестное заранее число раз. Выход из цикла осуществляется, если некоторое логическое выражение окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации (т е раньше, чем выполняется тело), тело цикла может не выполняться ни разу. Структура оператора цикла имеет вид: while S do <Оператор>; В этой структуре: S - логическое выражение, истинность которого проверяется в начале каждой итерации; <Оператор> - выполняемый оператор цикла. Пример. Найти все делители целого положительною числа (кроме 1 и самого числа). program EXAMPLE7; var X:Integer; Half: Integer; Divider: Integer; i: Integer; begin repeat Write ("Введите число больше нуля: "); ReadLn(X) ; if X <= 0 then WriteLn("Неправильный ввод") until X > 0; Half:= X div 2; Divider:= 2; i:= 0; while Divider <= Half do begin if X mod Divider = 0 then begin Inc(i); {увеличение счетчика на единицу} WriteLn(i, " -и делитель равен; ", Divider) end ; Inc(Divider) {увеличение делителя на единицу} end; if i = 0 then WriteLn("Делителей нет"); WriteLn("Конец решения") end . 5.2.6. Оператор цикла FOR Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора: for <переменная цикла>:=<начальное значение> to <конечное значение> do <оператор>; for <переменная цикла>:=<начальное значение> downto <конечное значение> do <оператор>; В этих операторах: <переменая цикла> - переменная порядкового типа; <начальное значение> - выражение (порядкового типа), определяющее начальное значение переменной цикла; <конечное значение> - выражение (порядкового типа), определяющее конечное значение переменной цикла (при этом значении тело цикла (т е <оператор>) выполняется последний раз); <оператор> - выполняемый оператор. <начальное значение> и <конечное значение> должны быть совместимы для присваивания с переменной цикла (см. п. 9.3). Цикл действует таким образом: - Сначала вычисляются и запоминаются начальное и конечное значения. - Далее переменной цикла присваивается начальное значение. - Затем значение переменной цикла сравнивается с конечным значением. Причём, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора) или больше или равен конечному значению (во втором варианте), выполняется очередная итерация; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение <оператора>, а затем - присваивание переменной цикла следующего большего значения (в первом варианте оператора) или следующего меньшего значения (во втором варианте). Естественно, что, если в первом варианте <начальное значение> больше чем <конечное значение> или во втором варианте меньше чем <конечное значение> , оператор не выполняется ни разу. После выхода из цикла <переменая цикла> становится неопределенной, за исключением случая, когда выход из цикла был осуществлен с помощью оператора GOTO или стандартной процедуры Break. Пример. Вывести на экран буквы от Z до А, program EXAMPLE8; var i: Char; begin for i:= "Z" downto "A" do Write(i); WriteLn end. Пример. Вычислить 101 значение sin x с заданным шагом и вывести первое отрицательное значение синуса. program EXAMPLE9; label 1; var Si: array of Real; {массив вещественных чисел} Step: Real; X: Real; i: Integer; begin Write("Введите шаг вычисления: "); ReadLn(Step); X:= 0; {начальный аргумент} for i:= 0 to 100 do begin Si[i]:=Sin(X); X:= X + Step end; for i:= 0 to 100 do if Si[I] < 0 then begin WriteLn("Первое отрицательное значение синуса: ", Si[i], " Номер элемента: ", i); goto 1; end; WriteLn("Нет отрицательного значения"); 1: end. 5.2.7. Использование стандартных процедур Break и Continue в операторах циклов REPEAT, WHILE и FOR В версии 7.0 в циклах REPEAT, WHILE и FOR можно использовать две стандартные процедуры - Break и Continue. Процедура Break позволяет досрочно выйти из цикла, не дожидаясь выполнения условия выхода. Процедура Continue позволяет начать новую итерацию цикла, даже если предыдущая не завершена. Пример. В массиве целых числел (см. п. 6.1) найти первое отрицательное число и вывести его на экран дисплея. program EXAMPLE10; const N = 10; var Mas: array of Integer; {массив чисел} i: Byte; Yes: Boolean; begin WriteLn ("введите элементы массива"); {ввод чисел} for i:= 1 to N do begin Write ("Mas[", i, " ]= "); ReadLn(Mas[i]) end; Yes:= False; {предположим - число не найдено} for i:= 1 to N do {поиск отрицательного числа} begin if Mas[i] >= 0 then Continue; {не отрицательное => на след число} WriteLn("Первое отрицательное число = ",Mas[i], " Номер = ", i); {найдено число} Yes:= true; Break; {выход из цикла} end; if not Yes then WriteLn("Отрицательных чисел нет"); ReadLn end.

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

Простые операторы не содержат в себе никаких других операторов. К ним относятся:

1) Оператор присваивания (:=) предписывает выполнить выражение в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части:

идентификатор :=выражение;

Переменная и выражение должны иметь один и тот же тип.

2) Оператор безусловного перехода (GOTO) означает «перейти к» и имеет формат:

GOTO_метка ;

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

3) Оператор вызова процедуры (подпрограммы) служит для активации предварительно определенной пользователем или стандартной процедуры:

имя процедуры [(список параметров )];

Параметры в списке перечисляются через запятую. Подробнее процедуры рассмотрены далее.

4) Пустой оператор не содержит никаких символов и не выполняет никаких функций. Он может быть расположен в любом месте программы, где допускается наличие оператора.

Структурные операторы представляют собой структуры, построенные из других операторов по строго определенным правилам. К ним относятся:

1) Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками:

[Оператор1 ;

ОператорN ]

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

2) Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий.

Оператор условия может принимать одну из следующих форм:

1. IF_условие _THEN_оператор1 _ELSE_оператор2 ;

2. IF_условие _THEN_оператор ;

Условие – выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняется оператор1 , если ложно – оператор2 . Во втором варианте, если выражение ложно, то выполняется оператор, следующий в программе сразу за оператором IF. Один оператор IF может входить в состав другого оператора IF, т.е. этот оператор может быть вложенным. При вложенности операторов каждое ELSE соответствует тому THEN, которое ему непосредственно предшествует.

Пример 7. 1) Программа определения принадлежности точки с координатами X,Y окружности радиусом R с центром в начале координат.

VAR X,Y,R,L: REAL;

WRITELN(‘введите значения X,Y и R’);

L:=SQRT(SQR(X)+SQR(Y));

IF L

ELSE WRITELN (‘точка находится вне круга’);

2) поиск в массиве элементов, равных заданному значению, определение их количества, формирование из индексов этих элементов массива и его печать.

READ(J); {задание значения}

FOR I:=1 TO N DO IF A[I]=J THEN BEGIN

{печать результатов поиска}

IF S=0 THEN WRITELN("в массиве элем. равных заданному нет")

ELSE BEGIN WRITELN("в массиве ",s:3," элем. равных’,J);

WRITELN(‘ номера элементов, равных заданному: ‘,)

{печать массива из номеров элементов}

FOR K:=1 TO S DO WRITE(‘ ‘,C[K]);

3) Оператор выбора позволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат:

CASE_выражение-селектор _OF

список1 : оператор1 ;

список2 : оператор2 ;

списокN : операторN ;

ELSE [оператор ]

Сначала вычисляется значение выражения-селектора , затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, то выполняется оператор, стоящий после ELSE.

Пример 8. Определение диапазона, в котором находится вводимое с клавиатуры число.

1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’);

11..20: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 11 до 20’);

21..30: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 21 до 30’);

ELSE WRITELN(‘число I=’,I:3,’находится вне диапазона 1 - 30’);

4) Операторы повтора используются при организации циклов.

Оператор повтора FOR состоит из заголовка и тела цикла и может иметь два формата:

1. FOR_параметр-цикла :=S1_TO_S2_DO_оператор ;

2. FOR_параметр-цикла :=S1_DOWNTO_S2_DO_оператор ;

S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла. FOR…DO – заголовок цикла, оператор – тело цикла. Тело цикла может быть простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу.

В операторе повтора FOR Паскаль не допускает изменения параметра цикла на величину, отличную от единицы. В составе оператора запрещены операторы, меняющие значение параметра цикла.

Пример 9. 1)Вычисление переменных А и В, значения которых зависят от переменной цикла, и их печать.

BEGIN A:=2*I; B:=4+I

WRITELN(A:3,B:4)

2) Перевод угла в градусах в радианы.

WRITELN(‘угол в градусах угол в радианах’);

FOR I:=0 TO 18 DO BEGIN

RAD:=GRAD*PI/180;

WRITELN(‘ ‘,GRAD:12:2,’ ‘,RAD:12:4);

Оператор повтора repeat имеет формат:

тело цикла;

UNTIL_условие;

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

Оператор REPEAT имеет следующие характерные особенности: выполняется по крайней мере один раз, тело цикла выполняется, пока условие равно FALSE, в теле цикла может находиться произвольное число операторов без операторных скобок , по крайней мере один из операторов тела цикла должен влиять на значение условия, иначе цикл будет выполняться бесконечно.

Пример 10. Вычисление y=x 2 при x=8, 6, 4, 2.

WRITELN (X:3,Y:4);

Оператор повтора WHILE аналогичен оператору REPEAT, но проверка условия выполнения тела цикла производится в начале цикла. Оператор имеет формат:

WHILE_условие _DO_тело цикла ;

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

Все операторы повтора могут быть вложенными.

Пример 11. 1)Увеличение переменной I на 2 до тех пор, пока она меньше 30.

WHILE I<30 DO I:=I+2;

2) Вычисление переменных А и N по заданным формулам до тех пор, пока 2*A не станет меньше или равно 3*N+1.

WHILE 2*A<=3*N+1 DO

BEGIN A:=A*2; N:=N+1; ND;

3) Перевод угла в радианах в градусы.

WRITELN(‘угол в радианах угол в градусах’);

WHILE RAD<6,28 DO BEGIN

GRAD:=RAD*180/PI; WRITELN(‘ ‘,RAD:12:4,’ ‘,GRAD:12:2);