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