Краткие теоретические сведения. В языке ПАСКАЛЬ имеется два оператора, позволяющих выполнять действия в зависимости от результата вычисления выражения (“разветвлять” программу).
В языке ПАСКАЛЬ имеется два оператора, позволяющих выполнять действия в зависимости от результата вычисления выражения (“разветвлять” программу).
Условный оператор if
Оператор if, реализующий алгоритмическую конструкцию “Развилка”, изменяет порядок выполнения операторов в зависимости от истинности (ложности) некоторого условия. Его общий вид:
ifSthenAelseB ;
или
ifSthenA;
где S – некоторое логическое выражение, истинность которого проверяется;
A – любой оператор (простой или составной) ) языка ПАСКАЛЬ, который выполняется, если выражение S истинно;
B – любой оператор (простой или составной) ) языка ПАСКАЛЬ, который выполняется, если выражение S ложно.
Оператор условия if (ЕСЛИ) выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значение булевского типа. В первом случае, если значение выражения есть истина (True), выполняется оператор A, указанный после слова then (ТО), а если результат вычисления выражения в условии есть ложь (False), то выполняется оператор B,указанный после словаelse(ИНАЧЕ).
Во втором - если результат выражения True, выполняется оператор A, если False - оператор, то оператор, следующий сразу за оператором if, конечно, если таковой имеется.
Операторы if могут быть вложенными.
Примечание:
При использовании вложенных условных операторов может возникнуть синтаксическая неоднозначность, иллюстрируемая следующей схемой:
if S1 then if S2 then A else B;
Возникающая двусмысленность, к какому оператору if принадлежит часть else B, разрешается тем, что служебное слово elseвсегда ассоциируется (связывается) с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else, то есть в рассматриваемом примере со вторым.
В связи с этим следует проявлять аккуратность при записи вложенных операторов условия.
Оператор ветвления case
При помощи этого оператора можно выбрать действие из любого количества вариантов. Он состоит из выражения, называемого селектором (selection - выбор альтернативы), и списка параметров, каждому из которых предшествует список констант выбора (список может состоять и из одной константы). Структура этого оператора имеет вид:
CaseSof
C1 : instruction1 ;
C2 : instruction2 ;
…
CN : instructionN
elsedefault_instruction_list;
end;
где S – выражение порядкового типа, значение которого как‑то вычисляется;
C1, C2, … CN – списки констант, того же типа, с которыми сравнивается выражение S, константы в списке разделяются символом “,” (запятая);
instruction1, instruction2, …, instructionN – любые операторы (простые или составные) языка ПАСКАЛЬ, из которых выполняется только тот, с константой которого совпадет вычисленное значение выражения S;
default_instruction_list – последовательность операторов, разделенных символом “;”(точка с запятой), которая выполняется, если вычисленное значение выражения S не совпадает ни с одной из констант C1, C2, … CN.
Примечание:
1) Значение выражения S и констант C1, C2, … CN должны быть одного и того же скалярного типа, кроме real.
2) Константы C1, C2, … CN метками не являются, следовательно, их не требуется описывать в разделе меток label и на них нельзя переходить при помощи оператора перехода goto.
3) Все константы в альтернативах должны быть уникальны в пределах оператора варианта, то есть повторения констант в альтернативах не допускаются; диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.
4) Секция « elsedefault_instruction_list; » может отсутствовать.
Ниже приведены типичные формы записи оператора case.
Селектор интервального типа:
CaseI of
1..10 : Writeln ('число ', I:4, ' в диапазоне 1 - 10');
11..20 : Writeln ('число ', I:4, ' в диапазоне 11 - 20');
21..30 : Writeln ('число ', I:4, ' в диапазоне 21 - 30')
else Writeln ('число ', I:4, ' вне пределов контроля')
end;
Селектор целочисленного типа:
CaseI of
1 : Z := I + 10;
2 : Z := I + 100;
3 : Z := I + 1000
end;
Селектор перечисляемого пользовательского типа:
Var Season: (Winter, Spring, Summer, Autumn);
begin
…
CaseSeason of
Winter : Writeln('Winter');
Spring : Writeln('Spring');
Summer : Writeln('Summer');
Autumn : Writeln('Autumn')
end;
end;
Задача №1
Написать программу, которая запрашивает у пользователя координаты точки на плоскости
(x, y) и сообщает ему, попадает ли эта точка в заданную область. Проверку сложных условий производить в одном операторе ветвления, записывая условие в виде логического выражения.
Задача №2
Написать программу, которая запрашивает у пользователя координаты точки на плоскости
(x, y) и сообщает ему, попадает ли эта точка в заданную область. Проверку сложных условий производить последовательностью операторов ветвления.