Неполный и полный варианты
Только самые элементарные алгоритмы могут работать без ветвления. Неполный вариант идеален в случае, когда какое-либо действие необходимо выполнить лишь при выполнении условия, полный — при существовании альтернативной ветви процедур. В языке Паскаль условный оператор имеет такой синтаксис, состоящий из трёх частей:
- «If» («если») — после этого пишется условие. Примечательно, что скобки в общем случае не используются, но они не повлияют на компиляцию. Если предполагается изучение Си в дальнейшем, следует вырабатывать привычку их использования.
- Сразу же за описанным условием идёт «then» («то») и блок нескольких команд (со следующей строки), обособляемый операторными скобками begin и end. Эти системные слова можно опустить, если вызывается лишь одна процедура, то есть оператор не является составным.
- Фрагмент, отсутствующий в неполной версии — «else» («иначе»). Полностью аналогичен предыдущей части.
Операции, размещённые после «then» актуальны для верного содержания «if» (результат «True»), после «else» — неверного («False»).
Содержание
Программирование ветвлений на Паскале
Оператор ветвления на Паскале
В языке Паскаль имеется оператор ветвления
. Другое его название — условный оператор. Формат полного оператора ветвления следующий:
if
thenelse
Здесь if
— «если»,
then
— «то»,
else
— «иначе».
Программирование полного и неполного ветвления
Сравните запись алгоритма БИД1 из предыдущего параграфа с соответствующей программой.
алг БИД1 вещ А, В, С нач ввод А, В если А>В то С:=А иначе С:=В кв вывод С кон | Program BID1; var А, В, С : real; begin readln(А, В); if A>B then C:=A else C:=B; writeln(С) end. |
Очень похоже на перевод с русского языка на английский. Обратите внимание на следующее отличие: в программе нет специального служебного слова, обозначающего конец ветвления. Здесь признаком конца оператора ветвления является точка с запятой. (Разумеется, оставлять в программе пустую строку совсем не обязательно. Здесь это сделано только ради наглядности.)
Простой формой логического выражения является операция отношения
. Как и в АЯ, в Паскале допускаются все виды отношений (ниже указаны их знаки):
> (больше); | = (равно); (не равно). |
А теперь запрограммируем на Паскале алгоритм БИД2, в котором использовано неполное ветвление.
алг БИД2 вещ А, В, С нач ввод А, В С:=А если В > А то С:=B кв вывод С кон | Program BID2; var А, В, С : real; begin readln(А, В); С:=А; if B>A then C:=B; write(С) end. |
Опять все очень похоже. Ветвь else в операторе ветвления может отсутствовать.
Программирование вложенных ветвлений
Запишем на Паскале программу определения большего из трех чисел, блок-схема которой показана на рис. 3.10. Структура этого алгоритма — вложенные ветвления. Алгоритм на АЯ (БИТ2) приведен в предыдущем параграфе.
Рис. 3.10. Блок-схема алгори с вложенными ветвлениями |
Program
BIT2;
var
А, В, С, D: real;
begin
readln(А, В, С);
if
A>B
then if
A>C
then
D:=A
else
D:=B
else if
B>C
then
D:=B
else
D:=C; writeln(D)
end.
Обратите внимание на то, что перед else
точка с запятой не ставится. Вся ветвящаяся часть структуры алгоритма заканчивается на точке с запятой после оператора D:=C.
Составим программу упорядочения значений двух переменных.
алг СОРТИРОВКА вещ X, Y, С нач ввод X, Y если X>Y то С:=Х X:=Y Y:=C кв вывод X, Y кон | Program SORTING; var X, Y, С : real; begin readln(X, Y) ; if X>Y then begin С : =X; X:=Y; Y:=C end ; write(X,Y) end. |
Этот пример иллюстрирует следующее правило Паскаля: если на какой-то из ветвей оператора ветвления находится несколько последовательных операторов, то их нужно записывать между служебными словами begin
и
end
. Конструкция такого вида:
begin
end
называется составным оператором
. Следовательно, в описанной выше общей форме ветвления и могут быть простыми (один) и составными операторами.
Логические операции
Наконец, составим еще один, третий вариант программы определения большего числа из трех.
Program
BIT3;
var
А,В,С,D: real;
begin
readln(А,В,С);
if
(A>=B)
and
(A>=C)
then
D:=A;
if
(B>=A)
and
(B>=C)
then
D:=B;
if
(C>=A)
and
(C>=B)
then
D:=C; writeln(D)
end.
Нетрудно понять смысл этой программы. Здесь использованы три последовательных неполных ветвления. А условия ветвлений представляют собой сложные логические выражения
, включающие логическую операцию
and
(И). С логическими операциями вы встречались, работая с базами данных и с электронными таблицами.
Напомним, что операция and называется логическим умножением или конъюнкцией. Ее результат — «истина», если значения обоих операндов — «истина». Очевидно, что если А>=В и А>=С, то А имеет наибольшее значение и т. д. В Паскале присутствуют все три основные логические операции:
and
— И (конъюнкция),
or
— ИЛИ (дизъюнкция),
not
— НЕ (отрицание).
Сложные логические выражения
Обратите внимание на то, что отношения, связываемые логическими операциями, заключаются в скобки. Так надо делать всегда! Например, требуется определить, есть ли среди чисел А, В, С хотя бы одно отрицательное. Эту задачу решает следующий оператор ветвления:
if
(A
then
write ( ‘YES ‘)
else
write( ‘NO ‘);
Выражение, истинное для отрицательного числа, может быть записано еще и так:
not
( A >= 0)
Вопросы и задания
1. Как программируется на Паскале полное и неполное ветвление?
2. Что такое составной оператор? В каких случаях составной оператор используется в операторе ветвления?
3. Выполните на компьютере все программы, приведенные в данном параграфе.
4. Составьте не менее трех вариантов программы определения наименьшего из трех данных чисел.
5. Составьте программу сортировки по возрастанию значений в трех переменных: А, В, С.
6. Составьте программу вычисления корней квадратного уравнения по данным значениям его коэффициентов.
Принципы построения условий
Первоочередно требуется знать операторы отношения. В Паскале их виды описаны так:
- >— строгое «больше»;
- >= — нестрогое «больше»;
- < — строгое «меньше»;
- <= — нестрогое «меньше»;
- = — сравнение на равенство, отличается от присваивания отсутствием двоеточия;
- <> — сравнение на неравенство.
Простейшие односоставные условия не выделяются скобками. В обеих сторонах от оператора может фигурировать любая переменная или число. Для более сложных случаев нужны логические операции:
- Конъюнкция «AND». Истинно только когда оба условия верны. На естественном языке будет называться как «и».
- Дизъюнкция «OR». Ложно только при двух значениях «False». Можно интерпретировать как «или».
- Строгая дизъюнкция «XOR». Проверяет на совмещение истины с ложью.
- Отрицание «NOT». Меняет результат на противоположный — смысловое «не».
Части комбинированного условия, разделённые логическими операторами, обязательно обособляются кавычками. Иначе программа может скомпиллироваться, но работать не так, как предполагалось. Важно понимать, что схеме ветвления возможно задать сколько угодно уровней — условные операторы могут применяться внутри своих же блоков, при этом их можно вложить в цикл.
Примеры задач
Есть множество примеров использования условных операторов, ведь они незаменимая часть многих алгоритмов. Например, решение задачи о поиске максимума в массиве сводится к циклу с неполным ветвлением в теле: инициализированная первым членом переменная переписывается только в случае, когда она строго меньше элемента массива или введённого пользователем числа.
Если поставлен вопрос о протяжённости пути велосипедиста, который первые 3 часа едет со скоростью 15 километров в час, а остальное время — 8, значит, в коде программы будет полная структура. Для времени t, меньшего или равного 3, актуальна формула «s := 15*t», для большего значения — «s := 15*3 + 15*(t-3)».
Программу, определяющую попадание числа x в отрезок от 25 до 50, можно описать одной строкой: if (x >= 25) AND (x <= 50) then writeln (‘входит’). Число x, в зависимости от условий, может вводиться пользователем или считываться из массива. В некоторых задачах нужны дополнительные вычисления. Их можно указать прямо при сравнении, так как у операторов отношения приоритет ниже. Например, при проверке числа на чётность актуально условие «x mod 2 = 0».
Неполные ветвления требуют владения операторами отношения. Для полных нужны логические операции. Хотя условные операторы изучаются на уроках информатики в 8 классе, они база всех алгоритмов. Это касается почти всех языков программирования: Паскаля (Pascal), Си©, Джавы (Java) и других.
Условный оператор в Паскале
До рассмотрения данной темы в основном использовались линейные алгоритмы в Паскале, характерные для весьма простых задач, когда действия (операторы) выполняются последовательно, одно за другим. Более сложные алгоритмы предусматривают использование конструкция ветвления.
Блок-схема условного оператора:
Условный оператор в Паскале имеет следующий синтаксис:
Сокращенный вариант:
if условие then оператор; if условие then оператор;
Полный вариант:
if условие then оператор else оператор; if условие then оператор else оператор;
Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.
Составной оператор
Если при истинном условии необходимо выполнять несколько операторов, то их по правилам языка Pascal необходимо заключать в блок, начинающийся со служебного слова begin и заканчивающегося служебным словом end. Такой блок принято называть операторными скобками, а данную конструкцию — составным оператором:
Операторные скобки и составной оператор в Паскале:
if логическое выражение then begin оператор1; оператор2; end else begin оператор1; оператор2; end; if логическое выражение then begin оператор1; оператор2; end else begin оператор1; оператор2; end;
Перевод с английского оператора условия облегчит понимание его использования:
IF | THEN | ELSE |
ЕСЛИ | ТО | ИНАЧЕ |
В условии (в логическом выражении) используются операторы отношения. Рассмотрим список операторов отношения Паскаля:
- больше >
- меньше
- больше или равно в Pascal >=
- меньше либо равно в Pascal
- сравнение в Pascal =
- не равно в Pascal
Пример: найти наибольшее из двух чисел
Вариант 1 | Вариант 2 |
Подробно разобраться в работе условного оператора в Паскале можно, просмотрев видеоурок:
Пример: вычислить значение переменной у по одной из двух ветвей
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 | var x,y:real; begin writeln (‘введите х’); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln (‘y=’, y:6:2) {итоговое число будет занимать 6 позиций, и в нем будет 2 знака после запятой} end. |
var x,y:real; begin writeln (‘введите х’); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln (‘y=’, y:6:2) {итоговое число будет занимать 6 позиций, и в нем будет 2 знака после запятой} end.
Обратите внимание на то, как в данном примере выводится y. При выводе переменных типа real в pascal, можно использовать так называемый форматированный вывод, или запись с двумя двоеточиями: y:6:2 — цифра после первого двоеточия (6) указывает на то, сколько знаков будет занимать число при выводе на экран — цифра после второго двоеточия (2) указывает на то, сколько знаков после запятой вещественного числа будет выводиться
Таким образом, использование такой записи в pascal практически позволяет выполнить округление до сотых, тысячных и т.п.
Задача 0. Вычислить значение переменной у по одной из двух ветвей:
Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе — произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА
Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет — только по две. Сколько голов и глаз у дракона, которому N лет?
Логические операции в Паскале (в логическом выражении)
Когда необходимо использовать двойное условие в Pascal, то понадобятся логические операции.
- Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции — «конъюнкция».
- Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции — «дизъюнкция».
- На языке Паскаль XOR — знак логической операции, имеющий смысл «строгая дизъюнкция» и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое — не выполнялось (ложно).
- Логическая операция NOT перед логическим выражением или переменной имеет смысл «отрицание» или «инверсия» и указывает на то, что если данная переменная или выражение истинны, то их отрицание — ложь и наоборот.
Важно: Каждое из простых условий обязательно заключать в скобки.
Пример: Рассмотрим примеры логических операций в логических выражениях в Паскале
1 2 3 4 5 6 7 8 | var n:integer; begin n:=6; if (n>5) and (n<10) then writeln(‘истина’); if (n>7) or (n<10) then writeln(‘истина’); if (n>7) xor (n<10) then writeln(‘истина’); if not(n>7) then writeln(‘истина’); end. |
var n:integer; begin n:=6; if (n>5) and (n<10) then writeln(‘истина’); if (n>7) or (n<10) then writeln(‘истина’); if (n>7) xor (n<10) then writeln(‘истина’); if not(n>7) then writeln(‘истина’); end.
Пример: Компания набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он для данной компании (вывести ответ «подходит» или «не подходит»). Особенность: надо проверить, выполняются ли два условия одновременно.
Вариант 1 | Вариант 2 |
Пример: Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».
Открыть решение:
1 2 3 4 5 6 7 8 9 10 11 | var a,b: integer; begin write(‘Введите A: ‘); read(a); b := a mod 2; if b>0 then writeln(‘true’) else writeln (‘false’) end. |
var a,b: integer; begin write(‘Введите A: ‘); read(a); b := a mod 2; if b>0 then writeln(‘true’) else writeln (‘false’) end.
Задача 3. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
Задача 4. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 — то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля — НЕ БЕЙ ПО СВОИМ