Условный оператор - Программирование

Информатика: Новый полный справочник для подготовки к ЕГЭ - 2018 год

Условный оператор - Программирование

Конспект

Основные алгоритмические конструкции

Конструкция ветвления в языке Паскаль

Полная

Неполная

Если блоки команд состоят только из одного оператора каждый, то использовать операторные скобки begin ... end не обязательно:

Полная

Неполная

В конструкции вложенных операторов if:

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

Во избежание путаницы рекомендуется записывать вложенные конструкции if ... then . . . else в операторных скобках begin ... end;

В языке Паскаль завершающий знак “;” после содержимого ветви then (перед оператором else) не ставится, так как вся конструкция if ... then . . . else представляет собой один единый оператор, а знак “;” — это знак завершения оператора.

Полные и неполные условия в цепочке операторов if

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

1. Использование полных условий

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

image189

2. Использование частичных условий

Частичное условие является неполным и определяет несколько возможных ситуаций (например, условие х > 0 указывает, что точка расположена в правой полуплоскости). Для определения конкретной ситуации нужно использовать ещё одно ветвление, проверяющее оставшиеся условия (дополняющие уже проверенное до полного набора условий), например, условие у > 0, проверяемое в ветви then оператора if с условием х > 0, однозначно определяет принадлежность точки I-й координатной четверти. При таком построении алгоритма необходимо использовать вложенные операторы конструкции if ... then ... else:

Использование меняющихся значений условий

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

• 1, 2, 12 — зима,

• 3, 4, 5 — весна,

• 6, 7, 8 — лето,

• 9, 10, 11 — осень,

• другие значения номера месяца — ошибка ввода.

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

1. Решение с полными условиями

В каждом операторе if можно задать условие, однозначно определяющее соответствующий диапазон значений номера месяца:

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

2. Решение с неполными (меняющимися) условиями

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

Работа этой программы для случая n = 7:

• первый оператор проверяет возможное наличие ошибки; значение n = 7 корректно, поэтому выполняется ветвь else (содержащая собственно операторы определения названия сезона);

• n = 7, поэтому условие n >= 1 выполняется; переменной s присваивается значение “зима”;

• условие n >= 3 также выполняется; переменной s взамен прежнего значения “зима” присваивается значение “весна”;

• условие n >= 6 также выполняется; переменной s взамен прежнего значения “весна” присваивается значение “лето”;

• условие n >= 9 уже не выполняется; оператор присваивания в ветви then пропускается, переменная s сохраняет значение “лето”;

• условие n = 12 также не выполняется; оператор присваивания в ветви then пропускается, переменная s сохраняет значение “лето”.

В данном случае порядок записи операторов if важен! Если изменить его, то программа перестанет работать правильно. Например, изменив порядок записи операторов на противоположный:

image192

Результат работы такой программы (для n = 7):

• первый оператор проверяет возможное наличие ошибки; значение n = 7 корректно, поэтому выполняется ветвь else (содержащая собственно операторы определения названия сезона);

• n = 7, поэтому условие n = 12 не выполняется; оператор присваивания в ветви then пропускается;

• условие n >= 9 также не выполняется; оператор присваивания в ветви then пропускается;

• условие n >= 6 выполняется; переменной s присваивается значение “лето”;

• условие n >= 3 также выполняется; переменной s взамен прежнего значения “лето” присваивается значение “весна”;

• условие n >= 1 также выполняется; переменной s взамен прежнего значения “весна” присваивается значение “зима”.

В итоге программа вместо правильного значения “лето” выдаст ошибочное “зима”.

Конструкция множественного ветвления (конструкция выбора)

Конструкция выбора в языке Паскаль

Ключ — выражение или переменная, имеющие целое или символьное значение.

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

Если одной и той же ситуации соответствует несколько различных значений ключа, то эти значения можно записать через запятую в одной программной строке. Например, программа для определения количества дней в месяце по его номеру n может иметь вид:

Разбор типовых задач

Задача 1. Определите значение переменной с после выполнения следующего фрагмента программы (записанного ниже на разных языках программирования):

Бейсик

Паскаль

Си

Алгоритмический язык

Решение

Подобные задачи решаются путём выполнения ручной трассировки (покомандного выполнения программы) в табличной форме. При этом в таблицу включаются все переменные, значения которых изменяются в программе. Дополнительно в левом столбце могут быть записаны соответствующие операторы программы. В строках таблицы трассировки, соответствующих условному оператору, желательно отдельно отмечать истинность или ложность условия ветвления.

В данном случае используются три переменные. Факт изменения значения той или иной переменной отмечен жирным подчёркнутым шрифтом и фоновым закрашиванием ячеек таблицы.

Ответ: с = 440.

Внимание! При выполнении трассировки программ следует:

• до присваивания переменной первого значения содержимое этой переменной считать неопределённым и отмечать в таблице прочерком;

• при выполнении операторов присваивания, в которых одна и та же переменная стоит слева и справа нужно не ошибиться в определении, откуда берётся значение переменной для вычисления выражения после знака присваивания (из предыдущей строки таблицы) и в какой столбец записывать результат (в столбец, соответствующий переменной, которая записана до знака присваивания).

Задача 2. Ниже приведён фрагмент программы. При каком наименьшем введенном числе а после выполнения программы значение переменной с будет равно 60?

Решение

В отличие от предыдущей задачи, здесь требуется не просто формально “протрассировать” заданную программу, а проанализировать алгоритм её работы и понять, какими могут быть значения введенного числа а.

1) Изменение значения переменной b выполняется однократно (одним из операторов в ветвях then или else).

2) Изначально b = 50, а нам нужно, чтобы это значение стало равным 60. Следовательно, нам нужно для этого выполнить оператор с:=b+10 в ветви else.

3) Чтобы выполнялась ветви else, требуется, чтобы к моменту выполнения оператора if уже пересчитанное значение а (а:=а*2-b) было не меньше (т.е. больше или равно) b, т.е. числа 50.

4) Решаем полученное неравенство:

5) Это почти уже ответ. Нам же нужно определить, какое возможное значение а является наименьшим. Так как неравенство нестрогое, это значение a = 50.

Ответ: 50.






Для любых предложений по сайту: [email protected]