Какой оператор в языке pascal описывает условное ветвление укажите полный синтаксис и поясните его

#9 Условный оператор IF (оператор ветвления if else) в Паскаль. Полная и неполная формы условного оператора. Вложенность условий

vedro-compota's picture

Условный оператор IF служит для программирования ситуаций выбора (моделирования различных вариантов развития ситуации, с которым мы сталкиваемся в жизни, но теперь уже внутри программы).

Структура условного оператора. Блочность

Условный оператор в общем виде состоит из трёх частей:

  1. Проверкалогического значения
  2. Ветка истинности (обязательна) — выполнится если логическое значение истинно (true)
  3. Ветка ложности (необязательна) — выполнится если логическое значение ложно (false)

Сразу отметим, что логическое значение — это фактически ответ на вопрос формата "да/нет" , напомним, что логическим типом значением обладают:

  1. логические литералы
  2. логические переменные
  3. и логические выражения

— точно также как и любой простой тип данных может быть представлен литералами, переменными или выражениями из них.

В программном коде структуру условного оператора можно проиллюстрировать следующей схемой:

— в данном случае выполнится "ложная" ветка, так как $5 > 7$ возвращает результат false.

Точка с запятой перед else

Заметьте (см. примеры выше и ниже), что перед else точка с запятой не ставится.

Операторные скобки условного оператора

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

Например для ситуации, изображённой на этой блок-схеме:
Паскаль ветвление условный оператор без begin end операторных скобок
Эту же ситуацию можно проиллюстрировать кодом:

— здесь в обеих ветках только одна операция, а потому операторные скобки не нужны.

Полная и неполная формы оператора IF

Оператор IF в программе может быть представлен в следующих формах:

  1. Полная форма — форма оператора if, в которой присутствуют обе ветки — и then и else
  2. Неполная форма — форма в которой присутствует только then.

Полная форма условного оператора IF

В полной форме оператора IF присутствуют обе ветки — именно полную форму мы рассматривали выше, например:

— здесь в качестве условия мы сравнивали переменную с числом, а потом описывали два сценария, один из которых выполнится в зависимости от значения условия.

В последнем примере кода, у нас в ветке истинности одна операция, а в ветки ложности 2 — эту ситуацию можно изобразить на блок-схеме так (с каким-то предварительным действием до if):
Полная форма оператора IF Паскаль

Неполная форма условного оператора IF

В неполной форме условного оператора есть только сценарий истинности, ветка ложности же вообще не описывается, например:

— в ветке ложности здесь вообще ничего нет, то есть если $a$ не больше $5$, то и никаких действий предпринято не будет.

На блок-схеме неполная форма оператора ветвления выглядит так:
Неполная форма условного оператора ветвления

— правило использования операторных скобок действует и здесь: в данном же случае у нас только одна операция в ветке then, а потому begin и end не нужны.

Разбор задач

Пример №1 — неполная форма IF

Сравните два числа, если первое больше второго, то выведите на экран "22" и затем отдельным вызовом writeln() число 555.

— в этой задаче указано, что надо предпринимать какие-то действия только в одном случае ("если первое больше второго"), а значит будет использовать оператор ветвления в неполной форме:

— в ветке истинности здесь было две операции, а потому мы использовали для неё операторные скобки.

Пример №2 — полная форма, по одному действию в каждой ветке

Сравните два числа, если первое больше второго, то выведите на экран "22", а иначе выведете на экран ‘abc’.

— в этой задаче указаны два альтернативных действия, а потому будем использовать оператор ветвления в его полной форме:

— обратите внимание, что перед else точка с запятой не ставится.

Пример №3 — логические выражения и оператор ветвления IF

  1. сумма баллов Коли и Миши больше $20$
  2. и сумма баллов Пети и Миши меньше $55$

В этой в качестве условия требуется выполнение сразу двух подусловий, причем не одного из них — а двух одновременно, потому в логическом выражении для if мы будем использовать логическую операцию AND, тогда можно решить как-то так:

Пример №4 — вложенные условные операторы

вложенные условные операторы IF ветвление Паскаль пример блоксхемы

Операторы могут вкладываться один в другой так, как как это показано на блок-схеме (на деле внутренний оператор вкладывается в одну из веток внешнего):

Рассмотрим задачу, решение которой будет соответствовать этой блок-схеме:

  1. сначала сравните их сумму с числом $25$, если она больше, то выведите на экран первое число, а если меньше, то только второе.
  2. затем выведите на экран второе число в квадрате

Реализуем решение в виде программы:

Пример №5 — вложенные условные операторы

Например задачу из более раннего примера:

  1. сумма баллов Коли и Миши больше $20$
  2. и сумма баллов Пети и Миши меньше $55$

можно было бы решить с помощью вложенных блоков условного оператора IF:

— обратите внимание, что begin и end не нужны для ветки истинности внешнего оператора, так как в него вложен лишь один if — а остальные строки относятся к этому вложенному if.

ВАЖНО: В этом приме здесь налицо дублирование кода, что является плохим стилем. Более того вложенные блоки в коде труднее понимать, поэтому:

Пример №6 — жизненный выбор

То есть ситуацию, в которую попал богатырь на этой иллюстрации:
паскаль условный оператор 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 операторными скобками, то есть сделать так:

Теперь ближайшим не изолированным операторными скобками от else словом then оказывается первое (то, где "if (a > b)"), а не второе (т.е. не то, где "if (a > c)") — что мы и хотели изначально запрограммировать 😉

Видео-пояснения

Для этого урока есть следующие видео:

Самостоятельная работа

Вопросы

  1. Для чего нужен оператор ветвления (условный оператор)?
  2. Какие ветви условного оператора вы знаете?
  3. Чем полная форма условного оператора отличается от неполной?
  4. Когда нужны операторные скобки в ветвях оператора IF, а когда нет?

Задачи

  1. Сравните два числа, если первое больше второго, то выведите на экран "12". (здесь нужно использовать неполную форму условного оператора)
  2. Сравните два числа, если первое больше второго, то выведите на экран "12", а если нет, то выведите на экран "888".
  3. Даны три целых числа: $A$, $B$, $C$. Проверить истинность высказывания: «Число $A$ находится между числами $B$ и $C$» — выведите "да", если истинно и "нет" если ложно.

ПРИМЕЧАНИЕ: эта следующая задача базируются на том, что мы уже решали (см. задачи в конце урока).

Решите тремя способами:

  • С использованием логической операции and.
  • С вложенными блоками (без and, все опараторы if должны быть в полной форме).
  • Без вложенных блоков (без and) — запомнив максимум из первых двух чисел в специальной переменной.

Указание: Сначала посрайтесь написать все три решения самостоятельно (по 20 минут размышления на каждую задачу хотя бы), если не получается (или после решения) также можно посмотреть это видео-пояснение.

  1. сумма баллов Коли и Миши больше $20$
  2. или произведение баллов Пети и Миши меньше $55$

—то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.

— но сейчас код написан неоптимально и при каждом запуске выполняется 2 сравнения, при этом код можно переписать так, что при вводе одного из двух значений, которые приводят к выводу сообщения, сравнение будет выполняться только один раз.

Перепишите программу оптимальным образом.

Подсказка: если самостоятельно разобраться не получается, смотрите этот видео-разбор.

— при этом известно, что если s равно 1, то на экран должно вывестись только первое сообщение (а второе выводиться не должно), а если s не равно 1, но равно m , то второе (а первое выводиться не должно).
Но сейчас программа работает не так, исправьте это.

— в двух условных операторах действия частично совпадают, а значит наблюдается дублирование кода. Перепишите код так, чтобы дублирования не было.

Подсказка: используйте вложенные блоки if() .
Если идей нет, смотрите разбор решения.

— блоки условий можно переписать более кратко, без использования сравнения = true или = false , с сохранением той же логики работы программы.

  • оператор if итак неявно сравнивает значение логического выражения в скобках с true (и принимает решение, какую именно ветку then или else выполнить)
  • для второго if в коде выше потребуется исползование оператора Not.

Примечание: это условие давалось как простая разминочная задачка для собеседования в Яндекс.

Урок 6. Условный оператор if

Один из важнейших операторов Паскаля – условный оператор. Он позволяет изменять порядок выполнения операторов в зависимости от некоторого условия, представляющего собой логическое выражение типа Boolean. Если значение равно True, то выполняется одна группа операторов, если False, то другая группа операторов или не выполняется ничего.

В языке Паскаль имеются два условных оператора: if (оператор ветвления) и case (оператор выбора). Оператор if обеспечивает выбор из двух альтернатив, оператор выбора case позволяет сделать выбор из произвольного числа имеющихся вариантов.

На этом уроке рассмотрим оператор If.

Условный оператор If (оператор ветвления)

Полная формы условного оператора называется If-then-else, имеет вид:

Если в качестве оператора должна выполняться серия операторов, то они объединяются в операторные скобки Begin-End.

Слова if (если) и Then (то) – зарезервированные.

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

Условие представляют собой логические выражение. Простые условия записываются в виде равенств или неравенств. В сложных условиях несколько простых условий объединяются с помощью логических операций or, and. В этом случае простые условия заключаются в круглые скобки.

На рисунке показана блок-схема полной формы оператора.

Блок-схема оператора if-then-else

Алгоритм выполнения полного условного оператора:

  1. Проверяется значение логического выражения, записанного в условии после слова If
  2. Если условие истинно (значение выражения условие равно True), то выполняется оператор 1, указанный после слова Then
  3. Если условие ложно, то выполняется оператор 2, записанный после слова Else.

Неполная форма условного оператора называется if-then, имеет вид:

Если в качестве оператора должна выполняться серия операторов, то они объединяются в операторные скобки Begin-End.

В неполном ветвлении ветвь Else отсутствует.
На рисунке показана блок схема оператора if-then.

Блок-схема оператора if-then

Алгоритм выполнения неполного условного оператора

  1. Проверяется значение логического выражения, записанного в условии после слова If
  2. Если условие истинно (значение выражения условие равно True), то выполняется операторы, указанный после слова Then
  3. Если условие ложно, то ничего делать не надо. Происходит переход к следующему оператору.

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

Применение условного оператора if рассмотрим на примерах.

Пример 1. С клавиатуры ввести два различных числа. Найти большее из них и вывести его на экран.

В этом примере нужно произвести выбор одного из двух вариантов, для этого используется оператор if—then—else.

Пример 2. Даны три отрезка. Можно ли из них построить треугольник?

Решение. Для любого треугольника сумма его двух сторон должна быть больше третьей стороны (неравенство треугольника). Если a, b, c – стороны предполагаемого треугольника, то нужно сравнить длину каждого отрезка с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольник из таких отрезков не построить.

Для решения этой задачи используется оператор if—then—else со сложным условием.

Задачи для самостоятельного выполнения

  1. Найти наибольшее из трех данных чисел.
  2. Запишите условный оператор, в котором значение переменной вычисляется по формуле: a + b, если a — нечетное и a*b, если a — четное.
  3. Вывести на экран номер четверти, которой принадлежит точка с координатами (x, y), при условии, что x и y отличны от 0.
  4. После выполнения операторов
    a := 0;
    If a<>0 Then; a := 2
    значение переменной равно двум. Объясните почему.
  5. Если целое число M делится нацело на целое число N, то вывести на экран частное от деления, в противном случае &#8212; сообщение &#187;M на N нацело не делится&#187;.

На этом уроке рассказывалось об условном операторе if и его применении при решении задач. Простой оператор ветвления используется для для выбора одного из двух возможных продолжений алгоритма, для выбора более чем из двух продолжений можно использовать вложенный оператор ветвления.

Условный оператор в среде "Pascal"

Тип урока: изучение нового материала.

Оснащение урока:

Техническое и программное:

  • Компьютерный класс с объединенными в локальную сеть компьютерами ( под управлением NetOp School) и системой автоматизированного тестирования MyTest;
  • Рабочее место учителя (компьютер + мультимедийный проектор)
  • Рабочее место ученика (система программирования PascalABC)

Продолжительность: 40 мин.

План урока.

  1. Постановка задачи – 2 мин.
  2. Проверка знаний учащихся по прошлой теме – 5 мин.
  3. Изучение новой темы – 13 мин.
  4. Решение задач – закрепление нового материала (работа на ПК)– 15 мин.
  5. Проверка полученных знаний (тестирование) 5 мин
  1. Постановка задачи
  1. Демонстрация видео — ролика (Формулировка темы и постановка задач на урок)
  2. Учитель. На предыдущем уроке мы изучили структуру программы в языке программирования Паскаль. Мы задавали входные данные в программу и получали реальный результат. А сегодня мы попробуем компьютер заставить рассуждать. Для этого необходимо немного потрудится и для начала вспомнить материал прошлого урока

II. Проверка знаний учащихся по прошлой теме

Фронтальный опрос — повторение материала прошлого урока (на слайдах):

  1. Задание по структуре программы «Продолжи предложение».
  2. Задание по изученным операторам «Продолжи предложение».
  3. Задание по типам переменных «Расставь соответствие».
  4. Задание по синтаксису программы «Найди ошибку».

III. Изучение новой темы

Учитель: Переходим к изучению новой темы. Запишем тему урока в тетради.

  1. Видеоролик («Стоит витязь на распутье…» – демонстрация блок схемы к данной ситуации)
  2. Формулировка и запись в тетради определений разветвляющейся структуры и условного оператора
  3. Учитель: «Разветвляющиеся алгоритмы бывают полной и неполной структуры.» Демонстрация (полного и неполного ветвления)
  4. Учитель: «Давайте разберемся, что такое условие и запишем в тетрадь определение»
  5. Пример «Простое условие»
  6. Видеоролик (Демонстрация построения блок-схемы алгоритма)
  7. Задача из экзаменационных билетов «Определить значение переменной на выходе»
  8. Учитель: Рассмотрим общий вид условного оператора в Pascal IfThenElse; (Если…Тогда…Иначе) обратить внимание на синтаксис;и записать в тетради.
  9. Рассмотрим пример программы «Выбор большего из двух»
  10. Пример программы «Проверка знаний»

IV. Решение задач – закрепление нового материала.

  1. Задание на слайде.

В системе программирования PascalABC набрать программу «Опрос» (ЭВМ спрашивает: “Любите ли вы мороженое?”. Если ответ положительный, то отвечает: “Поедим вместе”. В противном случае: “Отдай мне!”)

  1. Задание на слайде (самостоятельно корректировать программу)

Разработайте программу «Новогоднее гадание» Компьютер спрашивает: “А Вы хотите узнать свою судьбу?”. Если ответ положительный, то отвечает: “Вас ждет счастье в Новом году!”. В противном случае: “Новый год ничего не изменит в вашей жизни!”

  1. Проверка полученных знаний (тестирование) 5 мин

Автоматизированное обучающее тестирование в системе MyTest по теме «Условный оператор» (Приложение 2). Демонстрация отметок за урок.

  1. Домашнее задание:

Составить блок-схему и написать программу для решения квадратного уравнения вида ax 2 +bx+c=0. (алгоритм составления представлен на слайде)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *