Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Сафонов, С. Ф. Вычислительная техника в инженерных и экономических расчетах (конспект лекций)

.pdf
Скачиваний:
16
Добавлен:
19.10.2023
Размер:
5.26 Mб
Скачать

Программа вычисления у —х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

Соседние файлы в папке книги из ГПНТБ