Смекни!
smekni.com

НН Трушин Информатика (стр. 20 из 37)

Таблица 6.8 Приоритеты действий при вычислении выражений

Приоритет Тип действий Операции или элементы

1

2

3

4

5

6

Вычисления в круглых скобках

Вычисления значений функций

Унарные операции

Операции типа умножения

Операции типа сложения

Операции отношения

( )

Функции

@, not, унарные + и – *, /, div, mod, and, shl, shr

+, –, or, xor

=, <>, <, >, <=, >=, in

Пример. Логическое выражение: (X > 0) and (X < 5).

В этом примере сначала выполнятся операции сравнения, а затем логическая операция.

6.6. Операторы языка

Операторы языка описывают алгоритмические действия и выполняются в том порядке, в котором они записаны в тексте программы. Соседние операторы отделяются друг от друга символом точки с запятой. Все операторы языка Turbo Pascal подразделяются на две группы: простые и структурированные.

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

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

• оператор присваивания;

• оператор безусловного перехода; вызова процедуры; пустой оператор.

Оператор присваивания (:=) предписывает выполнить выражение, заданное справа от оператора, и присвоить результат переменной, идентификатор которой расположен слева от оператора. Переменная и результат выражения должны иметь один и тот же тип (исключение – переменная имеет вещественный тип, а выражение – целочисленный). Допустимо присваивание любых типов данных, кроме файловых. Формат оператора присваивания:

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

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

Rezult:=Sin(A)+Pi+1.0;

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

Goto <метка>;

Метки в языке Turbo Pascal могут быть двух типов: в виде целого числа в диапазоне от 0 до 9999 и в виде идентификатора. Одной меткой можно пометить только один оператор. Метка от оператора оделяется двоеточием. Все используемые метки должны быть перечислены в разделе объявления меток, начинающемся зарезервированным словом Label.

Пример. Использование оператора безусловного перехода. Label M1;

. . .

Goto M1; . . .

M1: Rezult:=Sin(A); . . .

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

1) метка, на которую передается управление, должна быть описана в разделе описания меток того блока основной программы, процедуры, функции, в котором эта метка используется:

2) областью действия метки является тот блок, в котором она описана, и переход возможен только в переделах этого блока;

3) недопустима попытка выйти за пределы блока или выполнить переход внутрь другого блока.

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

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

<идентификатор процедуры> (список параметров);

Список параметров может отсутствовать. Пример. Вызов процедуры One.

Program Prim;

Procedure One; Begin

. . .

End;

{Тело процедуры One}
Begin {Начало программы Prim}
One {Вызов процедуры One}
End. {Конец программы Prim}

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

Пример. Пустой оператор.

Begin . . .
Goto Metka;. . . {Переход в конец блока}

Metka:;

End.

{Пустой оператор с меткой}

6.6.2. Структурированные операторы

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

• составной оператор;

• условные (логические) операторы If и Case; операторы цикла (повтора) For, While, Repeat; оператор над записями With.

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

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

. . .

<оператор N >

End;

6.6.2.1. Условные операторы

Условные операторы обеспечивают выполнение либо невыполнение некоторого оператора или группы операторов в зависимости от заданных условий. В языке TurboPascal существуют два условных оператора: If и Case. Оператор If может принимать одну из двух форм:

1) If <условие> Then <оператор 1> Else <оператор 2>; 2) If <условие> Then <оператор>;.

Условие – это выражение логического типа, которое может быть простым или сложным. Сложные условия образуются с помощью логических операций not, and, or, xor. При записи условия могут использоваться все возможные операции отношения. Результат условного выражения имеет логический тип.

В первом случае, если значение условного выражения "истина" (True), выполняется <оператор 1>, если "ложь" (False) – <оператор 2>. Во втором случае, если результат выражения "истина", выполняется <оператор>, если "ложь", – оператор, следующий сразу за оператором If.

Один оператор If может входить в состав другого оператора If. В таком случае говорят о вложенности операторов:

If <условие 1> Then

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

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

При вложенности операторов каждое Else соответствует тому Then, которое непосредственно ему предшествует. Конструкции со степенью вложенности более двух-трех следует избегать.

Пример. Условный оператор IF (первая форма).

If A > B Then D:=A+B Else D:=A-B;

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

Case <выражение-селектор> of

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

. . .

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

Else <оператор>

End;

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

Пример. Селектор целочисленного типа.

Case I of

1: Z:=I+10;

2: Z:=I+100;

3: Z:=I+1000

End;

Пример. Селектор интервального типа.

Case I of

1..10: Z:=I+10;

11..20: Z:=I+100;

21..30: Z:=I+1000;

Else Z:=0

End;

Пример. Селектор перечисляемого типа.

Var Season: (Winter,Spring,Summer,Autumn);

Begin

Case Season of

Winter: Writeln('Зима');

Spring: Writeln('Весна');

Summer: Writeln('Лето');

Autumn: Writeln('Осень')

End;

End;

Пример. Селектор символьного типа.

Case Symbol of

'A','a': Writeln('Это буква "A"');

. . .

'Z','z': Writeln('Это буква "Z"')

End;

6.6.2.2. Операторы цикла

Операторы цикла используются для организации выполнения некоторой последовательности операторов более одного раза. Если количество повторов известно заранее, используется оператор For, если количество повторов неизвестно, применяются операторы Repeat или While.

Оператор цикла For может имеет два формата:

1) For <параметр цикла>:=<S1> to <S2> do <оператор>; 2) For <параметр цикла>:=<S1> downto <S2> do <оператор>;

Здесь S1 и S2 – выражения, определяющие соответственно начальное и конечное значения параметра цикла, <оператор> – цикла. Тело цикла может быть простым или составным оператором. Оператор For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметров цикла от начального до конечного. Параметры цикла должны принадлежать к простому типу данных, кроме вещественного. Значение параметра S1 при каждом повторе цикла последовательно увеличивается (при For...to) или уменьшается (при For...downto) только на единицу. Шаг, отличный от единицы, можно задать с помощью операторов цикла Repeat и While. В теле цикла запрещены операторы, меняющие значение параметра цикла, в противном случае цикл может оказаться бесконечным либо не выполниться ни разу. Количество повторов тела цикла в операторе For можно определить по табл. 6.9.