условный оператор полная и неполная форма ветвления
Pascal: Занятие №2. Часть 1: Условный оператор в Паскале (If)
Условный оператор в Паскале
До рассмотрения данной темы в основном использовались линейные алгоритмы в Паскале, характерные для весьма простых задач, когда действия (операторы) выполняются последовательно, одно за другим. Более сложные алгоритмы предусматривают использование конструкция ветвления.
Блок-схема условного оператора:
Условный оператор в Паскале имеет следующий синтаксис:
if условие then оператор;
Полный вариант:
if условие then оператор else оператор;
Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.
Составной оператор
Операторные скобки и составной оператор в Паскале:
if логическое выражение then begin оператор1; оператор2; end else begin оператор1; оператор2; end;
Перевод с английского оператора условия облегчит понимание его использования:
IF | THEN | ELSE |
ЕСЛИ | ТО | ИНАЧЕ |
В условии (в логическом выражении) используются операторы отношения.
Рассмотрим список операторов отношения Паскаля:
Подробно разобраться в работе условного оператора в Паскале можно, просмотрев видеоурок:
begin var x:=readReal(‘введите х’); var y: real; if x>0 then y:=ln(x) else y:=exp(x); writeln (‘y=’, y:6:2) end.
Таким образом, использование такой записи в pascal практически позволяет выполнить округление до сотых, тысячных и т.п.
[Название файла: L2task0.pas ]
[Название файла: L2task1.pas ]
[Название файла: L2task2.pas ]
Логические операции в Паскале (в логическом выражении)
Когда необходимо использовать двойное условие в Pascal, то понадобятся логические операции.
var n:integer; begin n:=6; if (n>5) and (n 7) or (n 7) xor (n 7) then writeln(‘истина’); end.
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; writeln(b>0); end.
[Название файла: L2task3.pas ]
[Название файла: L2task4.pas ]
Построение блок-схем по коду Паскаль
Существуют управляющие структуры трех типов:
Две из трех представленных структур блок-схемы мы уже можем перевести в код Pascal.
Результат:
Урок 6. Условный оператор if
Урок из серии: «Язык программирования Паскаль»
Один из важнейших операторов Паскаля – условный оператор. Он позволяет изменять порядок выполнения операторов в зависимости от некоторого условия, представляющего собой логическое выражение типа Boolean. Если значение равно True, то выполняется одна группа операторов, если False, то другая группа операторов или не выполняется ничего.
В языке Паскаль имеются два условных оператора: if (оператор ветвления) и case (оператор выбора). Оператор if обеспечивает выбор из двух альтернатив, оператор выбора case позволяет сделать выбор из произвольного числа имеющихся вариантов.
На этом уроке рассмотрим оператор If.
Условный оператор If (оператор ветвления)
Полная формы условного оператора называется If-then-else, имеет вид:
Если в качестве оператора должна выполняться серия операторов, то они объединяются в операторные скобки Begin-End.
Слова if (если) и Then (то) – зарезервированные.
Замечание. Перед ключевым словом else (иначе) точка с запятой не ставится, она ставиться после всего оператора If.
Условие представляют собой логические выражение. Простые условия записываются в виде равенств или неравенств. В сложных условиях несколько простых условий объединяются с помощью логических операций or, and. В этом случае простые условия заключаются в круглые скобки.
На рисунке показана блок-схема полной формы оператора.
Алгоритм выполнения полного условного оператора:
Неполная форма условного оператора называется if-then, имеет вид:
Если в качестве оператора должна выполняться серия операторов, то они объединяются в операторные скобки Begin-End.
В неполном ветвлении ветвь Else отсутствует.
На рисунке показана блок схема оператора if-then.
Алгоритм выполнения неполного условного оператора
Операторы ветвления могут быть вложенными, т.е. один оператор if можно расположить внутри другого. В этом случае он позволяет производить выбор более чем из двух вариантов. При написании исходного кода с вложенными операторами для удобочитаемости кода вложенные операторы выделяются отступами.
Применение условного оператора if рассмотрим на примерах.
Пример 1. С клавиатуры ввести два различных числа. Найти большее из них и вывести его на экран.
В этом примере нужно произвести выбор одного из двух вариантов, для этого используется оператор if—then—else.
Пример 2. Даны три отрезка. Можно ли из них построить треугольник?
Решение. Для любого треугольника сумма его двух сторон должна быть больше третьей стороны (неравенство треугольника). Если a, b, c – стороны предполагаемого треугольника, то нужно сравнить длину каждого отрезка с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольник из таких отрезков не построить.
Для решения этой задачи используется оператор if—then—else со сложным условием.
Задачи для самостоятельного выполнения
На этом уроке рассказывалось об условном операторе if и его применении при решении задач. Простой оператор ветвления используется для для выбора одного из двух возможных продолжений алгоритма, для выбора более чем из двух продолжений можно использовать вложенный оператор ветвления.
Условный оператор полная и неполная форма ветвления
3. УСЛОВНЫЙ ОПЕРАТОР
ПОЛНАЯ И НЕПОЛНАЯ РАЗВИЛКА
ОПЕРАТОР ВЫБОРА
На практике решение большинства задач не удается описать с помощью программ линейной структуры. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, однако происходит нарушение естественного порядка выполнения операторов. Для этих целей используют управляющие операторы. Условный оператор используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия и имеет следующую структуру
Если логическое выражение, выступающее в качестве условия, принимает значение False, то выполняются операторы, расположенные после else (серия2), если True, — операторы, следующие за then. При записи логического выражения следует избегать знака = (равно) для действительных переменных, так как они представляются неточно, а поэтому может не произойти совпадений значений выражений, стоящих слева и справа от знака равно. Для устранения указанного недостатка следует требовать выполнения условия с заданной точностью, т.е. вместо отношения X = Y рекомендуется, например,
Поскольку развилка может быть неполной, то возможна и неполная форма записи условного оператора:
Условный оператор реализует разветвление вычислительного процесса по двум направлениям, одно из которых осуществляется при выполнении условия, другое — в противном случае. Для реализации разветвлений более чем по двум направлениям необходимо использовать несколько условных операторов. Рассмотрим примеры.
Задача 1. Даны действительные числа x, y. Если x и y отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2,0], то оба значения уменьшить в 10 раз; в остальных случаях x и y оставить без изменения.
Разработаем алгоритм решения задачи, после чего напишем программу.
Алгоритм запишем словесно:
Задача 2. Дано действительное число a. Вычислить f(a), если
Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей в зависимости от значения заданного выражения (селектора выбора). Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов развилки (в силу этого его ещё называют оператором множественного ветвления).
В конструкции CASE вычисляется выражение K и выбирается ветвь, значение метки которой совпадает со значением K. После выполнения выбранной ветви происходит выход из конструкции CASE. Если в последовательности нет метки со значением, равным K, то управление передается внешнему оператору, следующему за конструкцией CASE (в случае отсутствия альтернативы ELSE; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).
Запись оператора выбора
Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки begin..end).
Выражение K здесь может быть любого порядкового типа (напомним, что к таким типам относятся все целые типы, Boolean, Char, перечисляемый тип, диапазонный тип, базирующийся на любом из указанных выше типов).
Задача 1. В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая позволяет ввести номер года и печатает его название по старояпонскому календарю. Справка: 1996 г. — год крысы — начало очередного цикла.
Поскольку цикл является двенадцатилетним, поставим название года в соответствие остатку от деления номера этого года на 12.
Задача 2. Найти наибольшее из двух действительных чисел, используя оператор выбора.
Задача 3. Преобразовать символ, если он является строчной русской буквой, в заглавную букву.
Так как в альтернативной системе кодировки ASCII строчные русские буквы идут не подряд, а с некоторым разрывом, то в данном случае, в зависимости от того, в какую часть таблицы попадает введенная буква, используется та или иная формула. Если введённый символ не является строчной русской буквой, он выводится без изменения.
Как видно из примера, в качестве метки может выступать не только отдельное значение, но и диапазон значений. Кроме того, в качестве метки может выступать перечень значений выражения (значения перечисляются через запятую).
Контрольные вопросы и задания
#9 Условный оператор IF (оператор ветвления if else) в Паскаль. Полная и неполная формы условного оператора. Вложенность условий
Primary tabs
Forums:
Условный оператор IF служит для программирования ситуаций выбора (моделирования различных вариантов развития ситуации, с которым мы сталкиваемся в жизни, но теперь уже внутри программы).
Структура условного оператора. Блочность
Условный оператор в общем виде состоит из трёх частей:
— точно также как и любой простой тип данных может быть представлен литералами, переменными или выражениями из них.
В программном коде структуру условного оператора можно проиллюстрировать следующей схемой:
Точка с запятой перед else
Заметьте (см. примеры выше и ниже), что перед else точка с запятой не ставится.
Операторные скобки условного оператора
Например для ситуации, изображённой на этой блок-схеме:
Эту же ситуацию можно проиллюстрировать кодом:
— здесь в обеих ветках только одна операция, а потому операторные скобки не нужны.
Полная и неполная формы оператора IF
Оператор IF в программе может быть представлен в следующих формах:
Полная форма условного оператора IF
— здесь в качестве условия мы сравнивали переменную с числом, а потом описывали два сценария, один из которых выполнится в зависимости от значения условия.
Неполная форма условного оператора IF
В неполной форме условного оператора есть только сценарий истинности, ветка ложности же вообще не описывается, например:
На блок-схеме неполная форма оператора ветвления выглядит так:
— правило использования операторных скобок действует и здесь: в данном же случае у нас только одна операция в ветке then, а потому begin и end не нужны.
Разбор задач
Сравните два числа, если первое больше второго, то выведите на экран «22» и затем отдельным вызовом writeln() число 555.
— в этой задаче указано, что надо предпринимать какие-то действия только в одном случае («если первое больше второго»), а значит будет использовать оператор ветвления в неполной форме:
— в ветке истинности здесь было две операции, а потому мы использовали для неё операторные скобки.
Сравните два числа, если первое больше второго, то выведите на экран «22», а иначе выведете на экран ‘abc’.
— в этой задаче указаны два альтернативных действия, а потому будем использовать оператор ветвления в его полной форме:
— обратите внимание, что перед else точка с запятой не ставится.
—то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.
Операторы могут вкладываться один в другой так, как как это показано на блок-схеме (на деле внутренний оператор вкладывается в одну из веток внешнего):
Рассмотрим задачу, решение которой будет соответствовать этой блок-схеме:
Получите от пользователя два целых числа, если первое больше второго, то выведите на экран их сумму, а затем их разность, иначе:
Реализуем решение в виде программы:
Например задачу из более раннего примера:
—то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.
можно было бы решить с помощью вложенных блоков условного оператора IF:
ВАЖНО: В этом приме здесь налицо дублирование кода, что является плохим стилем. Более того вложенные блоки в коде труднее понимать, поэтому:
То есть ситуацию, в которую попал богатырь на этой иллюстрации:
Можно запрограммировать следующим образом:
— по сути это тоже несколько вложенных один в другой операторов ветвления, причем вложение здесь на всех двух младших уровнях происходит в ветку ложности.
Пример №7 Вложение оператора if в неполной форме в оператор if в полной форме
При решении задач или при просмотре/анализе кода написанного не вами может возникнуть проблема понимания того, к какому именно then относится данный else, обычно такая проблема возникает в случае, если количество else не равно количеству then (если эти количества равны, то понять что во что вложено не трудно).
Рассмотрим пример (фрагмент кода), в котором есть подвох:
— данный код отформатирован неверно, ведь он как бы показывает что else относится к первому then, в то время как Паскаль будет считать (всегда), что else относится к ближайшему then (не «отделённому» от этого else операторными скобками), итак, повторим эту идею ещё раз, назовём её правило «прикрепления» else:
В случае если число else не равно числу then (а это может быть только при вложенных блоках), else всегда «прикрепляется» (относится) к ближайшему «не изолированному» от него операторными скобками then.
Исходя из этого правила можно понять, что написанный выше код на самом деле имеет структуру:
— но это значит, что уже неверна логика решения, из за того что на деле при подобной записи else относится к ближайшему then (мы показали это правильным форматированием и комментариями).
Но как же нам добиться задуманного в начале, т.е. той ситуации, когда в случае если a > b не верно, мы получили бы сообщение «»переменная a не больше b»»?
Для этого нам придётся отделить ближайший then от else операторными скобками, то есть сделать так:
Видео-пояснения
Для этого урока есть следующие видео:
Самостоятельная работа
Вопросы
Задачи
ПРИМЕЧАНИЕ: эта следующая задача базируются на том, что мы уже решали (см. задачи в конце урока).
Решите тремя способами:
Указание: Сначала посрайтесь написать все три решения самостоятельно (по 20 минут размышления на каждую задачу хотя бы), если не получается (или после решения) также можно посмотреть это видео-пояснение.
—то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.
— но сейчас код написан неоптимально и при каждом запуске выполняется 2 сравнения, при этом код можно переписать так, что при вводе одного из двух значений, которые приводят к выводу сообщения, сравнение будет выполняться только один раз.
Перепишите программу оптимальным образом.
Подсказка: если самостоятельно разобраться не получается, смотрите этот видео-разбор.
— в двух условных операторах действия частично совпадают, а значит наблюдается дублирование кода. Перепишите код так, чтобы дублирования не было.
Примечание: это условие давалось как простая разминочная задачка для собеседования в Яндекс.
Условный оператор
В линейных программах все просто. Команды выполняются последовательно друг за другом. Но, если в задаче необходимо предусмотреть решение в нескольких вариантах, то здесь не обойтись без ветвления ( if <если>then <тогда>else <иначе>). Эта форма действий позволяет выбрать ход решения в зависимости от выполнения условия задачи.
На языке программирования Паскаль ветвление реализуется в виде условного оператора. В этой статье мы разберем как программируется на паскале полное и неполное ветвление.
Условный оператор if (полная форма)
Посмотрите на рисунок ниже. На нем изображена блок-схема полного ветвления. В этом варианте при выполнении условия выполняется команда Оператор 1. Если условие ложно, то выполнится команда Оператор 2. Ниже схемы приведена форма записи этой структуры на языке программирования Паскаль.
На паскале запись следующая: if [здесь условие] then [команда 1] else [команда 2];
Задание 1. Напишите программу. Целое число М вводится с клавиатуры. Если оно неотрицательное, то увеличить его на 5. В противном случае — заменить числом ноль.
Решение:
Задание 2. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.
Решение:
2 вариант
Добавим пояснительный текст в программу для улучшения пользовательского интерфейса.
Условный оператор if (неполная форма)
Посмотрите на следующий рисунок внизу. Здесь изображена блок-схема неполного ветвления. В этом варианте при выполнении условия выполняется только команда Оператор 1. Если условие неверно, то программа передаст управление следующей команде, которая будет записана после ветвления.
Ниже блок-схемы приведена форма записи этой структуры на языке программирования Паскаль.
На pascal запись следующая: if [здесь условие] then [команда 1] ;
Кстати, во втором задании был пример использования неполного ветвления как части полного.
Задание 3. Дано целое число. Вывести его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число» и т. д.