Условный оператор
Условный оператор имеет полную и краткую формы.
Полная форма условного оператора выглядит следующим образом:
if условие then оператор1
else оператор2
В качестве условия указывается некоторое логическое выражение. Если условие оказывается истинным, то выполняется оператор1 , в противном случае выполняется оператор2 .
Краткая форма условного оператора имеет вид:
if условие then оператор
Если условие оказывается истинным, то выполняется оператор , в противном случае происходит переход к следующему оператору программы.
В случае конструкции вида
if условие1 then
if условие2 then оператор1
else оператор2
else всегда относится к ближайшему предыдущему оператору if , для которого ветка else еще не указана. Если в предыдущем примере требуется, чтобы else относилась к первому оператору if , то необходимо использовать составной оператор:
if условие1 then
begin
if условие2 then оператор1
end
else оператор2
Условные операторы
Бывает, что в процессе выполнения программы требуется реализовать разный набор команд в зависимости от произошедших до этого событий, то есть ветвление. В языках программирования это достигается с помощью специальных конструкций – условных операторов.
Чаще всего в качестве условного оператора в языках программирования используется конструкция if-else или ее сокращенный вариант if. Также существует оператор выбора case, который имеет более специфичное применение.
Оператор if-else
Когда выполнение основной ветки программы доходит до условного оператора if-else , то в зависимости от результата логического выражения в его заголовке выполняются разные блоки кода. Если логическое выражение вернуло true , то выполняется один блок (в Паскале начинается со слова then ), если false – то другой (начинается со слова else ). После выполнения одного из вложенных блоков кода, ход программы возвращается в основную ветку. Другой вложенный блок не выполняется.
Например, программа должна определять, ввел пользователь четное или нечетное число, и выводить на экран сообщение. Тогда программный код на языке Pascal может быть таким:
var n: integer; begin write ('Введите целое число: '); readln (n); if n mod 2 = 0 then write ('Оно четное.') else write ('Оно нечетное.'); end.
Бывают неполные формы условных операторов. В таком случае вложенный в if блок кода выполняется только, когда логическое выражение в заголовке возвращает true . В случае false выполнение программы сразу передается в основной блок. Понятно, что ветка else в таком случае отсутствует.
В примере ниже, если переменная имеет значение меньше нуля, то ее значение изменяется (находится модуль числа). Если же значение переменной изначально больше нуля, то блок кода при операторе if вообще не выполняется, т.к. не соблюдено условие ( n < 0 ).
var n: integer; begin write ('Введите целое число: '); readln (n); if n < 0 then n := abs (n); write (n); end.
В качестве условия может стоять любое выражение, результатом вычисления которого является одно из булевых значений — true или false .
Непосредственно после then может стоять только один оператор. При необходимости выполнения нескольких операторов они должны быть заключены в операторные скобки begin-end . Пример программы, которая меняет значения переменных местами, только если эти значения различны. Блок if содержит четыре выражения, поэтому заключен в begin-end .
var a,b,c: integer; begin write('a='); readln(a); write('b='); readln(b); if a <> b then begin c := a; a := b; b := c; writeln('a=',a,'; b=',b); end else writeln('Введены одинаковые числа'); end.
Допустимо вложение одного оператора if (или if-else ) в другой. При этом следует соблюдать осторожность, так как бывает трудно определить, какому if (внешнему или внутреннему) принадлежит ветка else . Рекомендуют использовать вложенную конструкцию if , только в ветке else . К тому же в языке Паскаль действует следующее правило: каждому then соответствует ближайшее else , не задействованное при установлении соответствия с другим then . Глубина вложенности операторов if может быть сколь угодно большой, но разобраться в таком коде будет очень сложно.
Оператор case (оператор выбора)
Кроме оператора if в языке программирования Паскаль предусмотрен так называемый переключатель case . Его можно трактовать как некий вопрос, имеющий большое число ответов (а не только два, как это имеет место в операторе if-else ). Однако в отличие от if, case имеет ряд принципиальных ограничений. Его формат следующий:
case селектор of значение1: оператор1; значение2: оператор2; значение3: оператор3; . else операторN end;
В заголовке оператора case вместо логического выражения фигурирует переменная, которую называют селектором. До этого в программе ей присваивается какое-либо значение. Эта переменная может иметь только перечисляемый тип (например, она не может быть вещественного типа). По ходу выполнения оператора case , значение переменной-селектора сравнивается с различными описанными в нем альтернативами (метками-значениями). Как только совпадение будет найдено, то выполняется блок кода при данной метке и происходит выход в основную ветку программы. Значения-метки являются константами, которые может принимать селектор. Их тип и тип селектора должны быть совместимы по присваиванию.
Если совпадений не будет, то выполняется блок else . Если блок else отсутствует (он является не обязательным), то никакой блок кода в операторе case не выполняется.
var n: integer; begin write ('Введите класс школы: '); readln (n); case n of 1..4: writeln ('Младшие классы.'); 5..8: writeln ('Средняя школа.'); 9,11: writeln ('Старшие классы. Выпускной.'); 10: writeln ('Старшие классы.'); else writeln ('Error') end; end.
На использование оператора выбора накладываются следующие ограничения:
- селектор должен иметь какой-либо порядковый тип;
- каждая альтернатива должна быть константой, диапазоном, списком диапазонов, но не переменной или выражением.
Pascal-Паскаль
Программирование. Условные операторы Pascal-Паскаль
- Скачено бесплатно: 26859
- Куплено: 414
- Pascal-Паскаль->Программирование. Условные операторы Pascal-Паскаль
Программирование. Условные операторы Pascal-Паскаль
Условные операторы Pascal-Паскаль
Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x и z, и на каком-то этапе решения задачи требуется вычислить z=max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:=x, либо оператора присваивания z:=y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания.
Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:=x; в противном случае для исполнения должен выбираться оператор z:=y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:=y в этом случае даст правильный результат).
Для задания подобного рода разветвляющихся вычислительных процессов в языках программирования существуют условные операторы. Рассмотрим полный условный оператор Паскаля:
if B then S1 else S2
Здесь if (если), then (то) и else (иначе) являются служебными словами, В – логическое выражение, а S1 и S2 – операторы.
Выполнение такого условного оператора в Паскале сводится к выполнению одного из входящих в него операторов S1 или S2: если заданное в операторе условие выполняется (логическое выражение В принимает значение true), то выполняется оператор S1, в противном случае выполняется оператор S2.
Алгоритм решения упомянутой выше задачи вычисления z= max( x, y) можно задать в виде условного оператора Паскаля
if x>y then z:= x else z:= y
При формулировании алгоритмов весьма типичной является такая ситуация, когда на определенном этапе вычислительного процесса какие-либо действия надо выполнить только при выполнении некоторого условия, а если это условие не выполняется, то на данном этапе вообще не нужно выполнять никаких действий. Простейшим примером такой ситуации является замена текущего значения переменной х на абсолютную величину этого значения: если x=0, то текущее значение х должно остаться без изменений, т.е. на данном этапе вообще не надо выполнять каких-либо действий.
В подобных ситуациях удобна сокращенная форма записи условного оператора в Паскале:
if B then S
Правило выполнения сокращенного условного оператора Паскаля достаточно очевидно: если значение логического выражения В есть true, то выполняется оператор S; в противном случае никаких иных действий не производится.
В языке программирования Паскаль в условном операторе между then и else, а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить некоторую последовательность действий, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin. end (это важно!). Если, например, при x< y надо поменять местами значения этих переменных, то условный оператор будет записан следующим образом в Паскале:
if xthen begin r:=x; x:=y; y:=r end
Наличие сокращенной формы условного оператора Паскаля требует большой осторожности при использовании. Например, условный оператор
if B1 then if B2 then S1 else S2
допускает, вообще говоря, две разные трактовки:
- как полный условный оператор Паскаля вида
if B1 then begin
if B2 then S1 end
else S2
- как сокращенный условный оператор Паскаля вида
if B1 then begin
if B2 then S1 else S2 end
По правилам Паскаля имеет место вторая трактовка, т.е. считается, что каждое слово else соответствует первому предшествующему ему слову then. Для избежания возможных ошибок и недоразумений можно порекомендовать во всех подобных случаях четко выделять желаемую форму условного оператора Паскаля путем взятия в операторные скобки.
Оператор выбора Паскаля
Оператор выбора Паскаля позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора – выражение любого порядкового типа.
Структура оператора выбора в Паскале такова:
Case of
[else ] end
Здесь case, of, else, end – зарезервированные слова (случай, из, иначе, конец);
- произвольные операторы Паскаля.
Оператор выбора Паскаля работает следующим образом. Вначале вычисляется значение выражения , а затем в последовательности отыскивается константа, равная вычисленному значению. Выполняется оператор, который следует за найденной константой, после чего оператор выбора завершает работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом else. Часть else можно опустить, тогда при отсутствии в списке выбора нужной константы не будет выполнено никаких действий, и оператор выбора просто завершит свою работу.
Например, составим программу, которая по номеру дня недели выводит на экран его название:
Пример программы с использованием Case of
Program dni_nedeli;
Var n: byte;
Begin
Readln(n);
Case n of
1: writeln('понедельник ');
2: writeln('вторник ');
3: writeln('среда ');
4: writeln('четверг ');
5: writeln('пятница ');
6: writeln('суббота ');
7: writeln('воскресенье');
else writeln('дня недели с номером', n,'нет');
  end;
end.
Следует помнить, что все константы из списка выбора должны быть различны.
Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например, следующая программа при вводе одного из символов ' y' или ' Y' выведет на экран «Да», а при вводе ' n' или ' N' – слово «Нет».
Пример программы с использованием Case of с несколькими переменными
Var ch: char;
Begin
Readln(ch);
Case ch of
N, n: writeln('Да ');
Y, y: writeln('Нет ');
End;
End.
Очевидно, что рассмотренные выше программы можно записать с помощью вложенных или последовательно расположенных условных операторов, но в подобных задачах использование оператора выбора является более простым. Основное отличие условного оператора от оператора выбора состоит в том, что в условном операторе условия проверяются одно за другим, а в операторе выбора значение ключа выбора непосредственно определяет одну из возможностей.
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Pascal: Занятие №2. Часть 1: Условный оператор в Паскале (If)
![]()
Напоминаем, что данный сайт не претендует на полное изложение информации по теме. Целью портала является предоставление возможности усваивания материала на основе готовых решенных примеров по теме «Язык программирования Pascal» с практическими заданиями для закрепления материала. Представленные на сайте labs-org.ru задания по Паскалю выстроены последовательно по мере увеличения их сложности. Сайт labs-org.ru может быть использован учителями и преподавателями в качестве вспомогательного наглядного пособия.
Условный оператор в Паскале
До рассмотрения данной темы в основном использовались линейные алгоритмы в Паскале, характерные для весьма простых задач, когда действия (операторы) выполняются последовательно, одно за другим. Более сложные алгоритмы предусматривают использование конструкция ветвления.

Блок-схема условного оператора:
Условный оператор в Паскале имеет следующий синтаксис:
if условие then оператор;
Полный вариант:
if условие then оператор else оператор;
Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.

Составной оператор
Если при истинном условии необходимо выполнять несколько операторов, то их по правилам языка Pascal необходимо заключать в блок, начинающийся со служебного слова begin и заканчивающегося служебным словом 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 12 13
var x,y:real; begin writeln ('введите х'); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln ('y=', y:6:2) end.
1 2 3 4 5 6 7 8 9
begin var x:=readReal('введите х'); var y: real; if x>0 then y:=ln(x) else y:=exp(x); writeln ('y=', y:6:2) end.
begin var x:=readReal('введите х'); var y: real; if x>0 then y:=ln(x) else y:=exp(x); writeln ('y=', y:6:2) end.
Обратите внимание на то, как в данном примере выводится y . При выводе переменных типа real в pascal, можно использовать так называемый форматированный вывод, или запись с двумя двоеточиями:
y:6:2
- цифра после первого двоеточия ( 6 ) указывает на то, сколько знаков будет занимать число при выводе на экран
- цифра после второго двоеточия ( 2 ) указывает на то, сколько знаков после запятой вещественного числа будет выводиться
Таким образом, использование такой записи в pascal практически позволяет выполнить округление до сотых, тысячных и т.п.

Задача 0. Вычислить значение переменной у по одной из двух ветвей:
[Название файла: L2task0.pas ]
Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА
[Название файла: L2task1.pas ]
Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?
[Название файла: L2task2.pas ]
Логические операции в Паскале (в логическом выражении)
Когда необходимо использовать двойное условие в Pascal, то понадобятся логические операции.
- Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции - "конъюнкция".
- Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции - "дизъюнкция".
- На языке Паскаль XOR - знак логической операции, имеющий смысл "строгая дизъюнкция" и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое - не выполнялось (ложно).
- Логическая операция NOT перед логическим выражением или переменной имеет смысл "отрицание" или "инверсия" и указывает на то, что если данная переменная или выражение истинны, то их отрицание — ложь и наоборот.
Таблица истинности, содержащая все возможные комбинации операндов:
A B not A A or B A and B A xor B False False True False False False False True True True False True True False False True False True True True False True True False
Важно: Каждое из простых условий обязательно заключать в скобки.
Пример: Рассмотрим примеры логических операций в логических выражениях в Паскале
1 2 3 4 5 6 7 8
var n:integer; begin n:=6; if (n>5) and (n10) then writeln('истина'); if (n>7) or (n10) then writeln('истина'); if (n>7) xor (n10) 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.
1 2 3 4 5 6 7 8
var a,b: integer; begin write('Введите A: '); read(a); b := a mod 2; writeln(b>0); end.
var a,b: integer; begin write('Введите A: '); read(a); b := a mod 2; writeln(b>0); end.
Задача 3. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
[Название файла: L2task3.pas ]
Задача 4. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ , если оно больше или равно 30 - то ПЕРЕЛЕТ , если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ , если число меньше нуля — НЕ БЕЙ ПО СВОИМ
[Название файла: L2task4.pas ]
Рассмотрим функции pascalABC.NET, которые возвращают логическое значение true или false:
n.Divs(m) возвращает True, если целое n делится на m без остатка (n mod m = 0); n.DivsAll(m1, m2, . mn) возвращает True, если целое n делится без остатка на каждое из m1, m2, . mn; n.DivsAny(m1, m2, . mn) возвращает True, если целое n делится без остатка хотя бы на одно из m1, m2, . mn; n.InRange(a, b) - возвращает True, если для целого n верно, что a ≤ n ≤ b; n.IsEven возвращает True, если целое n имеет четное значение; n.IsOdd возвращает True, если целое n имеет нечетное значение; n.NotDivs(m) возвращает True, если целое n не делится на m без остатка (n mod m <> 0).
Построение блок-схем по коду Паскаль
Теперь настало время вспомнить о том, что такое блок-схемы.
Блок схема - ориентированный граф, указывающий на последовательность операций, приводящую к решению поставленной задачи.
Существуют управляющие структуры трех типов:
следование |
ветвление |
повторение или цикл |
Две из трех представленных структур блок-схемы мы уже можем перевести в код Pascal.
Пример: Составить блок-схему вычисления значения величины С , определяемое по формулам: С=A+B , если A и C=A-B , если A>B .

Результат:
Задача 5. Составить блок-схему решения задачи 3
Пример: автобусный билет считают счастливым, если сумма трех первых цифр билета равна сумме трех последних цифр. Требуется составить блок-схему алгоритма определения билета, имеющего счастливый номер.
Открыть решение:

Задача 6. По составленной выше блок-схеме решить задачу на Pascal
[Название файла: L2task6.pas ]
Задача 7. Дано двузначное целое число. Вывести сумму и произведение его цифр. Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка mod и операцию целочисленного деления div . Модуль числа - функция abs() .
Введите двузначное число: -12 Сумма цифр = 3 Произведение цифр = 2
[Название файла: L2task7.pas ]
Задача 8. Дано трёхзначное целое число. Вывести все его цифры (порядок не имеет значения). Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка mod и операцию целочисленного деления div .
Введите трёхзначное число: -123 Разряд сотен: 1 Разряд десяток: 2 Разряд единиц: 3
[Название файла: L2task8.pas ]
Использование функции Assert (pascalAbc.net)
Пользовательский ввод практически всегда должен проверяться на корректность. Чтобы избежать в программе ошибки, необходимо использовать функцию assert() , в качестве параметра которой указывается условие, которое должно возвращать значение true .
Пример:

Выполнить: Даны координаты точки (x,y) на координатной плоскости ( ≠ 0, ≠ 0). Вывести номер четверти:
var (x,y) := ReadInteger2; var quarter: integer; Assert((x<>0) and (y<>0), 'некорректный ввод'); // True if x>0 then if y>0 then quarter := 1 else quarter := 4 else if y>0 then quarter := 2 else quarter := 3;
var (x,y) := ReadInteger2; var quarter: integer; Assert((x<>0) and (y<>0), 'некорректный ввод'); // True if x>0 then if y>0 then quarter := 1 else quarter := 4 else if y>0 then quarter := 2 else quarter := 3;





следование
ветвление
повторение или цикл