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

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

Формат :

GoTo <метка>;

Метка в Pascal – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В качестве метки можно использовать целое число без знака (исключение в правилах написания идентификаторов). Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Оператор можно помечать несколькими метками, которые в этом случае отделяются друг от друга двоеточием. Перед тем как появится в программе, метка должна быть описана (в разделе описания меток). За словом Label (метка) следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой. Максимальная длина метки ограничена 127 символами.

Формат : Label <имя1, имя2,... >;

<операторы>

lb2:<операторы>;

lb1: <операторы>;

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

<операторы>

Действие оператора GoTo состоит в передаче управления соответствующему меченному оператору.

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

ü метка, на которую ссылается оператор GoTo, должна быть описана в разделе описаний и она обязательно должна встретиться где-нибудь в теле программы;

ü метки, описанные в процедуре (функции), локализуются в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.

Например, в результате выполнения программы:

label 1,2; //метки

2: if i<0 then goto 1; //условие перехода к метке 1

write(i); //выводим значение i

Dec(i); //увеличиваем i на 1

goto 2; //переходим к метке 2

1: //метка 1

будет выведено 6543210.


ТЕМА 7. Оператор выбора Case

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

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

Case <параметр: порядковая переменная> OF

<значение 1>: <оператор 1>;

<значение 2>: <оператор 2>;


<значение N>: <оператор N>;

END; {для Case}

В этой структуре: < параметр: порядковая переменная> – порядковая переменная, значение которой проверяется; <значение *> – константы, с которыми сравнивается значение порядковой переменной; <оператор *> – операторы, из которых выполняется тот, с константой которого совпадает значение порядковой переменной.

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

Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую, сопроводив их одним оператором. Существует возможность указать диапазон возможных значений. Например, диапазон от 1 до 100 включительно указывается так:
1 .. 100.

0, 2, 4, 6, 8: Writeln("Чётная цифра");

1, 3, 5, 7, 9: Writeln("Нечётная цифра");

10 .. 100: Writeln("Число от 10 до 100");

Writeln("Отрицательное число или больше 100");

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

CASE <порядковая переменная> OF

<значение 1>:

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

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

<значение 2>:

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

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

<значение N>:

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

<оператор N_n>

<оператор Е_1>;

<оператор Е_n>

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


ТЕМА 8. Циклические программы

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

Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же операторов. Число повторений этих операторов может быть задано в явной (цикл с известным числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.

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

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

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

if ... then ... else ... if ... then ...

2. Какой вид имеет полная форма оператора условного перехода if в языке Паскаль?

Полная форма оператора условного перехода if :

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

Действие оператора состоит в следующем: сначала вычисляется значение выражения условие . Если оно истинное (равное TRUE ), то выполняется оператор, который следует за словом then (оператор1 ). Если значение ложное (FALSE ), то выполняется оператор, который следует за словом else (оператор2 ).

Операторы оператор1 и оператор2 могут быть составными, то есть содержать несколько строк кода. Такие операторы берутся в операторные скобки begin … end . Такая необходимость возникает, если после зарезервированных слов then или else нужно указать несколько операторов.

В этом случае общий вид оператора условного перехода может иметь, например, следующий вид:

if условие then begin // несколько операторов ... end else begin // несколько операторов ... end ;

3. Какой вид имеет сокращенная форма оператора условного перехода?

Сокращенная форма оператора условного перехода не содержит блока else и имеет вид:

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

В этом случае оператор работает следующим образом. Сначала вычисляется значение логического (булевого) выражения условие . Если результат логического выражения условие истинный (равный TRUE ), то выполняется оператор, который следует за словом then . Если результат равный FALSE , то выполняется оператор, который следует за оператором if (в операторе if…then ничего не выполняется).

Если при выполнении условия нужно выполнить несколько операторов, то общий вид оператора условного перехода может быть таким:

if условие then begin // два или больше оператора ... end ;

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

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

var a,b:real; // a, b - переменные, для которых ищется максимум max:real; // максимум ... begin ... // a, b - задаются if a>b then max:=a else max:=b; ... end ;

Пример 2.

Фрагмент программного кода, решающего эту задачу:

... var x,f:real; begin ... // x - задается if -5 then f:= x*x+8 else f:= -x*x*x+2 ; // в переменной f - результат ... end ;

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

Пример 1. Фрагмент кода, который находит минимальное значение между двумя вещественными числами x и y .

... var min:real; ... begin ... // x, y - заданы min:= x; if minthen min:= y; ... end ;

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

var x, f:real; begin ... // x - задано if x<-6 then f:=3 *x*x-x; if (-6 <=x) and (x<=5 ) then f:=sqrt(7 -x); if x>5 then f:=8 *x-3 ; ... end ;

Большинство программистов считают использование в программе оператора безусловного перехода, знаком дурного тона и редко используют его. Но, не смотря на это, знать его надо, так как может оказаться, что Вы не сможете придумать альтернативного решения проблемы. Имя данного оператора Goto , смысловое значение в программе «перейти к …», а его общий вид такой:

Goto m;

m – метка, заранее заданная в разделе описания меток. Следующая программа показывает как работает оператор безусловного перехода.

1
2
3
4
5
6
7
8
9
10

program goto_primer; {имя программы}
uses crt; {подключение модуля}
label m; {описание метки m}
begin
write (‘Karl Marx ‘ ) ; {вывод строки}
goto m; {требование перейти к метки}
write (‘clever’ ) ; {этот оператор пропускается}
m: write (‘fool’ ) ; {выполняется переход в эту область}
readkey; {для останова программы}
end .

В этой программе нет никаких условий, но именно о них будет идти далее речь.

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

В Паскале проверить какую-то часть программы для определения дальнейшего пути, по которому ей следует идти, есть оператор If . В зависимости от выполнения логического условия он указывает, какой блок выполниться следующим. Существует две формы записи: полная и краткая. Вторая отличается от первой тем что в ней имеется ветвь Else (иначе).

Общий вид краткой формы:

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

Общий вид полной формы:

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

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

В краткой форме выполняется оператор 1 тогда, когда условие A истинно, иначе управление переходит к следующему оператору. В полной форме если условие A истинно, то выполняется оператор 1, иначе выполняется оператор 2. Следует запомнить, что перед else точка с запятой не ставится.

Пример программы с условным оператором, записанным в краткой форме:

Пример программы с условным оператором, записанным в полной форме:

В Паскале можно вкладывать один условный оператор в другой, причем делать это можно множество раз. При этом следует отметить, что каждому Then соответствует ближайшее Else .

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

Когда количество альтернатив больше двух применяется оператор выбора Case . Его вид:

Case <селектор> Of

<значение селектора>: <оператор 1>;

<значение селектора>: <оператор 2>;

<значение селектора>: <оператор N>;

Else <оператор>

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

1) перечислением: 1, 10, 100, 1000

2) диапазоном: ‘d’..’k’

3) перечислением и диапазоном: 1..10, 20, 30, 50, 70..100

Выполнятся в операторе выбора, может только одна ветка (идущая раньше), даже когда селектор совпадает с несколькими значениями. Также, в отличие от If в Case можно ставить точку с запятой перед Else .

Рассмотрим программу, в которой условия проверяет оператор выбора.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

program case_primer;
uses crt;
var money: char ;
begin
write (‘Первая буква кода денежной единицы: ‘ ) ;
readln (money) ; {ввод значение в переменную}
case money of
‘A’ , ‘a’ : writeln (‘Французский франк’ ) ;
‘B’ , ‘b’ : writeln (‘Динар’ ) ;
‘C’ , ‘c’ : writeln (‘Юань’ ) ;
‘E’ , ‘e’ : writeln (‘Испанская песета’ ) ;
‘G’ , ‘g’ : writeln (‘Английский фунт стерлингов’ ) ;
‘I’ , ‘i’ : writeln (‘Итальянская лира’ ) ;
‘J’ , ‘j’ : writeln (‘Иена’ ) ;
‘R’ , ‘r’ : writeln (‘Рубль’ ) ;
‘U’ , ‘u’ : writeln (‘Доллар США’ ) ;
‘X’ , ‘x’ : writeln (‘Восточнокарибский доллар’ ) ;
else writeln (‘Неизвестная единица’ )
end ;
readkey;
end .

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

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

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

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

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

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

Например, для оператора

Rezult:=A div В;

сначала выполняется целочисленное деление значения переменной А на значение переменной В , а затем результат присваивается переменной Rezult .

Примеры применения оператора присваивания:

А := 8;

S:= A * В ;

Ostatok:= A mod B;

Ratio:= A / B;

Оператор безусловного перехода (go to)

Оператор безусловного перехода (go to) означает "перейти к" и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой оператор.

Напомним, что метка объявляется в разделе описания меток и может содержать как цифровые, так и буквенные символы.

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

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

Следует стремиться применять операторы перехода (если кажется невозможным обойтись без них) для передачи управления только вниз (вперед) по тексту программы; при необходимости передачи управления назад следует использовать операторы цикла;

Расстояние между меткой и оператором перехода на нее не должно превышать одной страницы текста (или высоты экрана дисплея).

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

label Metka; {в раздале описания меток описали метку с именем Metka }

begin {основная программа}

{операторы основной программы}

{операторы основной программы помеченные меткой}

Порядок выполнения работы

    Изучить теоретические сведения по теме: “Написание программы на Паскале с использованием операторов присваивания и безусловного перехода ”.

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

    Показать работающую программу преподавателю.

    Ответить на контрольные вопросы.

Контрольные вопросы

    Основные элементы программирования.

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

    Операторы языка программирования Паскаль. Оператор присваивания. Формат, примеры.

    Оператор безусловного перехода. Формат, примеры. Основные правила использования

Лабораторная работа № 7

Написание программы на Паскале с использованием условных операторов и оператора выбора Case

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

Краткие теоретические сведения

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

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

В Турбо Паскале имеются два условных оператора: if и case.

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

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

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

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

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

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

В переводе с английского языка данные форматы можно определить как:

    ЕСЛИ<условие> ТО<оператор1> ИНАЧЕ<оператор2>

    ЕСЛИ<условие> ТО<оператор>

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

В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then (в переводе –“то”). Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2> .

Во втором случае, если результат выражения True , выполняется <оператор>, если False - оператор, следующий сразу за оператором if . Операторы if могут быть вложенными .

Пример фрагмента программы с оператором условия if:

if Ch="N" then Parol:= True

else Parol:= False;

if Parol = True then

if X = 100 then Write("Пароль и код правильные")

Writeln("Ошибка в коде");

В данном примере с клавиатуры считывается значение переменной символьного типа Ch . Затем проверяется условие С h =" N " . Если оно выполняется, то переменной Parol булевского типа присваивается значение True , если условие не выполняется, False . Затем с клавиатуры считывается значение кода X . Далее оператор if проверяет условие Parol = True. Если оно имеет значение True , то выполняется проверка введенного пароля оператором if X=100 . Если условие Х=100 имеет значение True , то выводится сообщение "Пароль и код правильные", и управление в программе передается на оператор, следующий за словом end , если оно имеет значение False , выполняется составной оператор, стоящий после, слова else , который выводит на экран видеомонитора сообщение "Ошибка в коде", и вызывает стандартную процедуру Halt(1) для остановки программы.

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

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

Возникающая двусмысленность, к какому оператору if принадлежит часть else <оператор2>, разрешается тем, что служебное слово else всегда ассоциируется (связывается) с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else .

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

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

Для контроля вводимых значений делителя используем оператор условного перехода if ... then ... else.

Текст программы может выглядеть следующим образом:

program Primer1;

А, В: integer;

Write("Введите значение делимого А: ");

Write("Введите значение делителя В: ");

if B=0 {Контроль ввода числа B }

then Writeln("Ha нуль делить нельзя") {Условие выполнено}

{Условие не выполнено}

Rezult:= А / В;

Writeln("Частное чисел ",А," и " ,В, " = ", Rezult);

Оператор перехода

В этот раз я продолжу рассмотрение темы “Операторы”.

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

Авторская версия языка предполагает оформление метки в виде целого десятичного числа в диапазоне 1..9999 . В качестве меток Turbo Pascal допускает использование идентификаторов. При использовании операторов перехода необходимо соблюдать следующие правила:

1) Все метки, находящиеся в блоке, должны быть описаны. При этом каждая метка может быть описана не более одного раза. Т.е. в пределах блока не может быть двух меток с одним и тем же именем.

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

3) Попытка перехода (передачи управления) внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя в данном случае компилятор может не выдать сообщения об ошибке.

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

1) если кажется невозможным обойтись без операторов перехода, необходимо стремиться применять их для передачи управления только вниз по тексту программы (вперёд); при возникновении необходимости передачи управления “назад” лучше использовать операторы цикла (см. далее);

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

Метки определяются посредством описаний, которые начинаются со служебного слова label и содержат последовательность имён меток через запятую. Для передачи управления оператору, помеченному меткой, предусмотрен оператор безусловного перехода goto . Метка отделяется от следующего за ней оператора символом ‘:’ (двоеточие). Пример:

var j: integer;

{ объявляем две метки }

label Start, Finish;

Start: writeln(‘Начало программы’);

goto Finish;

Finish: writeln(‘Конец программы’);

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

Самым простейшим структурным оператором является составной оператор. Данный оператор задаёт последовательность выполнения содержащихся в нём операторов. Составной оператор оформляется в виде списка операторов, отделённых друг от друга символом ‘;’ (точка с запятой) и заключённых между служебными словами begin и end .

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

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

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

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

If Keypressed then writeln(‘Клавиша нажата’);

If A > B then Min:= B

else Min:= A;

if X1 > X2 then begin

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

При составлении вложенных условных операторов следует учитывать, что ветвь else всегда принадлежит предшествующему ветвлению IF , у которого ещё нет ветви else. Т.е. следующую конструкцию

if Условие1 then if Условие2 then Оператор1 else Оператор2;

для ясности, можно трактовать так

if Условие1 then begin

if Условие2 then Оператор1 else Оператор2;

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

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

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

type TWay = (Up, Right, Down, Left);

var Way: TWay;

MapX, MapY: word;

if Way = Up then MapY:= MapY - 1

else if Way = Right then MapX:= MapX + 1

else if Way = Down then MapY:= MapY + 1

else MapX:= MapX - 1;

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

В данном случае нам ещё повезло, что тип TWay имеет только четыре варианта принимаемых значений. Составление таких ветвлений превратилось бы в рутину, если бы вариантов было десять и более? А ведь в представленном ветвлении просматривается простая закономерность. Так можно ли его как-то упростить и сделать более эффективным и читабельным? Можно, и для этого в языке предусмотрен оператор варианта, конструкция которого может содержать произвольное число альтернатив для определённого выражения. Тогда последний пример можно переписать на новый лад:

case Way of

Up: MapY:= MapY - 1;

Right: MapX:= MapX + 1;

Down: MapY:= MapY + 1;

Left: MapX:= MapX - 1;

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

А как же быть, если необходимо предусмотреть некоторую ветвь операторов, которая выполнялась бы в случае несовпадения значения выражения ни с одной константой? Для этого можно использовать альтернативу else, например:

case Way of

Up: MapY:= MapY - 1;

Right: MapX:= MapX + 1;

Down: MapY:= MapY + 1;

else MapX:= MapX - 1;

Следовательно, конструкция, построенная с помощью оператора case полностью эквивалентна конструкции, построенной ранее с помощью оператора IF . К тому же она нагляднее и нет риска запутаться во многочисленных else .

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

case Way of

Up, Down: writeln(‘Двигаемся по вертикали’);

Right, Left: writeln(‘Двигаемся по горизонтали’);

case X of

10,20,30: writeln(‘десятки’);

1..9: writeln(‘единицы’);

В последней конструкции оператор writeln(‘единицы’) выполнится, если переменная X будет иметь одно из значений 1,2,3,..,8,9 .

Как вы могли заметить, строки с константами я выровнял по двоеточиям, так как мне кажется, что такой вид нагляднее, хотя это дело вкуса, а как известно, на вкус и цвет товарища нет;O)

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

1) Допустимые значение выражения - “переключателя”, записанного после служебного слова case , должны удовлетворять дискретному типу: для целого типа они должны лежать в диапазоне -32768..32767 .

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

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

И ещё одно. Конструкция case предусматривает один оператор для каждой альтернативы. Если возникает необходимость выполнения нескольких операторов, следует сгруппировать их в составной оператор begin..end . Есть возможность указать пустой оператор для альтернативы, поставив символ ";" (точка с запятой) сразу после двоеточия, который ничего не будет выполнять. А синтаксис ветви else предусматривает указание последовательности операторов, разделённых символом ‘;’ (точка с запятой).

Понравилась статья? Поделитесь ей
Наверх