Меню
Бесплатно
Главная  /  Советы  /  Условный оператор в паскаль. Условный оператор

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

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

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

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

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

Составной оператор – это последовательность любых операторов Турбо Паскаля, заключенная в операторные скобки 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. Полное

Неполное условие

Блок-схема неполного условия выглядит следующим образом:

Неполное условие

ЕСЛИ УСЛОВИЕ ИСТИННО, ТО ВЫПОЛНЯЕТСЯ ДЕЙСТВИЕ , ИНАЧЕ НИЧЕГО НЕ ПРОИСХОДИТ

На языке Паскаль данная алгоритмическая конструкция выглядит следующим образом:

IF условие THEN действие;

Если условие, стоящее после IF истинно THEN.

Что такое условие?

Условие — это выражение, которое может быть либо истинным, либо ложным. Условие обязательно содержит логические операторы <, >, =, <=, >=, <> (не равно) .

Например:

if a=7 then writeln("Привет!"); end.

Если введенное значение переменной a равно 7 , то на экране мы увидим слово Привет! Если не равно — то на экран ничего выводится не будет.

Рассмотрим другой пример:

var a:integer; begin readln(a); if a=7 then writeln("Привет!"); writeln("До встречи"); end.

Что мы увидим на экране, введя число 7? Увидим:

Привет!
До встречи

Что мы увидим на экране, введя число 10?

До встречи

Почему так? Почему До встречи выводится на экран в любом случае? Команда

writeln("До встречи");

не относится к конструкции If-Then

var a:integer; begin readln(a); if a=7 then writeln("Привет!"); writeln("До встречи"); // условие подсвечено голубым цветом end.

Как сделать так, чтобы оба действия относились к конструкции If-Then?

Необходимо заключить эти действия в так называемые операторные скобки : begin… end;

var a:integer; begin readln(a);

if a=7 then begin writeln("Привет!");

Writeln("До встречи");
end;

end.
Теперь, если мы введем число 10, то на экране ничего не увидим.

Составное (сложное) условие

Иногда приходится использовать сложное условие. Для его составления используются логические союзы: and или or.

  • Если мы используем and, то составное условие будет истинно, когда все простые условия истинны.
  • Если мы используем or, то составное условие будет истинно, когда хотя бы одно простое условие будет истинно.

Например:

a>7 и a<15 на языке паскаль будет записываться

(a>7) and (a<15)

т.е. оба условия должны выполняться одновременно, чтобы составное условие было истинно

(a=7) or (a>15)

Составное условие будет истинно, если: либо a=7 , либо a>17.

Задача:

Используя конструкцию If-Then, найти максимальное среди трех введенных чисел.

Решение

var a, b, c:integer; begin readln(a); readln(b); readln(c); if (a>b) and (a>c) then writeln("число ", a, " максимальное"); if (b>a) and (b>c) then writeln("число ", b, " максимальное"); if (c>a) and (c>b) then writeln("число ", c, " максимальное"); end.

Полное условие

Блок-схема полного условия выглядит так:

IF условие THEN действие_1 ELSE действие_2;

  • Если условие истинно , то выполняется действие, стоящее после слова Then .
  • Если условие ложно , то выполняется действие, стоящее после слова Else.

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

if условие then begin действие; действие; ............... end else begin действие; действие; ................ end ;

(перед else точка с запятой не ставится)

Задачи для самостоятельного выполнения:

  1. Сумма покупки составляет а рублей. Если а больше 1000 рублей, то предоставляется скидка 15%. Вывести на экран сумму покупки с учетом скидки либо сообщение о том, что скидка не предоставляется.
  2. Известны площади круга и квадрата. Определить:
    • уместится ли круг в квадрате
    • уместится ли квадрат в круге
  3. Определить, является ли число а делителем числа b
  4. Проверить, принадлежит ли число введенное с клавиатуры, интервалу (-5;3).
  5. Дано двузначное число. Определить:
    • входит ли в него цифра 3
    • входит ли в него цифра а
  6. Определить, является ли треугольник со сторонами a, b, c равнобедренным
  7. Даны три различных числа. Определить, какое из них (первое, второе или третье)
    • самое большое
    • самое маленькое
    • является средним

(список задач будет пополняться)

Простейший оператор который задает последовательное выполнение операторов, входящих в него один за одним.

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

Пример :

begin {обмен значений переменных X и Y }

Z:=X;

X:=Y;

Y:=Z;

end;

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

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

Данный оператор выполняется следующим образом. Сначала вычисляется выражение, стоящее после служебного слова if . Результат вычисления должен иметь булевский тип. Если значение выражения есть true , то выполняется оператор, указанный после служебного слова then . Если результат вычисления выражения есть false , выполняется оператор, следующий за служебным словом else . Если при этом часть условного оператора, начиная со слова else , отсутствует, то управление немедленно передается оператору, следующему за условным.

Примеры условных операторов:

1) if X < Y then

Max:= Y

else

Max:= X

2) if All_Correct then

Transpose(A,B,N)

3) if Color = Red then

begin

X:= cos(Y);

Y:= alpha+beta;

Color:= Yellow

else begin

X:= Sin(Y);

Color:= Red

end;

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

if Expr1 then if Expr2 then Stmt1 else Stmt2

В приведенном операторе часть else Stmt 2 может трактоваться как принадлежащая или "внешнему" оператору if Expr 1 . . ., или вложенному оператору if Expr 2 then . . .. Эта двусмысленность разрешается путем следующей интерпретации данной конструкции:

if Expr1 then

begin

if Expr2 then

Stmt1

else

Stmt2

Иными словами, служебное слово else всегда ассоциируется с ближайшим по тексту служебным словом if , которое еще не связано со служебным словом else .

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

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

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

сазе Color of

Red: X:= Y+2;

Yellow: X:= Y-2;

Green: X:= Y

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

Сначала вычисляется текущее значение переменной Color . Затем это значение сопоставляется (сравнивается) с константами, записанными перед операторами. При совпадении значения переменной с одной констант будет выполнен оператор, "помеченный" данной константой. На этом выполнение оператора варианта будет завершено. Если значение переменной Color не совпадает ни с одной константой, то данный оператор не выполняет никаких действий. Для того, чтобы задать некоторые действия для случая такого несовпадения, можно использовать альтернативу else , например:

сазе (K+l)*2 of

2: Add(А , В );

4: Multiply (А,В);

0: Substract(А , В )

else

Writeln(" Ошибка !")

Оператор, следующий за служебным словом else , будет выполнен в том случае, если значение выражения (К+1) *2 не совпадет ни с одной из констант 2,4,0.

Кроме одиночных констант в альтернативах оператора варианта могут быть заданы списки и/или диапазоны значений, которые в этом случае должны разделяться символом "," (запятая), например:

case Switch of

1. .2: Prod;

3,4,10..20: Proc2;

5, б : РгосЗ

else

Proc4

В последнем примере оператор процедуры Ргос2 будет выполнен в том случае, когда переменная Switch будет иметь одно из следующих значений: 3,4,10,11,12, . . ., 19,20.

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

1. Значение выражения–"переключателя", записанного после служебного слова сазе, должны принадлежать дискретному типу; для целого типа они должны лежать в диапазоне -32768. .32768.

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

3. Все константы в альтернативах должны быть уникальны в пределах оператора варианта (то есть повторения констант в альтернативах не допускаются); диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.

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

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

Альтернатива

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

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

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

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

служит критерием повторения: если это выражение имеет значение true , то выполняется очередная итерация; в противном случае (значение выражения есть false ) выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false , то цикл не выполнится ни разу.

Примерами оператора цикла с предусловием могут служить:

В последнем примере задан "бесконечный" цикл, так как выражение после служебного слова while тождественно равно true . Прекращение этого цикла может произойти, например, в результате перехода по метке вовне оператора цикла.

Этот оператор аналогичен предыдущему оператору (циклу с предусловием) и отличается от него, во-первых, тем, что условие проверяется ПОСЛЕ выполнения очередной итерации (таким образом, гарантируется хотя бы однократное выполнение цикла), а, во-вторых, тем, что критерием прекращения цикла является равенство выражения константе true ; если выражение есть false , то цикл повторяется.

Например, цикл вида

repeat

Procl(X,Y+i);

i:= i-1

until i = 0;

будет выполняться ДО ТЕХ ПОР, ПОКА i не станет равно нулю.

Ниже приведена синтаксическая диаграмма для цикла с постусловием.

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

Обратите внимание, что синтаксис while -цикла допускает в теле цикла только один оператор, в то время как repeat -цикл может содержать последовательность операторов.

Приведем еще два примера repeat -циклов.

repeat

К := I mod J;

I:= J;

J:= К ;

until J = 0;

repeat

Write ("Введите целое число; ") ;

Readln(i);

Process(i)

until (i < 0) and (i > 9);

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

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

а) диапазон изменения значений управляющей переменной и, одновременно, число повторений оператора, содержащегося в теле цикла;

б) направление изменения значения переменной (возрастание или убывание);

в) собственно действия, выполняемые на каждой итерации (оператор тела цикла).

Следующий простой пример иллюстрирует использование цикла с параметром.

for i:=1 to 10 do M[i]:=i*2

В данном примере задано десятикратное повторение оператора присваивания, причем управляющая переменная i последовательно принимает значения 1, 2, . . ., 9,10.

Диапазон значений управляющей переменной может задаваться выражениями, которые вычисляются ОДИН РАЗ перед выполнением цикла:

for j:=X+2 downto X-2 do

begin

M:=Func(A,B);

Proc(M,j)

В этом примере значение переменной j последовательно уменьшается от начального значения Х+2 до конечного значения х-2.

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

Диапазон

На использование управляющей переменной налагаются следующие ограничения:

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

2. Управляющая переменная должна иметь дискретный тип.

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

4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).

5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора цикла не было прервано оператором перехода. (Однако практика работы с системой Turbo Pascal показывает, что на самом деле последнее использованное значение управляющей переменной сохраняется и при нормальном выходе из цикла).

Оператор, который содержится в теле оператора for , выполняется один раз для каждого значения в диапазоне между начальным и конечным значением. Управляющая переменная всегда инициализируется начальным значением. В случае использования служебного слова to значение управляющей переменной увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выполнятся. Когда в операторе цикла используется служебное слово downto , значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнится ни разу.

С учетом всего сказанного можно представить семантику данного оператора цикла следующим образом. Оператор

for V:= Expr1 to Expr2 do Body;

эквивалентен оператору:

begin

Temp1:= Expr1;

Temp2:= Expr2;

if Temp1 <= Temp2 then

begin

V:= Temp1;

Body ;

while V <> Temp2 do

begin

V:= Succ(V);

Body;

end;

end;

end;

Аналогично , оператор цикла for V:= Expr1 downto Exp2 do Body; эквивалентен оператору :

begin

Temp1:= Expr1;

Temp2:= Expr2,

if Temp1 >= Temp2 then

begin

V:= Temp1;

Body ;

while V <> Temp2 d о

begin

V:= Pred(V);

Body;

end;

end;

end ;

где Temp 1 и Temp 2 - вспомогательные переменные, тип которых совпадает с основным типом переменной V и которые не встречаются в другом месте программы.

Приведем примеры оператора цикла с параметром:

1) for I:= 2 to 63 do

if Data[I] > Max then Max:- Data[I]

2) for I:= 1 to 10 do

for J:= 1 to 10 do begin

X:= 0;

for К := 1 to 10 do

X:- X + Mat1*Mat2;

Mat := X;

end;

3) for Day:= Monday to Friday do

Calculate_Profit(Day);

Пустой оператор

Пустой оператор является в некотором смысле парадоксальной конструкцией, так как он, во-первых, не имеет "графического" начертания, а, во-вторых, не производит никаких действий. Необходимость введения такого понятия диктуется в первую очередь синтаксическими причинами. Например, пусть в программе необходимо передать управление на конец составного оператора. Это можно сделать с помощью оператора безусловного перехода по метке. Но по определению метка должна обязательно предшествовать некоторому оператору. Таким образом, строго говоря, невозможно передать управление на конец любой составной конструкции. Однако если считать, что метка в данном случае предшествует пустому оператору, то решение указанной проблемы может выглядеть следующим образом:

begin

goto Out;

Out :

Рассмотрим еще один практически полезный случай использования понятия пустого оператора. Синтаксис языка Pascal определяет символ ";" (точка с запятой) как разделитель операторов. Таким образом, последний оператор, например, в составном операторе не должен завершаться этим символом, так как после него не следует оператор, а идет служебное слово end :

begin

S1; S2; ...; SN

Однако если предположить, что между последним оператором SN и служебным словом end расположен пустой оператор, то становится допустимой такая форма записи:

begin

S1; S2; ...; SN;

что в ряде случаев более предпочтительно.

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

некоторый составной оператор, не содержащий в себе ни одного оператора, например:

repeat until KeyPressed;

Здесь тело цикла не содержит ни одного оператора, чего синтаксис языка не позволяет. В этом случае считается, что цикл содержит один пустой оператор. Приведенный пример удобно использовать для организации задержки выполнения программы в ожидании нажатия любой клавиши (функция KeyPressed -стандартная функция языка Turbo Pascal - возвращает значение true при нажатии произвольной клавиши и false в противном случае).

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

1) begin S1;;;;;S2; end

2) if Cond then begin end

else while true do;

3) if Cond then ;

где S 1, S 2 - операторы, Cond - некоторое выражение булевского типа.

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

  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.

На занятии рассматривается условный оператор в Паскале (if ). Объясняется, как использовать несколько условий в одной конструкции (AND и OR ). Рассмотриваются примеры работы с оператором

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

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

Блок-схема условного оператора:

Условный оператор в Паскале имеет следующий синтаксис:

Сокращенный вариант:

if условие then оператор;

Полный вариант:

if условие then оператор else оператор;

Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.

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

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

Операторные скобки и составной оператор в Паскале:

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

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

IF THEN ELSE
ЕСЛИ ТО ИНАЧЕ


В условии (в логическом выражении) используются операторы отношения.
Рассмотрим список операторов отношения Паскаля:

  • больше >
  • меньше
  • больше или равно в Pascal >=
  • меньше либо равно в Pascal
  • сравнение в Pascal =
  • не равно в Pascal

Пример: найти наибольшее из двух чисел

Вариант 1 Вариант 2


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

Пример: вычислить значение переменной у по одной из двух ветвей

Показать решение:

var x,y:real; begin writeln ("введите х"); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln ("y=", y:6:2) {итоговое число будет занимать 6 позиций, и в нем будет 2 знака после запятой} end.

Обратите внимание на то, как в данном примере выводится y . При выводе переменных типа в pascal, можно использовать так называемый форматированный вывод , или запись с двумя двоеточиями:
y:6:2
- цифра после первого двоеточия (6) указывает на то, сколько знаков будет занимать число при выводе на экран
- цифра после второго двоеточия (2) указывает на то, сколько знаков после запятой вещественного числа будет выводиться

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

Задача 0. Вычислить значение переменной у по одной из двух ветвей:

Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА

Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?

Логические операции в Паскале (в логическом выражении)

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

  • Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции - "конъюнкция".
  • Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции - "дизъюнкция".
  • На языке Паскаль XOR - знак логической операции, имеющий смысл "строгая дизъюнкция" и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое - не выполнялось (ложно).
  • Логическая операция NOT перед логическим выражением или переменной имеет смысл "отрицание" или "инверсия" и указывает на то, что если данная переменная или выражение истинны, то их отрицание - ложь и наоборот.

Важно: Каждое из простых условий обязательно заключать в скобки.

Пример : Рассмотрим примеры логических операций в логических выражениях в Паскале

1 2 3 4 5 6 7 8 var n: integer ; begin n: = 6 ; if (n>5 ) and (n<10 ) then writeln ("истина" ) ; if (n>7 ) or (n<10 ) then writeln ("истина" ) ; if (n>7 ) xor (n<10 ) then writeln ("истина" ) ; if not (n>7 ) then writeln ("истина" ) ; end .

var n:integer; begin n:=6; if (n>5) and (n<10) then writeln("истина"); if (n>7) or (n<10) then writeln("истина"); if (n>7) xor (n<10) then writeln("истина"); if not(n>7) then writeln("истина"); end.

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