Программирование вложенных ветвлений

Управляющие структуры: ветвление (условный оператор if_ then_ else)

Ветвление - управляющая структура, организующая выполнение лишь одного из двух указанных действий в зависимости от справедливости некоторого условия.

Условие - вопрос, имеющий два варианта ответа: да или нет.

Запись ветвления выполняется в двух формах: полной и неполной.

Полная форма:                                                                                 Неполная форма:

                          

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

Блок-схемы можно раcсматривать как графическую альтернативу псевдокоду. В отличие от стандартизации синтаксиса языков программирования, на синтаксис псевдокода обычно не устанавливается стандартов, так как последний непосредственно не компилируется в исполняемую программу. Поэтому можно сказать, что обычно автор каждый публикации применяет свой оригинальный псевдокод, однако чтобы быть максимально понятным читателям, авторы публикаций содержащих псевдокод, как правило, заимствуют нужные им конструкции из какого-либо языка программирования. Зачастую источником псевдокода служат несколько языков, и таким образом псевдокод часто не содержит специфических признаков конкретного языка программирования. Кроме того, математические выражения часто включаются в псевдокод в том виде, как их принято записывать в математике, а не в языках программирования, а некоторые фрагменты псевдокода могут быть фразами естественного языка (русского, английского и т. д.). Однако при этом конструкции некоторых языков программирования чаще используются для псевдокода. Так, например, очень часто используется синтаксис, похожий на синтаксис языка Паскаль. Это объясняется тем, что Паскаль создавался как язык, ориентированный на задачи обучения программированию, и поэтому синтаксис этого языка особенно приспособлен для восприятия человеком. Часто используются и другие языки: Си, Алгол, Фортран и другие. Их использование можно объяснить как личными симпатиями автора, так и распространенностью на момент написания публикации. В случае русскоязычных публикаций в качестве псевдокода часто используется перевод ключевых слов языков программирования с английского на русский. Такой подход практикуется, в частности, в учебниках по информатике.

Известны прогнозы, утверждающие, что дальнейшее развитие языков программирования пойдет по пути их сближения с псевдокодом, что в конечном этапе позволит осуществлять программирование на естественных языках[источник не указан 100 дней]. На практике же программист может выбирать язык, который максимально подробно описывает то, чего ему нужно точно получить от машины чтобы избежать разногласий с заказчиком.

В ряде случаев псевдокодом называют систему команд абстрактной машины, например, P-код, псевдокод вымышленной машины MIX и т. д. В отличие от псевдокода неформального характера, такой псевдокод уже строго формализован, труднее для понимания человеком, но может быть транслирован в работающую программу при наличии программы-эмулятора данной гипотетической машины.

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

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

 Условный оператор используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия, и имеет следующую структуру:

Данная запись читается как: ЕСЛИ <логическое выражение> ТО … ИНАЧЕ …

 В качестве оператора может выступать и составной оператор.

 Если логическое выражение, выступающее в качестве условия, принимает значение False (ложь), то выполняются оператор расположенный после else, если True (истина) — оператор, следующий за then. При записи логического выражения следует избегать знака = (равно) для действительных (вещественных) переменных, так как они представляются с некоторой точностью (до определенного знака), а поэтому может не произойти совпадения значений выражений, стоящих слева и справа от знака равно. Для устранения указанного недостатка следует проверять выполнения условия с заданной точностью, т. е. вместо отношения Х = Y рекомендуется, например, использовать такой прием:

 ABS (X - Y) < 1E-8,

 т. е. абсолютная разница сравниваемых величин не превышает некоторой весьма малой величины.

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

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

 Логические функции

 Рассмотрим следующую задачу.

 Даны действительные числа х, у. Если х и у отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2,0], то оба значения уменьшить в 10 раз; в остальных случаях х и у оставить без изменения.

 Разработаем алгоритм решения задачи, после чего напишем программу.

 Алгоритм запишем словесно:

 1. ввести значения х, у;

 2. если х<0 и у<0, найти их модули и перейти к п. 5, иначе перейти к следующему пункту;

 3. если х<0 или у<0, увеличить каждую величину на 0,5 и перейти к п.5, иначе перейти к следующему пункту;

 4. если ни х, ни у не принадлежат отрезку [0,5; 2,0], уменьшить их в 10 раз;

 5. вывести значения х и у;

 6. конец.

 Обратите внимание на «связки» в нашем условном алгоритме: если х<0 и у<0, если х<0 или у<0 если ни х, ни у

 Эти смысловые союзы образуют смысловую логическую связку двух или более условий в одно. В программировании они называются логическими функциями. Основных логических функций четыре:

 ·     AND (ЛОГИЧЕСКОЕ И),

 ·     OR (ЛОГИЧЕСКОЕ ИЛИ)

 ·     NOT (ЛОГИЧЕСКОЕ НЕ)

 ·     XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ)

 Последняя функция весьма специфична, поэтому ее рассмотрение пока отложим.

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

 Логические функции могут принимать только одно значение из двух — ИСТИНА или ЛОЖЬ (TRUE — FALSE). Часто истинность обозначают цифрой 1, а ложность — цифрой 0.

Обратите внимание на значения функций. Функция отрицания НЕ дает всегда противоположное исходному значение. Функция И истинна только в том случае, когда оба связанных условия истинны. Функция же ИЛИ истинна, если хотя бы одно из связываемых условий истинно.

Если в таблице истинности между аргументами поставить знак сложения для функции ИЛИ, а для функции И поставить знак умножения и сравнить арифметический результат со значением функций, то станет понятно, почему функцию ИЛИ называют также «логическое сложение», а функцию И — «логическое умножение».

Отметим следующий факт: при использовании логических функций требуется заключение связываемых условий в обычные скобки.

Оператор выбора

Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей в зависимости от значения заданного выражения — селектора выбора. Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов развилки (в силу этого его еще называют оператором множественного ветвления).

Запись оператора выбора:

CASE <ключ выбора> OF <список варианта> ELSE <оператор> END;

<ключ выбора> - выражение любого типа кроме REAL и STRING;

<список варианта> - одна или более конструкций вида:

<константа выбора>:<оператор>;

В конструкции CASE вычисляется выражение К и выбирается ветвь, значение метки которой совпадает со значением К. После выполнения выбранной ветви происходит выход из конструкции CASE. Если в последовательности нет метки со значением, равным К, то управление передается внешнему оператору, следующему за конструкцией CASE (в случае отсутствия альтернативы ELSE; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).

Любой из операторов может быть как простым, так и составным.

Программирование вложенных ветвлений

Запишем на Паскале программу определения большего из трех чисел, блок-схема которой показана на рис. 3.10. Структура этого алгоритма - вложенные ветвления. Алгоритм на АЯ (БИТ2) приведен в предыдущем параграфе.

Program BIT2;

var А, В, С, D: real;

begin readln(А, В, С);

if A>B

      then if A>C then D:=A else D:=B

      else if B>C then D:=B else D:=C;

writeln(D)

end.

Обратите внимание на то, что перед else точка с запятой не ставится. Вся ветвящаяся часть структуры алгоритма заканчивается на точке с запятой после оператора D:=C.

Существуют задачи в которых по одной из ветки ветвления нужно рассмотреть ещё одно условие.

Рассмотрим задачу: сравнить 3 целых числа и вывести на печать максимальное.

Program chisla;

Var a, b, c: integer;

Begin

Writeln (‘Введите три числа’);

Read (a, b, c);

If a>c then writeln (‘ максимально число ’, a)

Else if b>c then writeln (b максимально число’, b)

Else writeln (‘c максимальное число’, c);

End.


Дата добавления: 2021-01-20; просмотров: 80; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!