книги из ГПНТБ / Сафонов, С. Ф. Вычислительная техника в инженерных и экономических расчетах (конспект лекций)
.pdfПрограмма вычисления у —х64 — циклическая задача, в кото рой последовательность действий может быть такой:
1. Послать в какую-нибудь ячейку ОЗУ число 6, равное коли честву одинаковых операций или количеству циклов.
2.Переслать аргумент х из ячейки, в которой он находится, в какую-либо рабочую ячейку, пусть в 29.
3.Перемножить содержимое 29 ячейки на самое себя (в 29 ячейке постепенно будет накапливаться необходимая степень ар гумента).
4.Вычесть единицу из содержимого ячейки — счетчика цик лов, т. е. из той ячейки, в которой находится число, равное коли честву циклов. '
5.Проверить на равенство нулю содержимое ячейки — счет чика циклов. Если результат в ней не равен нулю, идти к пункту 3, в противном случае идти к пункту 6.
6.Вывести на печать готовый результат.
7.Остановить машину.
Вэтом алгоритме, правда, всего лишь на два действия мень ше, чем в предыдущем, однако стоит изменить степень аргумен та с 64 на 63, и преимущество такого циклического алгоритма резко возрастет.
Переложим алгоритм на язык машины.
Обрабатывать информацию будем в форме с плавающей за пятой.
Разместим аргумент в 11 ячейке ОЗУ, а программу начнем с 30 ячейки.
30 Я 6 Я 12 — количество циклов определяется засылкой кон станты циклов — числа 6 в рабочую ячейку 12;
31 Я 11 Я 29 — посылка аргумента в рабочую ячейку 29; 32 УЯ 29 Я 29 — умножение, результат в 29 ячейке; 33 Я 1 Я 12 — коррекция содержимого счетчика циклов;
34 Я 32 Я ф — передача управления в 32 ячейке, если только предыдущий результат не равен нулю;
35 ЯЯ 29 Я 5 — вывод на печать результата в форме с плаваю щей запятой с пятью знаками после запятой; 36 о 2274 Я — возврат печатающей каретки телетайпа в исход ное положение и перевод бумажной ленты на
строку вверх; 37 к — останов машины.
Если бы необходимо было вычислить г/= х:63, то в приведенной программе следовало бы произвести такие изменения: в коман де из 30 ячейки число 6 заменить на число 62, а в команде из 32 ячейки заменить первый адрес на адрес 11. Все остальное можно
оставить без изменения.
Циклы с переадресацией. В тех частных случаях, когда об рабатываемая информация меняется от цикла к циклу, можно ис пользовать переадресацию команд цикла.
Ранее уже говорилось, что для изменения адресов команд ис
т а .
пользуется метод регистровой ячейки, т. е. такой метод, при ко тором переадресация команды выполняется перед выполнением команды ее сложением с первой ячейкой ОЗУ. В зависимости от двоичного кода в первой ячейке, запасенного на момент исполненйя команды, можно выполнять команду с желаемыми в ней адресами. Команды, которые должны переадресовываться перед своим выполнением, помечаются в программах символом «•+», проставляемым в самом конце команды («+» — символ форми рования команды). Примеры использования символа формиро вания
С 12 Я 2= 15 + С 12 Я 12= + ■ С 12 Я 15 + .
Следует помнить,'что перед своим выполнением команды с признаком формирования «+» меняются не в памяти, а на испол нительном органе — регистре команд.(с помощью сумматора).
Вэтом состоит принципиальное различие метода формирования
спомощью регистровой ячейки от метода формирования команды ее непосредственным сложением с какой-то константой.
Спомощью признака формирования возможно не только пе реадресовывать команды, но и>переформировать их в отноше нии операций, модификаций и условий. Рассмотрим переадресацию команд в цикле на таком примере: умножить квадратную матрицу, элементы которой расположены по строкам, начиная с 300 ячейки ОЗУ, на постоянный множитель, расположенный в 299 ячейке. Умноженную матрицу отпечатать по строкам с пятью знаками после запятой. Умноженные элементы матрицы должны остаться в памяти, начиная с 300 ячейки. Исходная информация задана в форме с плавающей запятой.
Программа:
29 Я |
625 Я |
11 — засылка количества циклов в 11 |
ячейку; |
ин |
||||
30 Я |
0 Я |
1 — очистка первой ячейки от оставшейся в ней |
||||||
|
|
|
|
формации (после работы на машине информация |
||||
|
|
|
|
в ОЗУ не уничтожается от включения-выключе |
||||
“*31 |
|
|
|
ния ее); |
|
на |
по |
|
УП 299 Я 300 + |
— умножение элемента матрицы |
|||||||
32 |
С 1 Я |
/ |
|
стоянный множитель; |
|
|
|
|
— добавление единицы в первую ячейку при каж |
||||||||
|
|
|
|
дом |
цикле для автоматического |
изменения |
в |
|
|
|
|
|
дальнейшем с помощью этой ячейки второго ад |
||||
33 В |
1 Я |
|
реса в команде из 31 ячейки. |
|
|
|
||
Ц — уменьшение содержимого счетчика циклов при |
||||||||
— 34 Я |
31 Я |
каждом прохождении цикла; |
|
|
|
|||
=+ —переход по стрелке, если содержимое ячейки |
||||||||
|
|
|
|
не равно нулю, в противном случае |
управле |
|||
|
|
|
|
ние передается в 35 ячейку. |
|
|
|
|
74
35 П 625 Я 11 — образование константы циклов в 11 ячейке для нового цикла — цикла вывода результатов на печать;
36 Я О Я 1 — очистка первой ячейки; 37 ЯЯ 300 Н 5 -|-----вывод на печать числа в форме с плаваю
щей запятой с пятью знаками после запя той-
38о 2274 Я — возврат каретки, перевод строки телетайпа;
39С 2048 Я 1 — добавление в первую ячейку константы изме
нения команд; 40 В 1 Я 11 — уменьшение, содержимого счетчика циклов пос
ле каждой печати;
41 И 37 П =f\ — переход к 37 ячейке, если циклы еще не окон чились, в противном случае переход к команде из 42 ячейки;
42к — останов машины.
Вэтой программе мы выбрали более наглядную форму пе редач управления — относительную передачу управления.
Итерационные циклы. При решении ряда задач, содер жащих циклический вычислительный процесс, число повторений цикла может быть не определено заранее. В этом случае логи ческие условия, с помощью которых обеспечивается управление циклами, могут быть сформулированы различным образом. На пример, при сортировке неизвестного массива чисел условием окончания цикла сортировки может быть появление трех нулевых
чисел подряд.
Наиболее распространенными циклами с неизвестным числом повторений являются так называемые итерационные циклы.
Итерационные циклы применяются в программах, составлен ных для вычислений функций методом итерации, т. е. методом многократного повторения вычислений по одной и той же форму ле. При этом каждый раз результат вычислений используется в качестве начальных данных для повторения цикла.
За начальные исходные данные выбираются приближенные значения искомых величин. Например, функцию F(x, у ) — 0 мож но преобразовать к виду
У -Г.(х, У)-
Для вычисления значения у используется следующая формула:
Уп+1^ ? (•*■> Уп)•
Начальное значение величины у0 выбирается приближенным
способом.
Процесс вычислений по формуле уп+\ =ф(*, У) продолжается
До
I Уп+l Уп I ^ ®>
где е — некоторое заранее заданное число.
75
При итерациях часто неудобно или затруднительно вычис лять количество циклов, за которое итерация достигается. Поэто му циклы с итерациями программируются без образования счет чика циклов, а с использованием условия достижения концов итеративного процесса.
Покажем итерационный цикл на примере вычисления квад ратного корня числа N по итерационной формуле Ньютона
где N — произвольное число.
Выберем Для удобства форму представления чисел в виде с плавающей запятой.
Разместим исходные данные:
35е — точность вычисления
36N.
Программу начнем с 37 ячейки.
37 П 43 Я 29 — команда из 43 ячейки отсылается на сохране
38 |
|
|
ние в 29 ячейку. |
|
|||
Я 36 Я 12 — |
= N -+ 12; |
|
|||||
39 Я 12 Я 13 — Ап~ 1 |
-+ 13; |
|
|
||||
40 ДЯ 36 Я 12 — - J L |
_ 12; |
|
|||||
|
|
|
Л«—1 |
|
|
|
|
41 |
СП 13 Я 12 - (Дп_, |
+ |
-jg L ) 12; |
|
|||
42 |
ОД 7670 |
Я 12 Ап—+12; |
(в ячейке 7670 находится число У2); |
||||
43 Я; |
39 Я |
43 — команда срабатывает только один раз, стирая |
|||||
|
|
|
себя |
после этого и оставляя на |
своем месте |
||
44 Я |
13 Я |
команду И 44 Я; |
|
||||
15 — пересылка содержимого 13 ячейки в рабочую |
|||||||
45 |
ВП 12 Я |
15 ячейку; |
|
|
|||
15 — |
1—Л„ = 6i анализ на конец итерации; |
||||||
46 ВМ 35 Я 15 — Ieil—lei; |
|
|
|||||
47 |
е\ |
16375 Я > — переход к команде из 39 ячейки, если итера |
|||||
48 |
|
|
ция не достигнута; |
|
|||
ЯЯ 12 Я 5 — вывод результата; |
|
||||||
49 |
О 2274 Я — возврат каретки, перевод строки; |
|
|||||
50 |
Я 29 Я 43 — восстановление команды; |
|
|||||
51 Я — останов. |
|
|
|
программой |
|||
|
Такую программу можно назвать стандартной |
||||||
вычисления квадратного корня действительного числа. Однако эту программу не стоит использовать, потому что в системе команд машины «Наири» для вычисления квадратного корня действительного числа имеется /псевдооперация «КП».
Кратные циклы. Может случиться, что в программе цикл должен содержать внутри себя один или несколько циклов, а внутренние циклы могут содержать в себе еще циклы и т. д.
Циклы, содержащие внутри себя еще циклы, называются
76
кратными. Покажем использование и составление кратного цик ла на примере. Требуется вычислить
у = а10 ф Ь 10 ф с10.
Разместим исходные данные в форме с плавающей запятой так: 29 а
3 0 |
в |
31 |
с |
Программу начнем с 33 ячейки:
33 Я 0 /7 32 — очистка 32 ячейки для последующего суммиро
34 Я 3 Я |
|
|
вания в нее (см. команду 41); |
|
|
|
|
||
13 — засылка константы циклов для внешнего цикла; |
|||||||||
35 Я О Я |
1 — очистка первой ячейки перед первым выполне |
||||||||
|
|
нием команды с переадресацией; |
|
|
|
|
|||
' 36 77 |
9 Я |
11 — засылка константы циклов для внут- |
|||||||
|
37 |
Я 29 |
Я 23 |
■реннего цикла; |
посылка |
в |
23 |
||
|
Н---последовательная |
||||||||
-----"38 |
|
|
|
ячейку величин а, в, с\ |
|
з |
|||
УЯ 1 Я 23 Н---- последовательное |
возведение |
||||||||
|
39 В 1 Я |
|
степень величин а, в, с; |
|
|
||||
|
11 — коррекция содержимого ячейки-счет- |
||||||||
' ----- 40 в\ |
|
- |
чика циклов внутреннего цикла; |
пе |
|||||
16381 П ф |
— безотносительный |
условный |
|||||||
|
41 |
|
23 |
|
реход; |
|
|
в |
32 |
|
С П |
Я 32 — суммирование: а 1С+ в 10 + с10 |
|||||||
|
|
|
|
|
ячейку; |
|
ячейку кон |
||
|
42 С 2048 Я 1 — добавление в первую |
||||||||
|
|
|
|
|
станты переадресации первого адре |
||||
|
43 В 1 Я |
|
са команд в модификации Н; |
|
|
||||
|
13 — коррекция счетчика циклов; |
|
пе |
||||||
|
44 е\ |
16375 Я Ф — безотносительный условный |
|||||||
|
|
|
|
|
реход; |
|
|
|
|
45 ЯЯ 32 Я 5 — вывод результата; |
|
|
|
|
|||||
46о 2274 Н — возврат каретки, перевод строки телетайпа;
47к — останов машины.
Впрограмме внутренний цикл есть цикл с переадресацией. Внешний цикл — кратный.
с Однако в ряде случаев периодический процесс, описываемый циклами, оказывается более сложным. Он может состоять, на пример, в последовательном выполнении то одного, то другого оператора; причем последовательность их выполнения не опи сывается простым регулярным законом. Может случиться и так, что последовательность работы операторов остается постоянной, но некоторая величина, участвующая в работе одного из опера торов, меняется по достаточно сложному закону. В этом случае используются сложные циклы.
Сложные циклы. Во всех этих случаях изменение счетчиков (содержимого ячеек — счетчиков) становится слишком гро-
77
моздккМ. В подобных случаях выгодно применять так называе мые л о г и ч е с к и е шк а л ы .
Логическая шкала представляет собой совокупность единиц информации, состоящую из двоичных разрядов или их групп, чередование которых соответствует закону чередования дейст вий в циклической программе.
В каждой из ячеек, занимаемых логической шкалой, могут размещаться несколько единиц информации — такую шкалу на зывают г о р и з о н т а л ь н о й . Если каждая единица информа ции занимает отдельную ячейку, то такую шкалу называют в е р т и к а л ь н о й .
Поясним идею составления и использования логических шкал на примерах нерегулярного чередования передач управления.
Горизонтальная шкала. Рассмотрим чередование передач управления в двух направленных операторам К\ и К2 в заданной последовательности.
Этот случай реализуем с помощью горизонтальной шкалы. Сопоставим передаче управления оператору К\ значение дво
ичного разряда, равное единице, а передаче управления опера тору К2 — ноль. Составим в направлении слева направо последо вательность двоичных разрядов, соответствующую последова тельности передач управления операторам Ki и К2. Эта последова тельность представляет собой логическую шкалу, которую поме стим в ячейку памяти.
Например, если сначала требуется передать управление три раза оператору Ки затем два раза оператору К2, потом йетыре раза опять оператору Ki и т. д., то начало логической шкалы бу дет выглядеть так:
111001111 .........
Составляем оператор, который осуществляет сдвиги этой ло гической шкалы влево на один разряд последовательно в каж дом цикле. В результате этих сдвигов в знаковый разряд сум матора будут последовательно попадать 1 или 0 последовательно, будут вырабатываться сигналы отрицательного или положитель ного числа. С помощью команд с условиями «оо » и «>» можно осуществить передачу управления операторам Ki и К2 в задан ной. последовательности.
Вертикальная шкала. Чередование передач управления в на правлениях можно реализовать с помощью вертикальной шкалы.
Вертикальную шкалу составляет таблица адресов передач управления сц, расположенных в последовательных ячейках в том порядке, в каком чередуются передачи управления каждому из операторов, а*—-представляет собой адрес входа в опера тор Ki.
С помощью переадресации в цикле, используя составленную таблицу адресов, можно формировать оператор последователь ной передачи управления по адресу в заданном порядке.
78
В заключение отметим, чгб оператор с логической шкалой, кроме своей основной функции, может определять и общее коли чество повторений циклической программы, т, е. быть счетчиком (шкальный счетчик).
После составления программы задачи наступает этап отлад ки программы. Как правило,доставленные на бумаге программы не работают при первом их прохождении на машине.
Этапы нахождения ошибок, допущенных при составлении программы, определяют квалификацию программиста. Програм ма, составленная программистом, проверяет его самого и отли чает ленивого или слабого от трудолюбивого или сильного не тем, сколько он допустил ошибок при составлении программы, а как быстро он находит их при первом прохождении программы, т. е. в момент непосредственной отладки программы.
Для отладки программ применяются так называемые отла дочные программы. Например, программы, определяющие струк туру передач управления во всей программе или в некоторых ее частях; программы, сохраняющие промежуточные результаты вычислений н выводящие их, когда это требуется на печать, про веряющие сохранность рабочей программы в памяти машины (программы контрольного суммирования исходной информации), и другие программы, облегчающие отладку.
Вообще говоря, отладка программы уже начинается при проверке перфоленты с вводимыми программной и числовой информациями.
Составление программы задачи в блочном виде облегчает от ладку, потому что в этом случае отладка всей программы будет состоять из отдельных этапов работы — отладки блоков (частей программы), что1намного проще анализа причин появления «уди вительных» результатов при первых прохождениях всей програм
мы.
Процесс отладки иногда может занять несколько дней, не
дель или месяцев.
Отладка программы кончается доказательством верности ее работы. Последнее часто достигается независимым расчетом за дачи для каких-то определенных исходных данных. В качестве таких проверочных исходных данных следует брать целые числа, в которых легко вручную произвести контрольные вычисления. Однако следует выбирать эти контрольные числа такими, чтобы они отражали специфику задачи. Иногда бывает так, что при од них числах исходной информации получаются неплохие резуль таты, зато при небольшом изменении их результаты становятся уже неправдоподобными. По характеру тех или иных исходных данных опытный программист мгновенно, взглянув на результат, может найти ошубку в программе и тут же ее исправить.
Для проверки программ независимым расчетом в ЭВМ «Наири» предусмотрен счетный режим, т. е. режим настольной кла вишной машины.
79
Решение задачи. После того как доказана верность работы программы, наступает этап решения задачи. После ввода прог раммы и исходных данных в память машины необходимо про вести контроль записи информации в память машины. Для программ используется метод контрольного суммирования, за ключающийся в суммировании всех команд программы или бло ков команд с выдачей контрольных сумм на печать и сравнением нх с полученными еще при отладке программ контрольными сум мами. Исходная информация может быть перед решением зада чи выдана на печать и проверена. После этого можно присту пать к решению задачи, если, конечно, в исходной информации не нашлись ошибки.
§ 3. ИСПОЛЬЗОВАНИЕ СТАНДАРТНЫХ ПРОГРАММ
Всякая программа для решения поставленной задачи (рабо чая программа) может быть разделена на некоторое количество программных массивов, команды которых выполняют определен ную последовательность операций с числами или командами. Среди массивов, составляющих рабочую программу, имеются программные массивы, реализующие такие последовательности вычислений, которые, во-первых, являются общими для разных программ, а во-вторых, многократно встречаются в различных местах одной и той же программы.
Так, например, во многих задачах приходится иметь дело с тригонометрическими функциями. Целесообразно для таких функций написать программы, которыми смогли бы воспользо ваться даже люди, не составляющие их. Правила обращения к стандартным программам должны быть естественными и про стыми.
Эти программные массивы выгодно составлять так, чтобы они легко могли быть включены в любую рабочую программу и не требовали программирования каждый раз заново. Такие про граммные массивы называются стандартными подпрограммами (СПП). Если же стандартная программа используется как са мостоятельная, то ее называют стандартной программой (СП).
Использование стандартных подпрограмм в массивах основ ной программы осуществляется обращением к СПП каждый раз в тех местах основной программы, где встречается такая необ ходимость.
Тогда составление рабочей программы сведется к состав лению массивов основной программы и присоединению к ним массивов стандартных подпрограмм. Монтаж рабочей програм мы из массивов основной программы и массивов стандартных подпрограмм можно выполнять автоматически с помощью, на пример, стандартной составляющей программы.
Использование в программировании СПП и СП — одна из основ автоматизации программирования.
80
Рассмотрим случай использования стандартных программ в виде самостоятельных. Этот случай будем называть решением задач в языке стандартных программ ЭВМ «Наири» или просто в языке стандартных программ.
Нижеперечисленные С П находятся в долговременной памяти
«Наири». |
Обращение |
к этим СП простое, так что ими могут |
||
пользоваться и люди, |
не знакомые с программированием. |
|||
СП решения систем линейных алгебраических уравнений до |
||||
28 порядка включительно. |
|
|||
Пусть система задана в виде |
|
|||
|
. а 1 1 |
Х 1 |
"Ь • .+ |
аХл ха — Ь |
|
#21 |
“J" #22 <^2 “1" *•• + |
агп хя— |
|
|
ап\ х1 + ап2 х2 -L. ■+ annxn = t |
|||
где хр, лу, |
...; хп — неизвестные; |
|
||
ап; а\2 \ ...; апп — коэффициенты при неизвестных членах; |
||||
вй в2; |
вп — свободные члены. |
|||
Для решения этой системы в данной СП используется метод главных элементов, о котором можно прочесть в [9].
Вслучае самостоятельного использования программы поря док действий определяется таблицей VI.
Входе решения системы возможны следующие случаи:
1. Машина выводит на печать: «Не могу» и запрашивает: «п=». Это случится при вводе исходных данных в тот момент, ко гда их количество вдруг станет соответствовать системе, боль шей 28 порядка.
2.Машина выводит на печать: «Решения нет» и останавли вается. Это означает, что введенные исходные данные отвечают несовместной системе уравнений.
3.Машина выводит на печать «оо» и останавливается. Си стема совместна, но произошло переполнение.
4.При неисправностях в машине или случайном сбое маши на печатает «Не совп» и останавливается. При случайном сбое (если электроники, обслуживающие машину, заверили вас о ее исправности) следует вернуться к началу схемы решения. Слу чайные сбои на ЭВМ «Наири» весьма редкое явление.
Эту программу-можно использовать и как подпрограмму ка кой-то рабочей программы, т. е.-ее можно использовать как со ставляющую рабочей программы.
Покажем, как можно использовать данную СП в виде СПП.
Если после выполнения какой-то части основной программы нужно отыскать неизвестные системы линейных алгебраических
уравнений и потом вновь вернуться в основную |
программу, то |
следует поступать так: |
» |
— по мере образования коэффициентов системы и свободных
6«*3657 |
gl |
Т а б л и ц а VI
ЭВМ печатает: п== Отпечатать после знака равенства порядок уравнения
I-
Нажать клавишу «ВК»
Решение и выдача результатов
членов при прохождении основной программы засылать их в ячейку ОЗУ. начиная' с 64;
—порядок системы поместить в 993 ячейку в форме целого
числа;
—в ячейке 980 поместить команду выхода из подпрограммы
вформе целого числа 200, если после СПП следует перейти к ко манде из 200 ячейки;
—в том месте основной программы, где требуется обраще ние к СПП, поместить команду перехода к ней в виде И 7723 П.
Результаты получаются в ячейках оперативной памяти с 64 по (644-л) и выводятся на печать, если на пульте сигнализации машины клавиша «Вариант» нажата.
СП вычисления определенного интеграла
Схема использования СП приведена в таблице VII. При работе программы возможны следующие случаи:
1. Машина выводит на печать: «Н‘е могу» — это означает, программа автоматического программирования заданной подын тегральной функции не размещается в отведенных для этого 76—200 ячейках ОЗУ.
82
