Текст
                    CM?
/

(р м ^ fa M )

' м и н и стерство вы сш его и с ред н его
СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ РСФСР
КУЙБЫШЕВСКИЙ ИНЖЕНЕРНО-СТРОИТЕЛЬНЫЙ
ИНСТИТУТ им. А. И. МИКОЯНА
КАФЕДРА ТЕОРЕТИЧЕСКОЙ И СТРОИТЕЛЬНОЙ МЕХАНИКИ

С. Ф. САФОНОВ

Ц
ч

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА
В ИНЖЕНЕРНЫХ
У) И ЭКОНОМИЧЕСКИХ РАСЧЕТАХ

%

(Конспект лекций)

КУЙБЫШЕВ 1974


МИНИСТЕРСТВО ВЫСШЕГО И СРЕДНЕГО СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ РСФСР КУЙБЫШЕВСКИЙ ИНЖЕНЕРНО-СТРОИТЕЛЬНЫЙ ИНСТИТУТ им. А. И. МИКОЯНА КАФЕДРА ТЕОРЕТИЧЕСКОЙ И СТРОИТЕЛЬНОЙ МЕХАНИКИ С. Ф. САФОНОВ \ / i' вы числительная' техника - В ИНЖЕНЕРНЫХ и ЭКОНОМИЧЕСКИХ РАСЧЕТАХ (Конспект лекций) Утверждено советом института 9 июля 1973 г. ЙБЫШЕВ\1974
Г»а. публичная ялучп» - тахиичаткм i айвлиатаны СССР эк а е м п л я р «ИТАЛЬИТ» &АЛА * Г '/м з з
Раздел I § 1. ПОНЯТИЯ, ПРЕДШЕСТВУЮЩИЕ ПРОГРАММИРОВАНИЮ Системы счисления. Системами счисления называют способы наименования и записи чисел. Перед изучением курса вычисли­ тельной техники, и в частности программирования, рекоменду­ ется познакомиться с этим разделом элементарной математики, изложенным в | 1], [2]. Большое значение в вычислительной технике имеют двоичная и (в некоторых случаях) .восьмеричная системы счисления. Достоинства двоичной системы счисления, используемые в вы­ числительной технике, следующие: а) простая реализация для двоичной системы счисления электронных, схем; б) замена действия вычитания действием сложения (исполь­ зованием дополнительного или модифицированно-дополнительного кода); в) замена действия умножения сдвигами двоичных наборов с последующим их сложением; г) для двоичной системы счисления требуется почти наимень­ шее количество электронных элементов, составляющих вычисли­ тельную машину. Алгоритм. Под алгоритмом для решения данного типа задач понимают точное описание (правило) выполняемого шаг за ша­ гом процесса, который завершается через конечное число шагов решением любой задачи данного типа. Существует мнение, что понятие алгоритма нельзя свести к более простым понятиям, и следует считать его неопределяемым точно так же, как и неко­ торые другие математические понятия, например, «множество», «соответствие» и т. д. Следовательно, понятие алгоритма долж­ но быть усвоено интуитивно из рассмотрения примеров. Пример. Алгоритм Ньютоца вычисления квадратного корня из данного числа N с любой степенью точности: Ш а г п е р в ы й . В качестве первого приближения для VNбе­ рем произвольное число Аь А2, А3..., А п. Общий член этой после­ довательности задается формулой 3
Лп = ~Y (^ n -l + 5 An—! ) • Учащийся, знакомый с основными результатами теории пре­ делов, сможет доказать, что выбор числа А произволен — ведь lim АП=УЛГ, но такой выбор влияет на скорость процесса. Этот алгоритм обладает весьма важной особенностью: в нем все ша­ ги по операциям аналогичны. Такой алгоритм называется цикли­ ческим. В качестве примеров составления программ ниже будут рас­ смотрены численные алгоритмы, т. е. такие, в которых решение какой-либо задачи сводится к арифметическим действиям. Кроме численных, существуют логические алгоритмы, в кото­ рых предписания о способе действия не относятся к цифровым объектам. Алгоритм поиска пути в'лабиринте является часто ис­ пользуемым примером логического алгоритма. Понятие алгоритма можно определить и так — алгоритмами в современной математике принято называть конструктивно за­ даваемые соответствия между словами в абстрактных алфавитах. Абстрактным алфавитом называется любая конечная сово­ купность объектов, называемых буквами данного алфавита. При­ рода этих объектов для нас совершенно безразлична. Важно лишь, чтобы рассматриваемый алфавит был конечным. Слова в таком алфавите определим как любые конечные упо­ рядоченные последовательности букв. Число букв в слове опре­ делит длину слова. Алфавитным оператором или алфавитным отображением на­ зывается всякое соответствие, сопоставляющее словам в том или ином алфавите слова в том же самом или в некотором другом фиксированном алфавите. Алфавитные операторы, задаваемые с помощью конечных систем правил,., принято называть алгоритмами. Содержательную и подробную информацию об алгоритмах можно почерпнуть в [14]. Покажем, как любую алгоритмическую проблему можно све­ сти к вычислению значений некоторой целочисленной функции при целочисленных значениях аргументов. Обозначим все условия задачи, перерабатываемые алгорит­ мом а, в виде последовательности с целыми неотрицательными индексами — номерами: А0, А ь А2..., А п,... Решения можно представить занумерованной последователь­ ностью В0, В и В 2...,Вт... После введения нумерации будем оперировать уже не запи­ сями условий и решений, а их номерами. Теперь можно предста­ вить алгоритм, ■который перерабатывает номер записи условий в номер записи решения. Этот алгоритм осуществляет вычисле­ ние значений числовой функции т — <р{п), т. е. он является чи­ сленным алгоритмом. .4
Бели существует алгоритм, решающий исходную задачу, то существует алгоритм, вычисляющий значения соответствующей функции. В самом деле, для нахождения значения ф(я) при п— п* можно выбрать запись условия для я*, далее с помощью имеющегося алгоритма найти запись решения и по ней опреде­ лить соответствующий номер т*. Таким образом, ф(я*)=яг*. Справедливо и обратное: если существует алгоритм вычисле­ ния функций ф(я), то существует'н алгоритм решения исходной задачи. Рассмотрим широко применяющийся для нумерации метод Геделя. Представим некоторое число я в следующем виде: ' п= - З’2 • 5*з . 7’* ... P ^ _ v ' где Ро — 2; Рi = 3 н т. д., т. е. Р„,-1— простое число. Учитывая то, что любое число можно разложить на простые множители только единственным способом, можно утверждать, что каждому числу однозначно соответствует набор ад, а2..., ат и, наоборот, каждому набору щ, а2,..., ат однозначно соответствует число я. Н а п р н м е р: если, я = 60, то 6 0 = 2 2. З1. 51, т. е. at =2, а2= 1, из— 1Этим способом можно нумеровать любые упорядоченные по­ следовательности т чисел. Пример. С помощью метода Геделя можно перенумеровать все слова в некотором алфавите А, где каждой букве ставится в соответствие некоторое число. Тогда любому слову в алфавите А соответствует ’последовательность чисел, от которой легко пе­ рейти к Геделевскому номеру, зависящему от выбранной систе­ мы соответствий букв и чисел. Далее можно перенумеровать все последовательности слов, например, дедуктивные цепочки. .^По­ следовательность номеров, полученная таким образом, даст воз­ можность провести анализ дедукции с помощью ЭВМ. Упорядоченные сочетания т чисел можно пронумеровать по формуле mT—1 тпг « - 2 с гк + С £ * - ^ с и - ог, г—1 г=1 где я — номер сочетания (без повторений) Оь Ог, аз..., ат‘> К — количество элементов (букв в алфавите описания), из ко­ торых составляются сочетания; тх— количество элементов в нумеруемом сочетании; бг — значение буквы (цифры), стоящей в разряде г, счет раз­ рядов сочетания ведется справа налево, начиная с едини­ цы, упорядоченного так: большая цифра стоит в млад­ шем разряде. 5
Нумерация по формуле, вывод которой дается в приложении, может быть произведена более экономно, т. к. эта формула нумег рует лишь сочетания без повторений. П р и м е р . По сочетанию аргументов 027 определить номер ячейки памяти, в которую следует записать вычисленную функ­ цию от этих аргументов, если К — 8, а т может быть произволь­ ным. п= 2 r= \ — 2 С7_г —47. г=г\ Сочетания с повторениями возможно свести к сочетаниям без повторений по следующему алгоритму: =h а2= “l + Рз + 1 ctg= аз -|- Рз 1 ал~ <*я—1+ Рл + 1 где а* г'-й элемент сочетания, к которому приводится исходное сочетание с повторениями; Рг—г-й элемент исходного сочетания с повторениями. Счет элементов ведется слева направо. П р и м е р . Привести сочетание с повторениями 3645tj к сочета­ нию без повторений Pi = 3; рз —6; Рз = 4; — Рь= 6; ах= 3 ; а2—10; а3е=15; а4 = 21; а5= 28. Таким образом, набор 36456 свелся к сочетанию без повторе­ ний 3 10 15 21 28. Поскольку любые наборы можно сводить к сочетаниям без повторений, то с помощью формулы, нумерующей сочетания, воз­ можно свести любой логический алгоритм к численному. Обратная задача, т. е. получение сочетания из его порядко­ вого номера, легко решается, см., например, [12]. Заметим, что формула нумерации сочетаний может служить в качестве математического описания широко используемого в кибернетике устройства—дешифратора. Программа. Автоматическая работа машины обеспечивается программным управлением. Программа представляет задавае­ мую машине инструкцию, указывающую, в какой последователь­ ности, над какими числами и какие операции должна выполнять машина. Естественный ход выполнения команд. В отечественных ма­ шинах принят естественный ход выполнения команд, т. е. коман­ ды выполняются в том порядке, в каком они расположены в ячеи6
ках памяти машины. После выполнения очередной команды уп­ равление передается следующей. С этим не следует смешивать те случаи, в которых сама ис­ полняемая команда производит передачу управления. В ЭВМ «Наири» команда, например, и 400 а (идти к 400 ячейке) переда­ ет управление команде, записанной в 400 ячейке запоминающего устройства. Подпрограмма. Это часть основной программы, имеющая са­ мостоятельное значение. В подпрограмме обычно вычисляется значение одной или нескольких функций. Если в основной про­ грамме несколько раз требуется вычислить какую-то функцию, то из соответствующего места основной программы делается об­ ращение к подпрограмме вычисления этой функции с последую­ щим переходом к основной программе, т. е. при многократном вычислении одной и той же функции используется одна и та же программа (подпрограмма). Использование подпрограммы дает возможность экономно расходовать емкости запоминающих уст­ ройств. Стандартные программы. Это программы, используемые для многократного решения некоторых типовых задач, например, вычисления тригонометрических функций, которые часто исполь­ зуются в виде подпрограмм. Стандартные программы (СП) раз­ рабатываются для данной машины и в случае надобности вклю­ чаются в программы решаемых задач. В некоторых машинах, на­ пример, в ЭВМ «Наири», некоторые СП закоммутированы в са­ мой машине как операции, используемые в командах. Такие СП названы псевдооперациями. Цикл. Это участок программы, выполняемой несколько раз подряд. Циклы часто применяются для вычисления значений при заданной последовательности аргументов. Характеристика ЭВМ «Наири». Электронно-цифровая вычи­ слительная машина «Наири» — малая универсальная вычисли­ тельная машина с небольшой емкостью оперативно запоминаю­ щего устройства. Универсальная потому, что она может решать любые задачи известных алгоритмов, которые могут быть разме­ щены в памяти машины. Вбе электронные устройства машины выполнены на полупро­ водниках, что делает ее компактной и более надежной в эксплу­ атации. «Наири» — двухадресная машина, потому что в ее командах наибольшее количество адресов (см. ниже) обрабатываемой информации равно двум. (При этом адреса команд, по которым проверяются условия [см. ниже], не принимаются во внимание). «Наири» обрабатывает информацию в двоичной системе счи­ сления и имеет 36 двоичных разрядов для хранения и обработ­ ки информации. Ее быстродействие от 100 до 2000 операций в секунду. Общение с машиной может происходить на нескольких язы7
ках с использованием привычной нам десятичной системы счис­ ления. Машина переводит с внешнего языка, на котором ведется общение, на свой внутренний язык сразу же по мере общения. X 353i S3 3 2 Л зогзэз 27 26 2S2K23 гг. 12219 LЭнакоёыи р о зр л д /3 J ; /5, '721 пврёы й р а зр л с ) Рис. 1. Нумерация разрядов в ячейках ОЗУ, ДЗУ, сумматора ЭВМ «Наири» снабжена полным набором операций, с по­ мощью которых возможно решение любых задач с известными алгоритмами. В этом и состоит универсальность ЭВМ «Наири», как, впрочем, и любой другой ЭВМ с полным набором операций. Емкость оперативного запоминающего устройства (ОЗУ) ма­ шины — 1024 36-разрядные ячейки. Каждая ячейка предназна­ чена для хранения одного числа или одной команды. Машина имеет долговременное запоминающее устройство (ДЗУ) (см. ниже), емкость которого— 16384 ячейки. Для обще­ ния с машиной имеются внешние устройства. Малая скорость вво­ да информации—пока существенный недостаток вычислительных машин. Информация может вводиться в машину в буквенной и цифровой формах, однако ЭВМ способна запоминать тоЛько цифры. Поэтому вводимые в машину буквы автоматически коди­ руются цифрами. Машина имеет четыре языка общения. ЭВМ для общения имеет в своем ДЗУ программу дешифрации исходной информации (программу ДИИ). Эта программа анализирует вводимую на простом языке информацию и выполняет предписы­ ваемые машине, таким образом, различные действия. Обраще­ ние к этой программе производится с пульта сигнализации про­ стым нажатием клавиши «Пуск-1». Программа ДИИ также не­ прерывно анализирует вводимую информацию на ошибочность и в случае ввода информации, не имеющейся в словарном запасе машины, печатает с помощью телетайпа символ >1<, помогая этим программисту. Разумеется, программой ДИИ не могут разли­ чаться семантические ошибки, т. е. использование одного слова, имеющегося в ДЗУ, вместо другого, находящегося там же. ДИИ различает лишь синтаксические ошибки. Например, если оператор вместо функции синуса станет оши­ бочно вводить функцию косинуса, то машина не сможет попра­ вить оператора — ведь оба слова верны с точки зрения машины. Но если оператор станет вводить слово, которого нет в словаре машины, то ЭВМ сразу же отпечатает признак ошибки. Это слу­ чится в том случае, если оператор начнет путать последователь­ ность действий при «разговоре» с машиной. Программа ДИИ осуществляет во время общения, перевод 8
десятичной и буквенной информации (внешней информации) во внутренние коды, которые всегда представляют собой двоичные наборы, а также выполняет и диспетчерские функции. С ее по­ мощью происходит обращение машины к тому или иному режи­ му работы. Следовательно, ДИИ является непосредственным помощником оператора в нахождении ошибок и в выполнении диспетчерских и других вспомогательных функций. «Наири» имеет/в своем ДЗУ тестирующую (проверяющую работоспособность машины) программу, с помощью которой лег­ ко определить исправность машины. ЭВМ «Наири» выполнена в виде красиво оформленного пись­ менного стола, потребляет 1,6 квт и может питаться of обычной электрической сети. Вес, машины около 600 кг. Машина обслу­ живается одним пнженером-электроником и одним техником. ЭВМ может работать круглосуточно. Такие малые вычислительные машины с небольшой емкостью оперативной памяти иногда называют инженерными вычисли­ тельными машинами. Функции некоторых устройств машины и их характеристика. ОЗУ служит для приема информации от других устройств маши­ ны, а также для хранения и выдачи этой информации другим устройствам. Разные задачи для своего решения требуют хранения различ­ ного объема информации, зависящего от сложности реализуемо­ го алгоритма, количества исходных данных и т. п. Классу реша­ емых задач (по объему алгоритма и исходных данных) в каждом случае отвечает та или иная ЭВМ в соответствии с емкостью своего ОЗУ. .При ручном программировании на «Наири» можно использо­ вать следующие ячейки ОЗУ: 0,1, 11—15, 29—980, 991—997, 1004—101.7, 1021—1023. При этом сохраняется возможность пользоваться режимами выдачи памяти. При чтении из ячеек па­ мяти информация не стирается. В ОЗУ можно записать информацию с телетайпа програм­ мным путем, т. е. в ОЗУ могут храниться исходная информация и промежуточные результаты вычислений. Запись нуля в ячейку ОЗУ иногда называется стиранием ячейки. Составленные про­ граммы размещаются вместе с исходным материалом в ОЗУ. ДЗУ предназначено для хранения постоянной информации: программ, управляющих работой машины (микропрограммы); стандартных программ; программирующей программы, с помощщо которой машина, составляет рабочие программы при об­ щении с ней в языке автоматического программирования; про­ граммы счетного режима; программы дешифрации исходной ин­ формации и другие программы и константы. В ДЗУ невозможно записать информацию, так же как и сте­ реть ее с телетайпа или сделать это же программным путем. Вся 9
информация в ДЗУ записана при помощи соответствующей ком­ мутации соединительных проводов. Емкость ДЗУ ЭВМ «Наири» — 16384 36-разрядных двоичных ячеек. В табл, 1 приведены адреса ячеек ДЗУ, в которых хранятся коды символов, выводимых на печать (см, ниже). Таблица 1 АДРЕСА СИМВОЛОВ Адрес № Знак десят. а 12 иа а 10 а 7а а 9 8 а 6 а 4а а 3 а 2 л 1 5 Ч и сл а 2176 1 0 1 1 0 1 1 0 0 0 1 1 0 1 2177 2 1 1 1 0 1 1 0 0 1 1 1 0 1 2178 3 2 1 1 0 1 1 0 0 1 1 1 0 1 2179 4 3 1 1 0 1 1 0 *0 1 0 0 0 0 2180 5 4 1 1 0 1 1 0 0 2181 6 5 1 1 0 1 1 0 2182 7 6 1 1 0 1 1 2183 8 7 1 1 0 1 2184 9 8 1 1 0 1 2185 10 9 1 1 0 1 2186 1 0 1 1 1 2187 2 1 1 1 2188 3 2 1 2189 4 3 2190 5 2191 1 1 1 0 0 о' 0• 0 0 0 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 0 0 ‘1 ь 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 1 1 0 0 1 4 1 1 1 1 1 0 0 1 1 0 0 0 6 5 1 1 1 '1 1 0 0 0 1 1 0 1 2192 7 6 1 г 1 1 1 0 0 0 1 0 1 0 2193 8 7 1 1 1 - 1 1 0 0 0 0 0 1 1 2194 9 8 1 1 1 1 1 0 0 0 1 0 0 1 2195 10 9 1 1 1 1 1 0 0 1 0 0 1 0 10 ■ Степень
П р о д о л ж е н и е табл. 1 Адрес № Знак а 12 а 11 а 10 а 9 а 7 а 8 десят. а 6 а 5 а 4 а 3 *а 2 а 1 1 1 0 1 0 0 Ч и ела Индексы 2198 1 i 0 0 0 0 0 0 0 2199 2 j 0 0 0 0 0 0 0 0 1 1 2200 3 t 0 0 0 0 0 0 0 1 1 1 г1 0 2201 I 0 0 0 0 0 0 0 0 0 1 1 1 1 2202 2 1 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 2203 3 2 0 0 0 0 0 0 0 1 0 1 2204 4 3 0 0 0 0 0 0 0 1 1 0 0 1 2205 5 4 0 0 0 0 0 0 0 1 1 0 0 0 2206 6 5 0 0 0 0 0 0 0 0 1 1 0 1 0 2207 7 6 0 0 0 0 0 0 0 0 1 0 1 0 1 1 2208 8 7 0 0 0 0 0 0 0 0 0 2209 9 8 0 0 0 0 0 0 0 0 1 0 0 1 2210 10 9 0 0 0 0 0 0 0 1 0 0 1 0 Буквы 2211 1 П 0 0 0 0 0 0 0 0 1 1 1 0 2212 2 ' С 1 1 0 1 1 0 0 0 1 0 0 1 2213 3 В 1 1 0 1 1 0 0 0 1 1 1 0 2214 4 У 1 1 1 1 1 0 0 1 0 1 0 0 1 2215 5 д 1 1 1 1 1 0 0 0 0 0 0 2216 6 Л 1 1 1 1 1 0 0 0 1 1 1 0 2217 7 м 1 1 1 1 1 0 0 1 1 1 0 0 2218 8 Z 0 0 0 0 0 0 0 1 0 0 0 0 2219 9 н 1 1 1 1 1 0 0 1 1 1 0 1 2220 10 X 1 1 0 1 1 0 0 0 0 4 1 1 2221 11 а 1 1 1 1 1 0 0 1 0 1 1 1 2222 12 Б 1 1 1 1 1 0 0 1 0 0 0 1 2223 13 г 1 1 1 1 1 0 0 1 1 0 1 0 11
Продолжение я и а 10 я 9 я 8 я 7 а 6 a a :5 ■ 4 я 3 !■ десят. JVs. Знак я 12 1* Адрес табл ! а 1 Буквы 2224 14 Г 1 1 1 1 1 0 0 0 1 1 0 О 2225 15 ч 1 1 0 1 1 0 0 0 0 1 0 1 2226 16 0 1 1 0 1 1 0 0 1 0 0 1 О 2227 17 е 1 1 0 1 1 0 0 0 1 0 1 1 2228 18 1 0 0 0 0 0 0 .0 0 '0 1 1 О 2229 19 р 1 1 0 1 1 0 0 ;1 1 0 о ■ О 2230 20 m 1 1 0 1 1 0 0 1 0 1 0 О 2231 21 ш 1 1 1 1 1 0 -о 1 1 1 1 О 2232 22 S 1 1 1 1 1 0 0 1 0 0 0 О 2233 23 1 0 0 0 0 0 0 0 0 1 0 1 I 2234 24 Ы 1 1 1 1 1 0 0 0 0 1 1 ! 1 2246 1 i 1 1 1 I 1 0 0 0 0 1 г О 2247 2 1 1. 1 1 1 0 0 0 1 0 1 1 2248 3 j k 1 ! 0 0 1 0 0 1 0 0 0 1 2249 4 n 1 1 0 1 1 0 0 0 1 1 1 1 Отношения 2250 1 2251 2 2252 3 > 2253 4 2254 5 2255 6 2256 2257 12 = 1 1 1 1 1 0 0 1 0 0 1 1 ф 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0 О < 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 о 0 0, 0 0 7 < ! 0 0 0 0 0 1 0 0 1 1 8 ос 1 1 1 1 1 0 0 0 0 1 0 1 >
П р о д о л ж е н и е табл. 1 а 12 Адрес jV а И а 10 а з 9 а 7 8 а 6 й 4 ■1 5 а 1а 2' 3 1 Знак десят. а 1 Буквы О перации 2258 1 + Г 1 0 1 1 0 0 1 О 1 1 0 2259 2 — 1 1 0 1 1 0 0 1 1 0 1 0 2260 3 X 0 0 0 0 0 0 0 0 О 0 0 1 2261 4 / 1 1 0 1 1 0 0 1 0 1 1 1 2262 5 V 0 0 0 0 0 0 0 1 0 0, 0 1 Знаки 2263 1 ( 1 1 0 1 1 0 0 0 0 1 1 0 2264 2 1 1 О 0 1 0 0 1 1 1 1 0 2265 3 ) » 1 1 0 1 1 0 0 1 0 0 1 1. 2266 4 * 0 0 0 0 0 0 0 1 0 1 1 1 С л у ж еб н ы е коды 2268 пер. строка 1 1 0 1 1 0 0 0 1 0 0 0 2269 возвр. кар 1 1 0 1 1 0 0 0 0 0 1 0 2270 пробел 1 1 0 1 1 0 0 0 0 1 0 0 2274 п. с. в. к. 0 1 0 0 0 0 0 0 0 0 1 0 П р и м е ч а н и е : а,, а2> ДЗУ. ctu — содержимое соответствующих разрядов
Таблица И С я а 1 Б К В — 5 * V В Л г й i е и i i X t 00 ф м 7 «к» н 1 > «9» О бу к «9» «0» п «0» «Ч» р «4» «8» ( «8» У m > Ы X < Ш > П Пробивки на' дорожках лент («1») 1 1 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 1 1 1 0 1 0 0 0 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 в Пробивки на дорожках лент («1») я с г 8 < «3» 2 «3» S 3 Z «6» 4 ■ «6» «2» 6 «2» «7» 9 «7» «5» ОцИфра «5» «1» — » i с (вк) (П С ) пробел В. Р. С. Р. Нижний регистр 1 J 0 1 1 0 1 0 0 1 1 0 0 0 0 1 1 0 1 1. 0 1 0 0 1 0 0 0 0 1 0 1 1 0 .1 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 0 • 1 0 0 0 0 1 1 0 Если в памяти машины имеется программа, которую жела­ тельно сохранить, но по какой-то причине требуется выключить машину, то такое выключение может быть произведено без потери информации в ОЗУ при условии, если каждую манипуляцию но выключению (сначала телетайпов, а потом самой*машины) все­ гда выполнять начиная с нажатия клавиши «Пуск-1» на пульте сигнализации. Сумматор. В нем выполняются все действия — арифметиче­ ские, логические и преобразования кодов двоичных наборов. В сумматоре использовано 36 двоичных разрядов. Сумматор отно­ сят к арифметическим устройствам машины. Устройство управления. Работа цифровой электронной маши­ ны заключается в выполнении отдельных команд в последова­ тельности, предусмотренной программой. Отсутствие развитого устройства управления у «Наири» компенсируется микропрограм­ мным управлением. Микропрограмма находится в ДЗУ и управ­ ляет машиной, выдавая необходимые электрические импульсы в нужные моменты времени и направляя их в нужные устройства. ЭВМ «Наири» — микропрограммная машина. Существует мно­ го машин, не имеющих микропрограммного управления. Вместо микропрограмм такие машины имеют развитые устройства управ­ ления. Важными для понимания программирования устройствами, входящими в устройство управления, являются счетчики команд и регистр команд. 14
Программы исполняются машиной следующим образом. В ОЗУ из массива программы на регистр команд выбирается ко­ манда, номер которой в данный момент имеется на счетчике ко­ манд. Управляющая работой машины микропрограмма, (из ДЗУ) анализирует кодовую (операционную) и адресную части команд (см. ниже). Электрические цепи машины подготавливаются к вы­ полнению операции, номер которой указан в кодовой части команды. На сумматор арифметического устройства выбирают­ ся числа, адреса которых указаны в адресной части команды, по­ сле чего выполняется сама операция. После выполнения очеред­ ной команды содержимое счетчика команд автоматически уве­ личивается на единицу и на регистр команд из ОЗУ выбирается команда, непосредственно следующая за ‘выполненной, если дан­ ная команда не была командой передачи управления. В том слу­ чае, когда исполняется команда передачи управления, то содер­ жимое счетчика команд определяется характером команды уп­ равления: в счетчик записывается адрес команды управления, т. е. адрес ячейки, которой передается управление; счетчик мо­ жет быть заблокирован (команда останова); содержимое счетчи­ ка может быть увеличено на определенное число единиц и т. д. Так машиной исполняются все программы. Внешние устройства предназначены для общения с ЭВМ. В качестве внешних устройств ЭВМ «Наири» используются теле­ тайпы— электрифицированные печатающие и передающие ин­ формацию машинки. «Наири» имеет два постоянно подключен­ ных в ней телетайпа: ленточный телетайп предназначен для перфорации бумажной ленты (перфорация — нанесение кодов информации в виде отвер­ стий) и для ввода-вывода кодированной таким образом инфор­ мации; рулонный телетайп — для ввода исходной информации и вы­ вода результатов вычислений на печать в обычной буквенной и цифровой форме на широкую бумажную ленту. Готовые, неоднократно используемые программы целесообраз­ но вводить с помощью однажды приготовленной и выверенной перфорированной ленты, потому что скорость ввода с перфолен­ ты во много раз выше скорости ручного ввода. С другой стороны, вводить информацию с рулонного телетайпа несравненно нагляд­ нее, а следовательно, целесообразнее в момент отладки новых программ,' когда основной трудностью является отыскание оши­ бок. Вообще говоря, к ЭВМ могут принципиально подключаться и Другие внешние устройства, например, быстрочертежные, проеци­ рующие и даже говорящие. В табл. II приведены коды перфора­ ции лент. Пульт сигнализации или режимная панель. На этой панели размещены неоновые лампы различных устройств машины: сумматера, регистра команд, счетчика команд и других устройств. 15
0 левом верхнем углу панели сигнализации размещены клавиши управления машиной, о которых следует знать перед изучением программирования. Клавиша «Пуск-1». С ее помощью операторы обращаются к распознающей язык общения программе дешифрации исходной информации (ДИИ). Клавишами «Вариант» и «Ключ» осущест­ вляются разветвления в программах. Языки программирования ЭВМ «Наири». Машина имеет че­ тыре языка, на которых в той или иной форме ей можно отда­ вать приказы: язык ручного программирования, или язык РП (язык машин­ ных кодов); язык автоматического программирования, или язык АП; язык счетного режима; язык использования стандартных программ СП, находящих­ ся в ДЗУ. Программирование состоит в изучении способов составления программ в том или ином языке программирования. Я з ы к РП пока еще самый гибкий язык составления про­ грамм, и притом компактных программ. Следует обратить внима­ ние на то, что машина всегда обрабатывает информацию во внутреннем коде языка РП, воспринимать же информацию «На­ ири» может в нескольких языках. Язык автоматического программирования значительно проще в изучении и напоминает язык обычной мате­ матической символики,. 1 Его достоинство— быстрота составления программы. В язы­ ке АП машина сама, по мере общения, с помощью программиру­ ющей программы составляет рабочую программу в языке РП, размещает рабочую программу в ОЗУ и потом решает по ней за­ дачи. Недостаток языка АП — неэкономное использование опера­ тивной памяти машины. Я з ы к с ч е т н о г о р е ж и м а . Так.лазвано условное обо­ значение той или иной последовательности кодов общения, ис­ пользуя которые на машине можно работать в режиме, на­ поминающем режим обычной счетной настольной вычислитель­ ной машины. При многократно повторяющихся вычислениях режим нецеле­ сообразен ввиду малого эффекта экономии времени вычислений. Поэтому этот режим, в основном, используется при отладке про­ грамм, когда требуется доказать независимым вычислением, что отлаживаемая программа выдает верные результаты. Я з ы к с т а н д а р т н ы х п р о г р а м м — язык использова­ ния программ, постоянно записанных в ДЗУ. Решать задачи в языке стандартных программ — самое легкое средство, но, конеч­ но, далеко не универсальное. 16
Формы представления чисел в машине. Числа в машину можно ввести и записать в ОЗУ различными способами в форме с пла­ вающей запятой, в форме целых, длинных чисел, в форме с фик­ сированной запятой. Запись чисел в форме с плавающей запятой представляется в виде двух множителей А --:М • 1(Х Такая запись имеет смысл в любой системе счисления. П|5и этом 10 означает основание системы скисления. В приведенной выше записи М — мантисса, Р — порядок. При нормальной записи на мантиссу накладывается ограни­ чение 0,1 < | м ! < 1. При этом 0,1 не обязательно означает десятую часть числа, а есть 1/ 10, где 10 — основание системы счисления. Нормализованная мантисса в двоичной системе счисления не должна быть меньше одной второй. Примеры записи чисел в форме с плавающей запятой: десятичная система счисления 0,5 • 10; 0,25 • 10°; двоичная система счисления (те же количества, что и в пре­ дыдущем примере). Обозначения двоичные! 0,101 • 10й ; 0,1 ■ 10- ю . Рассмотрим внешний и внутренний коды формы представле­ ния чисел с плавающей запятой. Внешний код — это форма представления чисел и команд в привычной для нас форме, удобной в общении с машиной. Уст­ ройства машины проще выполнить для двоичной системы счисле­ ния, но традиционной системой счисления уже давно является десятичная. Общение в двоичной системе счисления с машиной было бы слишком непривычным делом. Поэтому для некоторых современных ЭВМ предусмотрены встроенные в долговременную память различной сложности программы, переводящие внешний код общения во внутренний. Внешний код ЭВМ «Наири» имеет буквы русского и латин­ ского алфавитов, десятичные числа и некоторые синтаксические и математические символы: « + », «—», «/», «,» и др. Внутренний код — это упорядоченная определенным образом запись числа (буквы или команды) символами двоичной систе­ мы счисления — единицами и нулями. Вот как во внутреннем коде записываются числа в форме с плавающей запятой в устройствах машины: р .4. .1* 2—3657 г I. >- Т«ХИИ OOOF еКЗЕМПЛЯГ* Ч И ТА Л Ь Н О ГО 9 A i h
>озряЗ переполнения мант исса 11ниJHIпигш ш in гш ни512!П51НИ /знак мантиссы порядок НО. Г ' L HL П ^ О д мер разряЗа /знак порядка Рис. 2. Разбиение разрядной сетки ЗЁМ «Наири» для представления чисел в форме с плавающей, запятой 34—8 — разряды ячейки выделены для размещения мантис­ сы. 36 и 35—разряды для размещения,, соответственно, знаков чи­ сла и для анализа переполнения разрядной сетки. Разряды с 1-го по 7-й предназначаются для размещения порядка, причем седь­ мой разряд определяет знак порядка. Знаки отрицательных чисел обозначаются единицей в 36-м разряде, знаки отрицательных порядков — единицей в 7-м раз­ ряде. Отрицательное число записывается во внутреннем коде в модифицированном дополнительном коде — м. д. к. Положительное число пять в форме с плавающей запятой во внутреннем коде запишется так: О0 1 01 ООООО ОООQОООDа о о о о о о о о о о о о о о о н Рис. 3. Запись-положительного числа пять а отрицательное число пять запишется в м,. д. к. Н О Н OOOBDOO 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 о н Рис. 4. Запись отрицательного числа пять Достоинства формы представления чисел в форме с плаваю­ щей запятой: высокая точность, получаемая при округлении; наи­ высший, по сравнению с другими формами, диапазон представ­ ления чисел. Недостаток формы (для «Наири») — малая скорость обработ­ ки информации, а именно: операции сложения, еычитэния име­ ют скорость выполнения 600—800 операций в секунду, а умноже­ ние и деление выполняются со скоростью 100 операций в секун­ ду, так как в ЭВМ «Наири» числа в форме с плавающей запятой обрабатываются псевдооперациями. 18
В случае, если число, записанное в форме с плавающей запя­ той Л = М • 10* представить так, чтобы порядок был равен нулю, получим форму представления чисел, называемую представлением в форме с фик­ сированной запятой. В этой форме в мдшине «Наири» число все­ гда меньше 2—2 34. Примеры внутренних кодов формы: 0,510= 00, 1000...02; — 0,51о = 11,100...0* (Для записи отрицательного числа использован м. д. к.) Форма хорошо реализуется схемами электроники, однако при этой форме усложняется программирование, поскольку макси­ мальное значение чисел, представляемых формой, не может быть больше двух. При программировании задач в форме с фиксиро­ ванной запятой всегда требуется анализ на вероятность превы­ шения промежуточных и конечных результатов вычислений мак­ симального значения формы. Если такая вероятность существу­ ет, то задача требует масштабирования, причем часто даже ав­ томатически выполняемого в процессе решения задачи по мере получения промежуточных результатов той или иной величины. Необходимость масштабирования задачи до ее ввода в ма­ шину или с помощью автоматического масштабирования в про­ цессе решения задачи — существенный недостаток формы пред­ ставления чисел в виде с фиксированной запятой. Достоинство формы — в быстроте выполнения операций. Опе­ рации в этой форме, кроме операций умножения и деления, про­ ходят в «Наири» со скоростью до 2000 операций в секунду. Форма представления в виде целых чисел. В такой форме число в машине «Наири» представляется в виде ;V= a35 • 2364-а34 ■234+ ... + «» • 2°, где а, i — разрядная двоичная цифра—0 или 1. Самый старший разряд (крайний слева) — 36 разряд а35 характеризует знак чи­ сла. Если в этом разряде находится единица, то число считается отрицательным, если ноль — положительным. 35 разряд — а34— разряд переполнения. Отрицательные числа в этой форме записываются модифици­ рованным дополнительным кодом, получаемым по схеме: инвер­ сия разрядов отрицательного числа (замена единиц двоичных разрядов числа нулями и наоборот) с последующим сложением с единицей в младшем разряде. Как и в форме с фиксированной запятой, максимальная ошибка при округлении малых чисел в форме целых может до­ стигать недопустимых значений. Наибольшее положительное число в форме целого может быть для Зб-разрядной «Наири» не. выше 10й — 1. 2* 19
Достоинство формы — быстрота выполнения операций. Ско­ рость выполнения операций (кроме операций умножения и де­ ления) такая же, как и при обработке чисел в форме с фиксиро­ ванной запятой. В ЭВМ «Наири» числа могут быть записаны в форме «длин­ ных». Длинное число записывается в двух последовательных ячейках, причем целая часть числа записывается в предыдущей, а дробная — в последующей ячейке. Число в форме длинного изобразится as-? ■235 + а 34 • 234 - + а0 • 2n-j-a3i ■2- 34+ •+ о за • г - 33'.-!-... + «1 • 2 - ‘, где аз5— знаковый разряд, O34 — разряд переполнения, а; — раз­ ряды дробной части (в ячейке с дробной частью 36 и 35 разря­ ды не используются). Отрицательные числа записываются с по­ мощью модифицированного дополнительного кода. Например, отрицательное число 10,5 запишется в виде длинного числа во внутреннем коде целая часть/числа 111 10110 дробная часть числа 001000 0 Максимальное число в форме длинного, которое еще прини­ мает машина, равно величине 10й— 1. 1 Достоинство формы длинного числа — возможность легко, программным путем, отделять целую и дробную части числа. Это всегда легко сделать, потому что'целая и дробная части длинно­ го числа записываются в отдельных ячейках. В ЭВМ «Наири» числа из одной формы в другую можно пере­ водить с помощью специальных операций. Система операций. Цифровая электронная машина может вы­ полнять конечное число различных операций. Совокупность опе­ раций, выполняемых машиной, называется системой операций данной машины. Каждой операции присваивается определенный номер, напи­ санный в той системе счисления, в которой работает машина. Этот номер называется внутренним кодом операции. Системы one-раций многих ЭВМ являются полными, т. е. такими, что из них возможно составлять любые правила преобразования буквенной или цифровой информации. Из этого немедленно вытекает свой­ ство универсальности ЭВМ — возможность использования их для решения любых задач. В системе ЭВМ «Наири» операции подразделяются на ма­ шинные и псевдооперации. Машинная операция выполняется электронными схемами ма­ шины и обозначается при написании программ одной начальной 20 .
буквой общепринятого названия операции. Например, для обо­ значения операции сложения используется буква С, для умноже­ ния — буква У и т. п. 1 Псевдооперация — состоит из набора машинных операций и является стандартным набором этих операций, используемых мно­ гократно для вычисления таких, например, часто встречающихся выражений, как ]/, sin, cos, tg, exp, Ig , In . Стандартные наборы машинных операций (псевдоопераций) обозначаются в командах программ наподобие машинной опера­ ции с тем различием, что в обозначении этого набора испдльзуется не одна буква, а две. Например, обозначение логарифмирова­ ния (натурального)—In или вычисления корня квадратного—КП. Такие наборы псевдоопераций хранятся в ДЗУ, и если ЭВМ находит в программах код псевдооперации, то она всегда по этому коду обращается к своей долговременной памяти и выполняет по соответствующей СП ту или иную псевдооперацшо. Поскольку псевдооперацкя составлена из машинных операций, то она всегда работает медленнее машинных операций. Команда. Это часть программы, выполняющая одно (приня­ тое неделимым) действие, например, по сложению, умножению, сравнению и т. п. различных чисел. Команда содержит в «себе обо­ значение операции и адресов,ячеек, в которых содержится обра­ батываемая информация: С 100 Н 30 Это команда сложения двух чисел из 100 и 300 ячеек ОЗУ. Здесь буква С обозначает операцию, буква Н — модификацию, числа 100 и 30 — адреса обрабатываемой информации. В полном коде команды различают две основные части — ко­ довую и адресную. В кодовой части указывается номер (код) тон операции, которую должна выполнить машина на данном шаге вычислений (при прохождении данной команды). В команде мо­ гут быть указаны: а) адреса чисел, над которыми должна быть выполнена опе­ рация, или номера ячеек, откуда должны быть взяты числа для их обработки операцией, а также адрес ячейки, куда должен быть послан результат вычисления; б) условия, при которых команда выполняется или пропуска' ется; в) признак изменения адреса (адресов) или других кодов команды; г) модификация команды — вариации исполнения команды. Программа вместе с исходным числовым материалом через считывающее устройство (в «Наири» с помощью телетайпа) вво­ дится в ОЗУ. Каждой команде, из которых состоит программа, присваивается номер ячейки ОЗУ. Работа ЭВМ заключается в выполнении отдельных команд в последовательности, предусмотренной программой. 21
В обобщенном виде команду «Наири» можно обозначить так: а Ах %А2гтФ, где а — код машинной операции или псевдооперации; А\ — первый адрес обрабатываемой информации; 0 — модификация; Л2— второй адрес обрабатываемой информации; z — условие, при выполнении которого выполняется команда; при невыполнении условия команда с этим условием про­ пускается; т — адрес ячейки ОЗУ, с содержимым которой условие све­ ряется; ф — признак формирования команды. В таком виде для ЭВМ «Наири» команды считаются записан­ ными во внешнем коде, т. е в таком коде, в котором производится запись на бумаге при составлении программ и в котором програм­ мы печатаются на телетайпе при их вводе в машину. Рассмотрим в качестве примера конкретную команду «Наи­ ри», записанную во внешнем коде, С 23 Я 30 Первая буква, с которой начинается команда, обозначает машин­ ную операцию сложения. Цифра 23, стоящая в команде вслед за обозначением операции, — это первый адрес обрабатываемой ин­ формации, цифра 30 — второй адрес. Буква Я — обозначает мо­ дификацию команды — в данном случае модификацию ^накопи­ тель» (см. ниже). Команда выполняет такое действие: она производит сложение двух чисел, взятых машиной из 23 и 30 ячеек ОЗУ, а результат от­ сылает после выполнения действия в ячейку 30. После выполне­ ния действия результат всегда посылается машиной во второй ад­ рес команды. 1 ЭВМ «Наири»—двухадресная машина, так как в ее командах наибольшее количество адресов обрабатываемой информации равно двум. Кроме одноадресных и двухадресных машин, существуют еще трех-четырехадресные машиньц Для быстрейшего овладения программированием следует об­ ратить внимание на то, что во внутреннем коде все составляющие команду коды (операция, адреса, условие, модификация, признак формирования) изображаются двоичными наборами в форме це­ лых чисел. Например, в команде Я 32 Я 15 ее элементы будут числа в форме целых, расположенные в разных частях разрядной сетки. В машине «Наири» широко используются команды с условия­ ми— команды, срабатывающие при наличии каких-то числовых условий. Покажем, как записываются и выполняются команды с условиями, например, Я 20 Я 11 — 15. 22
Переслать содержимое 20 ячейки в 11 при условии, если б 15 ячейке содержится ноль. Команда с таким условием выполняется при выполнении условия (всегда на ноль), поставленного после второго адреса — в данном примере условия « = 15». Команда вы­ полняется так: если в момент исполнения команды в ячейке, по ^ л .'£>1 ц Признак ф<:рмирс£ониЯ./igMyw// 5и к а ц и а a n e p a i/u u / п ер вы й а ф ес А, !— Вв Qв г?в / 0 0 0 0 0 0 п 0 0 в --- V--'4 -----v------ 'Ч-L целое число лн о л £ ц е л о е число 5, у>е71Г>илолсе+*/<ос 5 3 по27разря'д_ с & >т рои а д р е с / |? Г1 ,) /} / ов0№ / // <7 * О а о т >V ц е л о е <stjesw ж , p ty c / ю л о ^ с е н я е е с 2 5 по /2 р а зр я д г/'•.осе vc/c./fo я , р ‘-у< "• с///>о /р а з р я д Рис. 5. Запись команды П 32 Н 15 во внутренней форме. которой проверяется условие, находится то, что изооражаегся в команде символом условия, то команда выполняется. В противном случае команда пропускается, и действие передается следующей команде. Б 5ВМ «Напри» имеется восемь условий, используемых в командах. Перечислим их: |„=0. 2 Ф 0. 3.>0. 4 .^ 0 . э.<0. 6 < 0 . 7.! 8.оо Условия «!» и «.ос» выполняются особо. Если в конце команды поставлено условие «!», то это всегда означает, что команда с та­ ким условием выполняется только в том случае, если па пульте сигнализации нажата клавиша «Вариант». С помощью условия «!» передачами'управления, например, можно управлять с пульта сигнализации машины, что часто необходимо при откладках про­ грамм — процессов, когда составленная на бумаге программа впервые выполняется машиной. При первых, таких прохождениях программ почти всегда в них находятся ошибки. Дополнительные команды печати, поставленные специально для отладки програм­ мы,— команды с условиями «!» — могут выдавать по желанию оператора в нужный момент работы отлаживаемой программы требуемые величины, по которым морю судить о характере ра­ боты программы в тот или иной момент времени. Условие «!» можно использовать и для управления прохождением программ по заранее предусмотренному варианту. Условие «оо» используется для анализа переполнения разряд­ ной сетки машины, т. е. для контроля правильности вычислений при вероятности появления в вычислении величин, превышающих диапазон представления чисел в машине. Команда с условием «оо» выполняется только в том случае, если содержимое 35-го и Зб-го разрядов ячейки одинаково. Последнее, как говорилось, 23
всегда случается в том случае, если нет переполнения разрядной сетки машины. Используя команды с условием «со», можно ана­ лизировать переполнение разрядной сетки машины. При появле­ нии переполнения можно отправлять машину, например, в прог­ рамму изменения масштабов задачи с печатью новых масштабов и автоматическим возвращением в начало той части программы, в которой при предыдущих масштабах наблюдалось переполнение разрядной сетки машины. Команды с условиями для ЭВМ «Наири» могут выполняться по анализу содержимого любой ячейки ОЗУ, если только ее но­ мер меньше или равен 15 (на размещение большого номера во внутреннем коде команды не хватает разрядов). Для всех команд с условиями: второй адрес в командах с условиями не может превышать числа 15 (как и адрес, по которому проверяется условие); не существует команд с условиями в модификации К (о мбдификации К см. ниже). Если после знака условия в команде не поставлен номер ячей­ ки, то это всегда означает проверку условия по фиксированной ячейке ОЗУ а2. Часто при программировании требуется передавать-управле­ ние, в ту или иную часть программы в зависимости от промежу­ точного результата вычислений. В арифметических операциях про. межуточный результат образуется в ячейке а2, т. е. перед выпол­ нением какой-то команды результат выполненной перед этим ко­ манды (арифметической) всегда находится в ячейке а& Так что если требуется передавать управление в какую-то часть програм­ мы в зависимости от промежуточного результата вычислений, то для этого можно использовать команду с условием по содержи­ мому ячейки а2. Итак, если в команде с условием после знака условия не про­ ставлен номер ячейки, то условие выполнится (или не выполнит­ ся) по анализу содержимого ячейки а2. Пример: П 20 Н 11 = Переслать содержимое 20 ячейки в 11 ячейку при условии, ес­ ли в а2 находится (в момент выполнения команды с условием) число, равное нулю. Команды с условиями позволяют реализовать в программах различного рода разветвления. Именно это и делает программы «творческими». Скоро мы приступим к непосредственному изучению способов составления программ, но перед этим требуется еще рассмотреть внутренние коды команд — ведь это, пожалуй, одно из главных понятий языка ручного составления программ — языка РП. Записаны ли внутри машины число или какая-то команда— они обязательно размещаются в 36-разрядной ячейке устройства 24 \
машины в виде двоичного кода. Такая двоичная запись представ­ ляет собой внутренний код команды или числа. В языке ручного программирования некоторых ЭВМ имеется своеобразие в исполнении одних и тех же команд, или, иначе го­ воря, команды в этих машинах могут .исполняться в различных модификациях. Рассмотрим модификации-команд ЭВМ «Напри». Таких кодов команд или внутренних форм представления команд (внутренних кодов) в ЭВМ «Наири» семь. Первая форма называется модификация «накопитель» (нако­ питель информации). Накопители информации — это различные внутренние н внешние устройства памяти. «Наири» не имеет внеш­ них устройств, памяти, это, конечно, снижает ее возможности. Запишем во внешнем коде в этой модификации какую-либо команду. Например, С 37 Н 29 Буква С обозначает операцию сложения чисел в форме целых или в форме с фиксированной запятой. Буква, проставленная в середине команды, обозначает модификацию. В модификации «накопитель» информация для ее обработки выбирается из пер­ вого и второго адресов. Команда, С 37 Я 29 складывает числа из 37 и 29 ячеек ОЗУ, а результат отсылается в 29 ячейку (вспомните, для арифметиче­ ских операций — всегда во второй адрес команды). Заметим, что результат отошлется и в фиксированную ячейку аг. В .модифика­ ции «накопитель» оба числа для обработки их операцией берутся из указанных в команде адресов. Решим такую задачу. Сложить два числа, размещенные в форме с плавающей запятой в 100 и 101 ячейках ОЗУ,'результат отправить в !1 ячейку, а исходное число из 101 ячейки сохранить. 29 /7 101 Я 11 — передача одного из слагаемых в 11 ячейку, 30 СП 100 И 11 — сложение чисел, представленных'в форме с плавающей запятой. 31 Я — останов машины. Рассмотрим, в какой двоичной внутренней форме (в каком внутреннем коде) записываются команды в устройствах машины . фЭесб размещается? призис?* <рормаро/с?*?а& Н о л *< у ы д б / _____ / - п р и з н а к е е с - m b , О - H e m / с г н .н и о Н е ) ХОд ход модификации операции // А -п е р в ы й адрес ', / А, о и afdpec / 0 0о L //п р и зн а н п себ д о о п ер а ц и и J Рис. 6. Разбиение разрядной сетки ЭВМ «Наири» для записи команд в модификации «накопитель» 25
в модификации «накопитель». Эта форма, определенная конструк­ торами машины, представлена на рис. 6. В модификации «накопитель» машина не может прочесть пер­ вый адрес команды сразу, потому что машина распознает числа в форме целых (команды как раз и содержат коды в виде чисел в форме целых), начиная всегда с первого (самого младшего) раз­ ряда. А первый адрес указанной модификации расположен с 25го по 12-й разряды включительно. Читая сразу же первый адрес из команды в модификации Н, машина восприняла бы его как двоичное число, размещенное с 25 по первый разряд, т. е. воспри­ няла бы его как какое-то большое число, ни в коем случае не рап­ ное первому адресу. Для верного чтения первого адреса машина сначала выделяет код первого адреса. Потом первый адрес сме­ щается машиной туда, откуда машина может прочесть его неис­ каженным, т. е. сдвигается вправо на 11 разрядов. Вторая форма — модификация <гкороткий параметр». Напи­ шем во внешнем коде команду в этой модификации : С1К1011. Сложить число 1 в форме целого с содержимым 1011 ячейки. Результат автоматически запишется в 1011 ячейке, а также в ячейке а2. Следует всегда иметь в виду, что в модификации К (также как и в модификациях Я, Л, Пу, Лу, см. ниже) первый адрес есть собственно не адрес, а уже само обрабатываемое операцией число, и притом в форме целого. Для модификации Н и Н„ .(см. ниже) первый адрес есть адрес памяти, откуда берется для обра­ ботки одно из чисел. Для модификации К разрядная сетка разбивается так, как по­ казано на рис. 7. ко^ - МОиитрс/АСУЦиС.- w / / призмсг/с tjbopAfupo6atfuJ? Рис. 7. Разбиение разрядной сетки ЭВМ «Напри» для записи команд в модификации «короткий параметр» Так же, к^к и в модификации Н, для второго адреса модифика­ ции К отведены 1—11 разряды, а для первого адреса — 12—25 разряды. Код модификации — 001. Он расположен — как и в ос­ тальных модификациях — в трех старших разрядах ячейки. По выполнению модификации К напоминает выполнение мо­ дификации П (см. ниже). В модификации К одно из обрабатываемых (операций) чисел есть сам первый адрес, второе число берется из второго адреса. 26
У команды в модификации К второй адрес может быть любым адресом ОЗУ. Итак, модификация К предназначена для команд с небольши­ ми первы.ми адресами и с большими вторыми адресами. Третья форма — модификация «правый параметр». Пример команды в этой модификации: С 32 Я 15 Число 32 в форме целого сложится с содержимым 15 ячейки. Ре­ зультат автоматически запишется в ячейку 15, а также в ячейку й2- Если командой складываются числа в форме целых,-тб число в 15 ячейке должно быть числом в форме целого. В модификации Я одно из обрабатываемых операций чисел есть сам первый адрес, второе число берется из второго адреса. Можно сказать, что одно из обрабатываемых чисел в этой мо­ дификации берется из кода команды. Вот как разбивается разрядная сетка для модификации Я (рис. 8). ' мсдафалаааа дю рации Ариер&ый адрес • 0 / 0 / А .'баорсд адрес jopc/jsscrsc ■{/JpUJHC/X лсеЁдоолёрацииу Рис. 8. Разбиение разрядной сетки ЭВМ «Напри» для записи команд в модификации «правый параметр» Сравните, так же как и для модификации К только для второ­ го адреса отведены разряды с 1-го по 7-й, а для первого — с 8-го по 25-й. Обозначение модификации во внутреннем коде — 010. В модификации Я второй адрес не может быть большим чис­ ла 127 — ведь в отведенных семи разрядах для его изображения и не запишешь двоичным кодом большего числа. Действительно 127 = 11111112 Зато первый адрес может в этой модификации быть большим в отличие от модификации Я или К. Достоинство по первому ад­ ресу в модификации Я порождено недостатком по второму ад­ ресу. Начинающие программисты часто забывают об этом и пыта­ ются иногда вводить^-в машину с телетайпа информацию такого, например, вида: С 11 Я 404. В таких случаях машина помогает программисту, тут же печатая признак ошибки — символ «*», и ожидает правильного ввода команды., Четвертая форма — модификация «левый параметр». Пока27
жем ее использование на одном из примеров. Образуем число в форме целого в 11 ячейке командой в модификации Л, причем число (двоичное) 2’8, содержащее единственную единицу в 19 раз­ ряде. Посмотрите на внутреннюю форму данной команды (рис. 9): Во внешнем же коде команда запишется П \ Л \ \. 9 loll А КМ 1ФМ о|Ф 1Ф М Ф 1Ф М Ф 1Ф 1Ф !оП Ф № |оНN Рис. 9. Запись команды Я 1 Л 11 во внутренней форме В модификации Л перед операцией первый адрес выделяется и сдвигается влево на одиннадцать разрядов, и лишь после этого полученное таким образом число обрабатывается операцией. В модификации Л одно из обрабатываемых чисел есть сам первый адрес, но перед выполнением операции сдвинутый на одиннадцать разрядов влево (увеличенный на 2й ). Второе число берется из второго адреса. Пятая форма—«накопитель с условием», с которой начина­ ется представление команд с условиями. Вот команда в этой модификации: КП 12 //ИуИО. Извлечь квадратней корень из числа в форме с плавающей запятой из 12 ячейки при условии, если только содержимое 10 ячейки не равно нулю. В противном случае команда пропускает­ ся, и управление передается следующей за ней (КП — псевдо­ операция). Использование условий в командах делает возможным вы­ полнение той или иной команды в зависимости от того, что про­ изошло в вычислениях перед командой с усл'овием. Вот как разбивается разрядная сетка машиньцдля модифика­ ции Н (рис. 10): Для различия машиной в трех старших разрядах внутреннего кода модификации Ну указывается двоичный набор 100. В модификации Ну оба обрабатываемых операцией числа бе­ рутся из адресов (первого и второго). Команда в модификации О КОП. г-'—.---у— *---*— f 00 th m — --------...........--у—'— Z « Яг v*-^— • ! m - номер ячейки, покото­ рой проберяется ус/юдие г-уй1о8ие{?г)>,<р£11т.у Рис. 10. Разбиение разрядной сетки ЭВМ «Напри» для записи команд в модификации Ну 28
Ну выполняется, если выполнено условие; в противном случае команда пропускается. Шестая форма — модификация «правый параметр с усло­ вием»- В этой модификации команда может иметь такой вид: /7 1/7 11^= Послать целое число 1 в ячейку 11 при условии; если только в ячейке а2 не содержится ноль. Напомним, что в ячейке а2 нахо­ дится результат предыдущего действия. Вспомните, если после знака условия не указан номер ячейки, по которой проверяется условие, то это означает проверку условия по содержимому ячей­ ки а2. Для модификации П у в машине отведен формат внутреннего кода (рис. 11). /кодОперации /код модификации Л р и зи о к // формирования Рис. И. Разбиение разрядной сетки ЭВМ «Напри» для записи команд в модификации Пу В модификации Пу одно из обрабатываемых чисел берется равным первому адресу, второе число берется из второго адреса. Команда в модификации /7У выполняется, если выполнено усло­ вие, в противном случае команда пропускается. Пример. Вычислить функцию y = s \ n x гари условии, если в 11 ячейке в момент вычисления должно находиться число меньше нуля, в 12 ячейке число больше нуля, а в 13 ячейке число равно нулю. Результат записать в 14 ячейку и выдать на печать с пятью знаками после запятой. Составляем программу. В ЭВМ «Наири» операция вычисле­ ния функции sin х исполняется только для чисел в форме с плава­ ющей запятой, поэтому и выберем эту* форму для представления чисел. Разместим аргумент в форме с плавающей запятой в произ­ вольно выбранной 29 ячейке. Программу начнем тоже с произ­ вольно выбранной ячейки 100. (Перечень ячеек ОЗУ, которые мо­ гут быть заняты при использовании СП и псевдоопераций (при­ ведены в табл. III). 100 И 106 11— передача управления в 106 ячейку, если в 11 ячейке число не меньше нуля или равно нулю; 101 Я 106 775» 12 —•передача управления в 106 ячейку, если в 12 ячейке число не больше нуля или равно нулю; 29.
Т а б л и ц а III ИСПОЛЬЗОВАНИЕ РАБОЧИХ ЯЧЕЕК ОЗУ В ПРОГРАММАХ, ЗАПИСАННЫХ В ДЗУ Виды программ | Рабочие ячейки 3-:-7 1. In х; lg х; у ' х ; arcsinx; arc cos х: arc tg x 2. ex; crt; bn; gn; уп, вм; ob; од ; 3-:-8 nm; eg; bg; нд; от; пи 3. sin x; cos x; tg x l дн 3-:-9 4. ym; nz 3-;-9, 16, 17; 5. ng 3-:-9, 16, 17, 20, 21 6. * nn 3-:-9, 16, 17, 20-:-26 3--.-9, 16, 17, 20-:-23, 25 7. yg 8. nc 3, 4 9. cc, bk 3, 4, 16, 17. 20-:-23 10. yk; gk 3, 4, 16, 17, 20-:-23; 25; 26 3, 4, 8, 9 11. nk 3-:-5, 8, 9, 10 12. gm 3-:-6, 8, 9, 16, 17, 20-':-23 13. gg 2, 3, 18, 1018-:-.1020 14. вв (выдача памяти) 1, 6, 7, 16-:-28, 1000 15. ДИИ (дешифрация исходной ин­ формации) 14, 32-:-60, 61-;-61+5п3+Зп; 980 16. Обращение матрицы и вычисление определителя 32-:-63: 64-:-64+п2+Зп; 980; 17. СУ (система линейных алгебраи­ 993, 1022 ческих уравнений) ■ 15, 20; 33-:-54; 65-:-980; 18. Система обыкновенных дифферен­ циальных уравнений 15, 20, 41, 60, 61, 65, 980, 67-:-370 19. Интеграл 2, 9, 16-:-18; 23; 25; 32; 981--.-990 20. СС (счетный режим) 998-;-1003; 1005; 1007-1-1016 102 И 106 Пф 13 — передача управления в 106 ячейку, если в 13 ячейке находится число, которое не равно нулю; 103 Sri 29 Н 14 — вычисление функции sin л:, результат отпра­ вится в 14 ячейку; 104 пп 14 Н 5 — вывод на печать; 105 О 2274 Я — возврат каретки телетайпа, перевод строки (бумажной ленты на строку); 106 К — останов машины. Седьмая форма—модификация «левый параметр с условием». Для этой модификации в ЭВМ «Наири» использован формат ■внутреннего кода (рис. 12). В модификации Л у команды выполняются так; Я 1 ЛД1> зо
Число в форме целого выделится й сдвинется из 12 разряда, где оно во внутренней двоичной форме записано на семь разря дов влево н после этого пошлется в 11 ячейку при условии, если мод Операции А, ' т А? Рис. 12. Разбиение разрядной сетки ЭВМ «Наири» для записи команд з модификации Л у только в'ячейке а2 в момент исполнения этой команды находится число больше нуля. Рели в модификациях К и П можно командами образовывать сравнительно небольшие числа, например, командой в модифика­ ции Л Л 262143 П 11 (послать в 11 ячейку число 262143 в форме целого), то в моди­ фикации Л можно той же операцией получить в 11 ячейке намно­ го большее число Я 262143 Л 11 (в 11 ячейке образуется число, изображаемое в двоичном внут­ реннем коде в виде 11 10...О или в виде внешнего кода (деся­ тичного) отрицательное число 262144). Таким образом, команда­ ми в модификациях Л и Л у можно образовывать даже операции н модификации. ~ Характерной особенностью электронных вычислительных'машин является то, что команды программы записываются в опера­ тивную память машины наравне с числовым материалом в виде цифр; с ними и можно оперировать как с числами. Это позволяет в ходе вычислений заменять одни команды другими, образовы­ вать новые команды с помощью арифметических операций—фор­ мировать новые команды. ЭВМ не в состоянии различать команды от цифр обрабаты­ ваемой информации. Поэтому программисты или операторы все­ гда (кроме ошибочных действий) отправляют ЭВМ в работу но программе так, чтобы машина не могла уйти из программы в ци­ фровую информацию— ведь в этом случае ЭВМ будет выполнять 'какую-то невероятную программу, воспринимая цифры исходно­ го материала как команды. Форма представления чисел также не может самостоятельно определиться машиной. Формы представления чисел распозна­ ются машиной с помощью операций. Если операция команды есть псевдооперация, то машина выберет обрабатываемую ин31
формацию соответственно обозначению псевдооперации. Послед­ ние существуют для обработки чисел в формах с плавающей за­ пятой, в форме длинных чисел и форме целых.«Если псевдоопера­ ция обрабатывает числа в форме с плавающей запятой, то она и будет извлекать числа из указанных в команде ячеек в форме с плавающей запятой. С другой стороны, используя, например, форму целых, можно подбирать их так, чтобы они соответствовали тем или иным чи­ слам, скажем, в форме с плавающей запятой. Например, исполь­ зуя команду отсылки числа (целого!) Я 131089 Я зо; получим в 30 ячейке ОЗУ единицу в'форме с плавающей запя­ той. Рассматривая внутренние коды различных форм представле­ ния чисел, легко составить таблицу или правило соответствия чи­ сел одной формы числам другой формы. Формирование команд в программах. Для команд ЭВМ «Наири» существует признак, по которому команда с этим признаком может переформироваться или заново формироваться. Пусть, на­ пример, требуется изменить на единицу второй адрес такой команды Я 100 Я 200 Так как команда во внутреннем коде представляет какое-то чи­ сло, то для изменения младшего разряда такого числа (см. внут­ ренний код модификации «Н») естественно прибавить к нему кон­ станту изменения — в нашем случае единицу. Это можно сделать в программе следующим образом: 120 Я 1 Я 1 121 Я 100 Я 200 + Записанная программа сработает так: команда из 120 ячейки зашлет единицу в форме целого числа в первую ячейку; в команде из 121 ячейки имеется признак формирования команд «+», который ставится всегда в конце команды. Признак формирования, поставленный в конце команды, озна­ чает, что прежде чем такой команде исполниться, она должна сложиться с первой ячейкой ОЗУ. Причем такое сложение произ­ водится не в оперативной, памяти машины, а в специальном уст­ ройстве без посылки после этого измененной команды из этого устройства в ячейку памяти. Результат, полученный на специаль­ ном устройстве (на регистре команд), и будет новой (сфор­ мированной) командой, которая вслед за этим и исполняется. 32
В нашем примере после формирования на регистре команд получается'новая команда Я 100 Я 201, которая сразу же и исполняется. Такой процесс изменения адресной части команд называется переадресацией команд. Если в той же команде необходимо было бы изменить второй адрес, скажем на пять, то перед выполнением команды в первой ячейке должно находиться число пять в форме целого. Теперь изменим первый адрес той же команды на единицу 29 Я 2048 Я 1 30 Я 100 Я 200 + . Команда из 29 ячейки посылает целое число 2048 в первую ячейку. Когда команда из 30 ячейки выберется на регистр команд, машина «увидит», что в команде есть признак формирования, и прежде чем исполнить такую команду, машина сложит с этой ко­ мандой содержимое первой ячейки. Вспомним теперь двоичную систему счисления. В младшем разряде двоичного набора всегда имеются единица или ноль. Во втором разряде обозначаемые соответственно единицей или ну­ лем — двойка или ноль. В третьем разряде в двоичной системе счисления единицей обозначают четверку, в четвертом разряде — восьмерку, в пятом — шестнадцать, шестом..., двенадцатом раз­ ряде— 2048. Итак, число 2048 изображается единицей в 12 раз­ ряде двоичной системы. Теперь взгляните на внутренний код ко­ манды Я 100 Я 200 + (рис. 13). Рис. 13. Запись команды я Л00 я 200 во внутренней форме В этой модификации младший разряд первого адреса коман­ ды как раз и начинается с 12 разряда. Складывая в исполнитель­ ном устройстве содержимое первой ячейки с командой, машина получит перед выполнением этой команды ее переформирован­ ный вид Я 101 Я 200. А если требуется изменить первый адрес команды сразу на Два? Тогда следует сложить команду с константой формирова­ ния — 4096 и так далее. Если же нужно изменить первый и второй адреса одновремен­ но, например, на два, то следует с помощью первой ячейки и при3—3657 33
знака формирования команд сложить команду перед ее в ы п о л н е­ нием с константой 4096+2=4098. Поскольку внутренние коды одной и той же команды в моди­ фикациях Я и Я различны, то различны будут и константы фор­ мирования команд в этих модификациях. В модификации Я кон­ станта формирования первого адреса на единицу будет равна чи­ слу 128. Этот вывод подтвердится, если взглянуть на внутренний код модификации Я. Система команд ЭВМ «Наири». Совокупность команд, соот­ ветствующих системе операций данной машины, называется си­ стемой команд машины. При рассмотрении системы команд будем записывать коман­ ды в виде сА®А2, где С — конкретная операция (в данном случае машинная опера­ ция сложения); А х— первый адрес команды; А 2— второй адрес; 0 — обобщенное представление модификации. Обобщенное обозначение действия, выполняемого командой, например, для команды С Aj 0 А 2 обозначим символами (4г)+ [^ 1)9 A i, «2> где круглые скобки указывают на содержимое адреса, а квадрат­ ные, в зависимости от модификации, могут обозначать как со­ держимое адреса, так и непосредственно число, равное адресу. Горизонтальной стрелкой’будем обозначать отсылку результа­ та действия в адрес А2 и ячейку а2. Операции ЭВМ «Наири» можно подразделить на несколько групп: арифметические операции; 1 логические операции; операции над кодами; операции управления; вспомогательные, или служебные, операции. Арифметические операции делятся на машинные операции и псевдооперации. Машинные операции представлены в таблице IV. Покажем на примерах использование некоторых из них. Сложить два числа в форме целых из 100 и 101 ячеек С 100 Я 101, Результат окажется в 101 ячейке. Сложить два числа в форме с фиксированной запятой, одно из которых находится в 100 ячейке, а другое — в а2; результат разместить в 200 ячейке. 34
Т а б л и ц а IV хое Холостая операция (СгК) - СгК 2A x0 Безуслов­ ный пере­ ход [A jle 1 000000 00 2 100000 40 u .3 000001 01 cA 4 100001 41 CjAiQAa 5 000010 02 ЬАгвА» 6 100010 42 biA10A 2 7 000011 03 уА хвА г 8 1 0 0011 43 yiAj0 A2 9 000100 04 gAjL0A2 10 100100 44 giAjOAs 11 000101 05 aA ^A z 12 1001 0 1 45 aiAx@A2 i3 000110 06 5A10 A 2 14 000110 46 S|Ai @A2 15 000111 07 hA j 0A2 16 1 0 0111 47 HxO 0A 2 17 001000 10 nA20A 2 18 50 П)ОвА2 3* 101000 10 A 2 Сложение - СгК ct2—сохра­ няется В програм­ мах не , применять (А2) + [Aj]0 -»■ А2; а2 (а») + [Ai]g -*■ А2; а2 Вычитание (А2) — [Ai]e -»■ А2; а2 (а2) — [Ai]e А2; а2 Умножение (А]) X [Ах]0 -> А2; а2 Ответ не анализи­ руется. Машина выдает пра­ вильные результаты, если [х]< 2. (а2) X [AiJg -*■ А2; а2 Деление (А2) : [Axjg -*■А2; а2 (а2) : [Ajjg -»■ А2; а2 Ариф, сдвиг вправо (А2) на [Aj]g ->■ А2; а2 0 фл » (а2) на [А4]в А2; а2 е ф лу Лог. сдвиг влево (А2) на {Aj ] q А2; а2 0 фл (а2) на [Aj] q -* А2: а2 0= л Нормали­ зация » Передача числа [Ах]0 норм. -*■ Ао Колич. сдвиг. а2 (а2) норм. А2 Колич. сдвиг. а2 Рекомен­ дуется брать 0 = К [Ai]e -*■ А2; а2 (а2) -»• А2; а2 Рекомен­ дуется брать 0 = К 35
Продолжение 19 001001 11 C2A i0A 2 20 101001 51 С3Аг0А , 1 1 21 001010 12 b.,Ai0A4 1 | 22 10.1010 52 bsA ,0A 2 23 001011 13 ysA i0A 2 24 101011 53 y3AiOA3 25 0011001 14 g2A10 A 2 Сложение (Аг) + [Aj]0 -> А2; а2 (аг) Вычитание Умножение [Aijg; -v А2; а2 (Аг) — [Ах]0 А2; а2 (а2) — [Аг]в А2; а2 > (А2) X [Ai]0 -*■ Аг; а2 (а2) X [Ajjg Деление (А2) : (А!]@-> А2; а2 26 101100 54 g3A]0 A2 27 001101 15 iA^OAa Логическое сложение 28 101101 55 KA-, 0 a 2 » 29 joOlllO 16 1 JIAi 0 A 2 Логическое умножение (Аг) A [Aj Iq -*■ а2 » (а2) д [A1J0 ->■ А2; а.2 30 101110 56 HiAiQAa ]■ 1 j 31 OOiillj 17j MAx0 A 2 i 1 32 10111 ij 57j MiAiBAa Сложение по mod.2 » зз joioooo 20j uAx0 Переход без воз­ врата 34 110000 6o| U jA ^A a Переход с возвратом 35 *010001 21 OA,0 Обращение 36 110001 61 OxO© 36 » В случае переполне­ ния раз­ рядной сетки j х j > 1 делается следующее: 1. Сг. К-Ю 22 2. 1023— -9-Сг. К Аа; а2 f » т а б л . IV (а2) : 1А±"Jq -*■ Аа; а2 Если 1 де­ лимое j : -- 1Дели­ теля [ , то Сг. К ->Ю2-2 1023-*Сг. К (А2) V [Ai]g -»• а2 (а2) V lA j]0 — А2; а2 (Аг) © [Ах]в .-»■ а2 (а2) @ (Ai]0 — А2< а2 (Ai]04 - СгК (а2)— сохра­ няется , (A j]04-> СгК и ком. и. (СгК)+1 -»• Аг [Aj]02 -9- печать ((а2) — 2u '-f 27)-*печать (а2)—со- ! храняется ■ч
П р о д о л ж q н и е т g б л. IV 37 0Ю010 22 6А^0 Ag 38 110010 62 еА 0А г 39 010011 23 гА ^До 40 110011. 63 г tAx0A , 41 010100 24 rO0A, Изм.. с за­ вом. СгК- (CrK) + [A JH - А2;.а2 Относи­ тельный (СгК) + [А,]* - СгК БП Прав. ариф. сд. дл. чи­ • (А > на [А ,]' - A2a сла Лев. ног. сдвиг дл. (А*)» на [Л ,]' -.-А./. числа < Р,ВУ Чтение — А.,; а., 1 ' 0 -Л. Л \ (3 7^ ill Рекоменду­ ется брать 0:--П 42 Ml 1111 37 кАх0 или К Останов. [Aj]0 43 11.1111 77 (а-) ■+ СМ' и останов. 44 010101 25 » к,О0 и3А30 Переход по ключу СМ и останов. ' tАг] у4 -* СгК ' Клавиша «ключ» на­ жата—операц. вьцг. Не нажа­ та—про­ пускается Су 100 Н 200. В последнем примере'команда использует три адреса: а2, 100 и 200. Вычесть из содержимого а2 целое число 5 с размещением ре­ зультата в 100 ячейке и в ячейке а2: By 5 Г1 100. Сложить два целых числа из 11 и 12 ячеек. В случае переполнеш+я разрядной сетки перейти к программе, начинающейся с 300 ячейки С2 11 Н 12, но необходимо предварительно в 1023 ячейке образовать коман­ ду И 300 П (табл. IV). При работе в операциях с индексами 2 и 3 «Наири» анализи­ рует переполнение разрядной сетки (но состоянию 35 и 36 разря­ дов) и в случае переполнения ЭВМ выполняет следующее: а) Число, равное номеру команды, при которой выявлено пе­ реполнение плюс единица, передается в 1022 ячейку ОЗУ. Это 37
сделано для того, чтобы после устранения программным путем' переполнения, например масштабированием, всегда можно было бы вернуться к той части программы, при прохождении которой произошло переполнение; б) После этого ЭВМ приступает к выполнению команды, но­ мер которой предусмотрительно записывается в 1023 ячейку- Ин­ формация, записанная в 1023 ячейке, не портится при переполне­ ниях и может быть номером начальной команды программы из­ менения масштабов задачи. Псевдооперации представлены в таблице V. Приведем примеры использования некоторых арифметических псевдоопераций. Переслать содержимое 100 и 101 ячеек в 200 и 201 соответ­ ственно ОГ 100 Я 200. С помощью операции передачи длинных чисел произведена пере­ дача чисел из 100 и 101 ячеек в 200 и 201 соответственно. Внимание! В псевдооперациях сложения, вычитания, деления, нормализации, переписи и печати длинных чисел; сложения, вы­ читания, умножения и деления комплексных чисел модификации К и Я срабатывают как модификация Я, например СД 150 П 170 означает сложение двух чисел, целые части которых находятся соответственно в ячейках 150 и 170, а дробные части — в ячейках 151 и 171. Результат образуется в ячейках 170 и 171 в виде длин­ ного числа. Пример: СД 250 И 170. В этом случае в ячейке 250 записан номер ячейки, в которую, в свою очередь, заранее послана целая часть первого слагаемого. В остальных псевдооперациях первый адрес срабатывает й раз­ личных модификациях так, как об этом говорилось в «формах представления команд» или во «внутренних кодах команд». Применение модификаций П, К, Л дает возможность эконо­ мить ячейки памяти. При этом в зависимости от выполняемой псевдооперации число, записанное в разрядах первого адреса, может быть рассмотрено как число с плавающей или фиксиро­ ванной запятой, так и в форме целого. Примеры:' СП 13189 Я 100. Здесь единица в форме с плавающей запятой представлена с помощью правого параметра — числа—131089 в форме целого УП 32768 Л 100 Левый параметр 32768 совпадает с числом 0,5, представленным в форме с плавающей запятой Ут 5 Я 100, 38
означает умножение числа 5 в форме целого на целое число, за­ писанное по адресу 100. Все псевдооперации могут носить также характер условных команд и подвергаться переадресациям (в случае модификации К псевдооперация не может быть условной). В тех случаях, когда псевдооперация дает недействительный результат, машина печатает соответствующий признак и делает останов, например, в псевдбоперациях log и In — при неположительном аргумен­ те печатается х<0. |/х — при отрицательном аргументе в псевдооперации извле­ чения корня печатается х<0; sin, cos, tg x — при большом порядке аргумента печатается Р~Рх a r c sin, a r c cos — при[х]>1 печатается [х ]> 1 . В случае переполнения (порядка или самого числа) машина печатает символ оо и останавливаетсяАнализировать программой переполнение при выполнении псевдоопераций будет уже поздно — ведь если при выполнении псевдооперации произойдет' переполнение, ЭВМ заблокируется (остановится), и, следовательно, невозможно будет на неработа­ ющей машине изменить исходные данные автоматическим мас­ штабированием так, чтобы при новом счете и новых масштабах уже не было переполнения. Анализировать переполнение при псеЬдооперациях следует перед выполнением псевдооперации. Псевдооперации с условием «оо » выполняются, если в 36-м и 35-м разрядах проверяемой ячейки одинаковые цифры (т. е. нет переполнения разрядной сетки), в противном случае команда с условием «оо » пропускается. Логические операции. Рассмотрим вначале некоторые эле­ ментарные понятия теории множеств и алгебры логики. Логическое умножение, или операции пересечения множеств (рис. 14), где А — множество одного класса элементов, В — мно­ жество другого класса элементов, Р — универсальное множество, в которое входят множества Л и В. Слово «люди», например, определяет некоторое множество объектов, состоящее из мужчин, женщин и детей. Множество, содержащее все элементы, принадлежащие неко­ торым произвольным множествам Л и В (и только эти элементы), называются пересечением множеств Л и В и обозначается через Л П В, что шэжно читать так: Л и В. Если множества Л и В вы­ делены из универсального множества с помощью каких-то свойств, то пересечение Л и В — это множество, состоящее из элементов, обладающих обоими свойствами. (Например, если Л — прямо­ угольные треугольники, В — равнобедренные треугольники, то Л и В — множество равнобедренных прямоугольных треугольни­ ков). Заштрихованная на рис. 14 общая площадь двух кругов представляет собой А й В. 39
При выделении кодовых частей чисел и команд в программи­ ровании часто используется операция поразрядного логического умножения, которая представляет собой частный случай пересе­ чения множеств (множества единиц и нулей) и определяется таб­ лицей: 1 П 1= I 1П 0 = О ОП 1 = О 0по= О Эта операция носит название «конъюнкция». Покажем на примере выделение этой операцией части разря­ дов двоичных наборов. Пусть, скажем, требуется выделить пять последовательных правых разрядов двоичного набора 1001010110110. Если этот набор подразрядно логически умножить на констан­ ту выделения 0000000011111 1001010110110 П 0000000011111 0...010110, то в результате получится требуемое. Логическое сложение — это операция объединения множеств. Множество всех элементов универсального множества Р, принадлежащих или множеству Л, или множеству В, или им обоим, где Л и В — два произвольных множества, называется объединением или суммой множеств А и В, обозначается симво­ лом Л и В и читается Л или В. Заштрихованная на рис. 15 область изображает Л и В. Пусть Л, В и С — какие-либо'три множества. Множество всех элементов, принадлежащих хотя бы одному из этих трех мно­ жеств, называется объединением Л или В, или С, обозначается символом Л В и С и читается «Л или В или С» (на рис. 15 за­ штрихованная область изображает Л и В). Подобным же обра­ зом объединением любых множеств А,, Л2..., Лп называется мно­ жество всех элементов, принадлежащих хотя бы одному из них: это множество обозначается через А х и Л2 и Л3и -..АпВ программировании операция поразрядного логического сло­ жения используется для формирования кодовых частей или всего кода чисел и команд. Поразрядное логическое сложение опреде­ ляется таблицей: , 1U 1 = 1 1и 0 = 1 Ои 1 = 1 ои 0 = 0 40
Эта операция называется <гдизъюнкция». Покажем на примере формирование кодов этой операцией. Пусть, скажем, требуется образовать единицы в пятом, седьмом и десятом разрядах формируемого двоичного набора 00111000101. Причем образовать заранее, не зная о том, есть ли уже в фор­ мируемом коде единицы в формируемых разрядах или их там Рис. 14. Заштрихованной ластью на рисунке обозначено пересечение множеств А и В Рис. 15. Заштрихованной об­ ластью обозначено объединение множеств А и В нет.- Искажать другие разряды формируемого числа запрещено. Если формируемый набор поразрядно логически сложить с константой формирования 01001010000: „00111000101 и 01001010000 01111010101 то получится, что и требовалось. ' Равнозначность или сравнение чисел. Равнозначность двух двоичных кодов можно определять, пользуясь операцией пораз­ рядного сложения двоичных наборов по модулю два. Напомним, что при сложении по модулю берется лишь оста­ ток ог деления полученной обычным путем суммы на модуль (з данном случае на модуль 2). Таблица поразрядного сложения но модулю два 1® 1 — 0 10 0 —1 001 = 1 0 0 0 = 0, где символ 0 обозначает сложение по модулю два. Покажем на примерах сравнение двух двоичных чисел опера­ ции сложения по модулю два, Сравнить два числа. Будем считать, что эти числа нам как будто неизвестны (ведь в примере мы должны смоделировать «неразумную» ЭВМ, которая выполняет все действия лишь с по­ мощью формальных правил)-. Итак, сравнить двоичные числа 0010101 и 0000101 0010101 0 0000101 0010000 41
В результате получено число, не равное нулю, которое и явля­ ется критерием сравнимости двоичных чисел, определяемым опе­ рацией поразрядного сложения по модулю два. Если бы сравнивались одинаковые числа, то 0001011 ■ ©0001011 0000000’ т. е. результат, равный нулю, является критерием сравнимости двух чисел. Рассмотрим машинные логические операции ЭВМ «Наири» Они приведены в табл. IV. Простейшие примеры использования команд с логическими операциями. Выделить первый адрес команды из 12 ячейки, записанной в модификации Я. В модификации Я первый адрес в команде всегда размещает­ ся с 12 по 25 разряд. Взгляните на внутренний код модификации Я (рис. 16). Рис, 16. Разбиение разрядной сетки ЭВМ «Наири» для записи команд в модификации «Н» Выделить первый адрес команды из 12 ячейки можно опера­ цией поразрядного логического умножения с помощью констан­ ты выделения 000000000001111111111111100000000000. Пусть такая константа уже образована в памяти машины в 13 ячейке,.тогда команда Л 13 Я 12 выделит первый адрес команды из 12 ячейки в фиксированную ячейку а2. , Еще пример. Сделать то же, но в предположении, что коман­ да, из которой требуется выделить первый адрес, находится в ячейке о2 и записана также в модификации Я Л, 13 Я 100. В 100 ячейке после выполнения этой команды окажется выделен­ ным первый адрес команды. ' Пример на использование операции логического сложения. Образовать в 26 разряде команды, находящейся в 12 ячейке ОЗУ, единицу, т. е. образовать в этой команде признак формиро42
вания команды (единица в 26 разряде внутреннего кода коман­ ды обозначает признак формирования команды). Используем для этого формирующую константу 00000000001000000000000000000000000. Пусть эта константа находится в 13 ячейке. Можно просто сложить формируемую команду с этой констан­ той. Это сработает верно только в том случае, если в формируе­ мой команде в 26 разряде находится ноль. Однако будем счи­ тать, что это нам заранее неизвестно. Операция логического сло­ жения всегда верно сработает независимо от того, есть уже еди­ ница в 26 разряде формируемой команды или нет. Вот команда, выполняющая необходимое действие: / 13 Я 12. Результат, т. е. формируемая команда с образованным призна­ ком формирования, образуется в ячейке а2. Пример на сравнение двух чисел. Сравнить два числа из 25 и 50 ячеек. Если числа сравнимы, отпечатать единицу: М 25 Н 50 Пт 1 Я =. Последняя команда сработает лишь в том случае, если перед этим в а2 образуется результат, равный нулю, но это произойдет лишь тогда, когда числа в 25 и 60 ячейках равны, потому что операция М производит сложение чисел, по модулю дваМашинные операции над кодами. Это операция передачи чи­ сла, операции сдвигов и нормализация чисел. Сдвиг чисел — это сдвиг разрядов внутреннего двоичного кода числа. Например, сдвиг вправо на три разряда 000110...0 000000110. . . 0 . Буквой Д, поставленной в степени обобщенного изображения адреса (табл. IV), обозначается форма представления числа в виде длинного, которое, напомним, всегда в машине размещаем­ ся в двух последовательных ячейках: целая часть — в предыду­ щей, дробная — в последующей. При сдвиге числа целая и дроб­ ная части сдвигаются на одинаковое количество разрядов. Коли­ чество сдвигов указывается первым адресом. Пример. Сдвинуть длинное число из 100 ячейки на пять раз­ рядов влево Г 5 Я 100, после чего в 100 ячейке и 101 двоичные наборы поочередно сдви­ нутся на пять разрядов. Команду с операцией Г и Л нельзя использовать в модифика­ ции «левый параметр». Дело в том, что в модификации Л первый адрес есть, собственно, уже число (как и в модификациях Я и К), обрабатываемое операцией команды. Но это число, взятое 43
машиной из команды в модификации Л, всегда перед выполнени­ ем операции автоматически сдвигается влево на 11 разрядов. Лишь после этого над ним выполняется операция, так что первый адрес в модификации Л дает слишком большое число, чтобы им можно было указывать сдвиги длинных чисел. Только что сказанное относится к арифметическому и логиче­ скому сдвигу (табл. IV). Операция «а» называется арифметическим сдвигом лишь по­ тому, что при этом сдвиге двоичные коды чисел автоматически корректируются в отношении знака числа. Если сдвигать вправо отрицательные числа, например, число 5/8 (десятичное число'... 5/8 равно двоичному коду — 00,101= — (1/2-{-0/4+1/8), которое во внутреннем коде изобразится двоичным модифицированным дополнительным кодом (м. д. к.): —.00.1010...0. инверсия 11.0101...1 11,0110...0 (м. д. к.), то по мере сдвигов вправо машиной будут автоматически добав­ ляться единички слева. Это и есть сдвиг отрицательного числа без его дополнительного искажения. Если, например, сдвинуть на два разряда влево м. д. к. числа 5/8, то получим сдвинутый код 11,110110...0, а это есть отрицательное число «00,001010...0». (Пе­ реведем сдвинутое число 11,110110...0, записанное в. м. д. к. в бо­ лее наглядную нормальную двоичную форму: 11,110110...0 инверсия 00,0010010...0 ________+ 1. — 00,001010...0. Е1ормальная форма, т в. для перехода от м. д. к. числа к нормальной форме следует взять м. д. к. от м. д. к. и присвоить результату знак минус). Итак, последняя нормальная форма действительно сдвинута на два разряда вправо, при этом арифметическая форма числа не исказилась. Рассмотрим теперь логический сдвиг или сдвиг влево. Опера­ ция «6> может искажать число, поэтому она не называется «арифметическим сдвигом». Вот как производится логический сдриг числа 00,10010...0 на пять разрядов влево: 00,10010...0 =10,000...0, т. е. из положительного числа левым сдвигом получено отрица­ тельное двоичное число. Пример использования операции. Сдвинуть число из 100 ячей­ ки на 11 разрядов влево 6 11 П 100. 44
Нормализация чисел. Нормализовать число в форме с фикси­ рованной запятой означает придвинуть первую значащую цифру непосредственно к запятой. Например, ненормализованное число 00,00110...О в нормализованном виде будет иметь образ 00,110...0, что и выполняет операция Н. Количество сдвигов, возникших при нормализации, посылается в ячейку а2, а нормализованное чи­ сло — в ячейку о2. . . . ■ Операция передачи числа. Это широко используемая в про1раммах операция одинаково хорошо пересылает числа в разных формах и команды, т. е. работа операции П не зависит от формы представления числа. В том случае, если пересылается содержимое а2, т- е. исполь­ зуется операция П и в первом адресе (он как бы лишний в этом случае) обычно записывается ноль. Например Л, О Л 22 или rh О- Н 22. В обоих случаях выполнится одно и то же действие. Операции управления. Для понимания работы операций уп­ равления рассмотрим, вначале, как производится выборка и ис­ полнение команд в ЭВМ «Наири». Перед запуском машины в прохождение программы в счетчик команд — один из блоков устройства управления — заносится микропрограммой (программой, управляющей работой машины) число, равное номеру ячейки памяти (адрес), в которой находит­ ся первая исполняемая команда программы, и при готовности машины к работе программист кнопкой пуска или набором соот­ ветствующего кода на телетайпе запускает ЭВМ. По содержимо­ му счетчика команд (СЧК) на исполнительный орган устройства управления (регистр команд) из памяти выбирается указанная первая команда, а в СЧК автоматически добавляется единица (ЭВМ уже приготовилась к выполнению следующей команды). Исполнительный орган настраивает ЭВМ на выполнение опера­ ции и на выбор информации, подлежащей обработке из адресов, указанных в команде. После выполнения этой первой команды через небольшое время, потребное на анализ команды и на под­ готовку блоков машины к выполнению операции команды, выпол­ няется и эта команда и т. д. Такое последовательное выполнение команд называется есте­ ственным, а ЭВМ с таким характером исполнения команд назы­ вается машиной с естественным ходом выполнения команд. Од­ нако если вы команда выбиралась из устройств памяти только так, то невозможно было бы выполнять разветвления в програм­ мах, потому что программы выполнялись бы строго команда за командой от начала и до конца и невозможно было бы создание «творческих» программ. Поэтому в современных ЭВМ с естест­ венным ходом выполнения команд существуют команды (опера­ ции),могущие осуществлять переходы в любое место программы. 45
Это команды передач управления. Такие команды приведены в таблице IV. Рассмотрим их. Команда перехода без возврата состоит из операции И и обозначает передачу управления в адрес, указан­ ный в команде в форме обобщенного адреса. Пример. Передать управление из 200 ячейки 300 ячейке 200 И 300 П. Команда находится в 200 ячейке, или, другими словами, пере­ дает управление из 200 ячейки. Если записать команду в виде 200 И 300 Н, то она передавала бы управление из 200 ячейки в ячейку, адрес которой определяло бы уже содержимое 300 ячейки. Ведь в по­ следнем примере команда записана в модификации Н, а это все­ гда означает для «Наири», что информация для операции берет­ ся из адресов, указанных в команде. Для последнего случая мо­ жно было бы сказать, что с помощью содержимого 300 ячейки мы управляем передачами управления в различные ячейки, но­ мера в которых при каждом переходе всегда равны содержимо­ му 300 ячейки. Второй адрес в командах с операцией И не ис­ пользуется. Операция И выполняется так: на СЧК заносится информация, записанная с помощью первого адреса в команде, следователь­ но, ЭВМ после этого начнет выполнять команду, указанную пер­ вым адресом. Команда перехода с возвратом. Очень часто в программиро­ вании приходится стыковать между собой различные «куски» программ — подпрограмм, составляющих основную программу. Такие куски представляют собой иногда вполне самостоятельные программы, иногда составленные даже разными программиста­ ми, и носят название «блоков». В виде таких блоков могут быть использованы и стандартные программы, т. е. программы, исполь­ зуемые многократно для вычисления распространенных алгорит­ мов, например, по вычислению тригонометрических функций. Воз­ никает проблема обращения к таким блокам с возвратом после их прохождения в то место, откуда происходило обращение. Та­ кое действие легко выполняется в системе команд ЭВМ «Наири» с помощью операции //,. Покажем ее работу на примере. Пусть требуется из 200 ячей­ ки обратиться к подпрограмме, начинающейся с 600 ячейки, с последующим возвратом на продолжение предыдущей програм­ мы в 201 ячейку. Пусть в подпрограмме, начинающейся в 600 ячейке, последняя команда находится в 900 ячейке. Вот переход с возвратом: 200 Hi 600 К 901 201 ................. 46
Команда работает как бы дважды. Первый этап. Вначале она перенесет содержимое СЧК (в момент выполнения команды на СЧК будет находиться число 201) в указанную вторым адресом ячейку 901, в которой появится число 201 в форме целого. После этого команда Иi 600 К 901 добавит к содержимому 901 ячейки код И О П, в результате чего получится И 201 Я. На этом кон­ чается первый этап работы команды перехода с возвратом. Второй этап. Команда передает управление ячейке 600 так же, как это делалось при рассмотрении операции Я. Изобразим работу команды перехода с возвратом схемой, приведенной на рис. 17. Вот простой программный прием, выполняемый этой коман­ дой. Пусть требуется вычислить выражение У= У А , если значение А размещено в форме с плавающей запятой в 12 ячейке, результат отправить в 12 ячейку. Это действие можно вы­ полнить так: 29 КП 12 Я 12 30 КП 12 Я 12. Но это же можно сделать и по-другому, чтобы избежать одно­ образия: 29КП 12 Я 12 30 И х 29 Я 30. После извлечения корня команда Их 29 Я 30 сотрет себя и за­ пишет на своем месте: Я 31 Я, ^ потом передаст управление на втврое извлечение корня. Очевидно, третьего извлечения корня уже не произойдет, потому что во второй раз команда Я 31 П просто передаст управление в 31 ячейку на продолжение ниже расположенной программы. Переход по ключу. Выполняется операцией Я 3. Она срабаты­ вает только в том случае, если на пульте сигнализации нажата клавиша «Ключ». 47
Операцию хорошо применять, например, при выполнении длинных итерационных программ на машине, когда интересно время от времени узнавать сходимость итеративного процесса, т. е. степень приближения итеративного процесса к конечному результату вычисления. Для этого достаточно в программе ите­ ративного алгоритма разместить команду с операцией Я3, кото­ рая передаст управление программе вывода на печать интересуе­ мых результатов вычислений. Если нажать на пульте сигнализа­ ции клавишу «Ключ», то машина начнет выводить ту информа­ цию, по которой предусмотрительный программист теперь может судить о сходимости процесса при тех или иных исходных данных. Команда безотносительного перехода. Безотносительная пе­ редача управления вверх по программе выполняется с помощью операции ех. В основу идеи безотносительной передачи управле­ ния положен принцип перехода не по номеру (не по адресу), а по количеству ячеек, отделяющих место перехода от места, к кото­ рому переходят. Пусть требуется безотносительно передать управление коман­ де, расположенной на 20 ячеек выше, начиная счет с той ячейки, откуда передается управление, и кончая включительно той ячей­ кой, которой передается управление. Это можно сделать коман­ дой 100 щ 16364 Я. В момент выполнения команды на СЧК уже будет находиться адрес следующей команды число 101. Адрес 16364 в модифика­ ции Я есть само используемое операцией число. Число 16364 при­ бавится к содержимому СЧК, как это показано в табл. IV, т. е16364+101. Но максимальное число, которое СЧК еще может со­ держать, равно 16383, на большее ему не хватает разрядов. Но тогда сложение в СЧК произойдет по модулю 16384: 16364+101=81 (mod 16384), т. е. управление передается, как и было задано, на 20 команд выше: 100 — 20 = 81 (счет ведется, начиная с 100 ячейки). Легко сообразить, что если бы команда е{ 16364 Я была за­ писана в ОЗУ не в 100, а, предположим, в 200 ячеек выше, считая с 200 ячейки, то все равно управление передалось бы на 20 ячеек выше. Действительно, 16364+201=481 (mod 16384). Вот простое правило вычисления константы — адреса коман­ ды безотносительной передачи управления вверх по программе (показываем это на какой-то абстрактной программе): 100 Я 12 Я 13 101 УП 11 Я 11 48
102 СП 11 Я 13 103 е, 16380 Я. Следует отсчитать количество ячеек программы, начиная с коман­ ды безотносительной передачи управления и кончая (включи­ тельно) командой, которой передается управление, и это количе­ ство (для данного примера 4) вычесть из числа 16384. Резуль­ тат и будет константой — адресом безотносительной передачи уп­ равления в команде такой передачи. Это же можно сделать и по формуле А = 16384—(Nx—Я 2+ 1), где A'i — значение адреса, откуда передается управление; N2— значение адреса, куда передается управление; Л — первый адрес команды с операцией ех. Безотносительная передача управления вниз по программе, В этом случае первый адрес команды перехода вычисляется проще. Покажем это на примере какой-то программы 100 в\ 2 П 101 Я 0 Я 11 102 В 1 Я 11 103 С 12 Я 140. При исполнении команды ех 2 Я к содержимому СЧК (на нем в этот момент будет находиться число 101) прибавится число 2 (первый адрес команды ех 2 П), в результате на СЧК образует­ ся число 103, и машина перейдет к выполнению команды из 103 ячейки. Отсюда следует, что при* записи приведенной программы в ОЗУ, начиная не с 100 ячейки, а с какой-то иной, передача уп­ равления все равно будет выполняться через две ячейки вниз. Вот простое правило получения константы—адреса для безотно­ сительной передачи управления вниз: необходимо отсчитать количество команд, размещенных ме­ жду командами, от которой и к которой передается управление. Результат есть константа — адрес команды безотносительной пе­ редачи управления вниз по программе. Для нашего примера эта константа равна двум. Это же можно сделать и по формуле A = N i— N-,— 1. Безотносительный переход с возвратом. Совместное использо­ вание операций ех и е позволяет в программах выполнять безот­ носительный переход с возвратом. Прежде чем показать это при­ мером, рассмотрим, как выполняется операция е, например, в программе 100 е 2 Я 11 101 ... . 4-3657 49
При исполнении машиной команды из 100 ячейки с операцией е произойдет следующее: к числу 101 — адресу команды, следую­ щей за командой е 2 П 11, прибавится число 2 в форме целого, и результат, равный числу 103, отправится операцией е в указан­ ную вторым адресом одиннадцатую ячейку. А теперь легко понять, как выполнить безотносительный пере­ ход с возвратом. Если в 11 ячейке (в нашем примере) есть уже номер ячейки (103), к которому следует вернуться, то такой воз­ врат всегда безотносительно сработает, с помощью операции от­ носительного перехода И (или команды И Н Н для нашего при­ мера). Покажем это. Выполнить безотносительный переход на 20 команд выше с возвратом из ячейки A is в ячейку А& (см. при­ мечание ниже). Примечание. В приведенной схеме программа записана в ус­ ловных адресах, т. е. в таком виде, когда вместо номеров ячеек команд используются буквы с индексами. Метод условных адре­ сов позволяет послё* составления программы удобно размещать ее в той или иной части ОЗУ назначением соответствующей ве­ личины условного адреса А\. Ai . . . А 19 е 2 П 11 А20 Ci 16364 П, I но в адресе A i5 следует еще расположить команду И 11 Н, т. е. Л is И 11 Н. Введем нашу безотносительную программу в ОЗУ со 101 ячейки. (Величина условного адреса^! у нас равна 101). Тогда в действительных адресах программа будет выглядеть так: 101 . . . . 115 Я 'll’ И . . / 119 е 2 П 11 120 ех 16364 П ✓ При выполнении команды из 119 ячейки в 11 ячейке образу­ ется число 122. Команда из 120 ячейки передает управление вверх в 101 ячейку. Команда из 115 ячейки передает управление в 122 ячейку. Правило вычисления первого адреса команды с операцией е: А = | Ao — Ai |— 1, где А — значение первого адреса команды с операцией е; Л2 — значение адреса, где находится команда с операцией е (119 ячейка в нашем, случае); 50
A i — значение адреса, в который (в последний раз) передает­ ся управление (в данном случае 122 ячейка). Командой е; 16364 П управление передается в 101 ячейку. Приемы безотносительных передач управления удобны в прак­ тике программирования, ведь программы, составленные в безот­ носительной форме, можно размещать в любом нужном месте ОЗУ. Служебные операции. Предназначены для вспомогательных целей: для вывода результатов вычислений на печатающее уст­ ройство; для печати текстов, облегчающих расшифровку выведен­ ных результатов или для печати самостоятельных текстов; а так­ же для чтения машиной информации, задаваемой с телетайпа. К служебным операциям можно отнести операцию останова ма­ шины. Операции приведены в таблице IV. Пример использования служебной операции «о». Пусть требуется отпечатать на телетай­ пе текст: «момент». Вот программа, выполняющая это (адреса операции печати символов берутся из таблицы 1): 300 301 302 303 304 305 о о о о о о 2217 2226 2217 2227 2219 2230 Я Я Я Я Я Я. Все указанные в таблице символы находятся в виде двоичных кодов в ДЗУ машины в адресах, указанных таблицей. Коды из этих адресов управляют телетайпом так, что происходит печать соответствующих'символов. Пример на использование операции чтения — Ч. С помощью операции можно программным путем осуществлять чтение симво­ лов, набираемых на клавиатуре телетайпа. Составим программу чтения машиной символов телетайпа в 100, 101 и 500 ячейках ОЗУ: 29 Ч О Я 100 30 Ч О Я 101 31 Ч О Я 500 Перед выполнением каждой команды машина ожидает ввода символа. При вводе с телетайпа записывает символы в указанную соответствующей командой ячейку, кроме символов-регистров клавиш телетайпа. Операцию можно использовать в любой модификации. Коман­ да из 31 ячейки использована, например, в модификации Я (это иногда может быть удобным при переадресации команд). 4* 51
Раздел II § 1. СПОСОБЫ СОСТАВЛЕНИЯ ПРОГРАММ Основные этапы работы. Задача (или класс задач), подлежа­ щая решению на машине, обычно задается в математическом ви­ де. Решение задачи с помощью ЭВМ распадается на следующие этапы: разработка алгоритма решения задачи, то есть разработка ре­ шающего алгоритма; программирование; отладка программы на машине; автоматическое решение задачи. Кроме осуществления перечисленных главных этапов работы, необходимо также выполнение определенной механичеЬкой рабо­ ты, связанной с-вводом материала в машину. Кратко рассмотрим эти основные этапы/ Выбор решающего алгоритма в ряде случаев требует высокой квалификации и связан с большими трудностями. Формальных правил для выполнения этой работы не существует. Основой для построения решающего алгоритма при решении математических задач могут служить методы численного анализа. Однако во мно­ гих случаях решающий алгоритм приходится специально разра­ батывать. Как правило, с этим сталкиваются при разработке программ для решения «информационных» задач, управления объектами, перевода текстов с одного языка на другой и т. п. В дальнейшем всегда, когда это специально не оговаривается, речь идет о применении машин для решения математических задач. Программирование представляет собой построение алгорит­ ма, равнозначного^ решающему алгоритму и выполняемого на конкретной машине. При разработке решающего алгоритма, особенно при програм­ мировании, могут быть допущены ошибки. Для их устранения программу тщательно проверяют. Однако, как показывает прак­ тика, полного устранения ошибок добиться этим путем очень трудно. Окончательно устраняются ошибки при отладке про­ граммы на машине. В простейшем случае отладка заключается 52
в решении специально подобранных упрощенных примеров и сравнении получаемых результатов с заранее заготовленными, часто просчитанными вручную. Контрольные просчеты при исход­ ных данных, соответствующих имеющимся экспериментальным результатам, можно применить для уточнения математической постановки задачи.' Процесс отладки заканчивается доказательством правильно­ сти работы программы, и если это достигнуто, то приступают к решению задачи на машине. Рассмотрим более подробно этап разработки решающего ал­ горитма. Применяя ЭВМ для решения математических задач, необхо­ димо учитывать следующие ее особенности: большое, но ограниченное количество цифр в изображениях чисел; большую скорость выполнения операций над числами, храня­ щимися в ОЗУ; сравнительно малую скорость ввода исходных данных и вы­ вода результатов; небольшую емкость ОЗУ при более емкой памяти ДЗУ, в ко­ торой имеются различные стандартные программы; вероятность случайных сбоев в работе современной машины весьма и весьма мала, но все-таки следует для особо важных случаев предусмотреть контроль работы машины. Медленность ввода и вывода делает нецелесообразным приме­ нение неспециализированных программно-управляемых машин для решения задач, связанных с вводом очень больших количеств исходной информации, с выдачей больших количеств результа­ тов и выполнением малого количества операций. Для таких за­ дач время их решения определяется уже не быстродействием ма­ шин, а временем, необходимым на ввод и вывод. В ряде случаев неспециализированные машины непригодны и для решения за­ дач, связанных с необходимостью хранения очень больших ко­ личеств информации, превышающих возможности запоминающих устройств машины. Небольшая скорость обмена числами между ОЗУ и внешни­ ми устройствами ввода или внешними запоминающими устрой­ ствами и большое быстродействие машины определяют то, чтобы программа и промежуточные результаты помещались в опера­ тивной памяти машины, а количество Передач из ОЗУ машины во внешние запоминающие устройства и обратно было минималь­ ным. Количество чисел, сохранение которых необходимо при пе­ реходе от одной операции, предусмотренной в алгоритме, к дру­ гой операции, характеризует так называемую связность алгорит­ ма. По возможности алгоритм не должен обладать большой связ­ ностью. Условия задачи, предназначенной для решения на ЭВМ, все­ гда содержат указания о требуемой точности решения. Обычно 53
задается значение максимально допустимой погрешности. Толь­ ко тот решающий алгоритм пригоден, который позволяет полу­ чить решение задачи с погрешностью, не превышающей допусти­ мую. Большое количество разрядов при изображении чисел в ма­ шине позволяет производить вычисления с большой точностью. Если оказывается, что погрешность, допускаемая при вычисле­ ниях, слишком велика, то большое быстродействие машины ино­ гда позволяет повысить точность результатов за счет увеличения количества машинных операций. В итерационных методах можно предусмотреть большое количество итераций, а вне итерацион­ ных — вычисления над числами с количеством разрядов боль­ шим, чем разрядность ячейки памяти. При этом, однако, увеличи­ вается количество ячеек, необходимых для хранения исходных данных и промежуточных результатов, и значительно возрастает время, необходимое для решения задачи. Выбор языка программирования.4 Некоторые современные ЭВМ имеют несколько языков общения, например, у ЭВМ «Наири» четыре таких языка. Наиболее компактные программы составляются для «Наири» в языке РП с использованием, если возможно, стандартных про­ грамм из ДЗУ машины. С другой стороны, язык автоматическо­ го программирования позволяет составлять программы при ми­ нимальных затратах времени. Таким образом, если решается не­ большая задача, наверняка размещаемая в ОЗУ, то целесообраз­ но использование языка АП в том случае, если задача не решает­ ся еще более простым методом — методом стандартных про­ грамм. Но, пожалуй, самым лучшим методом составления программ будет метод совместного использования языков РП, АП, СП. Та­ кая стыковка программ, составленных на разных языках, преду­ смотрена в операциях языка РП и операторах АП, а также при использовании СП в виде СПП (стандартных подпрограмм). Осо­ бенно хорошо использовать совместно РП и АП в длинных алго­ ритмах, в которых большая часть программы постоянна, а мень­ шая часть переменна в смысле самого алгоритма. Если, наряду с какой-то постоянной программой, используется небольшая пере­ менная программа, то эту переменную программу целесообраз­ но составить в языке АП и состыковать ее с программой, состав­ ленной на РП. Заметим еще, что научиться программированию в языке АП намного проще, чем в языке РП. Учет стоимости решения и расхода времени. При разработке решающего алгоритма необходимо учитывать стоимость всех ра­ бот, связанных с решением задачи, и общий расход времени на ее решение. Если решение задачи должно быть осуществлено в кратчайший срок, то ради сокращения общего расхода времени идут даже на увеличение так называемого машинного времени. 54
В этом случае стараются использовать один из уже известных решающих алгоритмов, по возможности простой, не требующий большого времени на программирование. Если решение задачи не является срочным, то на первый план выступают соображения экономии материальных затрат. Напри­ мер, для решения многовариантных задач целесообразно особен­ но тщательно разработать решающий алгоритм и программу, не жалея для этого времени, с тем чтобы по возможности сократить расход дорогостоящего машинного времени. При разработке программ для автоматического перевода тек­ стов, автоматического выполнения информационных работ, авто­ матического управления объектами (например, производствен­ ными) обычно стоимость работ по разработке решающего алго­ ритма, программированию и отладке программ на машине скла­ дывают со стоимостью самой машины. Стоимость работ по экс­ плуатации машины и решению задачи в единицу времени отни­ мают от стоимости материальных выгод, получаемых в единицу времени, за счет применения машины и программ. На основании этих данных подсчитывают время, в течение которого окупится машина вместе с программами. Машина и программы должны быть такими, чтобы указанное время было минимальным. Конеч­ но, эти соображения принимаются в расчет в тех случаях, когда не превалируют другие. Операторная схема. При программировании прежде всего со­ ставляется подробная формульная схема задачи. Иногда ее не совсем верно называют машинным алгоритмом. Формульная схе­ ма разбивается на отдельные части, имеющие более или менее самостоятельное значение. Каждая часть должна выдавать один или несколько результатов, которые используются в дальнейшем в других частях. После этого составляется операторная схема, представляющая собой логическую схему задачи (программы). Схема решения задачи разбивается на отдельные части-опе­ раторы. Элементарным оператором называется группа команд про­ граммы, обладающая следующими свойствами: эффективностью; оператор производит над числами опера­ ции, нужные для решения задачи; упорядоченностью; управление извне может получать только одна команда рассматриваемого оператора — последняя; внутри оператора управление передается в одном определенном направ­ лении^— в порядке номеров команд; автономностью; направление передачи управления операто­ ром зависит от условий, вырабатываемых только этим операто­ ром; связанностью; если была выполнена рервая команда операто­ ра, то будет выполнена каждая его команда; простотой; оператор выполняет минимально возможное коли­ чество работы. 56
Операторы обозначают заглавными латинскими и русскими буквами, снабженными снизу справа порядковым номером, а сверху справа — индексами, показывающими зависимость опера­ тора от параметров, если эта зависимость существует. Для операторов приняты буквенные обозначения. Логический и арифмологический операторы проверяют выпол­ нение некоторого условия ю. Если условие ш выполняется, счита­ ют ю=1; если не выполняется, то со= 0. В некоторых случаях логический или а рифмоЛогический опе­ раторы осуществляют обращение к одному или группе операто­ ров с возвратом к оператору, следующим за данным. В этом слу­ чае после знака оператора в скобках указывают в две строки но­ мера операторов, к которым производится обращение: в верхней строке при (о=1, в нижней — при <о= 0. Например: Если при одном значении со производится обращение, другом передача управления, то пишут а при или В первом случае будет произведено обращение к операторам 7—16 при со—11 и передано управление при ш= 0. Последний из операторов группы, к которой производится об­ ращение, обычно заканчивается «нулевой» командой, т. е. ячей­ кой, предназначенной для записи в нее команды возврата. Это от­ мечают черточкой, которую ставят над буквой, обозначающей оператор. Например, если оператор Fs (г) оканчивается «нуле­ вой» командой, то пишут F5 (i). При записи операторной схемы соблюдаются следующие пра­ вила: знаки операторов записываются в строку и снабжаются спра­ ва снизу порядковыми номерами, Нумерация в. схеме «сквоз­ ная», например ...Лю Рц при зависимости оператора от параметра ^верху справа ста­ вится значок, обозначающий этот параметр, например mU л ijk А ш А 20 • 1 > Если два оператора написаны рядом, то стоящий слева передает управление стоящему справа. Если передачи управления нет, то между операторами ставится знак «;»; передача управления не соседнему оператору обозначается стрелкой, например: Ад Р1о; Ли Рц Fis (i) А ц А ц. I I____1_______________ I 56
Иногда удобно пользоваться знаками Ляпунова, применяя кото­ рые приведенную выше операторную схему можно записать сле­ дующим образом: 13 ю 't i Л9 Рю", А ц Рi2 F13 (i) А ц Ais. t 11 15 10 где стрелки вверху обозначают передачу управления при (0= 1, а снизу — при (о=0. Стрелка, отходящая от знака оператора, означает передачу уп­ равления данным оператором, а стрелка, направленная к знаку оператора, — передачу управления данному оператору. Около стрелок ставятся номера операторов, к которым пере­ дается управление или от которых передается управление. При составлении операторной схемы с целью ее упрощения операторы объединяют в группы. Такие группы называются обоб­ щенными операторами и обозначаются одной буквой. Объедине­ ние нескольких операторов в группу возможно лишь в том слу­ чае, если управление извне может получать лишь один оператор группы. Например, в логической схеме I * А\ Р2 As', А& Л5 Пв Яч !________ 1 операторы Л3 и А4 не могут быть объединены в группу так же, как и операторы Л4 и А5. В то же время можно объединить в груп­ пу операторы Р2 и Л3. Например, если Р = РгЛз, то операторная схема запишется в виде А\ R Л4 Л5 П^'Я-,I____ ; Операторная схема составляется, как правило, перед состав­ лением программы и является основой программы. § 2. ЯЗЫК РУЧНОГО ПРОГРАММИРОВАНИЯ После того как алгоритм, решающий поставленную задачу, выбран, следует еще рассмотреть его особенности. Например, точность вычислений, которую можно получить, применяя его. Другой, часто встречающейся особенностью многих алгоритмов является возможность переполнения разрядной сетки машины при вычислениях. Если эта особенность, наряду с другими, учте­ на, то приступают к выбору формы представления чисел, в ко­ торой их целесообразней обрабатывать. В ЭВМ «Наири» существуют псевдооперации, переводящие одну форму представления чисел в другую. Они представлены в таблице V. 57
Таблица V s Адреса ячеек, хранящ. перех. к нач. адр. Истинные на­ чальные ад­ реса п/о Внутренний код п/о Внешний код п/о • 1 2 3 4 5 6 4369 4960 10Ю001 (121) од Деление (обратное) чисел с плавающей запятой одАгвАа (А3) : [Ai]e -*-А2, а2 4370 5088 1010010 (122) вм Вычитание модулей с плавающей запятой вм А,9А2 i (А.) 1 А2, а 2 4387 4992 1100011 (143) ов Вычитание (обратное) чисел с плавающей запятой овА10А2 (А2) 4353 4696 1000001 (101) СП Сложение чисел с плавающей запятой cnAxeA 2 (А2) + [Aj]e -* Аг, а2 Выполняемое действие операции Внешний вид команды Примечание 7 8 Название псевдо­ Это деление производится так же, как и «дп», с той лишь разницей, что адреса меняются ролями I 1А,)« S - [Ailв - А, 4354 4744 юооою (102) вп Вычитание чисел с плавающей запятой BnAt0A3 [A je — (А3) ->• Аа, За 4355 4784 1000011 (ЮЗ) УП ynAj0A2 (А2) X [At ]e -»■ А2, а2 4356 4816 1000100 (104) дп Умножение чисел с плавающей запятой Деление чирел с плавающей запятой дпА!0А2 [Aj]e : (Аа) -►Аа, а2 4357 5664 1000101 (105) КП Вычисление Ух кпА10А2 у [Ai]e 4368 4848 1000110 (106) нд Приведение длинного числа к виду с плавающей запятой (нормализация длинных чисел) haAj OAj 4359 5880 1000111 (107) 1п Вычисление In X In Aj OAj Длинное число, за­ писанное в ячейках [Aj]e и [Аа]е + 1, приводится к виду с плавающей запятой и записывается в А2 In [Ai]e -*■ A.j А2 Это вычитание делается так же, как и «вп», с той лишь разницей, что адреса меня­ ются ролями Если порядок результата больше 63, печатается оо , и машина останавлива­ ется Если порядок результата больше 63, печатается оо, и машина останавливается В отличие от СП, ВП, УП здесь оо печатается и в случае, если делитель ра­ вен О [А,1е рассматривается как число с плавающей запятой Результат также получает­ ся в форме с плавающей запятой. При [Ai]e < 0 печа­ тается х<0, и машина оста­ навливается [AJe должно быть нормали­ зованным числом с плаваю­ щей запятой. Результат по­ лучается в форме с плавающей<*запятой. При [Ai]в < 0 печатается х <0, и машинаостанавливается
в> о Продолжение • т а б л. V 1 2 3 4 5 6 7 8 4360 6704 1001000 (110) пп Печать чисел с плавающей запятой nnAjOq [Ai]e — рассматривается как число с плавающей запятой и печатается, как десятичное число 5960 1001001 (111) Sn Вычисление s in * 5пА1вА; sin [А1]н А2 Если 0 < q < 3 1 , то Ai печа­ тается с q десятичными зна­ ками после запятой- Если q > 64, то печатается к-1 десятичных ' знаков (в «к» входит количество цифр до запятой и q i= q —я72в—a62s цифр после запятой) и обес­ печивается 20-к пробелов [Ai]e рассматривается как число с плавающей запятой. Результат получается в фор­ ме с плавающей запятой. Если порядок [А,]е больше 27, то печатается н е п о р я ­ док», и машина останавли­ вается 4362 4888 сд 4920 4364 6616 Сложение длинных ■чисел Вычитание длинных чисел Умножение длинных чисел Деление длинных чисел Вычисление lg * . Печать длинных чисел сд А]вАа 4363 1001010 (112) 1001011 (ИЗ) 1001100 (Н4) 1СО1101. (115) 1001110 (116) 1001111 (117) 4361 4365 4366 5800 4367 5200 вд уд дд lg пд вдА]0А.> удА,вА2 ддА^Аз (Ai)§ + (А,)* -+ Af (А*)* - (А2) | - Af (А.)* X (A j)| - Af (А2)4 : (Aa)§ - Af lgAj0A2 lg [Aj]e - A2 пдА ^я Печать [А,]^ в виде сятичного числа Если истинный результат х не удовлетворяет усло­ вию — 234 < х < 234, то печатается и ма­ шина останавливается. Здесь бесконечность пе­ чатается и в том случае, когда (А,)§ = 0 [Ai]e должно быть норма­ лизовано с плавающей за­ пятой. При [Ai]e < 0 .п е ч а -„ тается х< 0, и машина оста­ навливается. q показывает требуемое количество деся­ тичных цифр после запятой (q <L31) 4368 6160 1010000 (120)- lg Вычисление tg tgA2e A 2 [Ai] m рассматривается как число с плавающей запятой. Результат получается в фор­ ме с плавающей запятой. tg fAx]e -» A2 я СП При [Ai]e = ± тумашина пе­ чатает со и останавливает­ ся Если l[Ai]e 1> 1, то печата­ ется х> 1, и машина оста­ навливается Если |[А|]« |> 1, то печатается х> 1, и машина останавли­ вается 4371 5384 1010011 (123) aS Вычисление arc sin x aSAj0A2 arc sin [Ax]« ->■ A2 4372 5472 1010100 V (124) ас Вычисление arc ccrs x асА1вА2 arc cos (Aj)e -> A2 4373 5576 1010101 (125) at Вычисление arc tg x atAjOA.i arc tg (A,)e 4374 6064 1010110 (126) cS Вычисление cSAjOAa cos (A])e ■->- A2 Если порядок числа [А,]в больше 27, то печатается п = «порядок», и машина ос­ танавливается 4375 5168 1010111 (127) nr nnAjOq [Ai]e рассматривается как двоичное число с фикси­ рованной запятой, пере­ водится и печатается q показывает требуемое ко­ личество десятичных цифр после запятой Aa COS X Печать чисел (дробных)
Продолжение 5 в 7 Печать целых чисел nmAxH ПС Печать содержимого ncAl0 1011010 (132) ПК Печать команд пкАхН [Ai]« рассматривается как целое число, переводится и печатается [Ai] в печатается в виде 36-раэрядного двоично­ го набора нулей и еди­ ниц [Aj]e печатается как команда во внешнем коде 5712 1011011 (133) ех Вычисление ег 4380 5032 1011100 (134) дн 4381 6968 1011101 (135) 1 2 3 4376 5128 1011000 (130) 4377 5272 1011001 (131) 4378 6296 4379 4382 4383 6992 7016 4 пт Приведение числа с плавающей запятой к виду длинного числа Сложение ком­ ск плексных чисел 1011110 (136) вк 1011111 (137) ук Вычитание комплексных чисел 8 ехА,вАг ехр (А,)е дНА10Аа Число с плавающей за­ пятой приводится к ви­ ду длинного числа и результат -> А3 ckAi «A2 (|A ,li4) + (А*) . А2 А2 ([А,Ц4 + 1) + (А *+ 1 . - А2 + 1 пк A|OA*j (А.) - ([А ,]") А, (As г Л —(|А ,Ц 4 | 1) > -> А2 ! 1 Умножение комплексных чисел укА10А1 т а б л. V « A i # ) X (А.) ({А,Ц4+ 1) Х[(А, i 1) Если в разрядах ап-:-азг[А,] в написанный двоичный набор не совпадает ни с од­ ним из кодов операции, то выполняется операция «ис» Если нормализованное чис­ ло с плавающей запятой [А)]в>43, то печатается о°, и машина останавливается Если порядок [А)]в больше 34, печатается оо, ц машина останавливается Сложения производятся с применением псевдоопера­ ции «СП» Вычитания производятся с применением псевдоопера­ ции &вп» Умножения и сложения про­ изводятся с применением псевдоопераций «сп», «уп» - А4 (fAi]g4) х (Аа -f 1 ) 4 . + ([Ai]^4 +[1) X (А,) - А2 4 I 4384 7048 1100000 (140) дк Деление комплексных чисел дк А,вАа Деление производится по определению деления кояплекснкх чисел а -у d/ ас *Т' пи , • ос—ои с + d j " " ~ с* ~ уЖ + * сЧ- d* Только надо учесть, что а ([А,]*4), в - ([A ,]i4 + 1), с - (A*), d - (А2 -|- 1) Операции производятся с помощью соответствующих псевдоопераций & со
Продолжение 4 5 в 1 2 3 4385 6544 1100001 (141) ПИ Печать цифровых индексов пиА^Аг 4386 6600 1100010 (142) ОП1 Отсылка длинных* чисел otAj0A2 1100100 (144) дт Деление целых чисел дтА ]вА 2 4388 7 [Aj]e переводится в де­ сятичную систему и пе­ чатается как индекс табл.У 8 Перевод и печать производятся, если [Ai]« <1000, в противном случае печатается «пи» lAilg - Ц 1(А2) : [Aile )] - Аа 1 [А2] : [AjJe > - 3 Если [At]o =0, то печатает­ ся оо, и машина останавли­ вается
Эти псевдооперации имеют своеобразное исполнение модифи­ каций. Команда с псевдооперацией ИД в модификациях К и П используется так, как будто она находится в модификации И. Например, если требуется перевести число из формы длинного числа, находящегося в 110 ячейке, в форму с плавающей запя­ той, то это можно сделать командой НД ПО К 300. Результат окажется в 300 ячейке ОЗУ в форме с плавающей за­ пятой. ' В модификации Н псевдооперация берет содержимое первого адреса, и делает его адресом обрабатываемой информации. Команда с псевдооперацией ДН в модификациях выполняет­ ся обычным образом. Особенности использования команд для обработки чисел в той или иной форме представления. Все машинные арифметиче­ ские операции обрабатывают числа в форме с фиксированной запятой. Машинные операции сложения и вычитания в форме с фиксированной запятой выполняют те же самые действия, что и в форме целых, т. к. форма целых отличается от формы с фик­ сированной запятой масштабным множителем 2. Например, числа 36 , 00 1010100...0 36 00101010...0 отличны друг от друга в 234. Если основание 2 с показателем степени 34 считать порядком масштабного множителя, то легко сообразить, что операцией сложения и вычитания форм с фиксированной запятой можно складывать и вычитать числа в форме целых, ведь при сложении и вычитании мантисс чисел их порядки не корректируются, если, конечно, не проводится нормализации мантисс. При сложении и вычитании чисел в форме целых нормализация вообще не имеет смысла. Совершенно другое получится при умножении и делении це­ лых чисел операциями формы с фиксированной запятой. Напри­ мер, возводя в квадрат операцией умножения целое число 600...010 = 2, получим в результате 00,000...0Ю 00,000...0Ю 00.000...000 потому, что. произведение будет настолько мало, что его невоз­ можно- содержать.в 36-разрядной сетке машины «Наири». Это следует учитывать при составлении программ для обра­ ботки, целых- чисел. 5-3657 65
Для умножения и деления целых чисел используются псевдооперации ут и дт. При делении целых чисел операций дт — частное есть целое число от деления, например 000...0111 000...010 = 000011, т. е. [7/2] = 3, где квадратные скобки означают целую часть де­ ления. В предыдущем примере при умножении операций ут целого числа самого на себя получился верный результат ООО...ОЮ= 4. Для того, чтобы программным путем можно было бы учиты­ вать погрешности, получаемые при таком «целом» делении, в операциях ут, дт предусмотрена после деления посылка остатка от деления в третью ячейку ОЗУ, т. е. операцией деления для пре­ дыдущего примера выполняется действие 000...0111 000...0010 = 000...011, а остаток 000...01 пошлется в третью ячейку ОЗУ. Можно считать, что операцией деления производится получе­ ние вычета числа по модулю знаменателя, если за вычет прини­ мать после произведенного деления содержимое третьей ячейки. Действительно, для предыдущего примера -J- = 1 (mod 2)> если результат брать из третьей ячейки ОЗУ. Далее следует постоянно помнить, что при формировании команд сложением или вычитанием их следует складывать как числа в форме целых. Ведь кодовые числа команд при их выпол­ нении машиной «понимаются» как целые числа. Покажем такое формирование команды примером. Пусть требуется переадресо­ вать команду Я 30 Я 200 на команду Я 30 Я 201. Это можно сделать следующим образом: 129 Я1 Я1 130 Я 30 Я 200 + с помощью первой ячейки (регистровой), но можно сделать и с помощью непосредственного сложения команды с целым числом 129 С 1 К 130 130 Я 30 Я 200. Первый случай наиболее приемлем, т. к. в нем формируемая команда изменяется лишь перед своим использованием с по­ мощью сумматора на исполнительном органе—регистре команд, а не в памяти. Во втором случае команда формируется в памяти и после ее 66
изменения — если следует ее вновь иметь в первоначальном ви­ де — потребуется еще одна команда для соответствующей кор­ ректировки. Этого недостатка лишен метод регистровой ячейки, приведенный в первом примере. Распределение ячеек ОЗУ производится непосредственно пе­ ред составлением программы, когда алгоритм задачи и его опе­ раторная схема составлены. Некоторые рекомендации на этот счет. Распределение исходной информации. Адреса исходной ин­ формации появятся в дальнейшем в адресных частях команд будущей программы. Но выгодно, чтобы адресные части команд были бы длинными числовыми наборами, потому что такая про­ грамма будет иметь повышенное время ввода с медленно рабо­ тающих вводных устройств. Отсюда следует, что для размещения исходной информации следует использовать ячейки оперативной памяти, размечаемые небольшими по длине числами, — это как раз будут начальные ячейки ОЗУ. Размещение исходной информации предпочтительнее в на­ чальных ячейках оперативной памяти. Ячейки с размещением в них исходными данными иногда на­ зываются «стандартными рабочими ячейками». Мы же будем их называть «ячейками исходной информации» или ячейками ИИ. Нестандартными рабочими ячейками, или в дальнейшем про­ сто рабочими ячейками, будем называть ячейки оперативной* па­ мяти, необходимые для временного размещения промежуточных результатов вычислений или накапливающихся конечных резуль­ татов, которые перед своим выводом на печатающее устройство еще необходимы для вычислительного процесса. Поскольку рабочие ячейки также будут обозначаться в адрес­ ных частях команд, то сказанное для ячеек исходной информа­ ции справедливо и для рабочих ячеек. Для назначения рабочих ячеек (РЯ) выгодно использовать адреса ОЗУ, приведенные в табл. III (см. приложение). ' . Размещение программы. После того, как на бланке или про­ сто на бумажном листе выписаны адреса ячеек исходной инфор­ мации, приступают к составлению рабочей программы, исполь­ зуя при этом свободные ячейки ОЗУ. Процесс составления программы — кропотливый процесс, требующий внимания и предусмотрительности,, и не всегда воз­ можно при этом точно назначать заранее адреса всех команд программы. Для облегчения распределения ячеек команд про­ граммы иногда используется метод условных адресов, который состоит в буквенной, цифровой или буквенно-цифровой нумера­ ции ячеек машины, не связанной непосредственно с истинной нумерацией. Он используется на первом этапе составления про­ граммы, когда по каким-либо причинам затруднительно сразу распределить по действительным адресам команды программы и числовой материал. 5* 67
В условных адресах также удобно составлять СП, если при составлении их предусматривается запись стандартной програм­ мы в любом месте оперативной памяти машины. Однако для ЭВМ «Наири», в операциях которой возможно безотносительное программирование, метод условных адресов не дает большого эф­ фекта, и мы не будем им пользоваться в дальнейшем. Общие приемы составления программ в языке ручного прог­ раммирования. Составление программ нециклических алгорит­ мов. Пусть требуется вычислить функцию I = ат при т < 0; ! , ат sin х I I —— v. А при т > 0; (10 > а > 1) и (1 г т > 0). Решающий алгоритм, определяющий процесс вычисления по формуле, состоит из следующих элементарных предписаний: 1. Проверить, справедливо ли равенство /и < 0. Если да, то перейти к пункту 2, если нет, — к пункту 3. 2. Вычислить I по формуле 1 - а т. Перейти к пункту 4. 3. Вычислить I по формуле ^ a/n sin jc т Перейти к пункту 4. 4. Прекратить процесс. Анализируя алгоритм на особенности, находим, что в системе команд «Наири» нет операции возведения в степень. Возвести же а в степень т умножением возможно лишь для целых чисел. Тогда вычисления по формуле / = С'“ проведем так: вычислим вначале т In а, потом J Qm _ gm In а Последнее можно выполнить с помощью псевдооперации ех, которая в командах записывается так: ех А { 0 Аг и возводит чис­ ло е в степень, записанную в адресе А\. Результат размещается в адресе .А2. Просмотрев еще раз алгоритм и систему команд машины, находим, что все остальные операции алгоритма выполнимы в языке «Наири». Проводя дальнейший анализ алгоритма на осо­ бенности, находим, что при появлении в знаменателе числа, близ68
кого к нулю, в ЭВМ при делении на это число1произойдет пере­ полнение разрядной сетки. Приняв во внимание первую особенность, выбираем форму представления чисел в виде с плавающей занятой, потому что только в этой форме имеются операции In и ех. Малое быстро­ действие, с которым обрабатывается эта форма, для нас сущест­ венного значения не имеет из-за краткости вычислительного про-, цесса. Вторую особенность —.переполнение учтем в операторной схеме и, в дальнейшем, в программе — анализом знаменателя на величину, близкую к нулю.. Составим операторную схему задачи: I УоАгНъЯз уцНьЯв, Л7, I t t, I где операторы выполняют такие действия: Уо — проверяет, действительно ли т < 0, и если это так, то пере­ дает управление оператору у 4; в противном случае — опе­ ратору Ль вычисляет 1 — ат; Я2 печатает результат вычисления; Я3 останавливает машину; проверяет, близко ли т к нулю; Vi Н5 печатает, что п = 0; останавливает машину; . Яе ат sin х вычисляет /= А7 т Перейдем теперь к непосредственному составлению программы. Форма представления чисел уже выбрана. Распределим ячейки ОЗУ. Вспомните, для программирования всегда свободны ячейки: 1,11 — 15, 29—31, 33—980 (и все это при возможности использования машины в различных режимах). Для ячеек исходной информации выгодно выбирать малые адреса. Пусть исходная информация разместится в ячейках 30—32: ЗОЛ 31 т 33 X. Мы намеренно пропустили 32 ячейку, т. к. она может «портиться» счетным режимом. При обращении к этому режиму в 32 ячейке стандартной программой счетного режима заносится с хорошей точностью число л. (Это можно использовать при программиро­ вании). Программируем операторы. 1. Оператор уо 69
53 Я 31 Я — содержимое 31 ячейки посылается в ячейку а2\ 35 ех ... Я^безотносительный условный переход, если : т ^О . Адреса безотносительной передачи управления проставим в команде при стыковке операторов. 2. Оператор А\ 36 In 30 Я 12 In а— 23; 37 УП 31 Я 12 min а— 12; 38 ЕХ 12 Я 12 ет1па—4 2 ; 39 ХОЯ — предусмотрительно оставим эту ячейку свободной (хо­ лостая операция). 3. Оператор Н2. Я Я 12 Я 5 — печатать числа в форме с плавающей запятой из 12 ячейки; , о 2274 Я — возврат печатающей каретки телетайпа в исходное состояние, перевод бумажной ленты на'одну строку. 4. Оператор ЯгК — останов машины. 5. Оператор у 4 Я 31 Я 24 т-*-24; ВМ 29 Я 24 (от—а ) -^24; где а число, близкое к «машинному нулю». Продолжаем прог­ рамму. е\ ... Я ^ — переход к следующему за у* оператору H i 6. Оператор Я5 о 2230 Я — печать символа т о 2250 Я — печать символа = о 2176 Я — печать символа О. 7. Оператор #6 /с — останов машиньи 8. Оператор Л7 И\...П... — переход к вычислению ат (оператор Ai) с последую­ щим возвратом ко второй команде данного оператора; sn 33 Я 11 —.sin х—>-11 УП 11 Я 12 — amsin x -+ 1 2 ОД 31 Я 12 ■Qm-sШ -in * 12 *А - Н. Предусмотрительно оставив в операторе А\ одну 39 ячейку свободной для того, чтобы не программировать еще раз выра­ жение ат, мы сделали блоком часть программы, занимающую 36—39 ячейки, к которому можно обращаться командой перехо­ да с возвратом: «Я1...Я...», выиграв в труде и сэкономив в ячей­ ках памяти. 70
Теперь стыкуем операторы по схеме: I i УоА\Н2Яз\ у ^ ь Я вА7. I * т____________! Проставим недостающие адреса в командах безотносительного перехода и в команде (в операторе Aj) обращения к блоку вы­ числения ат. Программу разместим, начиная с 34 ячейки, чтобы не делать пустых промежутков в используемых ячейках ОЗУ. 34 Я 31 Я К - где величина а, необходимая для анализа 35 ej 7 Л > на переполнение в этой программе, опре­ 36 In 30 Я 12 деляется из максимального значения а = 37 УП 31 Я 12 Аг 10 (см. условия задачи). 38 ЕХ 12 Я 12 Наибольшее число в форме с плавающей 39 X ОН запятой не превышает в «Наири» 1018—1 40 ПП 12 Я 5 ' Тогда — =макс. при т — 1 и а — 10 по Hi 41 о 2274 Я ' условию. 42 К Примем }яз ячейку. 10 1018—1, разместив а в 29 43 Я 31 Я 24 44 ВМ 29 Я 24 Vi 45 6i 4 Я > 46 о 2230 Я х 47 о 2250 Я } Hs 48 о 2176 Я 1 49 К } Яе 50 И х 36 Я 39 . 51 Я О Я 39 52 SH 33 Я 11 л 53 УП П Н 12 54 ОД 31 Я 12 55 <?, 16368 Я Исходная информация расположена 29 а 30 а 31 т 32 33 х.' Для решения этой простой и небольшой задачи операторную схему можно было бы и не применять. Для начинающего про­ граммиста операторная схема может помочь в понимании струк­ туры программы. При программировании сложных задач операторные схемы 71
почти всегда необходимы, потому что, наглядно представляя за­ дачу, они позволяют иногда сократить вычислительную схему, тем более если к этому еще применить и эквивалентные преоб­ разования операторной схемы в целях ее минимизации (см. {1] стр. 141). В дальнейшем при составлении программ мы не будем при­ менять операторные'схемы из-за простоты задач. Циклы. Реальная программа, как правило, обеспечивает вы­ полнение значительно большего количества команд, чем их име­ ется в самой программе. Это важно благодаря тому, что некото­ рые серии команд программы выполняются многократно, под­ вергаясь в случае необходимости преобразованиям. Такое свойст-' во программ обеспечивается группами операторов, называемыми циклами. Наиболее простыми являются неразветвленные циклы с одним входом и одним-выходом. Такие циклы называются элементар­ ными. Элементарный цикл. Это многократно повторяющийся про­ цесс с использованием одной и той же исходной информации. Циклические вычислительные процессы или циклические ал­ горитмы — наиболее часто встречающееся свойство большинства программ. Для рассмотрения построения программ элементарных циклов выберем соответствующий пример. Пусть требуется вычислить функцию у = х64. 1 Нецелесообразно решать такую задачу на машине пусть да­ же такому, на первый взгляд кажущемуся компактным, алгорит­ му: 1. Послать аргумент х из ячейки, в которой он хранится, в какую-то рабочую ячейку, скажем в 29. 2. Перемножить х на х в 29 ячейке, т. е. перемножить на сум­ маторе с последующей посылкой результата в 29 ячейку, что й делается автоматически машиной. 3. Перемножить квадраты в 29 ячейке. . 4. Перемножить четвертые степени в 29 ячейке. ' 5. Перемножить восьмые степени в 29 ячейке. 6. Перемножить шестнадцатые степени в 29 ячейке. 7. Перемножить тридцать вторые степени в 29 ячейке. 8. Выдать на печать результат из 29 ячейки. 9. Остановить машину. При большем количестве аналогичных действий может слу­ читься так, что программа просто не разместится в памяти маши­ ны.: (Это произойдет в случае, если требуется, например, выдать на печать содержимое большей части ячеек памяти. Здесь.сама; прог­ рамма, естественно, не может разместиться в оставшейся- части памяти- т. к. на печать из каждой ячейки требуется: отдельная команда). 72- ‘
Программа вычисления у —х 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 = 1 5 + С 12 Я 12= + ■ С 12 Я 15 + . Следует помнить,'что перед своим выполнением команды с признаком формирования «+ » меняются не в памяти, а на испол­ нительном органе — регистре команд.(с помощью сумматора). В этом состоит принципиальное различие метода формирования с помощью регистровой ячейки от метода формирования команды ее непосредственным сложением с какой-то константой. С помощью признака формирования возможно не только пе­ реадресовывать команды, но и>переформировать их в отноше­ нии операций, модификаций и условий. Рассмотрим переадресацию команд в цикле на таком примере: умножить квадратную матрицу, элементы которой расположены по строкам, начиная с 300 ячейки ОЗУ, на постоянный множитель, расположенный в 299 ячейке. Умноженную матрицу отпечатать по строкам с пятью знаками после запятой. Умноженные элементы матрицы должны остаться в памяти, начиная с 300 ячейки. Исходная информация задана в форме с плавающей запятой. Программа: 29 Я 625 Я 11 — засылка количества циклов в 11 ячейку; 30 Я 0 Я 1 — очистка первой ячейки от оставшейся в ней ин­ формации (после работы на машине информация в ОЗУ не уничтожается от включения-выключе­ ния ее); “ *31 УП 299 Я 300 + — умножение элемента матрицы на по­ стоянный множитель; 32 С 1 Я / — добавление единицы в первую ячейку при каж­ дом цикле для автоматического изменения в дальнейшем с помощью этой ячейки второго ад­ реса в команде из 31 ячейки. 33 В 1 Я Ц — уменьшение содержимого счетчика циклов при каждом прохождении цикла; — 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 е — точность вычисления 36 N. Программу начнем с 37 ячейки. 37 П 43 Я 29 — команда из 43 ячейки отсылается на сохране­ ние в 29 ячейку. 38 Я 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 Я; 44 Я 13 Я 15 — пересылка содержимого 13 ячейки в рабочую 15 ячейку; 45 ВП 12 Я 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 а 30 в 31 с Программу начнем с 33 ячейки: 33 Я 0 /7 32 — очистка 32 ячейки для последующего суммиро­ вания в нее (см. команду 41); 34 Я 3 Я 13 — засылка константы циклов для внешнего цикла; 35 Я О Я 1 — очистка первой ячейки перед первым выполне­ нием команды с переадресацией; ' 36 77 9 Я 11 — засылка константы циклов для внут■реннего цикла; 37 Я 29 Я 23 Н--- последовательная посылка в 23 ячейку величин а, в, с\ -----"38 УЯ 1 Я 23 Н---- последовательное возведение з степень величин а, в, с; 39 В 1 Я 11 — коррекция содержимого ячейки-счет - чика циклов внутреннего цикла; ' ----- 40 в\ 16381 П ф — безотносительный условный пе­ реход; 41 С П 23 Я 32 — суммирование: а 1С+ в 10+ с10 в 32 ячейку; 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
Т а б л и ц а VII Нажать клавишу «Пуск-1 I Отпечатать: 70 п Примечание: двоеточие перед знаком синуса обозначает оперирование кла­ вишей пробел В таких случаях следует разбивать функцию на несколько подфункций, если это возможно, так, чтобы каждую такую под­ функцию программа автоматического программирования суме­ ла бы разместить в отведенном массиве памяти (76—200). 2. Машина выводит на печать: «Не могу» после вычисления интеграла, что означает — шаг интегрирования слишком мал. Данная СП может быть использована и как СПП, т. е. в виде составляющей. По СП и СПП можно вычислять интеграл, если подынте­ гральная функция содержит не .более чем 125 различных посто­ янных. Формула подынтегрального выражения может содержать не более 15 левых и 15 правых скобок. СП нахождения определителя матрицы и обратной матрицы. Для нахождения определителя и обратной матрицы исполь6: 83
Т а б л и ц а VIH Нажать клавишу «Пуск-1» ■ Отпечатать 61 п Набирать на клавиатуре элементы матрицы (по строкам), делая возврат каретки после набора каждого элемента - 1 Отпечатать во — в случае вычисления определителя или ом — в случае вычисления обратной матрицы ЭВМ печатает п = Отпечатать после знака равенства значение порядка матрицы и сделать возврат каретки зуется метод Леверье с видоизменением Д. К. Фадеева (см. А. К. Фаддеев и В. Н. Фаддеева. Вычислительные методы линейной ал­ гебры, 1960, стр. 295). Схема использования программы как самостоятельной приве­ дена в табл. VIII. В ходе решения по дайной СП возможны следующие случаи: 1. Машина печатает «опред=0» и останавливается при сов­ местном использовании СП нахождения определителя и обрат­ ной матрицы. Это означает, что исходная матрица особенная. 2. Машина останавливается (в случае нахождения опреде­ лителя матрицы). Это происходит оттого, что исходная матрица особенная. 3. Если при решении вводится порядок матрицы, больший 12, ЭВМ выводит на печать: «Не могу» и вновь запрашивает поря­ док: «п = ». СП можно использовать в виде СПП, Кроме рассмотрения программ, в ДЗУ «Наири» имеются и стандартные программы автоматического программирования, ис­ пользуемые как команды-псевдооперации, СП счетного режи­ ма и другие СП. § 4. ЯЗЫК АВТОМАТИЧЕСКОГО ПРОГРАММИРОВАНИЯ ЭВМ «НАИРИ» Сущность автоматизации программирования. Программиро­ вание состоит из двух основных этапов: разработки логической схемы программы по математическому описанию решающего ал84
горитма и разработки программы по ее логической схеме. В дальнейшем под автоматизацией программирования понимается автоматизация второго этапа. Автоматизация программирования слагается из выбора формы задания исходной информации, раз­ работки алгоритмов получения требуемого результата, составле­ ния программы для выполнения указанных алгоритмов на элек­ тронной цифровой машине. Результатом автоматического программирования является го­ товая программа, составленная в кодах команд определенной машины. Таким образом, форма представления требуемого ре­ зультата (т. е. выходной язык) заранее установлена. От формы задания исходной информации в значительной степени зависят: сложность алгоритмов переработки исходной информации в требуемый результат, а значит сложность и трудоемкость разра­ ботки программы, осуществляющей автоматическое программи­ рование; трудности, связанные с заданием исходной информации, а следовательно, и успех внедрения автоматического программи-, рования взамен программирования вручную. Вопросу разработки сходных языков для автоматического программирования уделяется большое внимание;. При автоматическом программировании, как и при програм­ мировании вручную, возможны два способа. Первый из них за­ ключается в том, что каждый раз по исходной информации про­ изводится составление всей программы заново. Программы, осу­ ществляющие автоматическое программирование первым спосо­ бом, получили название программирующих программ (ПП). Ме­ тод программирования, основанный на использовании ПП, назы­ вают методом программирующих программ. Второй способ программирования заключается в том, что от­ дельные части программ сохраняют и как целое применяют при составлении новых программ. При втором способе заново про­ граммируют лишь такие части программ, которые еще не были «запасены». Коллекции заготовленных частей программ (так называемых подпрограмм) получили название библиотек под­ программ. Метод программирования, связанный со вторым спосо­ бом, называют методом библиотечных подпрограмм. При методе библиотечных подпрограмм (кроме собственно подпрограмм) необходимо иметь все сведения, нужные для ис­ пользования подпрограмм. Без наличия таких сведений програм­ мисту приходилось бы каждую подпрограмму перед ее примене­ нием расшифровывать. Необходимые сведения о подпрограммах можно значительно сократить, если в библиотеку собирать не «случайно» полученные части программ, а специально разраба­ тываемые подпрограммы, удовлетворяющие определенным тре­ бованиям, дающим возможность описать совокупность действий, необходимых для применения произвольной подпрограммы в ви­ де единого алгоритма. В этом случае подпрограммы называют, 85
как уже говорилось, стандартными подпрограммами (СПП), а их библиотеку — библиотекой подпрограмм (БСП). Библиотека стандартных подпрограмм в совокупности с алгоритмом для их использования (который, в частности, может быть оформлен в виде программы) и правилами задания исходной, информации образует систему стандартных подпрограмм. Метод библиотеч­ ных подпрограмм при программировании вручную широкого рас­ пространения не получил. Значительно большие успехи достиг­ нуты на пути автоматизации программирования, основанного на применении БСП. Автоматизированный метод программирова­ ния с помощью БСП в дальнейшем называемся методсцм библио­ теки стандартных подпрограмм. Возможна автоматизация программирования, при которой со­ четаются методы ПП и БСП. Компиляция и интерпретация. Если программирование и выполнение программы на машине рассматривать как единый процесс решения задачи на машине, то возможны два порядка осуществления этого процесса. Первый порядок, который назо­ вем раздельным, предусматривает составление всей программы; выполнение программы на машине при заданных исходных дан­ ных, т. е. собственно решение задачи. Этот порядок широко рас­ пространен при ручном программировании и в ряде случаев пре­ дусматривается при автоматическом программировании. Второй порядок назовем чередующимся. Он заключается в том, что ис­ ходная информация о программе (или неполная программа и ис­ ходная информация о недостающих кусках) вводится в машину вместе с исходными данными задачи. Общий процесс решения задачи на машине состоит из чередующихся .этапов автоматиче­ ской переработки частей исходной информации о программе в «куски» программы и заканчивается получением исходного ре­ зультата задачи. При этом перерабатываемые частями исходной информации являются группы, кодов, которым соответствуют за­ конченные элементы программы, например, команды, операторы или подпрограммы. Куски программы, получающиеся на этапах автоматического программирования, после выполнения не сохра­ няются. Автоматическое программирование при раздельном порядке решения задач называется компиляцией программы, а при чере­ дующемся порядке — интерпретацией (исходной информации о программе). Возможно сочетание компиляции с интерпретаци­ ей; заключающееся в том, что компилируется программа, в со­ став которой, кроме команд, включены специальные коды, назы­ ваемые псевдокомандами. Псевдокоманды интерпретируются уже при выполнении составленной программы на •машине. Если при компиляции программа, осуществляющая автома­ тическое программирование, нужна только для получения про­ граммируемой программы, то при интерпретации интерпретиру­ ющая программа. находится в оперативной. памяти в течение, все86
го времени решения задачи. Каждый из методов (компиляция и интерпретация) имеет свои достоинства, однако код интерпрета­ ции является более гибким. Метод интерпретации упрощает за­ дачу распределения памяти, хотя и требует большого дополни­ тельного расхода памяти для хранения самой интерпретирую­ щей программы. При методе компиляции более экономно расхо­ дуются ячейки оперативной памяти, так как компилирующая программа в ней во время решения задачи не присутствует. Ввиду того, что способы программирования можно любым образом сочетать с порядком'решения задач на машине, возмож­ ны ПП как компилирующие, так и интерпретирующие; точно так же метод БСГ1 может осуществляться как путем компиляции, так и путем интерпретации. Трудности подготовки задам на языке ручного программиро­ вания привели к развитию методов, допускающих автоматиза­ цию, т. е. возможность большую часть работы по программиро­ ванию производить с использованием той же машины. Трудность ручного программирования состоит в необходимо­ сти понимания специфики выполнения всех команд из алфавита системы команд данной машины. Алфавит команд современной ЭВМ обширен и специфичен, что затрудняет немедленное ис­ пользование языка ручного программирования неспециалиста­ ми вычислительной техники. Умение пользоваться языком ручно­ го программирования обычно приобретается не днями, а меся­ цами кропотливого труда, если за это дело берешься впервые. В языке автоматического программирования (в языке АП) про­ граммист перекладывает алгоритм на язык машины не в опера­ циях, а в операторах. Последние состоят из больших групп опе­ раций, составляемых самой машиной безошибочно. Несмотря на существенные недостатки, язык РП, наверное, еще долго будет оставаться отличным методом составления ком­ пактных программ. Составление программ самой машиной по простому языку об­ щения — языку АП — одна из особенностей «Наири». В долго­ временной памяти машины имеется программирующая програм­ ма, способная ио простому языку общения, близкому к матема­ тическому, составлять программы на языке ручного программи­ рования сразу же по мере общения с машиной в языке АП. Про­ граммирующая программа — программа АП — принимает ин­ формацию, составляет по мере ее приема рабочую программу в символах внешнего кода языка РП, которую легко вывести в слу­ чае необходимости из оперативной памяти машины в виде пер­ форированной ленты или в виде машинописной печати програм­ мы на широкой бумажной ленте. Главное достоинство языка АП — экономия времени при со­ ставлении программы. Главный недостаток — невозможность составления компакт­ ных программ. В языке АП машина составляет программы в не­ 87
сколько раз длиннее, чем это сделал бы программист средней квалификации. Можно сказать, что при пользовании языком АП, с одной сто­ роны, экономится время, с другой,—неэкономно расходуется па­ мять. Поэтому лучшим методом составления программ является комплексный метод программирования, в котором программы, написанные в языке АП, стыкуются с программами, написанны­ ми в языке РП. Однако так нельзя утверждать на все случаи жизни. Одни задачи хорошо программировать только в АП, дру­ гие— в РП. Приступим теперь непосредственно к изучению языка АП ЭВМ «Наири». Алгоритмический язык АП содержит: 1. Буквы с, в, у, д, л, м, н, х, а, б, г, ч, п, о, е, /, р, т, ш, т, s, t, ы, которые используются для обозначения индексированных или неиндексированных переменных только в форме с плаваю­ щей запятой. Величины, приписываемые программой АП этим буквам, располагаются соответственно в 33—55 ячейках ОЗУ. 2. Знак запятой. 3. Цифры 0, 1,2, ..., 9, в которых, используя запятую, можно образовать любое число в форме с плавающей запятой меньшее по абсолютной величине 1018 и в любой целый показатель сте­ пени. 4. Буква л, которая всегда обозначает величину 3,14159265 160056060791015.625000. 5. Знаки отношений = , > , <, =£'. 6. Символы функций sin, cos, tg, arcsin, агссоэ, aretg exp, In, lg, У7. Символы знаков + , —, /, !. 8. Левую и правую скобки. 9. Знак модуля (Внимание! Обозначается при печати на те­ летайпе двумя символами «!»). 10. Буквы i, /, k , которые служат только для обозначения ин­ дексов и целочисленных переменных. 11. Букву п только для обозначения целочисленных перемен­ ных: 12. Слова или группы слов, называемые операторами, 13. Символы клавиш телетайпа: «ВК», «Пробел». Операторы АП Операторы присваивания. Оператор допустим... служит для присвоения переменным конкретных числовых значений, а также значений других пере­ менных и их модулей, например: 1 : допустим л = 0 ,2 —. Букве Л присвоится значение 0,2 в форме с плавающей запятой. Внимание! Во всех примерах перед символом .оператора, как это делается1в настоящих программах, будем ставить Номер опе­ ратора (в примерах произвольный). Символ «Пробел» будет
обозначаться условно символом «:», потому что настоящий про­ бел можно не заметить. Символ клавиши телетайпа ВК (возврат каретки) будем обозначать условно через символ «—». Еще пример: 25 : допустим м = \л) : х — — \л\ : у = — 5 : ш = (135) : (235) = = (236) : (136) — п : « = 3 —. Что же произойдет после прохождения машиной оператора из второго примера? Переменная м станет равной по модулю переменной л, пере­ менная х станет равной л с обратным знаком, переменная у ста­ нет равной минус пяти, переменная ш станет равной содержимо­ му ячейки 135, а содержимое ячейки 235 приравняется к содер­ жимому ячейки 236, содержимое ячейки 136 станет равным цело­ му числу 3. ■' Программирующая программа не воспримет такие слова: 1 : допустим а = -—ш; 2 -.допустим п = 0,05 (также и для букв i, j, k, потому что эти буквы используются только для целочисленных переменных); 1 : допустим п. = — 3 (целочисленным переменным нельзя присва­ ивать отрицательных значений); 1 : допустим а — п (целочисленным переменным нельзя присваи­ вать значения переменных, которые могут Иметь значения толь­ ко в числах в форме с плавающей запятой и наоборот); 1 : допустим а — в + с (оператор допустим не вычислительный); 1 : допустим а = — !5! (можно присваивать модули букв, но не мо­ дули цифр). При такого рода ошибках программа АП выводит признак ошибки символ «*» и возвращает печатающую каретку телетайпа в исходное состояние. Примечание. Переменные в операторе можно разделять мно­ гими проблемами, но не менее одного. Оператор вставим... служит для изменения значений перемен­ ных без индексов на заданную величину. При этом значения ин­ дексов и переменной можно изменять только на целое число. Пример. 3: вставим 'у = у + 0,1275: в = в + 23,5 : п = п — 2. Целочисленные переменные i, j, k, п с помощью оператора вста­ вим можно изменять в любую сторону, а остальные — только в сторону увеличения. Оператор вычислим... служит для организации вычислений по формулам, составленным из символов языка АП. Например: 3 : вычислим ш = (: sin (be+ я / 12))2/ ]/ : exp 0,3 + а : sin х : cos х. Переменная ш этим оператором приравнивается формуле sin8 ( б с + ил --------- 7 7 = -------- \~а s>n (х cos х )- Из примера видно: У е0,3
1. Перед всеми символами элементарных функций (кроме У ) нужно делать пробел, иначе символ функции воспринимается как произведение букв. 2. Одна «подфункция» отделяется от другой символами «4-» илЦ «—». 3. Функцию нельзя непосредственно возводить в степень, а только с использованием скобок. 4. В формуле не могут находиться переменные i, /, k , п, а пе­ ременные i, j, k могут быть использованы в формуле в виде ин­ дексов. 5. Глубина скобочных выражений не может быть более 15 (д; е. можно испрльзовать не более 15 левых и 15 правых скобок). 6. Аргумент тригонометрических функций воспринимается в радианной мере. 7; В операторе вычислим можно использовать только одну формулу. 8. Из всех символов языка АП в формулах нельзя использо­ вать символ модуля. 9. Формулу можно задать и перед операторами сразу по­ сле ввода машины в режим АП. Ввод машины в режим АП. Для этого необходимо нажать и отпустить клавишу «Пуск-1» на пульте сигнализации. Далее от­ печатать букву ч (число), а потом дату решения задачи, напри­ мер; ч18—5—1972 г. После этого следует отпечатать сочетание АП — автоматическое программирование. Машина сразу же повторит дату и проставит номер программы, в данном случае первый, а также напечатает, в конце свое название. В итоге получится: ч 18—5— 1972 г. ап 18—5—1972 г. «Наири» После этого можно приступать к составлению программы в язы­ ке АП. Итак, формулу можно давать и в начале программы, т. е. не­ посредственно после ввода машины в режим АП. Например: ч 1 8 -5 —1972 г. ап 18—5—1972 г. «Наири» У = х12! 4 1 : допустим х = 2: вычислим у~ 90 _ ____
Как видно из примера, в операторе вычислим уже излишне пере­ менной у присваивать формулу, которую машина уже восприня­ ла вместе с образом буквы. В начале программ, так же как и после оператора вычислим, нельзя задавать более одной формулы. , 10. В случае печати графика вычисленных значений после оператора вычислим должен обязательно стоять оператор хра­ ним. Оператор введем... Это оператор ввода. Он присваивает зна­ чения переменным в процессе прохождения программы. Если машина, например, встретит оператор 43 введем а: в: : с : х — то она останавливается на вводе информации по этому оператору. После этого можно вводить исходную информацию по переменным оператора введем набором на клавиатуре теле­ тайпа значений соответствующих переменных. После ввода по­ следней переменной машина сама перейдет на продолжение про­ граммы. Оператором введем нельзя вводить значения букв i, j, k, п. Операторы переходов. Оператор безусловного перехода ид­ ти к... употребляется для безусловной передачи управления. При­ мер: '23: идти к 3— Встретив такой оператор, машина перейдет к исполнению оператора 3. Оператор условного перехода если... , идти к... Пример: 45: если х < 12: идти к 5. ЭВМ перейдет к оператору 5 при условии, если в момент исполнения оператора х<12. В про­ тивном случае оператор пропустится. Операторы печати переменных. Оператор печатаем с... зна­ ками... служит для печати значений букв с заданным числом зна­ ков после запятой. Пример 12: печатаем с 5-ю знаками х\у:А_ . Исполняя этот оператор, машина введет на печать значения бука .г, у, а, полученные в вычислениях перед оператором печати: Оператор не в состоянии вывести значения переменных с ко­ личеством знаков после запятой более 9,* а также не может вы­ вести значения целочисленных переменных. Не рекомендуется выводить оператором значения более трех букв, т. к. значения уже четырех букв (с 9-ю знаками после за­ пятой) не уменьшаются в одной строке бумажной ленты теле­ тайпа. Оператор интервал... служит для пропуска заданного числа строк при печати, т. е. для отделения одного выводимого масси­ ва от другого. Пример 56: интервал 3. При исполнении операто­ ра машина три раза переведет строку телетайпа. Оператор спросим дает возможность контролировать зна­ чения переменных в процессе вычислений. При нажатой клавише «Вариант» на пульте сигнализации машина, встретив оператор спросим, останавливается, и на пульте сигнализации загорается лампочка «Команда ввода». 91.
После этого можно набрать на клавиатуре телетайпа символ переменной, значение которой нас интересует, и набрать вслед за этим символ знака равенства. Машина напечатает численное значение заданной переменной. Если спрашивать значение индексированной переменной, то для этого ее следует набирать с цифровым индексом. У двухиндексных переменных в данном случае следует делать пробел ме­ жду индексами. Для пуска машины после вывода запрошенных переменных нужно отжать клавишу «Вариант» на пульте и сделать возврат каретки телетайпу. Операторы печати графиков. Оператор храним... обозначает, что машина должна запомнить заданное число значений указан­ ных переменных, которые нужны будут в последующем для пост­ роения графика. Пример 12 : храним 12 г/— или в случае последующего вывода графиков двух переменных: 12 : храним 12 у : Z— Хранить индексированные переменные оператор не может. Количество хранимых значений функции определяется по формуле где а — «нижний» предел отрезка, на котором строится график; в — «верхний» предел отрезка; й — шаг. Оператор начертим... предусмотрен для печати графиков функций. Одновременно можно выдать на печать не более двух графи­ ков. Пример 23 : начертим 1 гр. или 23: начертим 2 гр. Перед опе­ ратором начертим обязательно прохождение оператора храним. Покажем построение графиков функций на4 полном приме­ ре. В целях иллюстрации приема построить график синусоиды и косинусоиды ч 1 8 -5 -1 9 7 2 г. ап 18—5—1972 г. 1 «Наири» y = :s in х 1 : допустим х = О— 2: вычислим г/_ 3: храним 61 у 4 : вычислим а = : cos х_ 5 : храним 61 d_ 6: вставим х = х + 0,31415— 7: если х ^ 18, 84 : идти к 2_ 8 : начертим 2 гр. 92
9 : кончаем исполним 1_. После оператора исполним машина через небольшое время нач­ нет выводить график заданных функций в виде печати звездоч­ кой п нуликом вычисляемых значений. Если при начертании двух графиков в некоторых точках значения функций совпадают, то машина выводит на печать совпадающие точки в виде одного символа «-)•■». Служебные операторы. Оператор кончаем... указывает на окончание вычислений. Его следует употреблять для останова ма­ шины после вычислений, чтобы после прохождения программы она не переходила на какую-то оставшуюся от предыдущих вы­ числений программу. Оператор останов. По нему происходит останов машины. По­ сле нажатия на режимной панели клавиши «Пуск-2» машина про­ должает вычисления. Оператор может использоваться при от­ ладке программы для останова машины после прохождения от­ лаживаемой части программы. В отличие от оператора кончаем в данном случае клавишей «Пуск-2» машину легко пустить (по­ сле проведенного анализа отлаживаемого куска программы) на выполнение оставшейся части программы. Оператор массив к... служит для определения количества команд рабочей программы, составленной АП. После ввода этого оператора машина выводит на печать чи­ сло, равное количеству команд рабочей программы, составлен­ ной программой АГ1. Оператор можно использовать в любой ча­ сти программы при ее составлении, а также и вслед за формулой, указанной в начале программы еще до операторов. Этот и два следующих оператора используются без порядкового номера. Оператор массив в... используется для выдачи на телетайп всей или части рабочей программы, составленной программой АП. Как и оператор массив к... его можно использовать в любой части составляемой программы. Оператор исполним... служит для ввода машины в работу по составленной программе, начиная с того оператора, номер кото­ рого указан в операторе исполним... Операторы стыковки программ или операторы обращения к другим программам. Оператор программа... отправляет машину в программу, на­ чинающуюся с той ячейки ОЗУ или ДЗУ, которая указана в опе­ раторе. В конце подключаемых программ необходимо указывать код (команду) возврата к АП в виде команды И 66 К, если толь­ ко после использования подключенной программы следует вер­ нуться в АП. Пример. Требуется вычислить COSX У ~ ! 1/ е 0 ’ 3 dx sin* r /. 93
при х = 1, используя стандартную программу из ДЗУ — програм­ му вычисления определенного интеграла. Вот как это сделать: ап 1 : допустим х — 1_ 2 : вычислим у — : sinx_3 : вычислим а— : cos X— 4 : допустим (70) = у : (71) = а : (72) =0,0001_ 5: программа 7996_ исполним 1_ У : ехр 0,3_. В этой программе использована СП вычисления определенно­ го интеграла, которая начинается с ячейки 7996. Перед исполь­ зованием СП вычисления определенного интеграла требуется нижний предел интегрирования заслать в 70 ячейку, верхний пре­ дел — в 71-ю, а заданную точность вычисления интеграла — в 72 ячейку, что и делается приведенной программой, составленной в языке АП. После ввода машины .в программу АП ЭВМ остановится на вводе подынтегральной функции. После ввода подынтегральной функции машина приступит к выполнению программы вычисле­ ния определенного интеграла. (Оператору «программа 7996» дол­ жны предшествовать не менее 4-х других операторов, и эти пред­ шествующие операторы не следует использовать в цикле). Оператор решим... предназначен для решения только двух за­ дач: «Решение системы линейных алгебраических уравнений до 28 порядка» и «Нахождение корней полиномов степени до 38 по­ рядка включительно». В первом случае оператор задается в таком, например, виде: 23: реи1им S 3ах = 0. Это означает, что требуется решить систему линейных алгеб­ раических уравнений третьего порядка с коэффициентами ац и свободными членами щ: f l u %1 + ^12 х 2 + ОЗз х з = Ь \, Й21 Х \ 4 - Й 22 X3 -f- й зз Хз = 6 2 , «31 Xi -)- а за х%-j- Й33 Х3 — Ьз. Разумеется, коэффициенты при*неизвестных и свободные чле­ ны перед обращением к оператору должны быть уже сформиро­ ваны или распределены, начиная с 64 ячейки ОЗУ по строкам решаемой системы, как этого требует СП, составленная проекти­ ровщиками машины. Во втором случае оператор можно задать так: 23: решим рвх 3 — 0. В этой записи буква р употребляется обязательно, вме­ сто буквы в может быть использована любая другая, которая обозначит коэффициенты полинома, х — обозначает переменную. В качестве переменной можно использовать и другие буквы. При прохождении программы АП с командой нашего примера 94
машина Остановится, на режимной панели загорится лампа «Ввод»,что означает разрешение ввода информации в машину, в данном случае полинома третьей степени. Внимание! В программах оператор решим должен использо­ ваться последним. В таких случаях оператор кончаем, обычно заключающий программы АП, уже излишен — ведь останов ма­ шины предусмотрен в указанных выше СП. Приведем некоторые примеры программ, составленных в язы­ ке АП. Пример 1. Вычислить значение функции у —r]f 1— f- (1—COS it*)2 на интервале (1; — 1), включая концы интервала, через 0,001 при г = 10. Для вычислений формулу преобразуем к виду у = г ]Л(1 + (1—cos ТС*)3), в соответствии с изложенными правилами. Программа в языке АП будет выглядеть так: ап 1 : допустим r = 10:х = —1_ 2 : вычислим у = гу(1 + (1 —:cosnx)2)_ 3 : печатаем с 9 знаками у— 4 : встарим х = х + 0,001_ 5 : если х < 1 : идти к 2_ 6 : кончаем исполним 1— Пример 2. Вычислить значение функции у —sin 2 х -у(exp cos х)0-062, при изменении аргумента от 10° до 90° через минуту. Обозначим через Г число градусов, составляющих аргумент х(Г •— целое число), а через М — число минут, входящих в ар­ гумент. Тогда х можно выразить в радиальной мере следующим образом: х —(Г -}- УИ/60) тс/180. Программа будет выглядеть так: ап 1 : допустим г= 10_ 2 : допустим м = 0 _ v 3 : вычислим х = (г+дг/бО) л/180_ 4 : вычислим у —{: sin)2-f : exp 0,062 : In : exp : cosx_ 5 : печатаем с 9 знаками г/_ 6 : вставим м*=м+1_ 7 : если М < 6 0 : идти к 3_ 8 : вставим а = г + 1 _ 9 : интервал 3_ 10: если г< 90 : идти к 2_ 95
11 : кончаем исполним 1— Программирование с индексированными переменными. Дли индексированных переменных можно использовать толь­ ко буквенные индексы /, /, к, которым предварительно должны быть присвоены численные значения с помощью операторов до­ пустим пли вставим. Если алгоритм содержит индексированные переменные, то перед набором первого оператора нужно ввести в машину мак­ симальные значения основных индексов, т. е. тех, по которым машина производит разметку памяти. За начальное значение ин­ дексов принимается, как правило, ноль. Если в задаче встречают­ ся только одноиндексные переменные, то основной индекс может быть только один, а если мы имеем дело с двухиндексными пе­ ременными, то основных индексов будет два. Кроме того, в слу­ чае двухиндексных переменных количество столбцов матрицы должно быть задано с помощью буквы п. Пример. Найти корни полинома a0x3+ a i* 2+ а2х-|-аз=0, коэф­ фициенты которого определяются по формулам: Оо = 1; 01 = sin tf-j-cos-jj^-; аг ~ ехр (t — m); а3=ехр 38,6 t — 1. При построении алгоритма используем стандартную программу, к которой будем обращаться с помощью оператора решим, ап 1=3: a_t 1 : введем /: т _ 2 : допустим i = 0 : a = / _ 3 : вставим 1_ 4 : вычислим а4= :sin f-j-: cos ^/m2_ 5 : вставим t = i + l _ 6 : вычислим ai= : exp (t—m )_ 7 : вставим i = i - H 8 : вычислим a ,= : exp 38,6—1_ 9 : решим pax3= 0 исполним 1_.
Р а з д е л HI § 5 . ИНФОРМАЦИОННЫЙ ПОИСК, ОБЩИЕ ПРИНЦИПЫ И ПОНЯТИЯ Использовать ЭВМ в наше время только в роли быстродейст­ вующего арифмометра означает игнорирование теми богатыми возможностями, которыми располагает современная вычисли­ тельная машина. Ниже представлена одна из сторон использования ЭВМ - в творческом процессе. «Всеобщим трудом, — писал К. Маркс в «Капитале», — яв­ ляется всякий научный труд, всякое открытие, всякое изобре­ тение. Он обусловливается-частью кооперацией современников, частью использованием труда предшественников» (К. Маркс. Капитал, т. 3, М., Госполитиздат, 1955, стр. 109). Преемственность в развитии науки, ее коллективный харак­ тер и интернационализм обеспечиваются системой письменных документов, в которых излагаются результаты исследований и разработок как отдельных лиц, так и соответствующих коллек­ тивов. Развитие науки и техники сопровождается быстрым ро­ стом количества письменных документов, содержащих научную информацию по тому или иному вопросу. Например, лишь по химии и химической технологии в 1967 г. было опубликовано 310 тыс. статей, научно-технических отчетов, патентных описа­ ний и других .научных документов, причем это число ежегодно возрастает. Свыше 130 тысяч научных документов было опубли­ ковано в 1965 г. по биологии. Второй фактор, затрудняющий доведение письменных доку­ ментов непосредственно до потенциального потребителя, — это увеличение числа языков, на которых публикуются такие доку­ менты. Наконец, возникновение у исследователя потребности в той или иной научной информации зависит от многих факторов и часто не совпадает во времени с появлением письменных доку­ ментов, содержащих такую информацию. Информационный поиск — это некоторая последовательность операций, выполняемых с целью отыскания документов (статей, 7—3657 97
научно-технических отчетов, описаний к авторским свидетельст­ вам, патентам и т. д.), содержащих определенную информацию. Информационный поиск производится с помощью информацион­ но-поисковых систем (ИПС). ИПС подразделяются на документальные и фактографиче­ ские. Документальные ИПС в ответ на вводимые в дих информа­ ционные запросы выдают оригиналы, копии или адреса хранения документов, содержащих требуемую информацию. Фактографические поисковые системы предназначены для вы­ дачи непосредственно требуемой информации (например, темпе­ ратуры кипения какой-либо жидкости;.структурных или молеку­ лярных формул химических соединений, обладающих некоторы­ ми свойствами, и т. д.). Однако принципиальных различий меж­ ду документальными и фактографическими ИПС нет. Другой высший класс образуют информационно-логические системы, которые должны не только выдавать по требованию ранее введенную информацию, но и производить, если это необ­ ходимо, логическую переработку этой информации с целью по­ лучения новой информации, которая в явном виде в них не вво­ дилась. Процесс поиска документа может быть описан в терминах множеств Д и Q, а также отношения R, где Д — некоторое множество документов или библиотека (поисковый массив), С? — множество информационных запросов и R — свойство, при наличии которого любому запросу ставится в соответствие ка­ кое-то подмножество документов. Если q запрос, a d ответ по­ исковой системы, го это можно коротко обозначить qRd. Очевидно, что самый эффективный метод поиска докумен­ тов, содержащих некоторую информацию, в библиотеке — это прочитать каждый документ данной библиотеки. Из-за большого количества документов такой метод практически невыполним, и поэтому приходится использовать другой, менее эффективный метод, при котором информационный поиск производится не по самим текстам документов, а по кратким характеристикам со­ держания или определенным внешним признакам документов. Для этого каждый документ снабжается поисковым образом — характеристикой, в которой кратко выражается основное смыс­ ловое содержание документа. В виде такой же краткой характе­ ристики — поискового предписания — должен быть сформули­ рован и информационный запрос. Сопоставление поискового образа и поискового предписания возможно в том случае, если они представлены в терминах одного и того же языка, и притом такого, в котором каждая фраза допускает одно и только одно истолкование.. Благодаря высокому быстродействию современных ЭВМ по­ следние успешно применяются в ИПС. Задачу информационного поиска рассмотрим в плане организации хранения документов в памяти ЭВМ. 98
Каждый документ содержит в себе т названий объектов или отношений. Составим словарь, в котором каждому слову (на­ званию) поставлена в одно-однозначном соответствии определен­ ная цифра Ри Тогда документ можно записать в памяти ЭВМ в виде набора: Р^-.-Рт, где Р\, Р% ..., Рт — коды названий, со­ держащихся в документе. Представим себе такую организацию памяти ЭВМ для реализации ИПС 0 * 2 3 4 1 01 | 01 | 02 | 03 ! 04 02 03 12 13 12 23 13 23 14 24 04 012 013 014 14 ! 012 013 014 24 012 023 024 34 013 023 034 34 014 024 034 01 012 013 014 02 012 023 024 03 013 024 034 04 014 024 034 12 012 123 124 13 14 23 24 34 023 024 123124 123 124 123 134 124 134 034 134 234 234 234 0123 0124 0134 0123 0124 0134 0123 0124 0234 0123 0134 0234 0124 0134 0234 0123 0124 0134 0123 0124 0234 0123 0134 0234 0124 0134 0234 0123 0124 1234 012 013 014 023 024 034 123 124 134 134 0123 0124 0123 0134 0124 0134 0234 1234 0124 0234 0134 0234 0123 1234 0124 1234 0134 1234 0234 1234 0234 1234 1234 1234 1234 0123 0124 0134 0234 1234 01234 01234 01234 01234 012Э4 01234 01234 1 01234 01234 01234 01234 01234 01234 01234 01234 01234 01234 01234 01234 i 01234 i 01234 i 01234 i 01234 | 01234 | 01234 | 1 j I 1 1 | ! | I | | 1 Матраца A Элемент Р л PB ... Р к матрицы А есть сочетание из n по m, где n — количество слов в словаре данного языка в ИПС. Циф­ ры в разрядах сочетаний — это коды слов словаря языка в ИПС. (Рассматривается пример словаря длиной в 5 слов). Два соче­ тания называются толерантными [15], если у них имеется общий признак. Признаки в матрице А есть сочетания, стоящие в начале каж­ дой строки. Таким образом, в строках матрицы А располагает­ ся класс ассоциаций слов, описывающих тот или иной документ (понятие). Ассоциации, расположенные в одной строке, толерантны между собой по признаку, поставленному в начале стро­ ки. 99
Каждому элементу матрицы А (т. е. каждой ассоциации мат­ рицы А) соответствует вполне определенное название документа (понятие), в том числе и «нулевое название». Последнее означа­ ет, что элемент матрицы А не имеет Названия. Название,,соответ­ ствующее ассоциации матрицы А ,разместим в матрице имен,ко­ торая построена так же, как и матрица А, правда, с тем отличием от последней, что в ней вместо соответствующего документа (соот­ ветствующей ассоциации) размещается имя или название этого документа. Ясно, что соответствие ассоциации матрицы А на­ званию в матрице имен определяется порядковым номером ас­ социации в матрице А, Осуществим пересчет элементов в матрице А и соответствен­ но пересчет названий в матрице имен слево направо и сверху вниз. Номер (jV™)m ассоциации длиной в т слов словаря из п слов, содержащей в себе признак длиной в М слов, определяется по формуле 1) + ( 2п~м— 1)х (О м Г-1 \ М ( c nM- S c r„ _W r- i j + , /->т—М “F '- 'n —М m—М V « и in—Af—1 Д С -л<+ Гг — М — рр г=^1 (см. приложение). По (ЛС)Ч в матрице имен отыскивается на­ звание ассоциации. Формой в виде матрицы А можно также задавать структуру связей между объектами, причем названия самих объектов запи­ сываются в матрице имен. Пусть в ассоциативный анализатор, описываемый матрицей А, на вход подается признак Рi Р2 ...РЫ. По такому признаку лег­ ко осуществляется (эта возможность здесь не рассматривается в своей конструктивной реализации) генерация толерантных ассоциаций матрицы .4 (часть строки матрицы или вся строка), поэтому матрицу А при реализации ИГ1С вовсе не обязательно хранить в памяти ЭВМ. При генерации ассоциаций отыскивает­ ся ассоциация названий, что соответствует выдаче группы наи­ менований документов по запросу Р\Р2-. РаПри реализации ИПС матрица имен также не записывается в памяти. Названия документов записываются в паре со своими номерами, по которым и, осуществляется поиск. Вывод формулы нумерации элементов матрицы А представ­ лен в приложении. 100
ПРИЛОЖЕНИЯ
1. ВЫВОД. ФОРМУЛЫ НУМЕРАЦИИ СОЧЕТАНИЙ Пусть к — общее количество элементов, из которых могут быть образованы сочетания без повторении; т — количество элементов в сочетании. Упорядочим сочетания как показано в таблице 1, где пред­ ставлены сочетания из /с=8 по /м = 3. Вычтем из каждого сочетания (из каждого элемента матри­ цы 1) сочетание 012... (т—1), то есть сочетание 012. В результа­ те получим матрицу 11 (табл. 2). Определим теперь основание системы счисления: р = к—т + 1 и представим в этой системе счисления натуральный ряд чисел (табл. 3) до числа А = (р— 1)р°+ (р—1)р' + (р—1)р2+ ... + (р—l)p'm_1 . В рассматриваемом примере А =555. В натуральный ряд чисел до числа А входят сочетания из к элементов по пг. Необведенные элементы в матрице III и есть рассматриваемые преобразованные сочетания. Количество Ущеобведенных рамками элементов (сочетаний), если начинать считать их с самого последнего (с числа А) и до -го элемента для любых /с и т , всегда равно т Ni = г2- 1'C U r, (1) где г — номер разряда (в сочетании). Счет разрядов ведется справа налево, начиная с единицы; .?= /с—т—1+г; Ь, — значение цифры в разряде цифрового набора, полученно­ го поразрядным вычитанием из нумеруемого сочетания 012... (т—1). Отметим, что всегда c r= S c i-и . (2) Вычитая (1) из (2), перейдем к нумерации от начального эле­ мента: ш
га лг0=сг—Wi=cr—г2— i c u „ (3) где yV'o — номер сочетания, если производить нумерацию от соче­ тания 012... (от—1). Формула (3) нумерует сочетания, преобразованные в форму, представленную матрицей 11. Преобразуем выражение (3) на случай нумерации сочетаний в их непосредственной форме (мат­ рица 1). Для этого преобразуем член, стоящий под знаком сум­ мы, т. е. перейдем от Ьг к бг, где бг — значение цифры в разряде сочетания. Сравнивая матрицы I и II, находим, что br —br—от+ r. Заме­ ним в (3) Ьг на бг—от + г: z — br = k — \ — br Тогда номер Сочетания определится формулой т п0 —С™—2 C*_i_5r , (4) Г=-1 если нумеровать. сочетания в том же отношении порядка, как это сделано в {12]. При нумерации от конечного сочетания (от числа А) номер п j сочетания определится по формуле т Пг —2 С*—1—sr . (5) г—1 Каждое конкретное от — множество сочетаний, определяемое конкретным значением от сочетаний из к элементов, можно про­ нумеровать по формулам (4) или (5). Если обозначить через тх значение от сочетания, номер которого отыскивается, то ко­ личество пт всех сочетаний во всех m-множествах с о т ^ (тх—1), как известно, равно т-е—1 л * = г— 2 \ Ск, (6) поэтому на случай нумерации сочетаний при т ф const можно, пользоваться формулой 1 т х— п= s г=1 т г а + с г - 2 с£_,_гг г= 1 (7) при нумерации от сочетания 012...(от—1) или формулой т х— N = 2 r= l 1 тх Cfe -[- C l- H (3 ) г- Г при нумерации от сочетания (к—от) (к—от+1)...(к—1). По сравнению с [12] приведенные выше формулы нигде не со­ держат сочетания знаков S2 и, следовательно, обеспечивают большее быстродействие в вычислениях при использовании ЭВМ. 104
Та блица 012 123 234 345 456 567 013 124 235 346 457 014 125 236 347 015 126 237 016 125 017 023 134 245 356 467 024 135 246 357 025 136 247 026 137 027 034 145 256 367 035 146 257 036 147 037 045 156 267 046 167 1 047 066 057 067 167 Матрица I Таблица 2 000 111 222 333 444 555 001 112 223 334 445 002 113 224 335 003 114 226 004 115 005 ОН 122 233 344 455 012 123 234 345 013 124 235 014 125 Матрица II о О! 022 133 244 355 023 134 245 024 135 025 033 144 255 034 145 035 044 045 055 155
Таблица 3 0 1 2 3 4 5 1 ю | 1 и 1 12 13 14 15 20 21 22 23 24 25 30 31 32 33 34 . 35 40 41 42 43 44 45' 50 51 52 53 54 55 100 101 102 103 104 105 110 ш 112 113 114 115 120 121 122 123 124 125 130 131 132 133 134 135 ,140 141 142 143 144 145 150 151 152 153' 154 155 200 201 202 203 204 205 210 211 212 213 214 215 220 1 221 1 222 223 224 225 230 231 232 233 234 235 240 241 242 243 244 245 250 251 252 253 254 255 300 301 302 303 304 305 310 Й11 312 313 314 315 320 321 322 323 324 325 330 331 332 333 334 335 340 341 342 343 344 345 350 351 352 353 354 355 400 401 1 402 403 404 405 410 411 412 413 414 415 420 421 422 423 424 425 430 431 432 433 434 435 Матрица III 106 440 441 442 443 444 445 ~45б~ 451 452 453 454 455 500 501 502 503 504 505 510 511 512 513 514 515 520 521 522 523 524 525 530 531 532 • 533 534 535 540 541 542 543 544 545 550 551 552 553 554 555
2. ВЫВОД ФОРМУЛЫ СООТВЕТСТВИЙ АССОЦИАЦИИ МАТРИЦЫ А СВОИМ НАЗВАНИЯМ Матрицу А, приведенную на стр. 99, можно рассматривать как одну из форм ассоциативной памяти, т. е. такой памяти, в которой адрес информации определяется содержанием инфор­ мации. Элементы матрицы А можно рассматривать как ассоциа­ ции названий, входящих в документ. В матрице А для каждого признака определится строка сходственных по признаку (толерантных по признаку [15]) ассо­ циаций. Общее количество элементов матрицы А, находящихся в одной строке, равно 2 n-M— 1, где п — количество слов (соот­ ветствующих им цифровых кодов) в словаре языка ИПС (в мат­ рице А п = Ь). При фиксированном числе т — количестве слов в элементе матрицы А количество К, толерантных по признаку PiP2 ...PM ассоциаций, равно С” ~мм. Пронумеруем элементы длины т матрицы А, находящиеся в одной строке, т. е. пронумеруем ассоциации с фиксированным количеством букв. Нумерацию легче понять из следующего рас­ суждения. Рассмотрим, например, набор ассоциаций: 012345 012346 012347 012456 012457 012467 013456 013457 013467 014567 023456 023457 023467 024567 034567 123456 123457 123467 124567 134567 234567. Эти ассоциации голерантны по признаку /)5= 4. Удалив из каждой ассоциации признак, получим: 01235 01236 01237 01256 01257 01267 01356 01357 01367 01567 02356 02357 02367 02567 03567 12356 12357 12367 12567 13567 23567 — сочетания по т — I разрядов. Вычтем единицу Из цифры (кода слова) разряда сочетания, если только эта цифра больше значения признака: 01234 01235 01236 01245 01246 01256 01345 01346 01356 01456 02345 02346 02356 02456 03456 12345 12346 12356 12456 13456 23456. Полу­ чили набор сочетаний из п—1 по т—1. На случай длины признака в М слов получили бы сочетания из п—М по т—М. В этой последо­ вательности, которая одно-однозначно соответствует последова­ тельности ассоциаций, рассмотренных в самом начале рассужде­ ния, нумерация производится по формуле (4) *,но исправленной с учетом уменьшения числа сочетаний за счет удаления признака (признаков) и с учетом уменьшения значения разрядов ассоциа­ ций, превышающих значение признака (признаков). Обозначим номер ассоциации в первом наборе (# п )м> где т — количество слов в ассоциации, п — количество слов в сло­ варе, М — количество цифр (кодов слов) в признаке. * См. формулу (4) в приложении. 107
Ш ™ )м — С Т - м fit—м — 2 Сп-1-м-рк. r=i (9) где рг следует выбирать так: f рд = 8Д — /д ; I Рд Ф где tR есть число раз, при которых bn~>Ki (i= 1, 2, М)\ Ki — значение разряда в признаке; бд — значение цифры в /?-м разря­ де ассоциации, не содержащей признака. Пример. Определить номер ассоциации 013456, толерантной по признаку 134. Удалим из ассоциации этот признак. Получим ассоциацию 056. t j — 3, t i — З , ^з = 0. pa. = Si — 1 \ — 3, pa —8j — 1$ — 2. Рз — — h —0. (#1)з = C \ —2 r- C n—i ~ M - p r 1 — 4. Это видно из рассмотрения упорядоченного набора ассоциаций: 012345 12346 012347 013456 013457.................. Нумеруемая ассо­ циация подчеркнута. Общее количество элементов матрицы А, толерантных по дли­ не признака в М слов, т. е. общее количество элементов матри­ цы А, находящихся во всех строках при фиксированной длине признака, равно С%(2п~м — 1). Количество элементов, которые находятся в строке в т~~М— — 1 столбцах, предшествующих столбцу с нумеруемым элемент —м—1 том, равно 2 С'п-м • /= 1 м — 2 С -ьчз, — 1 п г=х 1 строках, предшествующих строке с нумеруемым элементом, рав­ Количество элементов, стоящих в С М но (2***— 1) (С” — 2 С - 1-э, - 1 ) . Т=г 1 Число толерантных элементов длиной в пг слов, находящихся в строке матрицы А, начиная с первого толерантного элемента длиной m и кончая нумеруемым элементом той же длины, опре­ деляется по формуле (9). Тогда номер (Л/^*) элемента (ассо: циации) в матрице А определится формулой м—1 Ю м = 1 Сгп (2n- r- 1) + (2п~м — 1) х Г=1 ( 108 М Сп 2 '= 1 \ Сп- i--fr — 1) + / гп— М — 1 2 т=\ Сп-м 4-
m—M />г (Ю) '-'я 1—М~рд /•=1 где (5,— значение цифры в r -м разряде признака; счет разрядов ведется справа налево, начиная с единицы, рв выбирается в по­ рядке, указанном при описании формулы (9)(. in—Af Cл— М
ЛИТЕРАТУРА 1. Криницкий Н. А., Миронов Г. А., Фролов Г. Д. Программирование, 1968. 2. Калбертсон Дж. Т. Математика и логика цифровых устройств, 1965. 3. Гутер Р. С., Алазарбв В. Л., Усков А. В. Практика программирования, 1965. 4. Феоктистов В. П. Решение инженерных задач на универсальной вычи­ слительной машине «Наири», 1967. 5. Айнберг В. Д., Гавриленко Е. Т., Собсович Л. Л. Программирование для электронных вычислительных машин типа «Урал», 1966. 6. Голышев Л. К. Электронные вычислительные машины, 1963. 7. Савенков В. М. Программирование для ЭЦВМ «Минск-2», 1965. 8. Фадеев А. К-, Фадеева В. Н. Вычислительные методы линейной алгеб­ ры, 1960. 9. Демидович Б. П., Марон И. А. Основы вычислительной математики,' 1960. 10. Бухтияров А. М., Зинкевская Л, М., Фролов Г. Д. Сборник задач по программированию, 1965. 11. Техническое описание ЭЦВМ «Наири», т. I—III, 1966. 12. Мудрое В. И. Алгоритм нумерации сочетаний. «Вычислительная мате­ матика -и математическая физика», 1965, т. V, № 4, стр. 776—778. 13. Михайлов А. И., Черный А. И., Гиляревский Р. ,С. Основы информати­ ки, 1969. ’ 14. Глушков В. М. Введение в кибернетику, 1964. 15. Шрейдер Ю. А. Равенство, сходство, порядок, 1971. _ 16. Сафонов С. Ф., Синельник А. К., Сыромятникова Г. В. Программиро­ вание инженерных задач для ЭВМ «Наири», 1973.
ОГЛАВЛЕНИЕ Стр. Раздел I § 1. Понятия, предшествующие программированию . 3 Раздел II § 1. Способы составления программ......................................................52 § 2. Язык ручного п р о гр а м м и р о в а н и я ............................................. 57 § 3. Использование стандартных п р о г р а м м ..................................... 80 § 4. Язык'автоматического программирования. ЭВМ «Наири» . 84 Раздел III § I. Информационный поиск, общие принципы и понятия . . 97 Приложения: 1. Вывод формулы нумерации сочетаний . . . . 103 2. Вывод формулы соответствий ассоциаций матрицы А своим н а з в а н и я м ..................................................... 107
Сергей Федорович Сафонов ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА В ИНЖЕНЕРНЫХ И ЭКОНОМИЧЕСКИХ РАСЧЕТАХ (Конспект лекций) Отв. редактор В. М. Мельников Редактор Г. П. Жбанникова Технический редактор Т. А. Майорова Корректор Т. В. Полякова ЕО04677. Поди, к печ. 6/II 1974 г. Формат .бОХЭО'ДбПеч. листов 7. Тираж 500 экз. Цена 30 коп. Обл. тип. им. Мяги, г. Куйбышев, ул. Венцека, 60. Заказ 3657.
Цена 30 коп. * 'i i и