Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

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

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

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

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

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

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

Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значе­ние булевского типа. В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then. Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2>. Во втором случае - если результат выражения Тгuе, выполняется <оператор>, если False - выполняется оператор, следующий сразу за оператором if. По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной оператор. Точка с запятой перед E lse не ставится.

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

Если один оператор if может обеспечить выбор из двух альтернатив, то оператор выбораcase позволяет сделать выбор из произволь­ного числа имеющихся вариантов.

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

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

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

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

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

Выражение-селектор - это простая переменная целого, символьного, перечисляемого или логического типов, в зависимости от значения которой принимается решение;

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

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

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

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

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

Оператор while

Оператор while (пока) называют оператором цикла с Предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

while <условие продолжения повторений> do

<тело цикла>;

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

Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходит выход из цикла и пере­ход к первому оператору, стоящему сразу за телом цикла.

Оператор повтора repeat

Оператор repeatреализует цикл спостусловием . Цикл с постусловием всегда будет выполнен хотя бы один раз.

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

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

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

until <условие окончания цикла>;

Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат логического выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.

Оператор повтора for

Это оператор с известным числом повторений. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла , илиуправляющей переменной .

Оператор повтора for может быть представлен в двух форматах:

for <параметр цикла> := to do <тело цикла>;

for <параметр цикла> := downto do <тело цикла>;

где <параметр цикла> - это переменная целого, символьного, логического или перечисляемого типов;

SI и S2 - выражения, определяющие соответственно начальное и конечное значения параметра цикла;

for ... do - заголовок цикла;

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

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

Шаг изменения параметра цикла для оператора for…to…doравен +1, а для оператораfor…downto…doравен -1.

Вопросы для самопроверки:

    Формат оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?

    В чем заключается отличие оператора ввода Read от оператора Readln?

    Укажите форматы вывода данных.

    Какие виды ветвлений реализованы в Turbo Pascal?

    Для чего используются ветвления? Приведите примеры.

    Две формы записи условного оператора If.

    Формат записи вложенного оператора If.

    Формат записи оператора выбора Case?

    В каких случаях используется составной оператор Begin…end?

    Как в блок-схемах изображаются разветвленные алгоритмы?

    Что такое цикл?

    Какие виды циклов реализованы в Turbo Pascal?

    Что такое тело цикла?

    В каком случае тело цикла заключается в операторные скобки begin…end?

    В чем отличия операторов повтора while и repeat?

    В каких случаях предпочтительнее использовать для организации циклов оператор повтора for? Что записывается в заголовке этого оператора?

    Каким образом в операторе цикла for описывается направление изменения значения параметра цикла?

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

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

Пример :

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 - некоторое выражение булевского типа.

Лабораторная Работа

На тему: "Оператор условия if - else "


1. Назначение и синтаксис

Оператор условия if-else служит для выбора направления работы программы в зависимости от условий, сложившихся в данной точке программы на момент ее выполнения.

Общая форма записи условного оператора

if ( <условие>)

<блок операторов 1>;

<блок операторов 2>;

Если на момент выполнения <условие> истинно, программа передает управление <блоку операторов 1> и, далее, первому оператору за пределами конструкции if-else. При этом <блок операторов 2> не выполняется. Иначе, если <условие> ложно, выполняется <блок операторов 2>, а <блок операторов 1> пропускается. Соответствующая блок-схема


Фигурные скобки в синтаксисе оператора if-else используются для выделения в тексте блоков 1 и 2. Старайтесь располагать закрывающую скобку под открывающей для улучшения читаемости программного кода. Для этой же цели текст внутри фигурных скобок необходимо смещать вправо на несколько позиций.

В качестве условия в операторах if-else могут использоваться любые логические выражения, принимающие значения «истинно» или «ложно» (true – false). Ниже приведена таблица с указанием простейших операций сравнения целых и вещественных чисел

Пример 1. Требуется написать программу, переводящую температуру по шкале Цельсия T C (°С) в температуру по Кельвину T K (К). Значение T C вводится пользователем с клавиатуры.

Решение. Используем известную формулу преобразования – T K = T C – T 0 , где T 0 = –273 °С – температура абсолютного нуля. Будем считать введенное T C некорректным, если оно меньше T 0 .

// – KelvinvsCelsius–

#include // для потокового В/В

#include // для консольного В/В (getch)

#pragma argsused

floatT0 = -273; // объявляем и инициализируем T0

floatTc, Tk; // объявляем вещественные Tc и Tk

cout<<» VvediteTc=»; // выводим приглашение

cin>>Tc; // запрашиваем Tc

if ( Tc < T 0) // проверяем условие Tc

cout<<» Tc < T0!»; // условие истинно, выводим на

} // экран сообщение об ошибке

Tk = Tc-T0; // условие ложно, рассчитываем

cout << «Tk =» << Tk; // Tk и выводим на экран

getch(); // задержка до нажатия на клавишу

return 0; // завершение программы

Наберите приведенный выше код, откомпилируйте его и запустите программу на выполнение. Исследуйте результаты работы при различных значениях T C .

2. Сокращенные варианты записи

При программировании обыденной является ситуация, когда требуются некоторое действие в ответ на сложившиеся условия (например, если получены неверные исходные данные от пользователя, то выдать сообщение об ошибке и выйти из программы). В таких случаях в программах на C++ может использоваться сокращенная запись оператора условия с отсутствующим блоком else. Общая форма такой записи

if ( <условие>)

<блок операторов>;

Здесь в случае истинности условия управление передается блоку операторов в фигурных скобках. В случае ложности условия этот блок пропускается. Соответствующая блок-схема отличается от предыдущей отсутствием одного «плеча»


Другой вариант сокращения применяется в случае, когда какой-либо из блоков if или else состоит только из одного оператора. В этом случае допускается отсутствие фигурных скобок, ограничивающих этот блок.

if ( <условие>)

оператор 1;

оператор 2;

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

3. Вложенные операторы

Операторы условия могут быть вложенными друг в друга, в соответствии с тем программным алгоритмом, который они реализуют. Допускается произвольная степень их «вложенности».

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

В приведенном примере один из операторов (выделен полужирным шрифтом) вложен в другой. Запись Б) является ошибочной в силу того, что блок else внутреннего оператора условия частично пересекается с обоими блоками if и else внешнего оператора.

Пример 2. Пользователь вводит с клавиатуры три целых числа a, b, c. Необходимо вывести на экран наибольшее из этих чисел.

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


Схема может быть реализована программно с помощью вложенных операторов if-else

// – Выбор наибольшего из 3 чисел –

#include

#include

#pragma argsused

int main (int argc, char* argv)

float a, b, c; // объявляем три переменные

cout<< «Vvedite a –»; // вводимзначения a, b, c

cout<< «Vvedite b –»;

cout<< «Vvedite c –»;

if (a>b) // если a > b

if (a>c) // иесли a > c

cout<<» max = «<

else // иначе, т.е. если a <= с

cout<<» max = «<

else // иначе, т.е. если a <= b

if (b>c) // и если b > c

cout<<» max = «<

else // иначе, т.е. если b <= а

cout<<» max = «<

getch(); // задержка до нажатия любой клавиши

Разберите блок-схему этого алгоритма и его программную реализацию. Модифицируйте алгоритм и программный код для поиска наименьшего из трех чисел.

4. Составные логические выражения

Условие в операторе if-else может быть выражено не только в виде простого сравнения двух числовых значений. Например, весьма распространены двойные условия, которые в математике записываются в виде «a < b < c». Запись означает, что значение b лежит в диапазоне между значениями a и c. В программе такие условия должны быть переформулированы с использованием простых операций сравнения и логических операций «И», «ИЛИ», «НЕ»

В частности, выражение «a < b < c» сформулируем как «a меньше b, и b меньше c». На С++ это будет записано как (a

if((a

Пример 3. На пустой шахматной доске в позиции (n, m) находится белая пешка, в позиции (k, l) – черный слон. Здесь первая координата есть номер столбца шахматной доски, вторая – номер строки (обе изменяются в диапазоне от 1 до 8). Оцените текущую ситуацию в соответствии с тремя вариантами

Пешка находится под ударом,

Слон находится под ударом,

Слон и пешка в «безопасности».

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

· «((k = n+1) ИЛИ (k = n‑1)) И (l = m+1)» – атака пешки на слона,

· «(k+l = n+m) ИЛИ (k-l = n-m)» – атака слона на пешку,

· иначе фигуры в безопасности.

// – Шахматная композиция –

#include

#include

int main (int argc, char* argv)

cout<<«Koordinaty beloi peshki:«<

cout<<» vvedite n –»;

cout<<» vvedite m –»;

cout<<«Koordinaty chernogo slona:«<

cout<<» vvedite k –»;

cout<<» vvedite l –»;

if(((k==n+1)||(k==n‑1))&&(l==m+1)) // атакован слон

cout<

if((k+l==n+m)||(k-l==n-m)) // атакованапешка

cout<

else // нетатаки

cout<

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

Что такое оператор условный?

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

Общее описание применения

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

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

Прежде давайте немного отвлечёмся и вспомним довольно популярную картину Васнецов Виктора Михайловича «Витязь на распутье», написанную в 1878. Она изображает богатыря, который остановился на распутье и решает, куда ему ехать. Подобным образом действует и оператор условный. Так, если витязь примет предложение отправиться в одну сторону, но он пойдёт по одной ветви. И выбор может осуществляться только один. Если говорить про оператор условный, то срабатывает он только тогда, когда его логическое выражение имеет значение «истина». Большинство языков программирования для его обозначения использует ключевое слово if. Возможно построение каскадом, когда проверяется сначала одно условие, потом другое, затем третье, четвертное и так далее. Давайте рассмотрим этот вопрос более подробно. Какие существуют формы условных операторов? Всего их три:

  1. Условный оператор, в котором есть только одна ветвь. Выглядит он (усреднено) таким образом: if необходимые условия then выполняемые команды end. Компьютерная машина вычисляет, соответствует ли логическое значение показателю истины. Если условие совпадает с данными других частей программы, то начинает исполняться код, пока не будет ключевое слово end. В ассемблерах подобная форма работы является единственной доступной для программиста. Также может быть и такое, что в конце не будет какого-то ключевого слова, и тогда необходимо быть острожным, чтобы не приписать чего-то лишнего.
  2. Условный оператор, в котором присутствует две ветви. Выглядит он следующим образом: if заданное условие then команда1 else команда2 end. Используется данная программная конструкция в тех случаях, когда необходимо, чтобы одна из команд точно была выполнена. Поэтому если условие истинно, то выполняется первая часть кода, если нет - вторая. В некоторых случаях именно такое решение необходимо.
  3. Условный оператор с некоторым количеством условий. Он выглядит следующим образом:
    if первое условие then что делать
    else if если первое условие не подошло, проверяем следующее then что делать
    else if проверяем все условия одно за одним then что делать
    else если ни один вариант из вышеприведённых не подходит, значит выполняется эта команда end

Как видите, условный оператор использует различные конструкции. Их выполнение происходит последовательно. То есть, невозможна ситуация (на нормальной технике), при которой выполнение кода начнётся с конца - всегда с начала.

Пример с "Паскалем"

Чтобы понять, как это работает, предлагаем рассмотреть пример на одном из самых популярных языков программирования. Условный оператор в "Паскале" может быть простым и сложным. Первый тип - это символы вроде =, <, > и других подобных. Сложный условный оператор в паскале может принимать такой вид:

if а>=у
then
ор:=Sqr(а-у)
else
write (Введены недопустимые значения);

Что такое переключатель?

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

История развития

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

Подобные конструкции можно увидеть в таких языках программирования, как "Бейсик" и "Фортран". Нельзя сказать, что они значительно устарели, ведь до сих пор они могут похвастаться достаточно высокой эффективностью, если говорить вообще про программирование. Условный оператор, который используется в современных языках, является более сложной конструкцией, что сказывается на быстродействии. Возвращаясь к истокам этого элемента, хочется добавить, что для определения необходимой ветки не нужно последовательно обрабатывать и сравнивать результат выражения с другими значениями. Просто происходит запись в памяти массива команд безусловного перехода, в котором и содержаться нужные адреса. Когда выполняется необходимое указание, то нужная информация попросту вычисляется. И скорость работы программы становится независимой от количества меток.

В современных языках программирования, которые нашли широкое применение на данный момент, оператор-переключатель тоже может быть выполнен как таблица перехода, состоящая из команд, которые осуществляют перемещение внимание на необходимые фрагменты кода без различных условий. Как же они обозначаются? В высокоуровневых языках программирования в большинстве случаев используют имена case, swithc или их оба одновременно.

Особенности вычисления логических выражений

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

  1. Полное вычисление. Проводится расчет всех параметров с предоставленными значениями, а потом И.
  2. Неполное вычисление. Отдельно считается каждый параметр. Если выражение имеет значение «истина», то обсчитывают следующий параметр. Действует в случае ИЛИ.

Заключение

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

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

  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.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: