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

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

Формат полной формы условного оператора имеет вид:

IF THEN оператор1

ELSE оператор2;

где IF (если), THEN (тогда), ELSE (иначе) – служебные слова; оператор1, оператор2 – простые или составные операторы.

Перед ELSE точка с запятой не ставится.

Условие – это любое выражение логического типа, использующее операции сравнения: =, <>, >=, 0 и y≠0, и k=sin(x), во всех остальных случаях.

IF (X>0) AND (Y<>0) THEN K := LN(X/Y)

Пример 3.3. Вычислить:

IF C THEN

BEGIN

END

ELSE

BEGIN

END;

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: При сдаче лабораторной работы, студент делает вид, что все знает; преподаватель делает вид, что верит ему. 9505 — | 7341 — или читать все.

91.146.8.87 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

ОТВЕТЫ КО 2 ЛАБЕ

Чем отличается условная операция от условного оператора?

Может ли существовать неполная форма условной операции?

Может = неполная форма условного оператора

Нужно ли писать "else", если при выполнении условия выполняется оператор return?

If (a>b) return a+b; else return b;

Выражения какого типа могут определять условия в условном операторе или условной операции?

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

Какие значения выражения, определяющего условие, считаются истинными, а какие ложными?

Если выражение не равняется 0 (или не есть пустой указатель), то условие считается истинным, в противном случае оно является ложным.

Какие операции относятся к операциям отношения?

Чем отличается операция "= =" от операции "="?

Какие операции относятся к логическим? Каков их приоритет?

Конъюнкция, Дизъюнкция (расположены по приоритету)

Какой операцией можно заменить операцию "&&" ? побитовое &

Какой операцией можно заменить операцию "||" ? Побитовое или

Чему может быть равно значение выражения отношения или логического выражения? 0 или 1

Как правильно сравнить на равенство вещественные числа? If (a==b)

Как правильно проверить вхождение значения в некоторый диапазон? If(a>b&&a Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

    #

Primary tabs

Forums:

Условный оператор — что это такое

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

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

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

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

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

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

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

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

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

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

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

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

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

Например для ситуации, изображённой на этой блок-схеме:

Эту же ситуацию можно проиллюстрировать кодом:

Читайте также:  Что продают на горбушке

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

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

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

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

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

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

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

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

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

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

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

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

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

Разбор задач

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

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

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

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

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

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

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

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

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

Коля набрал $k$ баллов, Миша $n$ баллов, а Петя $d$ баллов в ходе соревнований. Если:

  1. сумма баллов Коли и Миши больше $20$
  2. и сумма баллов Пети и Миши меньше $55$
Читайте также:  Naruto ultimate ninja storm 4 системные требования

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

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

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

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

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

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

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

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

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

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

Коля набрал $k$ баллов, Миша $n$ баллов, а Петя $d$ баллов в ходе соревнований. Если:

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

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

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

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

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

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

То есть ситуацию, в которую попал богатырь на этой иллюстрации:

Можно запрограммировать следующим образом:

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

Пример №7 Вложение оператора if в неполной форме в оператор if в полной форме

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

Рассмотрим пример (фрагмент кода), в котором есть подвох:

— данный код отформатирован неверно, ведь он как бы показывает что else относится к первому then, в то время как Паскаль будет считать (всегда), что else относится к ближайшему then (не "отделённому" от этого else операторными скобками), итак, повторим эту идею ещё раз, назовём её правило "прикрепления" else:

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

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

Читайте также:  Runtime error visual c runtime library

— но это значит, что уже неверна логика решения, из за того что на деле при подобной записи 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$» — выведите "да", если истинно и "нет" если ложно.

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

  • Даны три целых числа: $A$, $B$, $C$. Проверить истинность высказывания: « Число $A$ и число $B$ больше 17, а $C$ > 7». — выведите "да", если истинно и "нет" если ложно.
  • Пользователь вводит два числа, найдите из них максимальное. (тут всё просто)
  • Пользователь вводит три числа, найдите из них максимальное.
  • Решите тремя способами:

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

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

  • Пользователь вводит четыре числа, найдите из них максимальное.
  • Коля набрал $k$ баллов, Миша $n$ баллов, а Петя $d$ баллов в ходе соревнований. Если:
    1. сумма баллов Коли и Миши больше $20$
    2. или произведение баллов Пети и Миши меньше $55$
    3. —то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.

      Ссылка на основную публикацию
      Adblock detector