Построение условий с помощью AND и OR.

advertisement
14.11.2008.
Построение условий в Pascal, AND и OR
До сих пор мы умели проверять в программе простые условия состоящие, грубо говоря, из одного
сравнения. Например:
«Переменная X больше нуля» будет выглядеть как (X>0)
«переменная A меньше любо равна пяти» будет выглядеть как (A <= 5)
А если условие немножко посложнее?
Например, пользователь вводит номер месяца и надо проверить, что он не ошибся.
А какие бывают номера у месяцев? Ну, элементарно: Январь это 1, февраль это 2, март это 3, и так
далее... до декабря, который 12.
Значит, число которое ввёл пользователь должно быть «от 1 до 12»
(здесь самые догадливые сразу закричат – «а как проверить, что введённое число целое?!». А пока никак  в
этом нам придётся уже просто довериться пользователю)
Ага! А как такое условие записать математически? Предположим, что введённое число хранится в
переменной Month. Вот заготовка нашей программы:
Program CheckMonth;
Var Month: Real;
Begin
Write(‘Введите номер месяца: ’);
Readln(Month);
If (в Month хранится допустимый номер для месяца) Then
Begin
Writeln(‘Всё хорошо!’);
End
Else Begin
Writeln(‘Это не номер месяца!’);
End;
End.
Итак, вернёмся к математике. Предлагаю такое неравенство для проверки месяца: 1 Month  12
Ну в самом деле, номер месяца это и есть число от 1 до 12. Можно ещё вот так записать:
Month  [1;12]
Всё это хорошо и правильно математически, !но! Записать такое условие: (1 Month  12) в
Pascal нельзя. Как мы уже говорили, каждое условие – это сравнение двух величин.
Например: (Что-То > Что-То), (Что-То = Что-То),(Что-То <= Что-То), и.т.д.
А как разделить наше условие на две такие части? Легко!
(1 Month  12) превращается в (1 Month) и (Month  12)
Особое внимене обратите на это маленькое словечко «и» которым мы склеили два наших новых
условия. Это очень важное словечко. Ведь нам на самом деле нужно чтобы оба новых условия
выполнялись одновременно. Если, например, в переменной Month хранится число 100, то первое
условие (1 Month) очень даже выполняется. Ноо зато не выполняется второе, а значит 100 не
может быть номером месяца. Что в общем-то и понятно 
1
Итак, финальный штрих, конечный вариант программы:
Program CheckMonth;
Var Month: Real;
Begin
Write(‘Введите номер месяца: ’);
Readln(Month);
If (1 Month) AND (Month  12) Then
Begin
Writeln(‘Всё хорошо!’);
End
Else Begin
Writeln(‘Это не номер месяца!’);
End;
End.
Заметьте как просто оказалось – надо было всего лишь перевести «и» на английский.
А есть ещё и другой способ строить условия – объединять их с помощью ключевого слова OR
Т.е. «или». Так мы будем делать, когда нас устраивает один из нескольких вариантов
Например, если пользователь вводит номер дня недели, а нам надо сказать – выходной это или
нет. Что такое выходной? – это день с номером 6 или 7. Значит, если ввели 6 или 7, то надо
сказать, что это выходной. Вот что получается:
Program CheckDays;
Var Day: Real;
Begin
Write(‘Введите номер дня недели: ’);
Readln(Day);
If (Day = 6) OR (Day = 7) Then
Begin
Writeln(‘Это выходной!’);
End
Else Begin
Writeln(‘Это рабочий день.’);
End;
End.
2
Можно, конечно, было и наоборот написать – если это 1 или 2 или 3 или 4 или 5, то это рабочий
день, т.е. вот так:
Program CheckDays;
Var Day: Real;
Begin
Write(‘Введите номер дня недели: ’);
Readln(Day);
If (Day=1) OR (Day=2) OR (Day=3) OR (Day=4) OR (Day=5) Then
Begin
Writeln(‘Это рабочий день.’);
End
Else Begin
Writeln(‘Это выходной!’);
End;
End.
Но так больше писать  Хотя, если уж совсем по-хорошему делать, то стоит подумать и о том
случае, когда пользователь ввёл вообще не номер дня недели. Он же мог ввести слишком
большое, слишком маленькое число. Или вообще дробное!
Предлагаю теперь вот такой вариант программы:
Program CheckDays;
Var Day: Real;
Begin
Write(‘Введите номер дня недели: ’);
Readln(Day);
If (Day=1) OR (Day=2) OR (Day=3) OR (Day=4) OR (Day=5) Then
Begin
Writeln(‘Это рабочий день.’);
End
Else Begin
If (Day = 6) OR (Day = 7) Then
Begin
Writeln(‘Это выходной!’);
End
Else Begin
Writeln(‘Это вообще не день недели!’);
End;
End;
End.
Как она работает:
Если ввели 1 или 2 или 3 или 4 или 5, то говорим, что это рабочий день, в противном случае (в
else) остаётся ещё два варианта: либо это выходной, либо вообще не день недели. Ставим
проверку: если ввели 6 или 7, то говорим, что это выходной, в противном случае говорим, что
это вообще не день недели.
3
Download