Составление алгоритма решения

На основании изложенного выполним структурированную схему алгоритма решения (рис. 4.3).

На первом шаге представлен алгоритм в общем виде, на втором – детализированы основные блоки. Блок 2 преобразован в последовательность блоков 2.1 (ввод) и 2.2 (вывод) конкретных исходных данных. Блок 3 детализирован последовательностью блока 3.1 (расчёт Mc) и совокупности блоков 3.2, 3.3, 3.4 (стандартной структуры ветвления). При этом блок 3.2 выполняет проверку заданного условия, а блоки 3.3 и 3.4 содержат основную (вычисление нагрузки F) и дополнительную (номер ветви n) расчётные зависимости. Блок 4 представлен блоком 4.1 с конкретными выводимыми значениями.

Полученная на третьем шаге схема является классическим примером простого ветвящегося вычислительного процесса.

При выполнении проверяемого условия, решение будет осуществляться по ветви 1 (блоки 1-2-3-4-5-6-8-9), при невыполнении – по ветви 2 (блоки 1-2-3-4-5-7-8-9).

Полученный алгоритм нагляден, т.е. дружественен человеку-пользователю, ввиду параллельного расположения блоков вычислительных ветвей 6 и 7, но для программирования непригоден.

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

Шаг 1 Шаг 2 Шаг 3

Рис. 4.3. Структурированная схема алгоритма задачи 4.1

ü Внимание! Базовые структуры ветвления напрямую для программирования непригодны. Предварительно они должны быть преобразованы – приведены к условно-линейному виду (полное ветвление) и конкретизированы (неполное ветвление).

Преобразованные структуры представлены вариантами в табл. 4.1.

Таблица 4.1

Полное ветвление Неполное ветвление
       

 

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

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

Так, выполнение условия предписывает решение по первой ветви – блоки 1-6, 8-9 (вариант 1) и 1-5, 7-9 (вариант 2), а невыполнение – по второй – блоки 1-5, 7-9 (вариант 1) и 1-6, 8-9 (вариант 2).

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

Особенность ветвящихся алгоритмов – нарушение естественного порядка выполнения некоторых блоков.

Вариант 1 Вариант 2

Рис. 4.4. Условно-линейные схемы алгоритма задачи 4.1

Представленные схемы подтверждают это передачей управления от блока 6 (минуя блок 7) к блоку 8 без проверки каких-либо условий и от блока 5 к блокам 6 и 7 в зависимости от выполнения или невыполнения проверяемого условия.

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

Программирование задачи

Программирование указанных в алгоритме переходов требует использования специальных управляющих операторов Си/Си++. Таковыми являются операторы передачи управления.

Операторы передачи управления– предписатели нарушения естественного порядка выполнения операторов в программе.

По принципу действия они делятся на условные и безусловные.

Операторы условной передачи управления (условного перехода) позволяют сохранять (нарушать) естественный порядок выполнения программы в зависимости от результатов проверки условий.

Операторы безусловной передачи управления (безусловного перехода) нарушают естественный порядок реализации программы всегда (безусловно).

Рассмотрим основные операторы передачи управления.