Практическая работа. Условный оператор if-else в Pascal
Цель работы: повторить правила записи ветвящихся алгоритмов Pascal, рассмотреть сложные и вложенные условия, логические операции, закрепить знания при решении учебных задач.
Уловный оператор if служит для организации ветвления в программе на языке Паскаль.
Полная форма:
if a = b then begin
{ блок-1 } end else begin
{ блок-2 } end;
Неполная форма:
if a = b then begin
{ блок-1 } end;
Здесь вместо комментариев в фигурных скобках могут стоять любые операторы. После else нельзя ставить условие, эта часть выполняется тогда, когда условие после if неверно. Перед else не ставится точка с запятой, поскольку это ключевое слово обозначает не начало нового оператора, а его вторую часть.
Слова begin и end (их называют также «операторные скобки») ограничивают блок-1 и блок-2; если внутри блока всего один оператор, эти «скобки» можно не писать, например, допустимы такие операторы:
if a = b then c := 1 else c := 0; if a = b then begin
c := 1; end else c := 0; if a = b then c := 1;
В условных операторах можно использовать сложные условия, которые строятся из простых отношений (<, <=, >, >=, =, <>) с помощью логических операций not («НЕ», отрицание), and («И», одновременное выполнение двух условий) и or («ИЛИ», выполнение хотя бы одного из двух условий).
В сложном условии сначала выполняются действия в скобках, потом – not, затем – and, затем – or и, наконец, отношения.
Операции равного уровня (приоритета) выполняются последовательно слева направо.
Поскольку отношения в Паскале имеют низший приоритет, в сложном условии их нужно брать в скобки: if (a = b) or (b < c) and (c <> d) then begin
… end;
В приведенном выше примере сначала определяются результаты сравнений, затем выполняется операция and («И»), а затем or («ИЛИ»).
Вложенный if аналогичен логической операции and. Например, if (x > 5) and (x < 10) then
Writeln('х попадает в интервал'); аналогично
if (x > 5) then if (x < 10) then
Writeln('х попадает в интервал');
Однако два подряд идущих if не аналогичны or: if (x < 5) or (y < 5) then
Writeln('Хотя бы одна из переменных меньше 5'); не аналогично if (x < 5) then
Writeln('Хотя бы одна из переменных меньше 5'); if (y < 5) then
Writeln('Хотя бы одна из переменных меньше 5');
поскольку если x<5 и y<5 одновременно, то будет выведено две строки. Кроме того, если в теле условного оператора меняется значение x и y, проверка истинности второго условия может быть искажена, даже если условия в этих if взаимоисключающие.
Значения логического типа boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь).
Логический тип является порядковым. В частности,
False < True ,
Ord(False) = 0 , Ord(True) = 1.
К логическим относятся бинарные операции and, or и xor, а также унарная операция not, имеющие операнды типа boolean и возвращающие значение типа boolean. Эти операции подчиняются стандартным правилам логики:
a and b - истинно только тогда, когда истинны a и b, a or b - истинно только тогда, когда истинно либо a, либо b, a xor b - истинно только тогда, когда только одно из a и b истинно, not a - истинно только тогда, когда a ложно.
Выражения с and и or вычисляются по "короткой схеме": в выражении x and y если x ложно, то все выражение ложно, и y не вычисляется; в выражении x or y если x истинно, то все выражение истинно, и y не вычисляется.
Примеры логических выражений:
(x⩾0) and (x⩽10) (ch=′y′) or (ch=′Y′)
(x=5) or (y=1)
(x+1>0) and (x+1<10) or (y>0) and (y<2).
Поскольку в Паскале приоритеты операций and и or выше приоритета операций сравнения (равно, больше, больше или равно и т. д.), то использование скобок в данных выражениях является обязательным.
Логические переменные в логических выражениях могут использоваться без операций сравнения: WallFromDown or WallFromUp
Импликация в языке Pascal не реализована, а эквиваленция может быть вставлена в условие как сравнение знаком = двух логических выражений. Исключающее или называется xor.
Пример. Определить, является ли введенное число номером месяца в году.
Программа решения задачи может иметь вид:
Program c2;
var a:integer; begin
write ('Введите целое число: ');
readln (a);
if (a>=1) and (a<=12) then write (‘Такой месяц в году существует’) else write ('Нет такого месяца в году'); end.
Задачи для самостоятельного решения
Варианты заданий
Вариант |
Задание 1 Уровень 3 |
Задание 2 Уровень 4 |
Задание 3 Уровень 5 |
1 |
1 |
6 |
2 |
2 |
2 |
5 |
3 |
3 |
3 |
4 |
4 |
4 |
4 |
3 |
5 |
5 |
5 |
2 |
6 |
6 |
6 |
1 |
6 |
7 |
1 |
2 |
5 |
8 |
2 |
3 |
4 |
9 |
3 |
4 |
3 |
10 |
4 |
5 |
2 |
11 |
5 |
6 |
1 |
12 |
6 |
3 |
1 |
13 |
1 |
4 |
2 |
14 |
2 |
5 |
3 |
15 |
3 |
6 |
4 |
16 |
4 |
4 |
5 |
17 |
5 |
5 |
6 |
18 |
6 |
6 |
1 |
19 |
1 |
5 |
2 |
20 |
2 |
6 |
3 |
21 |
3 |
1 |
4 |
22 |
4 |
2 |
5 |
23 |
5 |
3 |
6 |
24 |
6 |
4 |
1 |
25 |
1 |
3 |
2 |
© ООО «Знанио»
С вами с 2009 года.