о * - ч ~ П ЕРВ Ы Й - Т— * и У Р О В Е Н Ь
o ^ Q
с н
А7А0/
ВТОРОЙУ Р О В Е Н ЬРис. 2.10
математики, встречающ иеся в инженерно-технических задачах, про
ектирую тся с пом ощ ью базовы х алгоритм ов с небольш им числом уровней проекта. Конечность этой процедуры (п конечно) следует из условия, что в число базовых алгоритм ов естественно вклю ча
ются арифметические действия над числами (рис. 2 .1 1).
О тличительной чертой нисходящ его проектирования алгоритма является возмож ность контроля его работы с сам ого начала
о—>| + |~х> о-Ц — [>о о-»| X |-x>o»| -f- |>о
Рис. 2.11
проектирования. Э то достигается тем, что неразработанны е вы
числительные блоки заменяю тся так назы ваем ы м и «заглушками».
Заглушки — это блоки, имитирую щ ие вход и выход неразработан
ных блоков (рис. 2.12). Заглушка нужна только для того, чтобы проверить алгоритм определенного уровня.
С ВХОДНЫЕ \ ___ * ~7 (ЛЬ.(7\ ъ СВЫХОД НЫе\
^ Д А Н Н Ы Е J * \ ДАННЫ Е J Н УЛЕВО ЙУ Р О В Е Н Ь
Рис. 2.13
S = шах шах |х , ( / ) - ^ ( г ) |.
0 < / < Г К « 2
Значение к, даю щ ее min S, принимается в качестве решения к0^ к ^ к .
задачи.
П усть переходный процесс y ( t ) может бы ть измерен в дискрет
ном числе точек t}, г, = 0 , tm = T интервала Q ^ t ^ T . Т огда численный м етод решения задачи может быть следующим: заменим минимизацию S по непрерывному интервалу 0 < г < Г минимизацией на дискретном множестве точек:
5 , = max шах |х,(о)-.У<(о)1- l^ j^ n t 1</<2
В S x значения будем находить численным интегрированием системы дифференциальных уравнений с заданной точностью е.
П ри фиксированном значении к величина есть функция к, т. е.
S l = S 1(k). Приближенным значением к щ к точному к будем считать такое значение, которое минимизирует S l (k):
шіп S l (k).
Обозначим алгоритм этой задачи Z0A0. Проект алгоритм а на нулевом уровне представлен на рис. 2.13.
Входные данные: к 0, к {, х ° , х ° , tj ( l ^ y < m ) , y t(tj).
Выходные данные: к^.
О бращ аясь к библиотеке (см. гл. 12), находим, что среди базовых алгоритм ов имеется два, которые можно использовать в проекте алгоритм а, а именно: В5А0— минимизация функции (к), В6- А0 — интегрирование системы дифференциальных уравнений (2.2.1).
Опиш ем действия алгоритма Z0A0, необходимые для перевода входных данных задачи в выходные.
1) Вычисление m inS^fc) блоком В5А0 и определение k t . Но для блока В5А0 требуется иметь алгоритм вычисления по значению к значения S x(k). Таким образом, первый уровень проекта можно представить в форме рис. 2.14. Здесь алгоритм В5А0 имеет в своем составе еще не разработанны й блок вычисления значения S, (к).
Обозначим этот блок S1K0. Тогда второй уровень проекта алгоритма можно представить в форме рис. 2.15. Д ля представления блока S1K0 заметим, что в его действие входит:
Рис. 2.14
я,
S 1 K 0 |
Рис. 2.15
2) Интегрирование системы уравнений (2.2.1) б локом В6А0, определение х г( /Д l ^ z < 2 ,
3) Вычисление S( при фиксированном к.
Третий уровень проекта, представленный на рис. 2.16, есть блок-схема ал гори тм а S1K0. Здесь непомеченный блок производит следующие вычисления:
S y = max max |xf(/J) - > 'i(/J)|.
1 К і < 2
Но для блока В6А0 требуется иметь алгоритм вычисления правых частей дифференциальных уравнений и алгоритм определения значений x-Xtj) (см. гл. 12). О бозначим соответствую щ ие алгоритмы через Ғ0А0 и F0A1 соответственно, непомеченный блок рис. 2.16
( К , Х ° , Х ° ,
Рис. 2.16
t j ) --- >| В 6 А 0 1 — >] h ^ C ~ s T )ТРЕТИИУРОВЕНЬ
обозначим F0A2. Т огда четвертый уровень проекта м ож но пред
ставить в форме рис. 2.17. Заметим, что алгоритм ы четвертого уровня м огут бы ть представлены с пом ощ ью базовы х логических схем, базовы х алгоритм ов и элементарных арифметических дейст
вий над числами (см. рис. 2.11). Таким образом , проект рассм ат
риваемого алгори тм а исчерпывается пятью уровнями проектиро
вания. В качестве прим ера алгоритм а пятого уровня приведем блок-схему F0A2 (рис. 2.18). Вычисление S Y и S 2 на этой схеме осуществляется блоком А0В5 (см. гл. 12).
И тогом проектирования алгоритм а является структурно-логи
ческая схема — объединение схем на рис. 2.13— 2.18.
Теперь програм м ирование алгоритм а состоит в програм м и
ровании:
1) обращ ений к базовы м вычислительным блокам;
2) базовых логических схем;
3) элементарных арифметических действий.
Проектирование алгоритм а по указанным выше правилам будем назы вать структурной алгоритмизацией. Д ля дальнейш его изучения рассмотренных в этом пункте вопросов следует обратиться к [1].
• 2.3. Поток данных
После того как алгоритм спроектирован, т. е. построена его структурно-логическая схема, необходимо описать поток данных, проходящ их через него. Основные алгоритмы вычислительной м атем атики имею т как на входе, так и на выходе данные в виде чисел.
Внутри алгоритм а количество данных может изменяться, часть из них м ож ет запоминаться для дальнейш их вычислений, часть — затерта записью на их место других данных. Внутри алгоритм а возм ож на организация ввода и вы вода данных. Если учесть, что разм ер памяти ЭВМ , имеющийся в распоряжении пользователя, ограничен определенной величиной, то станет понятной важность описания прохождения данных (потока данных) через алгоритм.
2.3.1. Карга данных алгоритма. Полное описание потока данных ал гори тм а — это представление всех данных на структурно-логи
ческой схеме алгоритм а во всех точках входа в вычислительные блоки и выхода из них. П усть имеется схема алгоритм а (рис. 2.19), где цифрами от 1 до 10 обозначены все точки входа и выхода вычислительных блоков данного алгоритм а. В каж дой точке
1 — 10 необходимо указать все данные, которы е имеет алгоритм в этой точке для схем без повторений. Д ля схем с повторениями ука
зы ваю тся данные в точке 7 при входе в схему, в точке 8— перед выходом. В ка
ждой точке составляется ка
рта данных алгоритма. Т а ким образом , алгоритм , приведенный на рис. 2.19, имеет 10 пронумерованных карт.
А лгоритм , приведенный на рис. 2.19, реш ает сле
дующ ую задачу: в точке I вводится м атрица А, ве
ктор Ь. В точке 2 имеем решение системы линейных уравнений
Рис. 2.18 А х = Ь,
( XL( t j ) , y L( t j ) )
I
5 , =mox(IXL(tjVyt ( t j ) l) 1* l <2
---*
ЗАМЕНИТЬ j H A j + 1 |
i < r r i ^ > HET Г вывод S,
V octahob
S j= m a x (lx i(tj)-y i(tj)l)
52
Рис. 2.19
поэтом у в карте 2 добавляется вектор х к входным данным. В точке 3 вычисляется значение норм ы ||х || = т а х |х ,|. Д алее проверяется условие: если норм а ||х ||< 1 , то переход на 4, если ||х ||> 1 , то на 6.
П усть ||х ||< 1 ; тогд а в точке 5 имеем сумму вектора правых частей и решения z = x + b. П оэтом у в карте 4 добавляется вектор z. Если 11*11 > 1 , то переход на б, где вводится вектор у. Схема повторений вычисляет скалярное произведение векторов х и у:
50
q = Л
>=1
П оэтом у перед вы ходом из схемы повторений кроме данных карты 7 имеем еще число ц. П олный набор всех карт алгоритм а следующий.
К а р т а 1. Д вумерный массив вещественных чисел — м атрица 50, 1 < / < 50,
одномерный массив вещественных чисел bh 1 < ; < 5 0 . К а р т а 2. A i}, bt, одномерный массив вещественных чисел х {, 1 < ( ^ 5 0 .
К а р т а 3. Aij, bh x h ||х||.
К а р т а 4. С овпадает с картой 3.
К а р т а 5. А ф bh x h одномерный массив вещественных чисел
Zj, 1 < 50.
К а р т а 6. A u , bh x h одномерный массив вещественных чисел y h 1 < ( ^ 5 0 .
К а р т а 7. С овпадает с картой 6.
К а р т а 8. A ;j, bh x t, yt— вещественное число ц.
К а р т а 9. С овпадает с картой 8.
К а р т а 10. С овпадает с картой 5 или 9.
П оясним применение термина «карта» к способу описания данных. Во-первых, данные можно разм ещ ать на картах, пред
ставляю щ их пам ять ЭВМ , графически, а не д авать словесного описания, как это сделано выше, тогда термин «карта» адекватен способу описания. Во-вторых, термин «карта памяти» применяется при описании распределения пам яти ЭВМ, необходимого для выполнения програм м ы алгоритма.
53
Таким образом , карта данных алгоритм а играет ту же роль, что и карта памяти для програм м ы алгоритм а, но появляется на более ранней стадии решения задачи (на уровне алгоритма).
К арта данных алгоритма позволяет: 1) осуществить контроль структурно-логической схемы алгоритма; 2) докум ентировать ал го
р и тм так, чтобы в нем м ог разобраться каждый, а не только тот, кто его спроектировал.
П риведем простой пример контроля схемы алгоритм а, приве
денного на рис. 2.19, описанием потока данных. Сущ ествую т распространенные вычислительные блоки решения систем линейных уравнений А х - Ь, которые вектор решения х записываю т на место вектора правых частей (затираю т Ь). Если применить такой блок, то в точке 2 будем иметь следующую карту.
К а р т а 2. А {], одномерный массив х {.
С ледовательно, ветвь алгоритм а по точкам 3—4 — 8 уже не м ож ет быть реализована, если ||х ||< 1 .
# 2.4. Структура программ
Процесс создания команд для ЭВМ, следуя которы м ЭВМ выполнит алгоритм, называется программированием алгоритма, короче — программированием.
П рограм м а — это последовательность команд для ЭВМ.
Считая, что этапом, предшествующим програм м ированию , яв
ляется проектирование алгоритм а и описание потока данных, м ож но утверждать, что программ ирование — это перевод струк
турно-логической схемы алгоритм а и потока данных на язык маш инных ком анд — получение программы.
П рограм м у создает пользователь ЭВМ , выполняет програм м у (обрабаты вает команды) — процессор.
Выполняемая програм м а называется вычислительным процессом, короче—процессом.
П рограм м ы существовали задолго до появления ЭВМ , например м узы кальная партитура — это програм м а для музы канта, кулинар
ный рецепт — програм м а для повара. М ожно обнаруж ить м ного общих свойств между лю быми програм м ам и, выполняемыми одним процессором.
1) К ом анды выполняю тся п о с л е д о в а т е л ь н о , если нет других указаний, начиная с первой до последней. У казания м огут наруш ить последовательность выполнения програм м ы , например, требова
нием повторить часть м узы кального произведения.
2) Процесс должен им еть резул ьтат— выведенные на терминал числа и символы, звуки музыки.
3) Ч асто перед командами програм м располагается описание объектов, которы е програм м а обрабаты вает. В кулинарных рецептах дается список продуктов для приготовления блюда. В некоторых языках программирования необходимо описать данные перед командами.
54
4) Ч асто програм м ы строятся так, что автор не знает, какие вычисления будет вы полнять процессор,— это зависит от об ра
батываемых данных, но всегда должен бы ть указан критерий выбора пути вычислений.
5) В програм м ах применяю тся указания на необходимость повторения команды или последовательности ком анд более одного раза. В этом случае указывается либо точное число повторений (например, 100 раз), либо критерий, которы й зависит от процесса (повторять, пока точность вычислений не достигнет заданной е = 1 0 ' 6).
Спецификой програм м для ЭВМ является тот важнейший факт, что лю бая програм м а мож ет быть построена с пом ощ ью сле
дующих четырех базовых конструкций:
1. П оследовательность команд.
2. Принятие решения (альтернатива).
3. П овторение (цикл).
4. Процедура.
Первые три конструкции имею т тот же смысл, что и в 2.2,— это базовые логические схемы, где вычислительный блок есть группа команд или ком анда (см. рис. 2.5— 2.7).
Процедура — это группа команд, которая заменяется одной командой. Н апример, кулинарная книга содержит процедуру при
готовления бульона, а затем ссылается на эту процедуру в каж дом рецепте, требую щ ем бульона.
Процедуры в программировании ЭВМ уменьш аю т размеры програм м ы и придаю т ей иерархическую структуру «сверху вниз» — от сложного к простому.
В архитектуре алгоритм а вычислительный блок мож но рас
см атривать как процедуру.