Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
интегрирование Глава 4.doc
Скачиваний:
8
Добавлен:
12.11.2018
Размер:
1 Мб
Скачать
☆
    1. Программирование простых ветвлений

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

По сложности условия простые ветвления делятся на элементарные и составные (рис. 4.2).

Рис. 4.2. Классификация простых условий

      1. Программирование ветвления с элементарным условием

Элементарное (простейшее) – условие, требующее проверки одной операции отношения.

Рассмотрим программирование элементарного ветвящегося вычислительного процесса на конкретной задаче (4.1) об удельных нагрузках.

Постановка задачи

На складе сырья химкомбината имеются две ёмкости. Первая из них расположена на квадратном основании, вторая – на цилиндрическом. Рассчитать удельную нагрузку на основание при условии, что партия сырья объёмом 15 м3 должна заливаться в первую ёмкость, если масса полученного продукта меньше или равна 14,85 т, или во вторую, если масса продукта больше 14,85 т. Плотность сырья может изменяться в диапазоне от 0,963 т/м3 до 1,15 т/м3. Длина стороны квадрата равна 296 см, диаметр цилиндра – 2,65 м.

Формирование математической модели

Исходные данные

(основные)

Vс = 15 м3

  • объём поступившего сырья;

= _,_ _ _ т/м3

  • плотность сырья;

Mкр = 14,85 т

  • масса критическая;

L = 296 см

  • длина стороны квадрата;

Dос = 2,65 м

  • диаметр цилиндрического основания;

(дополнительные)

k1 = 0,01 м/cм

  • коэффициент перевода сантиметров в метры;

= 3,1416

  • число Пи.

Расчётные зависимости

[] – масса поступившего сырья;

[], если – удельная нагрузка на квадратное основание;

[], если – удельная нагрузка на цилиндрическое основание.

Дополним каждую расчётную зависимость её возможным номером (например n) с конкретным значением и представим всё в общепринятой форме:

;

Выбор метода решения

Анализ полученного математического описания позволяет сделать выводы:

  • проверяемые условия относятся к элементарным, т.к. содержат одну операцию отношения;

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

, n = 1 , если (ветвь 1);

, n = 2 , если (ветвь 2);

  • номер каждой ветви задаётся в ней соответствующим равенством (n=1 – для первой и n=2 – для второй);

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

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

Следовательно, методом решения рассматриваемой задачи является простейший ветвящийся вычислительный процесс.

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

На основании изложенного выполним структурированную схему алгоритма решения (рис. 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 в зависимости от выполнения или невыполнения проверяемого условия.

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