Составной оператор pascal. Операторы языка паскаль. Отдохнём с пользой

5. Операторы языка в Turbo Pascal 7

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

Все операторы языка Паскаль можно разбить на две группы: простые и структурированные.

5.1. Простые операторы

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

  • оператор присваивания;
  • обращение к процедуре;
  • оператор безусловного перехода GOTO;
  • пустой оператор.

Обращение к процедуре будет рассмотрено в п. 10.1, остальные - в данном разделе.

5.1.1. Оператор присваивания

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

Допустимо присваивание значений переменным и функциям любого типа, за исключением типа файл. Тип выражения и тип переменной (или функции) должны быть совместимы для присваивания (см. п. 9.3). 1

X:= Y;
Z:=А + В;
Res:= (I>0) and (I I:= Sqr(J) + I * К;

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

Оператор GOTO позволяет изменить стандартный последовательный порядок выполнения операторов и перейти к выполнению программы, начиная с заданного оператора. Оператор, на который происходит переход, должен быть помечен меткой. Эта же метка должна быть указана и в операторе GOTO. Метки, используемые в Turbo Pascal, могут быть двух типов:

  • целым числом в пределах от 0 до 9999;
  • обычным идентификатором.

Все используемые метки должны быть перечислены в разделе объявления меток, начинающемся зарезервированным словом label, например:

label 1, 2, Metka;

Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием.

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

Пример. Найти частное от деления целых чисел.

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).

С помощью этого оператора переменные в Турбо Паскале могут получать свои значения программным путем (то есть не с клавиатуры). Формат:

<идентификатор (имя) переменной>:= <выражение>

Система сначала вычисляет значение выражения, затем присваивает его переменной.

    Составной оператор.

Составной оператор – это последовательность любых операторов Турбо Паскаля, заключенная в операторные скобки begin и end. Например:

begin a:=5; write (‘a=’,a); end;

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

    Операторы условного перехода.

Они существуют для организации ветвлений в зависимости от истинности или ложности некоторого условия. Таких операторов два: полный условный оператор и неполный условный оператор.

    Полный условный оператор

Реализует алгоритмическую конструкцию «полная развилка»:

Его формат:

if <логическое выражение> then <оператор 1> else <оператор 2>

If, then, else – служебные слова «если», «тогда», «иначе». Перед словом else точка с запятой не ставится. Оператор 1 и оператор 2 могут быть как простыми операторами, так и составными. Составной оператор следует заключать в операторные скобки begin и end.

Действия условного оператора: если логическое выражение имеет значение true, то выполняется оператор 1, если логическое выражение имеет значение false, то выполняется оператор 2.

    Неполный условный оператор

Реализует алгоритмическую конструкцию «неполная развилка»

Его формат:

if <логическое выражение> then <оператор >

If, then – служебные слова «если», «тогда». Оператор может быть как простыми оператором, так и составным.

Действия условного оператора: если логическое выражение имеет значение true, то выполняется оператор, если логическое выражение имеет значение false, то условный оператор пропускается и выполняется оператор, следующий за ним.

Условные операторы (полный и неполный) могут иметь вложенную конструкцию, то есть после слов THEN или ELSE опять используется условный оператор. Служебное слово ELSE всегда относится к ближайшему слева слову THEN.

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

Замечание: после слова THEN не может сразу записываться новый условный оператор, а после ELSE – может. Например:

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

if ((x>3) and (y>3) and (z>3)) then ...

    Операторы организации цикла.

Цикл – это многократно повторяемый участок программы. Для организации цикла в Паскале используются три оператора: оператор с предусловием, оператор с постусловием и оператор с параметром.

    Оператор цикла с предусловием

Этот оператор реализует блок-схему цикла с предусловием:

Его формат:

While <логическое выражение> Do <тело цикла>

While («пока»), Do («делать») - служебные слова.

Действия оператора: пока логическое выражение имеет значение true, выполняется тело цикла; как только логическое выражение принимает значение false, действие оператора заканчивается и выполняется оператор, следующий за ним. Значение логического выражения проверяется перед телом цикла. Если логическое выражение ложно с самого начала, то тело цикла сразу опускается.

Если тело цикла содержит последовательность операторов, то говорят, что оно образует составной оператор, в начале и в конце которого надо писать операторные скобки Begin и End.

Если же тело цикла - один оператор (не составной), то операторных скобок не требуется. Тогда транслятор считает, что тело цикла заканчивается на ближайшем знаке «;». В Паскале нет специальных слов для обозначения начала цикла и конца цикла. На все случаи есть универсальные слова Begin и End.

    Оператор цикла с постусловием

Этот оператор реализует блок-схему цикла с постусловием:

Его формат:

Repeat <тело цикла> Until <логическое выражение>

Repeat («повторять»), Until («до тех пор») - служебные слова.

Тело цикла может быть как одиночным, так и составным оператором, однако употребления Begin и End не требуется, поскольку сами слова Repeat и Until выполняют роль операторных скобок.

Действия оператора: выполняется тело цикла, затем проверяется значение логического выражения. Если логическое выражение имеет значение false, то опять выполняется тело цикла. Так продолжается до тех пор, пока логическое выражение не примет значение true. То есть тело цикла повторяет свое выполнение, если условие ложно. Повторение кончается, когда условие станет истинным. Действие оператора заканчивается и выполняется оператор, следующий за ним. Значение логического выражения проверяется после тела цикла.

Замечания:

    Перед каждым выполнением тела цикла логическое выражение должно иметь конкретное значение.

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

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

    Оператор цикла с параметром

Этот оператор реализует блок-схему цикла со счетчиком. Его формат:

for <параметр цикла>:= <арифметическое выражение 1> to <арифметическое выражение 2> do <тело цикла>

for < параметр цикла >:= < арифметическое выражение 1> downto < арифметическое выражение 2> do <тело цикла>

Параметр цикла – это переменная любого типа, кроме real.

Арифметические выражения 1 и 2 должны иметь тот же тип, что и параметр цикла. Тело цикла – любой оператор Паскаля (простой, сложный, составной).

Действия оператора: параметру цикла присваивается значение арифметического выражения 1. Если оно меньше (для for - to - do ) или больше (для for - downto - do ) значения арифметического выражения 2, то выполняется тело цикла. Затем параметр цикла увеличивается (уменьшается) на величину, указанную в теле цикла. Потом он снова сравнивается с арифметическим выражением 2. И так до тех пор, пока параметр цикла не станет больше (меньше) значения арифметического выражения 2. Далее оператор цикла заканчивает работу и выполняется следующий за ним оператор.

Если параметр цикла имеет тип integer, то при слове to шаг изменения параметра равен единице (при downto шаг равен -1).

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

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

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

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);