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

Часто в зависимости некоторого условия необходимо выполнять различные действия. В этом случае используется оператор ветвления. Также он называется условным оператором. Этот оператор оформляется следующим образом

 

If условие then

begin

операторы1

end

else

begin

операторы 2

end

Если условие истинно, то будут выполнены операторы 1, которые идут после слова then. Иначе будут выполнены операторы 2, которые идут после else. Примеры условий в паскале:

x>=0

y+4<2*x-1

В условии записывают два выражения, а между ними знак сравнения >, <, >=, <=, =, <>. Последний знак означает «не равно». Вместо выражений можно писать имена переменных или числа.

Например

if x>0 then

begin

writeln(‘круг’)

end

else

begin

writeln(‘квадрат’);

end;

В этом примере если x>0, то программа выведет на экран слово круг, в противном случае – квадрат. Пара слов begin и end называется операторными скобками. Если между скобками записан только один оператор, то begin и end можно не писать, например

if x>0 then

writeln(‘круг’)

else

writeln(‘квадрат’);

 

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

if x>0 then

begin

writeln(‘круг’);

end;

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

Решение:

var x:integer;

begin

readln(x);

if x>0 then

writeln('x-положительное')

else

writeln('x не является положительным');

end.

Задачи

  1. Запросить с клавиатуры значение переменной x. Если x>6, то сообщить об этом.
  2. Запросить с клавиатуры число. Определить, делится ли оно на 8.
  3. Запросить с клавиатуры x. Если оно четно, сообщить об этом.
  4. Запросить с клавиатуры значение переменных x и y. Если x>y, то записать в переменную y значение выражения x+y
  5. Запросить с клавиатуры значение переменных x и y. Если x не равно y, то прибавить к переменной x значение переменной y.
  6. Запросить с клавиатуры число. Если его последняя цифра отлична от 1, прибавить к числу последнюю его цифру. Ответ вывести на экран.
  7. Запросить с клавиатуры значения переменных x и y. Если x<y, то поменять местами значения переменных.

 

Сложные условия.

Рассмотрим задачу. Прочитать с клавиатуры три числа. Сообщить, равны ли он друг другу. Вопрос о равенстве двух чисел решается просто – условие x=y. Для того, чтобы три числа были одинаковы, должно выполняться сразу два условия x=y и y=z. В паскале это записывается так (x=y) and (y=z). Два простых условия объединены в одно сложное при помощи операции and (и). В этом случае сложное условие истинно, если оба простых истинны. В паскале имеются следующие операции, позволяющие составлять сложные условия из простых

AND (и) – сложное условие истинно, если оба простых истинны

OR (или) – сложное условие истинно, если хотя бы одно из простых истинно

NOT (не) – выражение «NOT условие» истинно, если условие ложно и наоборот.

Примеры. Выражение (x=y) or (y=z) or (x=z) истинно, если среди x, y, z есть хотя бы два равных числа. Выражение not (x=y) истинно, если x не равно y.

Из простых условий при помощи операций and, or, not можно составлять очень сложные условия. При этом все простые условия должны заключаться в скобки. Вы знаете, что в математике при вычислении выражения сначала выполняются умножения и деления, затем сложения и вычитания, а если нужно изменить порядок выполнения операций, используются скобки. В сложных условиях действуем также. Здесь and – умножение, or – сложение. Not выполнятся в первую очередь (еще до and).

Пример. Проверить, есть ли среди трех заданных чисел равные?

Решение:

var x,y,z:integer;

begin

readln(x,y,z);

if (x=y) or (y=z) or (x=z) then writeln(‘да’)

else writeln('нет’);

end.

 

В конструкции if между begin и end могут находиться любые операторы, в том числе операторы ветвления.

Задачи.

  1. Запросить с клавиатуры координату точки на числовой прямой. Принадлежит ли точка отрезку [1,5]?
  2. Запросить с клавиатуры длины трех отрезков. Если из них нельзя составить треугольник, сообщить об этом.
  3. Запросить с клавиатуры  длины трех отрезков. Можно ли из них составить треугольник?
  4. Прямоугольный конверт имеет размеры a, b. Прямоугольное письмо имеет размеры c, d. Можно ли вложить письмо в конверт, не сгибая его? Стороны письма должны быть параллельны сторонам конверта.
  5. Можно ли просунуть кирпич со сторонами a, b, c в прямоугольное отверстие со сторонами x, y? Кирпич просовывать без перекосов.
  6. Витя разбил копилку, решив, что если в ней больше, чем 100 рублей, то сегодня он купит новую книгу, но если больше, чем 200, то он подождет до субботы. В субботу родители добавят ему 50 рублей, и он купит новую игру. После подсчета всех денег из копилки оказалось, что в ней находится X монет по 1 рублю, Y двухрублевых монет, Z монет достоинством 5 рублей. Будет ли Витя покупать книгу?
  7. Запросить с клавиатуры число. Если это число больше 5 и делится на три, умножить его на 2 и вывести на экран.
  8. Запросить с клавиатуры число. Если оно меньше 10 и больше 5 или если оно делится на 3, вывести на экран свое имя.
  9. Запросить с клавиатуры число. Если оно может быть номером какого – нибудь года прошлого века, сообщить, високосный это год, или нет. В противном случае вывести на экран сообщение об ошибке.

Решение:

Пусть номер года записан в переменной x. Сначала следует проверить, лежит ли x между 1901 и 2000 включительно. Следовательно, необходима конструкция ветвления (if (x>=1901) and (x<=2000) then...) Если да, то нужно выполнить сразу несколько действий, поэтому необходимо создать составной оператор, то есть после слова then ставим begin, затем пропускаем несколько строчек и пишем слово end (точку с запятой после него не ставим, так как дальше пойдет слово else).

Теперь разберемся, что следует записать между операторными скобками begin...end. Нужно проверить, високосный ли этот год, то есть делится ли переменная x на 4. Необходима еще одна конструкция ветвления, вложенная в составной оператор. После begin пишем if x mod 4=0 then... В этом случае необходимо вывести 'високосный’, для этого нужен лишь один оператор writeln. Значит, нет необходимости ставить begin...end. Иначе – пишем слово else и writeln(‘не високосный’).

Осталось запрограммировать ситуацию, когда число не является годом прошлого века. После операторной скобки end пишем else, а далее нужно просто вывести на экран слово ‘ошибка’. Операторные скобки здесь также не нужны.

var x:integer;

begin

readln(x);

if (x>=1901) and (x<=2000) then

begin

if x mod 4=0 then writeln(‘високосный’)

else writeln(‘не високосный’);

end

else

writeln(‘ошибка’);

end.

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

  1. Запросить с клавиатуры x и y. Если x>y, то прибавить к y последнюю цифру x. Если полученное число все еще меньше x, сообщить об этом.
  2. Запросить с клавиатуры числа x, y, z. Вывести на экран большее из них.
  3. Прочитать с клавиатуры возраст ученика (сколько лет). Вывести на экран фамилию любого ученика вашей группы, у которого такой возраст. Если таких учеников нет, сообщить об этом.
  4. Прочитать с клавиатуры номер месяца. Какой это месяц (зимний, осенний, весенний, летний)?
  5. Прочитать с клавиатуры номер урока. Вывести на экран название этого урока по расписанию на сегодня.
  6. Прочитать с клавиатуры координаты концов отрезка x1, y1, x2, y2. Если отрезок помещается на экране компьютера, сообщить об этом. Если не попадает в экран, сообщить об этом. Если пересекает экран, сообщить об этом.
  7. Запросить с клавиатуры число. Равны ли его последняя и предпоследняя цифры?
  8. Выяснить, равны ли первая и последняя цифры в заданном трехзначном числе.
  9. В заданном трехзначном числе найти самую большую цифру.
  10. Определить, сколько различных цифр в заданном трехзначном числе.

Задачи повышенной сложности.

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