Составной и пустой оператор в языке паскаль. Составной оператор

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

  1. простые;
  2. структурированные.

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

  • оператор присвоения (:=);
  • оператор процедуры;
  • оператор безусловного перехода (GOTO).

Структурированные операторы - это операторы, которые содержат в себе другие операторы. К ним относятся:

  • составной оператор;
  • операторы условий (IF, CASE);
  • операторы цикла (FOR, WHILE, REPEAT);
  • оператор присоединения (WITH).

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

Оператор процедуры

Оператор процедуры служит для вызова процедуры.

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

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

  • Стандартные, которые описаны в самом языке и являются принадлежностью языка;
  • Процедуры пользователя, которые создает пользователь.

Для вызова стандартных процедур необходимо подключение в разделе USES имени модуля (библиотеки), где описана данная процедура. Ряд процедур, находящихся в модуле SYSTEM всегда подключается к программе автоматически и их подключение в разделе USES не нужно. Стандартные процедуры языка Паскаль - READ, WRITE, REWRITE, CLOSE, RESET.

READ ([файловая_переменная], [список_ввода])

READ (x,y)

Процедуры пользователя (нестандартные) должны быть созданы перед их использованием в программе и находятся либо в разделе описания самой программы, либо в отдельные программные единицы модуля. Если процедура находится в модуле, то имя этого модуля необходимо упомянуть в приложении USES.

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

Формат: GOTO [метка];

GOTO - зарезервированное слово в языке Паскаль. [метка] - это произвольный идентификатор, который позволяет пометить некий оператор программы и в дальнейшем сослаться на него. В языке Паскаль допускается в качестве меток использовать целое число без знаков. Метка располагается перед помеченным оператором и отделяется от него (:). Один оператор можно помечать несколькими метками. Они так же отделяются друг от друга (:). Перед тем как использовать метку в разделе оператора ее необходимо описать в разделе LABEL (раздел описания).

Действие GOTO передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилами:

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

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

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

Операторы условия IF

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

В языке Паскаль условный оператор IF это средство организации ветвящегося вычислительного процесса.

Формат: IF [логическое_выражение] Then [оператор_1]; Else [оператор_2];

IF, Then, Else - служебные слова. [оператор_1], [оператор_2] - обыкновенные операции языка Паскаль. Часть Else является необязательной (может отсутствовать).

Оператор IF работает следующим образом: вначале проверяется результат логического выражения. Если результат Истина(TRUE), то выполняется [оператор_1], следующий за служебным словом Then, а [оператор_2] пропускается. Если результат Ложь(FALSE), то [оператор_1] пропускается, а [оператор_2] исполняется.

Если часть Else отсутствует, то оператор IF имеет не полную форму:

IF [логическое_выражение] Then [оператор];

В этом случае, если результат Истина(TRUE), то выполняется [оператор], если Ложь(FALSE), то управление передается оператору, следующему за оператором IF.

имеются 2 числа A и B. Найти максимальное число.

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

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

Формат: Begin [операторы]; End;

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

Оператор выбора CASE

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

Формат: CASE [ключ_выбора] OF

[константа_выбора_1]:[оператор_1];

[константа_выбора_2]:[оператор_2];

[константа_выбора_N]:[оператор_N];

ELSE [оператор];

CASE, OF, ELSE, END - служебные слова. [ключ_выбора] - это параметр одного из порядковых типов. [константы_выбора] - константы того же типа, что и ключ выбора, реализующие выбор. [оператор_1(N)] - обыкновенный оператор. ELSE может отсутствовать.

Оператор выбора работает следующим образом: до работы оператора определяется значение параметра ключ выбора. Этот параметр может быть либо выражен как переменная в программе, либо другим путем. Затем параметр ключ выбора последовательно сравниваем с константой выбора. При совпадении значения ключа выбора с одной из констант выбора, выполняется оператор, следующий за этой константой, а все прочие операторы игнорируются. В случае не совпадения ключа выбора ни с одним из констант, выполняется оператор, следующий за Else. Часто Else является не обязательной и в случае несовпадения ключа выбора ни с одной из констант выбора и при отсутствии Else, управление передается оператору, следующему за оператором CASE.

В операторе CASE нет явной проверки условия, характерного для оператора IF. В тоже время в неявном виде операция сравнения выполняется. CASE вносит диссонанс в программу на языке Паскаль, поскольку данные оператор завершается служебным словом End, которому нет парного Begin.

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

Программа работает следующим образом: с клавиатуры процедурой Read вводится символ буквы цвета светофора. Если введена буква ‘з’ соответствующая зеленому цвету, то в операторе CASE введено значение в списке выбора найдет константу выбора ‘з’ и будет выведено сообщение “Зеленый цвет, движение разрешено”. При вводе символа букв ‘к’ и ‘ж’ буду выведены аналогичные сообщения. При вводе любого другого символа будет выведено сообщение “Светофор не работает”, поскольку в этом случае работает часть Else, оператора CASE.

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

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

В цикле с параметром всегда имеются так называемые параметры цикла: X, X n , X k , ∆X. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.

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

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

  • счетный оператор FOR. Он предназначен для реализации цикла с параметром и не может быть использован для реализации итерационного цикла;
  • оператор цикла с предусловием WHILE;
  • оператор цикла с постусловием REPEAT.

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

Оператор FOR

Формат: FOR [параметр_цикла] := [н_з_п_ц] To [к_з_п_ц] Do [оператор];

FOR, To, Do - служебные слова. [параметр_цикла] - параметр цикла. [н_з_п_ц] - начальное значение параметра цикла. [к_з_п_ц] - конечное значение параметра цикла. [оператор] - произвольный оператор.

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

Работу оператора рассмотрим на его алгоритме:

На первом шаге значение параметра цикла принимает [н_з_п_ц], затем осуществляется проверка параметр цикла меньше или равен [к_з_п_ц]. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу.

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

  • телом оператора For. Оператор может не выполниться ни разу, поскольку проверка условия продолжения цикла выполняется до тела цикла;
  • шаг изменения параметра цикла постоянный и равен 1;
  • тело цикла в операторе For представлено одним оператором. В том случае, если действие тела цикла требует более одного простого оператора, то эти операторы необходимо превратить в один составной оператор посредством операторных скобок (BEGIN-END);
  • Параметр цикла может быть только переменой порядкового типа.

Пример использования оператора FOR: составить таблицу перевода рублей в доллары.

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

Формат: WHILE [условие] Do [оператор];

WHILE, Do - служебные слова. [условие] - выражение логического типа. [оператор] - обыкновенный оператор.

;

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

При работе с While надо обратить внимание на его свойства:

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

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

Формат: REPEAT [тело_цикла]; UNTIL [условие];

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

Оператор Repeat имеет следующие особенности:

  • в Repeat проверяется условие завершения цикла и если условие выполняется, то цикл прекращает работу;
  • тело цикла всегда выполняется хотя бы один раз;
  • параметр для проверки условия изменяется в теле цикла;
  • операторы тела цикла не надо заключать в операторские скобки (BEGIN-END), при этом роль операторных скобок выполняют Repeat и Until.

Вычислить y=sin(x), где xn=10, xk=100, шаг равен 10.

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

Исполняемая часть программы является составным оператором такого рода.

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

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

read(i); read(i);

write(i); write(i)

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

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

Если эти элементы объединить в одну группу, заключив их в круглые скобки (А, В, С, Д), то запятая ставится опять-таки между элементами: после открывающей и перед закрывающей скобками запятая не указывается. Если эта группа элементов входит в состав другой группы, то запятая ставится и между группами, например:

((А, В, С, Д), (К, М), Е, (Х, У))

Подобная система введена и в языке Паскаль, только в нем роль круглых скобок выполняют операторные скобки BEGIN – END, вместо запятой ставится точка с запятой, а вместо элементов – операторы.

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

Условный оператор позволяет проверить некоторое условие и в зависимости от результата выполнить то или иное действие. С помощью этого оператора программируются алгоритмы разветвляющейся структуры.

Структура условного оператора:

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

где IF, THEN, ELSE – зарезервированные слова (если, то, иначе);

<условие> – произвольное выражение логического типа;

<оператор1>,<оператор2> – любые операторы языка.

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть TRUE (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>. Например:

x, y, max: real;

.................

Этот условный оператор читается: если условие x > max выполняется, то y:= max, иначе y:= x.

Часть ELSE <оператор2> условного оператораможет быть опущена . Тогда при значении TRUE условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается.

Если требуется выполнить после then или else несколько операторов, они обрамляются командами begin и end, образуя тем самым составной оператор. Перед else никогда не ставится точка с запятой (поскольку это еще не конец оператора if).

Задача. Пусть задана функция

Y=0, если x<=0

Y=X 3 , если x>0

Написать программу вычисления значения Y по значению X.

Программа может выглядеть так:

program task2; {заголовок программы}

var x, y: real; {описание переменных}

begin {начало исполняемой части}

if x <= 0 then y:= 0 else y:= x*x*x;

end. { конец исполняемой части }

<Оператор1> и <Оператор2> по определению любой оператор языка, следовательно и условный.

Задача. Пусть значение Y зависит от значения X.

Сocтавить программу вычисления значения Y по значению X.

Программа

if x < 2 then

if x < 3 then

Если удовлетворено условие х < 2, то y получит значение, равное значению х, это значение затем будет выведено. Если условие х < 2 не удовлетворяется, то значение y будет определено выполнением условного оператора

if x < 3 then y:= 2 else y:= –x + 5

Если else отсутствует , а после оператора then вновь стоит оператор if, то возникает неоднозначность трактовки условий. Эта неоднозначность решается следующим образом: любая встретившаяся часть else соответствует ближайшей к ней “сверху” части then условного оператора. Приведенное высказывание понимается так

if <условие1> then

if < условие2> then

< оператор1>

< оператор2>

Задача. Написать программу вычисления функции Z

Программа

if x < 1 then

if x < 2 then

write (‘Z= ‘, Z:5:3)

Для того чтобы выделить три ветви решения, достаточно двух условных операторов if x< 1 then Z:= sin(x) else <условный оператор 2>.

<Условный оператор 2>: if x<2 then Z:= cos(x) else Z:=sin(x)/2.

Следует обратить внимание на оператор (будем условно называть так процедуру в этом случае) вывода write. В операторе write (‘Z= ‘, Z:5:3) дана команда на вывод константы ‘Z= ‘ и переменной Z с форматом вывода: пять позиций на все число, из них три на дробную часть.

Пустой оператор не содержит никаких символов и не выполняет никаких действий. Используется для организации перехода к концу блока в случаях, если необходимо пропустить несколько операторов, но не выходить из блока. Для этого перед зарезервированным словом 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(‘Такого месяца нет’);

Глава 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.

Под операторами в языке Паскаль подразумевают только описание действий. Операторы отделяются друг от друга только точкой с запятой. Если оператор стоит перед end, until или else, то в этом случае точка с запятой не ставится.

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

Общий вид:

v : = a;

здесь v – переменная, a – выражение, := - операция присваивания. Выражение a может содержать константы, переменные, названия функций, знаки операций и скобки.

Пример . f:= 3 * C + 2 * sin(x);

Вид выражения однозначно определяет правила его вычисления: действия выполняются слева направо с соблюдением следующего старшинства (в порядке убывания):

  1. *, /, div, mod, and;
  2. +, -, or;
  3. =, <, >, <>, <=, >=, in.

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

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

В операции v:= a переменная v и выражение a должны иметь один и тот же тип, а для интервального типа – одно и то же подмножество значений.

Примечания. Разрешается присваивать переменной типа real выражение типа integer. Нельзя присваивать переменной типа integer выражение типа real.

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

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

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

Пример .

begin i : = 2 ; k : = i / 5 end ;

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