Книга
Книга
ВВЕДЕНИЕ
Для развития и перестройки системы управления производством необходим инструмент, способствующий повышению производительности, эффективности и результативности управленческого труда, улучшению его информационного обеспечения. Таким инструментом в настоящее время прочно становится вычислительная техника, которая является одной из главных составляющих научно-технического прогресса (НТП) и определена в качестве одного из приоритетных направлений «Электронизация сельского хозяйства» Комплексной программы НТП стран — членов СЭВ до 2000 года. На XXVII съезде КПСС указывалось на необходимость роста объемов производства вычислительной техники, повышения ее надежности, массового выпуска персональных компьютеров.
■ Внедрение вычислительной техники в управление и обработку информации значительно расширило возможности использования информации для поиска оптимальных управленческих решений. Появилось понятие информационные ресурсы. В системах управления производством на базе средств вычислительной техники создаются специальные службы для управления этими информационными ресурсами.
Электронные вычислительные машины (ЭВМ) широко применяются для решения инженерных и лроизводственно-экономиче- ских задач в отраслях сельского хозяйства. С их помощью ведутся экономические расчеты задач прогнозирования, планирования, регулирования, учета, отчетности, анализа сельскохозяйственного производства. На ЭВМ решаются десятки крупных задач, например перспективного и текущего планирования, размещения и специализации сельскохозяйственного производства, распределения удобрений, размещения .планов государственных закупок сельскохозяйственной продукции, оптимизации состава и использования машинно-тракторного парка, планирования грузоперевозок, размещения ремонтной базы, запасных частей сельскохозяйственной техники, оптимизации структуры посевных площадей в хозяйствах, оптимизации структуры и оборота стада крупного рогатого скота, племенного учета животных, состава кормовых рационов для животных и птиц и др. Создается единая система информационно-вычислительного обеспечения (ИВО) сельского хозяйства.
Предлагаемое учебное пособие предназначено для студентов инженерных факультетов сельскохозяйственных вузов. Для усвоения курса достаточны знания по математике и физике в объеме средней школы. Однако для усвоения некоторых разделов жела-
тельно быть знакомым с интегральным и дифференциальным исчислением, с основами теории вероятностей и линейной алгебры.
Цель книги — дать студенту основы использования ЭВМ для решения задач: студент должен приобрести знания и навыки в подготовке и решении задач на ЭВМ; ознакомиться с основными математическими методами решения инженерных, производственно-технических и экономических задач сельскохозяйственного производства; изучить приемы математической постановки задач, составления алгоритмов и программ на алгоритмических языках.
В главе 1 даны общие принципы построения и работы ЭВМ; ставится задача познакомить студента с тем, из каких основных устройств состоят вычислительные машины и)как в ЭВМ выполняются математические и логические операции.
Практическое изучение использования вычислительной техники для решения задач начинается со 2-й главы, в которой рассматриваются последовательность подготовки и решения задач на ЭВМ, алгоритмизация этих задач, алгоритмы основных информационновычислительных процедур.
В последующих трех главах изложены языки программирования: программирование для микрокалькулятора «Электроника МК-61» (гл. 3); алгоритмический язык Бейсик как язык начинающего программиста для диалогового режима микроЭВМ (гл. 4); инженерный алгоритмический язык Фортран (гл. 5). В соответствии с объемом часов, выделенных для изучения курса, на конкретном факультете предоставляется возможность выбора любого языка.
В главе 6 рассмотрены некоторые характерные численные методы, их алгоритмы и программы для решения ряда инженерных задач.
Завершается книга производственно-техническими задачами и методами их решения на ЭВМ. Показывается, как можно выполнить благодаря 'использованию математических методов первый этап подготовки задач — математическую формулировку задачи (гл. 7). Метод линейного программирования и задачи, решаемые этим методом, изложены более подробно в пп. 7.2 и 73 Кроме того, в этой главе уделяется внимание тому, как те или другие задачи сельскохозяйственного производства сводятся к задачам, решаемым методом теории исследования операций. Для облегчения пораздельного и выборочного усвоения материала авторы сочли возможным излагать отдельные части книги как самостоятельные разделы, не зависимые от других (гл. 3, 4, 5).
Авторы выражают глубокую благодарность члену-корреспонденту ВАСХНИЛ И. И. Мартыненко, ст. преподавателю Е. М. Шу- кайло и канд. физ.-мат. наук С. П. Прохорову за просмотр рукописи и ценные замечания.
Глава 1ОСНОВЫ ЭЛЕКТРОННЫХВЫЧИСЛИТЕЛЬНЫХ МАШИН
Под вычислительной техникой принято понимать технические средства, предназначенные для ускорения и автоматизации процессов решения математических и логических задач, выполнения вычислительных и информационных работ, перевода информационных потоков в производстве на машинную технологию, создания автоматизированных баз данных как основы информационных ресурсов страны.
Вычислительная машина (ВМ) представляет собой комплекс технических устройств с единым, программным управлением. Современные электронные вычислительные машины имеют элементную базу, построенную на электронных микросхемах большой и сверхбольшой степени интеграции. ЭВМ отличаются большими быстродействием, надежностью, объемами памяти, большими вычислительными возможностями, малыми и сверхмалыми размерами, незначительным электропотреблением.
ЭВМ подразделяются на аналоговые (АВМ) и цифровые (ЦВМ) машины. АВМ выполняют вычислительные операции над непрерывно изменяющимися значениями электрических величин и работают по принципу электрического моделирования физических процессов.
Для решения задач на ЭВМ необходимы программа их решения (в простейшем (случае это формула), состоящая из команд (операций), исходная информация (данные), которая обрабатывается этой программой, а также сама ЭВМ (техника).
Код в двоичной системе счисленияКод в двоичной системе счисленияКомбинация импульсовКомбинация импульсовИнформация (в том числе текущие значения переменных и констант) представляется (обрабатывается и хранится) дискретно в виде кодов, т. е. чисел в двоичной системе счисления (см. п. 1.1). Код в двоичной системе в свою очередь реализуется комбинациями импульсов тока, напряжения, отсутствием или наличием проводимости цепи, положительным или отрицательным направлением магнитных потоков в материале:
Код в двоичной системе счисления
Код в двоичной системе счисления
Комбинация импульсов
Комбинация импульсов
Переменные, константы, другая информация
Техника. Главной технической компонентой ЭВМ являютсяТехника. Главной технической компонентой ЭВМ являютсялогические элементы И, ИЛИ, НЕ и др. (см. ниже), которые осу-логические элементы И, ИЛИ, НЕ и др. (см. ниже), которые осу-Логические элементы: ЦИЛЦНЕ, др.Логические элементы: ЦИЛЦНЕ, др.Вычитание,Вычитание,Сложение —•* умножение.Сложение —•* умножение.ществляют логические операции. На базе логических операций выполняется в двоичной системе счисления единственная арифметическая операция— сложение, на основе последней в своюществляют логические операции. На базе логических операций выполняется в двоичной системе счисления единственная арифметическая операция— сложение, на основе последней в своюделениеделениеЧисленные методы вычислительной математи киЧисленные методы вычислительной математи киСложные математические зависимостиСложные математические зависимостиочередь выполняются остальные три операции: вычитание, умножение, деление. К этим четырем операциям сводятся с использованием численных методов все сложные математические действия (рис. 1.1).Программы. Все арифметические и другие операции выполняются в машине последовательно, подобно тому, как это делает человек вручную. Но прежде чем машина выполнит этиочередь выполняются остальные три операции: вычитание, умножение, деление. К этим четырем операциям сводятся с использованием численных методов все сложные математические действия (рис. 1.1).Программы. Все арифметические и другие операции выполняются в машине последовательно, подобно тому, как это делает человек вручную. Но прежде чем машина выполнит этиоперации поставленную математическую задачу, например у=/(х), нуж-операции поставленную математическую задачу, например у=/(х), нуж-
Техника. Главной технической компонентой ЭВМ являются
Техника. Главной технической компонентой ЭВМ являются
логические элементы И, ИЛИ, НЕ и др. (см. ниже), которые осу-
логические элементы И, ИЛИ, НЕ и др. (см. ниже), которые осу-
Логические элементы: ЦИЛЦНЕ, др.
Логические элементы: ЦИЛЦНЕ, др.
Вычитание,
Вычитание,
Сложение —•* умножение.
Сложение —•* умножение.
ществляют логические операции. На базе логических операций выполняется в двоичной системе счисления единственная арифметическая операция— сложение, на основе последней в свою
ществляют логические операции. На базе логических операций выполняется в двоичной системе счисления единственная арифметическая операция— сложение, на основе последней в свою
деление
деление
Численные методы вычислительной математи ки
Численные методы вычислительной математи ки
Сложные математические зависимости
Сложные математические зависимости
очередь выполняются остальные три операции: вычитание, умножение, деление. К этим четырем операциям сводятся с использованием численных методов все сложные математические действия (рис. 1.1).
Программы. Все арифметические и другие операции выполняются в машине последовательно, подобно тому, как это делает человек вручную. Но прежде чем машина выполнит эти
очередь выполняются остальные три операции: вычитание, умножение, деление. К этим четырем операциям сводятся с использованием численных методов все сложные математические действия (рис. 1.1).
Программы. Все арифметические и другие операции выполняются в машине последовательно, подобно тому, как это делает человек вручную. Но прежде чем машина выполнит эти
операции поставленную математическую задачу, например у=/(х), нуж-
операции поставленную математическую задачу, например у=/(х), нуж-
Рис. 1.1. Принцип выпол-нения математических опе-раций на ЭВМ.Рис. 1.1. Принцип выпол-нения математических опе-раций на ЭВМ.(Совокупность операций(Совокупность операцийно разложить на эти операции на этапе подготовки задачи для решения на ЭВМ в следующей последовательности:
Рис. 1.1. Принцип выпол-нения математических опе-раций на ЭВМ.
Рис. 1.1. Принцип выпол-нения математических опе-раций на ЭВМ.
(Совокупность операций
(Совокупность операций
Последовательное выполнение операций на ЭВМ
где Ьй этап ——математическая формулировка задачи в виде определенного выражения y=f(x); 2-й этап ——выражение раскладывается на операции, которые записываются последовательно по мере необходимости их выполнения в виде программы для ЭВМ; 3-й этап ——полученная последовательность операций выполняется на ЭВМ одна за другой. В процессе развития ЭВМ происходит «перекладывание» на ЭВМ самого процесса разложения задачи на операции, а также выполнение ряда комплексов операций параллельно во времени на разных устройствах ЭВМ, оставляя вместе с тем последовательный принцип выполнения операций на самих устройствах.
1.1. АРИФМЕТИЧЕСКИЕ ОСНОВЫ
Системы счисления. Цифровые машины оперируют с числами, выраженными в двоичной системе счисления. Под системой счисления понимают способ представления чисел посредством числовых знаков (цифр). Любая система счисления характеризуется основанием g ——количеством цифровых знаков, используемых для записи чисел. Например, для позиционных систем счисления:
десятичной: д = 10, 忆=。,1, 29;
двоичной: g = 2, К» = 0, 1;
шестнадцатеричной: g = 16, К» =。,1, 29, А, ВF,
где q — основание системы счисления;
Ki — числовые символы, используемые в системе.
В позиционной системе счисления значение цифры (т. е. ее вес) зависит от ее положения (позиции) в числе. Например, в числе 77,7 первая цифра означает, сколько десятков в числе, вторая—сколько единиц, а третья ——сколько десятых долей единицы. Это число можно представить в виде степенного ряда: 77,7 = =7-10* + 7-10° + 7-10-1, где 10 — основание десятичной системы счисления.
В степенной ряд можно разложить число, записанное в любой позиционной системе счисления. По аналогии с разложением числа 77,7 можем записать формулу разложения в общем виде:
К%К〃—1... Ко, К—1 …К—т — К# + К〃т 0“т 十…+ Kd + K°q。+
+ K_iqT + …+Kf(1.1)
где Ke——цифры числа, q ——основание системы счисления.
Используя формулу (1.1), разложим в степенной ряд три следующих числа, записанных соответственно в десятичной (индекс 10), двоичной (индекс 2) и шестнадцатеричной (индекс 16) системах счисления:
9207,5810 = 9 • ЮОО^о 十 2 • ЮО^о 十 0 • Ю^о 十 7・ 1 十5*O,ljo 十8*O,Olio =
и 9 * Ю3 + 2 • 102 + 0 • 101 + 7 • 10° 4- 5 - 10"1 + 8 • 10-2;
1011,01 2 = 1 * Ю002 + 0- 1002+ 1 • 102+ 1 • l2 + 0 -0,12+ 1 • 0,012 =
=1 . 23 + 0 • 22 + 1 • 2i + 1 • 2^ + 0 * 2-1 + I • 2~2 = 1 • 810 + 0 • 410 +
+ 1 • 2io十1 T + 0 • 0,5io + 1 • 0,25]0 = 8十2十1 + 0,25 =11,25jo;
20B9,Fie = 2 . 100016 + 0 • 1001в + В . 1016 + 9 • 1+F • 0,lie = 2 . 163+
+ 0 • 162 + H • 16丄 + 9 ・ 13+15 • 16-1 = 8192 + 176+0,9375 = 8368,9375w
Из примеров видим, что вес одинаковых разрядов числа во всех трех системах имеет одинаковую форму записи. Например, для старшего разряда всех трех чисел ——1000. Однако для десятичной системы ——это ЮООю—103= 1000, двоичной — 10 0 02 = 23 = 8, шестиадцатеричной— 1000ie= 163=4096. Соответственно можно составить ряд весов разрядов для десятичной, двоичной и шестнадцатеричной систем счисления:
... 10000- 1000- 100— 10—1—0,1 —0,01 -0,001 -…,
... 4096 一 2048 — 1024 一 512 — 256 — 128 — 64 — 32 — 16 — 8 — 4 一 2 -
1 -0,5-0,25-0,125^ ....
...4096 — 256 — 16 - 1 — 1/16 — 1/256— ...
Пер евод из одной системы счислен ия в другую. Из приведенных примеров легко установить закономерность
перевода в десятичную систему, используя разложение числа в ряд по степеням основания.
Обратный перевод из десятичной системы счисления в двоичную выполняется по правилу: для перевода целого числа из одной позиционной системы в другую его нужно последовательно делить на основание той системы счисления, в которую оно переводится. Деление ведется до тех пор (и в той системе, из которой осуществляется перевод), пока частное (остаток от деления) не получится меньше основания, на которое число делят. Число в новой системе счисления запишется в виде последнего частного и всех остатков деления, начиная с последнего. Последний остаток (частное) дает старший разряд (цифру) числа.
Пример перевода из десятичной в двоичную систему числа 86ю:
ставший разрядставший разряд
ставший разряд
ставший разряд
Направление чтенияНаправление чтенияXОX1XОX]XОX1XОX]
Направление чтения
Направление чтения
X
О
X
1
X
О
X
]
X
О
X
1
X
О
X
]
Итак, 86ю=10101102.
Для перевода правильной дроби (или дробной части числа) из одной позиционной системы счисления в другую ее надо последовательно умножать на основание той системы, в которую она переводится. Перемножаются только дробные части числа. Дробь в новой системе запишется в виде целых частей получаемых произведений, начиная с первого сомножителя. Переведем из десятичной в двоичную систему дробь 0,3125ю.
3 12 5
2
6 2 5 0
2
2 5 0 0
2
5 0 0 0
2
0 0 0 0
Итак, 03125ю = 0,01012.
При переводе смешанных чисел раздельно переводят целую и дробную части.
Для записи в ЭВМ пораздельно каждой цифры десятичного числа двоичным кодом используется двоично-десятичная система счисления. Каждый десятичный разряд (цифра) записывается независимо от его веса четырьмя десятичными разрядами. В двоичной системе в ЭВМ обрабатывается вся информация. Шестнадцатеричная—для удобства чтения двоичной информации.
Поскольку каждый разряд шестнадцатеричной системы счисления представляется ровно четырьмя разрядами двоичной системы, то перевод из двоичной системы в шестнадцатеричную производится отдельно по четыре разряда соответственно с разбиением от запятой в обе стороны, а из шестнадцатеричной в двоичную —— переводом каждого разряда раздельно. Например, число 1111110, lOlOh разбивается по четыре разряда, начиная от запятой, и крайние группы дополняются нулями до четырех разрядов соответственно:
0111 1110, 1010 1000
7 Е, А 8 ~ в шестнадцатеричной.
Получаем: 1111110,101012=7E,A8i6.
Таблица 1.1
Сложение
Вычитаяие
Умножение
Деление
0 + 0 = 0
04-1 = 1
14-0=1
1 + 1 = 10
0 — 0 = 0 1—0=1 1-1-0
10 - 1 1
0*0 = 0 0.1=0 1*0 = 0 1*1=1
0/0= ?
0/1 =0
1 /0 = ОО
1/1 = 1
Двоичная арифметика. Арифметические действия в двоичной системе счисления выполняются так же, как и в (десятичной (табл. 1.1). Но если в десятичной системе перенос и заем осуществляются по 10 единиц, то в двоичной — только по две единицы, т. е. по величине, равной основанию системы счисления. Так, при сложении в двоичной системе счисления двух единиц в данном разряде будет нуль и появится перенос единицы в старший разряд. Если в старшем разряде нуль, то заем осуществляется в ближайшем более старшем разряде, где есть единица. Единица, занятая в старшем разряде, дает две единицы в младшем разряде, где выполняется действие, а также по единице во всех разрядах между данным разрядом и младшим. В случае деления на нуль (см. табл. 1.1) машина фиксирует некорректную операцию и сообщает об ошибке.
е 1]^2 01а 1ОО1О В2О11Ое 1]^2 01а 1ОО1О В2О11ОооооооXXУмножение100110 11Умножение100110 11100 1100 1 0000 1 001I 1 000 1 I100 1100 1 0000 1 001I 1 000 1 IДеление2 *—Заем110010 10101010 ~10106Деление2 *—Заем110010 10101010 ~10106
е 1]^2 01а 1ОО
1О В2О1
1О
е 1]^2 01а 1ОО
1О В2О1
1О
ооо
ооо
X
X
Умножение
1001
10 11
Умножение
1001
10 11
100 1
100 1 0000 1 001
I 1 000 1 I
100 1
100 1 0000 1 001
I 1 000 1 I
Деление
2 *—Заем110010 1010
1010 ~1010
6
Деление
2 *—Заем110010 1010
1010 ~1010
6
Рассмотрим примеры.
Сложение
1 1 *—Перенос ,10 0 110 十 1 1 0 1 1 0
1 0 11 1 О о
Двоичная система счисления применяется в ЭВМ /потому, что она совпадает с логическим исчислением, имеющим в основании также два понятия: «истина» и «ложь», а также потому, что двоичную цифру легко хранить на электронных элементах с двумя устойчивыми состояниями, где одно состояние будет обозначать 0, а другое — 1.
Формы записи чисел в машинах. В ЭВМ используют естественную (с фиксированной запятой) и нормальную (с плавающей запятой) формы записи чисел.
В естественной форме число представляется в виде целой и отделенной от нее запятой дробной части числа. Для каждой части отводится соответствующее количество разрядов.
При нормальной форме число представляется в виде
N = mqp,(1.2)
где 1>^>0,1—мантисса числа (дробное число); р ——порядок числа (целое число); g ——основание системы счисления.
Порядок р определяет положение запятой в числе и показывает, на сколько разрядов влево (в случае отрицательного порядка) или вправо (в случае положительного порядка) нужно сдвинуть запятую в мантиссе, чтобы получить число в естественной форме. При записи мантиссы опускается нуль целых и запятая. Например, числа +0,275-102 и —0,345-10-1 будут записаны в ячейку памяти, в которой, в частности, для мантиссы отведены четыре разряда, а для порядка числа ——два в следующем виде: +2750+02; ——3450—01. В нормальной форме запись содержит знак порядка числа, порядок, знак и величину мантиссы. Причем знак《плюс》 изображается нулем, а《мннус» — единицей.
Преимуществом нормальной формы является более широкий диапазон представления чисел. Однако нормальная форма требует дополнительных разрядов для хранения порядка числа, и арифметические действия над числами с плавающей запятой выполняют- ю
ся сложнее. Это приводит к увеличению времени для их выполнения и усложнению аппаратуры или программы расчета.
Выполнение арифметических операций методом сложения. Как было сказано, на базе логических элементов непосредственно выполняется лишь операция сложения. Рассмотрим, как на основе сложения производятся остальные арифметические операции.
Операция вычитания в ЭВМ осуществляется с помощью специальных кодов, одним из которых является обратный код.
Обратный код N числа N есть разность, получаемая от вычитания основного числа N из некоторой константы С:
N = C-N,(1.3)
где С — q — g-m;
m ——разрядность мантиссы числа, представленного в нормальной форме.
Например, для двоичной -системы счисления (д=2, /п = 5) получим С = 2— 2-5 = 10,000002 — 0,000012=1,111112.
С использованием обратных кодов разность получают сложением уменьшаемого с обратным кодом вычитаемого, т. е. операция y=Xt — & заменяется операцией
у (или у) =%1 + %2,(1.4)
где Xi — уменьшаемое;
%2 — вычитаемое;
у — разность;
%2, У — обратные коды вычитаемого и разности.
Рассмотрим примеры вычитания в двоичной системе счисления. Примем д=2, /и —5 при Х1>Хг.
—勺= 0,11011С = 1,11111
尤2 = 0,01001尤2 = 0,01001
у =0,10010蔦=1J0110
Как видим, обратный код в двоичной системе счисления отли* чается от самого числа х? заменой единиц на нули и нулей на единицы. В устройствах памяти с двумя устойчивыми состояниями (триггерах) имеются два (противоположных по знаку выхода; если на основном выходе единица, то на втором (инверсном) —нуль и наоборот. В таких устройствах с помощью переключений число снимается с первого (основного) выхода, а его обратный код — с инверсного. Поэтому операцию но (1.3) в машине производить не требуется.
Получив обратный код 元2, выполним операцию вычитания.
.^ = 0,11011
十焉=1,10110
yi = 10,10001
у = 0,1001()
Теперь рассмотрим случай, когда %1<х2-
-%2= 0,11011丄%= 0,10001
Н= 0,10001十君=1,0010。
у —0,01010уг~Г 1О1оГ
у = — 0,01010
Здесь получена разность с единицей в целой части. В машине это автоматически фиксируется как обратный код числа. Само число снимается уже с других (инверсных) выходов триггеров.
Операция умножения в ЭВМ выполняется многократным сложением, а операция деления ——умножением на число, обратное делителю, или многократным вычитанием делителя из делимого.
ЛОГИЧЕСКИЕ ОСНОВЫ
Под логическим элементом ЭВМ понимают электронный элемент интегральной схемы, предназначенный для реализации элементарных логических функций логических переменных, которые могут принимать только два значения:《ложь》(логический нуль) и «истина» (логическая единица). Рассмотрим некоторые основные логические элементы ЭВМ.
Логический элемент 《И》 есть электронная схема с п входами (п=2, 3,...) и одним выходом (табл. 1.2, in. 1). Элемент
Таблица 1.2
Логические элементы и функции
Условное обозначение
Логическая зависимость
1. "И" — конъюнкция (логическое умножение)
X]—
х2
-У
у = X] Ах2 A…Лхп
(у = Х1Х2.. .Хп)
2. "ИЛИ,,~ дизъюнкция (логическое сложение)
Х1-- 勺一
Xl
-у
у = x&Vx2V…Vxn (у = Х1+х2, . . . X”
3. "НЕ- отрицание (инверсия)
x —
Г
у = X
4. "ИЛИ-НЕ"
X1
X2 —
xl
卜
у = Xi Vx2V. . . Vxn (у = Х1+х2+ …+хп)
реализует логическую функцию — конъюнкцию, определяемую по правилам логического умножения (табл. 1.3): функция у истина, т. е. обращается в единицу только в том случае, когда все аргументы хь %2・..,%п истины, т. е. равны единице, в нуль, т. е. ложна,—во всех остальных случаях (т. е. когда хотя бы один аргумент равен нулю, т. е. ложен). Обозначается конъюнкция (логическое умножение) знаком《八》(«.»).
Таблица 1.3
«и> (打52-幻
«или> (修+看-g)
«НЕ»
«ИЛИ-HE»
(修+打-幻
0 -0=0
0 + 0 = 0
0 + 0 = 1
0-1=0
0+1=1
1 =0
04-1=0
1 -0 = 0
1 + 0=1
1 +0 = 0
1.1 = 1
1 + 1 = 1
1 + I = 0
х-0=0
%+0 =尤
x+0=x
%■ 1 =х
х+1 = 1
x+1—0
х-х=х
х+х—х
%+%=元
元•元=0
х+х— 1
x+x—0
Примером логической операции 《И》 служит лекция: лекция состоится тогда, когда придут и студенты, и преподаватель, т. е. событие «лекция» истино, когда составляющие события и «студенты», и «преподаватель» истины. Достаточно любому одному из составляющих событий «студенты» и «преподаватель» быть ложным (т. е. не прийти), событие «лекция» будет ложно (т. е. не состоится).
Логический элем ент 《ИЛИ》 есть многополюсник (электронная схема) с п входами (п=2, 3,...) и одним выходом (см. табл. 1.2, п. 2). Элемент реализует логическую функцию — дизъюнкцию, определяемую по правилам логического сложения (см. табл. 1.3): функция обращается в нуль только в том случае, если все аргументы равны нулю. Во всех остальных случаях она равна единице. Дизъюнкция (логическое сложение) обозначается знаком《V》(《 +》).
Логический элемент 《НЕ》 есть двухполюсник с одним входом и одним выходом (см. табл. 1.2, п. 3). Элемент реализует логическую функцию ——инверсию, определяемую по правилу отрицания: функция равна единице, если аргумент нуль, и нулю, если аргумент единица (см. табл. 1.3). Инверсия обозначается черточкой над аргументом.
Логический элемент «ИЛ И-Н Е» (см. табл. 1.2, п. 4)' реализует сложную логическую функцию по правилу логического сложения с инверсией (см. табл. 1.3). На базе двух элементов «ИЛИ-HE» строятся триггеры (элементы памяти).
Существуют логические элементы с другими логическими функциями.
Триггер — элемент памяти, реализующий функцию запоминания одного двоичного разряда числа или кода. Триггер — это сложный логический элемент с обратными связями, который может находиться в одном из двух устойчивых состояний. На рис. 1.2, а представлена схема триггера, построенного на двух элементах сИЛИ-НЕ», один из входов каждого элемента соединен с выходом другого элемента. Если импульс единицы поступил только на вход %i, т. е.先1=1, %2=0, тогда на выходе верхней схемы «ИЛИ-HE» будет нуль, т. е. у)= 0. По цепи обратной связи этот нуль поступит на вход второй схемы «ИЛИ-HE». Поскольку на входах этого элемента нули, то на его входе будет единица 及=1・ Она поступит на второй вход первого элемента《ИЛИ-HE》. Теперь, если снять единицу со входа %力 то наличие единицы на другом входе этого элемента все равно будет «держать» нуль на его выходе.
Рис. 1.2. Триггер: q — схема триггера на двух элементах «ИЛИ ——НЕ»; 6 ——условное обозначение; в — схема счетного триггера; а ——условное обозначение счетного триггера; %i ——потенциальный вход установки триггера в состояние единицы, х。一то же нуля; хсч——счетный вход; у【一 выход основной; у0 ——то же инверсныйРис. 1.2. Триггер: q — схема триггера на двух элементах «ИЛИ ——НЕ»; 6 ——условное обозначение; в — схема счетного триггера; а ——условное обозначение счетного триггера; %i ——потенциальный вход установки триггера в состояние единицы, х。一то же нуля; хсч——счетный вход; у【一 выход основной; у0 ——то же инверсный
Рис. 1.2. Триггер: q — схема триггера на двух элементах «ИЛИ ——НЕ»; 6 ——условное обозначение; в — схема счетного триггера; а ——условное обозначение счетного триггера; %i ——потенциальный вход установки триггера в состояние единицы, х。一то же нуля; хсч——счетный вход; у【一 выход основной; у0 ——то же инверсный
Рис. 1.2. Триггер: q — схема триггера на двух элементах «ИЛИ ——НЕ»; 6 ——условное обозначение; в — схема счетного триггера; а ——условное обозначение счетного триггера; %i ——потенциальный вход установки триггера в состояние единицы, х。一то же нуля; хсч——счетный вход; у【一 выход основной; у0 ——то же инверсный
Чтобы перевести триггер во второе устойчивое состояние, необходимо подать импульс единицы на вход &. Тогда произойдет ^2=0, a yi=l. Введем в схему дополнительно два элемента «И》・ Соединим их, как показано на рис. 1.2, в. Пусть триггер (элементы 12 и 22) находится в состоянии, когда 加=1,及=0 при 修=0, %2=0・ Подадим на вход 几4 кратковременный импульс 1, т. е. %cq=L Тогда на обоих входах элемента 11 будет 1, так как у= 1, а на втором входе элемента 21 будет 0, так как У2=0・ Элемент 11 пропустит импульс 1 на вход элемента 12, а элемент 21 импульс не пропустит. В результате триггер перейдет в другое устойчивое состояние. Если теперь повторно подать на счетный вход %сч импульс 1, то открыт будет элемент 21, так как ^2=1, импульс 1 пройдет на вход элемента 22 и триггер возвратится в исходное состояние.
На основе рассмотренных элементов строятся другие логические элементы, а также функциональные узлы (блоки) вычислительных машин. Функциональные узлы (регистры, счетчики, дешифраторы, сумматоры) являются основными составными частями устройства управления, арифметического устройства, устройства памяти.
Регистр — это функциональная электронная схема ЭВМ, предназначенная для хранения чисел >или кодов, состоящих из нескольких разрядов, и представляет собой элементарную ячейку запоминающего устройства (ЗУ).
0 Вход0 ВходНа вход триггера Т4На вход триггера Т4
0 Вход
0 Вход
На вход триггера Т4
На вход триггера Т4
б
Рис. 1.3. Счетчик импульсов: 。— схема; 6 — временная диаграммаработы
Счетчик выполняет счет импульсов. В машине счетчики используются, например, для счета выполненных команд, для подсчета циклов, прошедших в программе решения задачи и др. Счетчик состоит из последовательно соединенных триггеров со счетным входом (рис. 1,3).
Дешифратор служит для преобразования кодов, в частности, кода двоичного числа в натуральный ряд чисел; по коду объекта находится (подключается) сам объект. В машинах дешифраторы выполняют операции выбора (селекции, расшифровки) команд по их кодам, ячеек памяти по их адресам, осуществляя коммутацию соответствующих цепей. На рис. 1.4 дана схема простейшего дешифратора на два входа и четыре выхода.
Сумматор является основным функциональным блоком арифметического устройства и служит для суммирования чисел. Суммируются числа по правилам поразрядного сложения с уче-
том переносов в старшие разряды (см. табл. 1.1). Сумматор строится на двух полу сумм атор ах. Функциональная схема полусумматора строится из элементов «ИЛИ»,《НЕ》и двух《И》(рис. 1.5,а).
Если оба слагаемых имеют 1 (&=1, h< = 1), то срабатывают схемы《ИЛИ》и И1, на их выходах будет 1. Тогда на выходе схемы 《НЕ》будет 0, и, следовательно, схема И2 не срабатывает.
ббРис. 1.5. Одноразрядный сумматор: а ——принципиальная схема полусумматора; 6 — принципиальная схема разряда сумматора; Qi,仇一значения t-ro разряда слагаемых; Si ——сумма i-ro разряда; pi+i — перенос в (i*l)-@ разряд; HS——обозначение полусумматора; SM — обозначение сумматораРис. 1.5. Одноразрядный сумматор: а ——принципиальная схема полусумматора; 6 — принципиальная схема разряда сумматора; Qi,仇一значения t-ro разряда слагаемых; Si ——сумма i-ro разряда; pi+i — перенос в (i*l)-@ разряд; HS——обозначение полусумматора; SM — обозначение сумматора
б
б
Рис. 1.5. Одноразрядный сумматор: а ——принципиальная схема полусумматора; 6 — принципиальная схема разряда сумматора; Qi,仇一значения t-ro разряда слагаемых; Si ——сумма i-ro разряда; pi+i — перенос в (i*l)-@ разряд; HS——обозначение полусумматора; SM — обозначение сумматора
Рис. 1.5. Одноразрядный сумматор: а ——принципиальная схема полусумматора; 6 — принципиальная схема разряда сумматора; Qi,仇一значения t-ro разряда слагаемых; Si ——сумма i-ro разряда; pi+i — перенос в (i*l)-@ разряд; HS——обозначение полусумматора; SM — обозначение сумматора
Рис. 1.4. Схема дешифратора
При сложении двух двоичных чисел фактически могут скла* дываться в разрядах не две, а три цифры данного разряда, третья—единица переноса из младшего разряда. Для выполнения подобного сложения используется уже сумматор на три входа,, построенный на двух полусумматорах (рис. 1.5, б).
При .наличии единицы на одном любом входе на выходе будет s^=l, pi+1 = 0. При подаче единицы на два входа в любом сочетании будет Si = 0, р^+1= 1, т. е. единица переносится в следующий разряд. Наконец, при появлении единицы на всех трех входах на выходе будет $£=1,川+『1.
СТРУКТУРА ЭВМ
Для выполнения арифметических и логических операций, хранения информации, ввода в машину и вывода из (нее данных ЭВМ. имеет следующие функциональные устройства (рис. 1.6):
арифметико-логическое устройство (АЛУ), осуществляет арифметические и логические операции, в том числе сравнение чисел между собой и с нулем;
опер ативную память (ОП), выполняет функцию хранения исходных данных, промежуточных и окончательных результатов и программ, непосредственно участвующих в обработке информации;
внешние запоминающие устройства (ВЗУ), служат для длительного хранения больших объемов различной информации, которая непосредственно в заданный момент времени не используется в обработке;
устройство управления (УУ), которое переключает, коммутирует и в целом управляет всеми устройствами ЭВМ согласно заданной
Рис. 1.6. Структурная схема ЭВМРис. 1.6. Структурная схема ЭВМв машине программы;
Рис. 1.6. Структурная схема ЭВМ
Рис. 1.6. Структурная схема ЭВМ
устройства ввода-вывода (УВВ), осуществляют ввод и вывод информации (данных и программ) в машину к из машины.
Через устройство ввода информация (программы, исходные данные) поступает и размещается для хранения в ОП. Информация может вводиться посредством клавиатуры пишущей машинки
или видеотерминала (дисплея), с перфоносителя (перфокарты, перфоленты) через считывающее устройство, с канала связи через приемное устройство аппаратуры передачи данных (АПД), с 1внешних запоминающих устройств.
Из ОН числа (коды) пересылаются для обработки в арифметико-логическое устройство, а результат передается обратно из АЛУ в ОП на хранение. Из программ, хранимых в ОП, коды операций (команд) передаются в устройство управления, где по ним определяется и запускается на исполнение соответствующая хранимая в устройстве последовательность импульсов включения или переключения арифметико-логического и других устройств в режим выполнения соответствующей операции. Исходные, промежуточные и результирующие данные и программы, не используемые в данный момент времени, пересылаются из оперативной памяти во внешние запоминающие устройства. В случае возникновения необходимости в этой информации она перезаписывается обратно из внешней в оперативную память. Результат решения задачи передается из ОП в устройства вывода или во внешние запоминающие устройства.
Арифметико-логическое устройство принимает из ОП числа, получает от устройства управления импульс на выполнение соответствующей операции, выполняет эту операцию над числами (кодами). Полученный результат (передается на хранение в ОП, а признак результата — в устройство управления. Устройство управления связано со всеми устройствами машины, лроизводит управление ими и воспринимает соответствующие сигналы о их работе. Устройство вывода выводит из машины текстовую, цифровую и другую информацию через печатающие устройства, перфораторы (на перфоноситель) или в канал связи.
В современных ЭВМ арифметико-логическое устройство и устройство управления с дополнительным некоторым количеством регистров памяти объединяют в одно общее устройство, которое называют процессором. Процессор, выполненный на интегральных микросхемах (часто просто на одном кристалле — на одной микросхеме), принято называть микропроцессором.
Единицы измерения объемов информации. Для численного определения емкости памяти машин, объемов информации, удобства представления и оперирования с данными в ЭВМ используют следующие единицы информации. Основной машинной единицей информации является байт ——минимальная адресуемая (т. е. имеющая адрес в памяти) единица информации, состоящая из восьми информационных двоичных разрядов. Один двоичный разряд составляет бит информации. Кроме того, для измерения информации в ЭВМ используют полуслово, слово и двойное слово. Между указанными единицами существуют следующие соотношения: 1 бит = 1 двоичная единица; 1 байт =8 бит; 1 слово =4 байта =32 бита; полуслово =2 байта =16 бит; двойное слово =8 байт =64 бита; 1 Кбайт = 1024 байта.
Оперативная память состоит из ячеек типа, например, регистров, содержащих 8, 16, 32 триггера (разряда двоичного числа).
Каждая ячейка памяти имеет свой собственный номер, по которому эта ячейка выбирается, и она подключается к внешним цепям через входную или выходную схему И. Этот номер принято называть адресом ячейки памяти, а дешифратор — селектором адреса.
Адрес в виде, например, 16-разрядного двоичного числа поступает из устройства управления по шестнадцати цепям (шине адресов) в ОП. Имея 16-разрядный двоичный код, можно составить 216=65536 адресов, т. е. выбирать любую ячейку в ОП, состоящую из этого количества ячеек. Разделив полученное число на 1024 байта =1 Кбайт, лолучим емкость ОП в 64 Кбайта. Чтобы теперь по этому адресу (т. е. 16-(разрядному двоичному коду) подключить конкретную ячейку в ОП, адрес в виде импульсов поступает на дешифратор — селектор адреса, с выхода которого подается им* пульс только в одну из 64 Кбайт цепей: 0,1,..., 64 К, идущую на схемы И ячейки с указанным адресом.
Подав по цепям управления в ОП импульс чтения или записи,, можно подключить соответствующую одну из двух схем И, на вход которой подведено число по цепям шины данных. Оперативная память обладает большим быстродействием, обеспечивающим бесперебойную работу АЛУ, с которым она производит непрерывный обмен данными в процессе решения задач. Однако емкость- ОП ограничена. Например, у ЭВМ третьего поколения (ЕС ЭВМ) она составляет от 64 Кбайт до 16 Мбайт. Быстродействие ОП —— миллионы операций в секунду.
Внешние запоминающие устройства непосредственно не участвуют в вычислительном процессе и служат для хранения исходных данных, программ, промежуточных и окончательных результатов, т. е. наборов данных, которые по мере необходимости используются в машине или выводятся из нее на выводные устройства. ВЗУ обладают большей емкостью, но малым быстродействием выборки и записи данных по сравнению с ОП. В качестве внешних запоминающих устройств используются устройства с последовательным доступом ——накопители на магнитной ленте (НМЛ) катушечного или кассетного типа, устройства с прямым доступом — накопители на магнитных дисках (НМД) и барабанах (НМБ). Накопители на дисках могут быть в виде многодискового пакета, кассетного диска или гибкого диска.
Накопители на магнитных дисках пакетного типа имеют емкость—7,25; 29; 100 или 200 Мбайт со временем доступа 55—90 мс. Накопители на гибких магнитных дисках имеют емкость от 3,2 Мбит при одном диске до 12,8 Мбит при двух дисках.
Устройство управления, имея генератор тактовых импульсов и последовательно переключая адреса ячеек памяти, где в счетчике хранятся команды программы, обеспечивает автоматическое решение задачи по этой программе. Это достигается-
выработкой необходимых командных сигналов в определенные моменты времени согласно выполняемой программе и рассылкой их по всем устройствам машины. Устройство управления включает (рис. 1.7): счетчик адресов команд (СК), устанавливающий адрес команды, подлежащей выполнению; регистр адреса (РА), с которого подается адрес в ОП (адрес команды или адрес данных);
Рис. 1.7. Структурная схема устройства управленияРис. 1.7. Структурная схема устройства управлениярегистр команды (РК), в который пересылается код выполняемой команды из ОП в дешифратор команд (ДШК), расшифровывающий операцию, подлежащую выполнению по данной команде, а также конкретные схемы управления выполнением каждой команды. Перед выполнением программы в счетчик команд записывается адрес первой команды программы. После выполнения этой команды (при естественном порядке следования команд) в счетчик прибавляется единица, и тем самым получают следующий по порядку адрес команды и т. д. Содержимое счетчика команд (т. е. адрес команды) поступает через РА в дешифратор адреса ОП. В результате из
Рис. 1.7. Структурная схема устройства управления
Рис. 1.7. Структурная схема устройства управления
соответствующей ячейки основной памяти извлекается код команды, предназначенной для выполнения.
Этот код пересылается в РК, а затем на дешифратор ДШК. Последний включает конкретную схему управления выполнением данной команды, которая переключает соответствующие устройства машины в заданной последовательности.
УстройстваУстройстваввода-вывода данных обеспечиваютвза-
Устройства
Устройства
имодействие ЭВМ с пользователем
(человеком) или управляемым(человеком) или управляемым(контролируемым) этой ЭВМ объектом.
(человеком) или управляемым
(человеком) или управляемым
Алфавитно-цифровые печатающие устройства (АЦПУ) выводят на бумагу данные. Они делятся на две основные группы: последовательные (выводят на бумагу знак за знаком) и построчные (параллельные), которые выводят на бумагу сразу всю строку или ее часть.
Построчные АЦПУ имеют (в зависимости от марки устройства) скорость печати от 200 до 1100 строк/мин, набор символов — 64; 84; 96, ширину строки — 80; 120; 128; 132; 160 знаков.
Текстовые и графические дисплеи ——это устройства отображения текстовой и графической информации на экране электронно-лучевой трубки. Для ввода данных дисплей имеет пульт с клавиатурой с группой клавиш вводимых символов и группой клавиш управления дисплеем. Дисплеи предоставляют самые широкие возможности для индивидуальной работы пользователя в диалоговом режиме при -программировании и отладке программ, при использовании информационно-поисковых и справочных систем, при автоматической обработке документации, редактировании текста, в системах автоматизированного проектирования.
Информационная емкость экранов — от 240 до 2000 знаков. Текст на экране формируется в строки различной длины. Количество символов в наборе — 64; 96; 256. Формат экранов—16, 72, 80 на 80, 72, 24, 16 позиций.
Управление дисплеем производится с помощью специальных клавиш функционально-символьной клавиатуры и специального светового знака на экране, который называется курсором. Курсор постоянно присутствует на экране, но не занимает знакоместа, а указывает только позицию, в которую заносится символ. С помощью управляющих клавиш курсор может перемещаться в любую позицию.
В набор символов текстовых дисплеев входят русские и латинские буквы, цифры, специальные знаки и служебные символы.
Графопостроители ——устройства вывода на бумажные носители графической и текстовой информации ^машиностроительные, строительные чертежи, метеорологические карты, электрические схемы, графики, кривые и др.). Графопостроители бывают рулонного и планшетного типов. Размеры рабочих лолей: 390X600, 841X1600, 1600X1200 мм и др.
Существуют и другие устройства ввода-вывода данных: ввода графической информации, ввода с документа, с голоса, пультовые пишущие машинки для ввода-вывода и др.
14 КРАТКИЕ СВЕДЕНИЯ ОБ ЭВМ
ЭВМ различают по назначению, вычислительным возможностям, объему памяти, быстродействию, конструкции, количеству подключаемых периферийных устройств и другим параметрам. В СССР и странах СЭВ выпускают следующие классы ЭВМ: Единую систему электронных вычислительных машин (ЕС ЭВМ); систему малых ЭВМ (СМ ЭВМ); микроЭВМ; микрокалькуляторы и, кроме того, в системах автоматизации используются микропроцессоры как основное устройство ЭВМ. '
Единая система электронных вычислительных машин представляет собой семейство (ряд) машин общего назначения с достаточно широким диапазоном по производительности, емкости памяти, объему периферийных средств. Машины построены на единой структурной и микроэлектронной базе, имеют совместимое программное обеспечение, единый унифицированный набор внешних
запоминающих устройств и устройств ввода-вывода. ЕС ЭВМ предусматр ивает многопрограммный режим работы, т. е. может практически одновременно выполнять несколько видов работ и обслуживать несколько абонентов (пользователей) по общим или их индивидуальным программам. Машинный комплекс ЕС ЭВМ состоит нз центрального вычислителя (процессора) (ЦП), основной памяти (ОП), селекторных (СК) и мультиплексного (МК) каналов связи (ввода-вывода), а также внешних запоминающих устройств — НМД, НМЛ и устройств ввода-вывода, связанных с каналами через устройства сопряжения (УУ) (рис. 1.8).
Линии связи
Рис. 1.8. Структура ЕС ЭВМ: ЦП ——центральный процессор; ОП —— основная (оперативная) память; СК ——селекторный канал; МК —— мультиплексный канал; УУ ——устройство управления группой внешних устройств; НМД — накопитель на магнитных дисках; НМЛ — накопитель на магнитных лентах; ПФК — перфокарточное устройство; ПФЛ ——перфоленточное устройство; АЦПУ — алфавитно-цифровое печатающее устройство; ПТД—процессор телеобработки данных; Д — дисплей (терминал); АПД — аппаратура передачи данных (модем)
Центральный процессор вырабатывает синхронизирующие и управляющие сигналы, с иомощью которых координируется работа устройств, блоков и узлов машины. Основная оперативная память принимает, хранит и выдает данные (команды, операнды),
участвующие в ближайшем ряде операций. Обращение процессора к памяти происходит независимо от работы устройств ввода- вывода.
Каналы ввода-вывода осуществляют функции ввода-вывода информации всех периферийных устройств независимо от принципа их действия и формы представления в них информации автономно от процессора. Резкое различие по скорости работы процессора и периферийных устройств привело к выделению функции управления периферийными устройствами из процессора и передаче их каналам ввода-вывода, придав им автономность работы от процессора. Чтобы процессор не лростаивал во время ввода-вывода, к нему подводят по медленно действующим каналам данные сразу от нескольких абонентов. Процессор по программе-диспетчер последовательно подключает рабочие программы и соответствующие им каналы с исходными данными. Выполнив порцию расчетов, процессор подключает исходные данные следующего абонента и его программу и т. д. Если во время выполнения рабочей программы потребовался обмен информацией между основной памятью и периферийным устройством (операция ввода-вывода), процессор посылает в канал соответствующую команду и продолжает работу по другой рабочей программе. Как только канал подготовился к приему или выдаче информации, процессор осуществляет этот обмен, предоставляя дальнейшее управление самому каналу, Таким образом, процессор вместе с основной памятью успевает 'практически «одновременно» обслуживать несколько абонентов, для которых переключения рабочих программ фактически не заметны.
В зависимости от скорости работы периферийных устройств ввода-вывода используются селекторные и мультиплексные каналы.
Селекторный (блокмультиплексный) канал подключается через групповое устройство управления к группе быстродействующих периферийных устройств (внешним запоминающим устройствам) и передает информацию от одного из этих устройств (или к этому устройству) до тех пор, пока не будет передан заданный объем данных. Только после этого к селекторному каналу может быть подключено другое периферийное устройство.
Мультиплексный (байтмультиплексный) канал предназначен для одновременной работы с несколькими медленно действующими периферийными устройствами ввода-вывода по принципу по следовательной побайтной передачи информации. После передачи одного байта информации из одного периферийного устройства канал подключается к другому периферийному устройству и т. д.
Единая система ЭВМ, разработанная странами — членами СЭВ (СССР, ВНР, ЧССР, НРБ, ПНР, ГДР), состоит из нескольких моделей, отличающихся быстродействием, емкостью памяти, составом внешних устройств.
К настоящему времени ЕС ЭВМ прошла три этапа развития: первая очередь («Ряд-Ь: ЕС 1020, ЕС1030 и др.* модернизация первой очереди (ЕС 1022, ЕС 1033 и др.) и вторая очередь («Ряд-2»).
Машины второй очереди отличаются более повышенной производительностью, расширением вычислительных возможностей, повышенной емкостью памяти основной и внешней, более развитой номенклатурой устройств ввода-вывода, а также элементной базой и набором программных средств. Машины первого этапа третьей очереди ЕС ЭВМ: ЕС 1036, ЕС 1046, ЕС 1066.
ЕС ЭВМ имеют развитую систему программного обеспечения (ПО), в которую входит комплекс управляющих, прикладных и вспомогательных программ, обеспечивающих эффективное исполь* зование технических средств для решения задач обработки данных практически любого применения.
Основными частями ПО являются операционные системы, комплексы программ технического обслуживания и пакеты прикладных программ. Ядро ПО ЕС ЭВМ составляют две операционные системы: дисковая операционная система ДОС ЕС (для моделей с памятью 64—128 Кбайт) и операционная система ОС ЕС (для моделей с памятью 128——8192 Кбайта).
Операционная система состоит из управляющих и обрабатывающих программ. Управляющие программы обеспечивают автоматическое управление вычислительным процессом, обрабатывав ющие — производят отладку программ пользователей, записанных на алгоритмических языках, редактирование, трансляцию и выполнение этих программ.
Комплекс программ технического обслуживания для различи ных моделей ЕС ЭВМ обеспечивает возможность комплексной и автономной наладки технических средств, проведения профилактического тестирования, а также классификации, протоколирования и локализации места отказа в ЭВМ.
Пакеты прикладных программ (ППП) ориентированы на решение заданного класса задач пользователей. Такими классами могут быть типовые научные задачи, экономические задачи, инженерно-технические задачи, информационные задачи.
Система малых электронных вычислительных машин предназначается преимущественно для использования в качестве систем обработки данных, для автоматизации управления 1производствен- но-технологическими процессами и агрегатами. Модульный принцип СМ ЭВМ позволяет компоновать различные конфигурации управляющих вычислительных комплексов для большого ряда областей применения в качестве систем сбора, подготовки <и обработки данных на предприятиях и в организациях; систем автоматизации научных экспериментов при испытаниях; систем автоматизированного управления производственно-технологическими процессами нижнего и среднего звеньев управления; средств автоматизации расчетов научно-технических и экономических задач, концентраторов и коммутаторов сообщений в многомашинных вычислительных системах.
Семейство СМ ЭВМ включает ряд машин СМ4, СМ4/20, СМ1630, СМ 1600, СМ1420, СМ 1800 и др., имеющих производительность от 250 до 1000 оп./с и емкость ОП от 64 до 256 Кбайт в за-
висимости от модели машин. Машины имеют набор операционных систем ОС: перфоленточную операционную систему ПЛОС на базе языка ассемблера в однопрограммном режиме; дисковую операционную систему ДОС для пакетного и диалогового режимов; операционную систему реального времени ДОС РВ в мультпро- граммном режиме; систему реального времени ФОБОС для создания конкретных версий ОС проблемно-ориентированных комплексов; операционную систему РАФОС как базовую систему реального времени; операционную систему реального времени ОС РВ для широкого класса задач управления в реальном масштабе времени; операционную систему разделения временных ресурсов ДОС РВ для одновременного обслуживания удаленных пользователей; операционную систему коллективного пользования ДОС КП для работы с большим числом видеотерминалов, подключенных через аппаратуру передачи данных; диалоговую многопультовую систему ДИАМС, ориентируемую на управление базами данных и решение информационно-логических задач.
В состав ОС включен ряд алгоритмических языков: ассемблер, Фортран, Бейсик, Кобол и др.
В комплекс пакетов прикладных программ входят: системы телеобработки данных СТОД, управления базами данных СУБД; пакет программ машинной графики ПМГ; пакет для задач обработки экономической информации ДИПЭК; пакет использования данных для получения справок и отчетов ФАБРИН; пакет методов численного анализа ЧАП; пакет статистических задач ПАСТ; пакет задач оптимизации ОПТИМУМ; пакет сетевых методов ПАСЕП; система имитационного моделирования СИМФОР; пакет задач 'планирования и управления производством ПЭКО; пакет задач вычислительной математики НТР и др.
На базе СМ ЭВМ создан ряд вычислительных и управляющих комплексов: системы автоматизированного проектирования АРМ-М (автоматизированное рабочее место специалиста машиностроения), АРМ-Р (то же, специалиста по радиоэлектронике), вычислительные двухпроцессорные комплексы СМ1410 и СМ 1600.
МикроЭВМ «Электроника» предназначены для решения широкого класса инженерных, экономических задач, обработки информации. Они могут служить персональными микрокомпьютерами, а также входить в системы управления технологическими процессами. Ряд микроЭВМ «Электроника» включает ЭВМ «Электроника-60», «Электроника-100/16», «Электроника-100/25», «Электроника НЦ》,«Электроника С5》,«Электроника К1》,микроЭВМ семейства СМ 1800. МикроЭВМ «Электроника» совместимы по набору команд с СМ ЭВМ.
Диалоговые вычислительные комплексы (ДВК)—это универсальные персональные микрокомпьютеры. Область применения определяется заложенным в машину пакетом прикладной программы: домашний компьютер, средство обработки текстов, инженерные расчеты, информационно-справочные системы, рабочие места
САПР, контроллеры в системах автоматики. Языки программирования: Бейсик, Фортран, Фокал.
МикроЭВМ семейства СМ1800 предназначены для систем автоматизации: систем централизованного контроля, в качестве терминальных устройств, контроллеров. МикроЭВМ комплектуются различными внешними устройствами ввода-вывода, устройствами сопряжения с объектом, внешними запоминающими устройствами.
Программное обеспечение включает тестовые программы, операционные системы, пакеты прикладных программ, включая пакет «Экономика» для решения экономических задач, малую информационно-поисковую систему, библиотеку стандартных программ. Операционные системы представляют возможность программировать на языках ассемблера и ПЛ/М, Фортран, Бейсик.
МикроЭВМ «Искра-226» предназначена для решения широкого круга инженерных и экономических задач в диалоговом режиме, для создания информационно-справочных и поисковых систем, она может работать в качестве терминала в сети телеобработки данных и др. Объем оперативной памяти——128 Кбайт. МикроЭВМ комплектуется кассетным накопителем на магнитной ленте, гибким магнитным диском.
Контрольные вопросы
Что такое системы счисления, какими параметрами характеризуются, какие нз них применяются в ЭВМ. и почему?
Как переводятся числа нз одной системы счисления в другую?
Покажите на примере, как выполняются арифметические действия в двоичной системе счисления?
В какой форме представляются числа в ЭВМ? Дайте сравнительную характеристику этих форм.
Как выполняется операция вычитания в ЭВМ? Что такое обратный код числа и как он получается?
Что такое триггер и как его реализовать на двух элементах «ИЛИ — НЕ»? Как получить счетный триггер?
Как работают и каково назначение в ЭВМ счетчика, регистра, дешифратора?
Расскажите, как работает полусумматор и сумматор?
Какие основные устройства ЭВМ, нх назначение и как они соединены в блок-схеме ЭВМ?
В каких единицах измеряются объемы информации в ЭВМ?
Какие типы современных ЭВМ Вы знаете и какими параметрами они характеризуются?
Глава 2
ПОДГОТОВКА ЗАДАЧ ДЛЯ РЕШЕНИЯНА ВЫЧИСЛИТЕЛЬНЫХ МАШИНАХ
2.1. ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ
Прежде чем решать задачу на машине, необходимо разложить ее на простые операции и задать последовательность их выполнения, т. е. программу. Рассмотрим такое разложение на примере.
Пример 2.1. Формируя задачу для решения на ЭВМ, мы свели ее к следующему математическому выражению:
д=(〃炉+ Ь)/с,(2.1)
где у — искомая величина ——функция (найдя ее численное значение, тем самым решим поставленную задачу);
х — аргумент ——независимая переменная, которая задается и по величине которой находится значение функции у;
а, Ь, с — коэффициенты (константы) — постоянные величины.
Что нам нужно, чтобы найти функцию у, и как будем ее искать без машины? Естественно, нужно: 1) задать 'коэффициенты а, Ь, с и присвоить аргументу х численные значения. Пусть а = 7,9; 6 = = 3,2; с=0,4; х = 0,1; 2) последовательно выполнять арифметические операции согласно выражению (2.1).
Таблица 2.1
Номера дейст-
Участвуюцще
Действие (операция)
числа
Резуль-
Коммента-
ВИЙ
1-е
2-е
Умножение
%
pi — ax
Умножение
%
Р2
Р2=Р1%
Сложение
Ь
Рз
Рз = Р2+Ь
Деление
с
У
У=Рз/с
Запишем эту последовательность в виде табл. 2.1. Заметим, что в каждой операции будут участвовать два числа (две величины) и будет лолучен свой результат. Обозначим эти промежуточные результаты через .,「2, Рз・ В последнем столбце таблицы запишем выражения, по которым получаем эти результаты.
Такой же принцип решения заложен и в машину. Машине также нужно задать численные значения коэффициентов и аргумента
и выполнить ту же последовательность операций аналогично табл. 2.1. Разница состоит лишь в том, что для человека эти данные и последовательность операций можно записать на бумаге, а для машины их нужно заложить в ячейки оперативной памяти, предварительно задав адреса ячеек памяти для численных значений исходных данных и каждой операции из табл. 2.1.
Зададим произвольно и зашлем каким-то образом численные значения коэффициентов и аргумента в ячейки памяти со следующими адресами:
а = 7,9 в ячейку с адресом 0175,
b = 3,2 》 》 0174, с = 0,4 » » 0176, х = 0,1 》 》 0172.
Для операций также зададим адреса четырех ячеек памяти (по одной на операцию): 0035, 0036, 0037, 0038.
Программа в кодах машины. Поставим себе вопрос, что нужно задать машине ino каждой строчке табл. 2.1, чтобы она автоматически могла выполнить операцию? Очевидно, следующее: 1) какое действие должно выполняться в этой операции; 2) где (т. е. в какой ячейке памяти) взять первое участвующее число; 3) то же —второе участвующее число; 4) куда поместить полученный результат. А результат можно поместить только в какую-то ячейку памяти.
Поскольку в машине вся информация хранится в кодах, то для обозначения каждой операции должен быть принят определенный код. Пусть для некоторой ЭВМ приняты следующие коды: 01—сложение, 02 — вычитание, 03 — умножение, 04 — деление.
Мы уже знаем, где взять участвующие числа, нужно просто указать адреса ячеек памяти этих величин. А вот куда поместить результат ——нам нужно назначить дополнительные ячейки памяти. Поскольку каждый результат р「р2 и рз нужно хранить только на период до следующей операции, то на все эти результаты, а также и на искомую функцию у можно попеременно использовать одну и ту же ячейку памяти. Отведем для всех этих результатов ячейку памяти с адресом 0177.
Теперь каждую строчку (операцию) можно записать в виде адресов ячеек памяти и кодов операций со структурой, аналогичной табл. 2.1. В позицию 1 запишем адрес операций (команды); в позицию 2 — код операции; в позицию 3 и 4 — адреса участвующих чисел; в позицию 5 — адрес результата (табл. 2.2, раздел I).
В результате каждая строчка будет состоять из кода операции и четырех адресов ячеек памяти. Согласно 1-й строчке в ячейку с адресом 0035 будет записано: 03 0175 0172 0177; по 2-й строчке ячейка с адресом 0036 будет содержать: 03 0177 0172 0177 ит. д.
Такая запись и есть мамш*на兄 программа выполнения этих четырех операций. Каждая строчка в этой программе (столбцы 1—5, табл. 2.2) называется командой. Команды в этой программе выполняются последовательно одна за другой. А чтобы автоматически переходить от одной команды к последующей, необходимо
их записывать в последовательные по адресам ячейки памяти: 0035, 0036 и т. д. Машина, имея в устройстве управления счетчик команд (см. рис. 1.7), может переключать лишь в простой последовательности ячейки оперативной памяти. •
Таблица 2.2
Разделы
Адрес команды
Код операция
Адрес чисел
Адрес результата
Коммента-
6
1-е
2-е
1
2
3
4
б
I
0035
0036
0037
0038
03
03
01
04
0175
0177
0177
0177
0172
0172
0174
0176
0177
0177
0177
0177
LP+b
У^Р1С
II
к + 1
к + 2
к Ц- 3
к Ц- 4
03
03
01
04
а У
У
У
X X
Ь с
У У
У У
у=а* 片" gng+力 y^ylc
ш
0034
0035
0036
0037
0038
0039
05
03
03
01
04
06
0175 0172 0172 0174
0176 0177
Выполнение программы в машине. Чтобы выполнить участок программы, представленный в табл. 2.2, необходимо установить на счетчике команд (СК) адрес первой команды 0035 и запустить машину (подключить генератор тактовых импульсов). Устройство управления (УУ) (см. рис. 1.6) последовательно передаст этот адрес в ОП и подключит выход ячейки 0035 к чтению содержимого этой ячейки, затем перешлет код 03 в устройство управления, где он расшифруется и команда умножения будет передана в АЛУ — устройство будет переключено на выполнение операции умножения. Следующим тактом из ячейки считается код ——адрес 0175. По этому адресу откроется ячейка 0175 и первое число, т. е. а пересылается в АЛУ. Ло следующему такту аналогично считывается адрес 0172, и btoj:」е число 尤 засылается в АЛУ. Следующим тактом устройство управления запускает АЛУ на выполнение операции умножения и получение результата. После окончания работы АЛУ следующим тактом из ячейки 0035 ОП считывается последний адрес 0177, и результат засылается в эту ячейку. Следующим тактом засылается импульс (единица) в счетчик команд, и устройство управления переключается на чтение ячейки с адресом 0033, т. е. выполнение второй команды в аналогичной последовательности по тактам. После выполнения всех четырех команд в ячейке памяти с адресом 0177 будет находиться искомый результат у.
Условная запись команд и операций* Для пояснения действий, выполняемых в каждой команде, в столбце «Комментарий» (см. табл. 2.2) дана условная запись этих действий, в которых адреса ячеек условно обозначены величинами, хранимыми в этих ячейках. Эти записи можно читать следующим образом: первая команда — величина, хранимая в ячейке а, умножается на величину из ячейки % и результат засылается в ячейку р; вторая команда — величина, хранимая в ячейке р, умножается на величину из ячейки х и результат засылается вновь в ячейку р вместо старого результата и т. д.
Во II разделе табл. 2.2 приведена условная запись программы, в которой для простоты написания произведена аналогичная замена значений адресов их буквенными обозначениями тех величин, которые хранятся в этих ячейках. Причем ячейка памяти с адресом 0177, в которой попеременно хранятся промежуточные результаты и искомая функция, обозначена через у. А в столбце «Комментарий» вместо стрелки поставлен знак равенства, означающий знак присваивания.
Программа одноадресной машины. Если теперь внимательно посмотреть на 3-й и 5-й столбцы I раздела табл. 2.2, то может возникнуть вопрос, а нельзя ли объединить эти два столбца и тем самым уменьшить длину записи команды? И более того, если бы удалось как-то обойти несовпадение адресов 0175 и 0177 в 1-й команде, то нельзя ли вообще не записывать в каждую команду этот один и тот же адрес? Оказалось, что сделать это можно, но только используя дополнительную ячейку памяти, специально выделенную и связанную каким-то образом с АЛУ. Назовем эту ячейку аккумулятором А. В эту ячейку вначале засылается одна из двух участвующих в операции величин, а вторая берется из ячейки, адрес которой указывается в команде. Полученный результат засылается в эту же вспомогательную ячейку вместо первого числа. А чтобы обойти несовпадение адресов 0175 и 0177 в 1-й команде, вводят дополнительную команду засылки числа в аккумулятор А из ячейки с адресом 0175. Дадим код этой команде — 05. Запишем эту команду в ячейку 0034. Наконец, чтобы результат уже иметь в ячейке, отведенной под искомую функцию у, с адресом 0177, введем еще одну дополнительную команду пересылки числа из аккумулятора А в ячейку 0177. Дадим код команды — 06 и отведем под нее ячейку 0039. Таким образом, мы получили программу с командами, которые содержат адрес только одной ячейки (см. табл. 2.2, III раздел). Машины, работающие по таким программам, называют одноадресными в отличие от трехадресных, пример программы для которых представлен в I разделе табл. 22
В составленном участке лрограммы (табл. 2.2) содержатся только команды арифметических операций и пересылки величин в аккумулятор и из аккумулятора. Чтобы теперь закончить программу, введем в нее обязательные следующие команды: 1) ввод исходных данных, т. е. численных значений а, Ь, с; 2) присвоение 30
начального значения аргументу х; 3) вывод результата из машины, например, на печать; 4) останов машины (отключение генератора тактов).
С учетом этих команд запишем по пунктам последовательность их выполнения в законченной (полной) программе. При этом по
следовательность арифметических операций запишем одним пунктом—«вычислим», поскольку они уже расписаны в программе (в табл. 2.2). Эта последовательность будет иметь вид:
Ввод а, Ь, с;
Присваивание х = 0,1;
Вычисление у=(ах2 + Ь)\(2.2)
Печать х, р;
Останов.
В приведенной последовательности согласно п. 1 в машину вводятся исходные данные ——значения констант а, Ь, с; в п. 2 аргументу х присваивается начальное значение *=0,1; в п. 4 выводятся на неаать как аргумент %, так и полученная функция у. Заканчивается последовательность командой «Останов» (п. 5). Имея такую последовательность, легко написать уже полную программу, часть из которой дана в табл. 2.2. Если учесть, что для выполнения п. 3 требуется шесть команд (в варианте одноадресной машины), а остальных пунктов —,по одной команде, то рассматриваемая программа будет состоять из 10 команд.
В ЭВМ переход от одной команды (т. е. одного адреса команды) к другой (другому адресу) выполняется автоматически с помощью счетчика команд путем прибавления каждый раз единицы к адресу выполненной команды. Такой порядок называют естественным, а команды выполняются в том порядке, как они записаны в памяти, — одна за другой. В случаях, когда необходимо нарушить этот естественный порядок, используются специальные команды передачи управления.
Условные и безусловные переходы. Чтобы показать необходимость в таких командах, усложним задачу, рассмотренную в примере 2.1.
Пример 2.2. Для задачи примера 2.1 будем определять несколько значений функции у= (ах2+&)М при изменении аргумента х на интервале 0,1^х^2 с шагом Дх=0,1. В этой задаче количество л повторных определений у по приведенной формуле будет определяться начальным 尤нан, конечным хКон значениями аргумента и его шагом Дх по выражению
п = Jkoh — Xm + 1 = 2-0,1 + 1 = 20. (2.3) 0,1
В соответствии с условием задачи вытекает следующая последовательность операций: ввод исходных данных Q, Ь, с; присваивание аргументу начального значения 尤=0,1; вычисление у по формуле (2.1); печать результата у и значения аргумента х, при котором получен у; изменение значения % на шаг, а затем снова вычисление у ио формуле (2.1) и т. д. до значения *=2. Запишем эту последовательность аналогично последовательности (2.2):
Вв. а, b, с;
Прис. х=0,1;
Выч. z/= (ах2 4-6)/с;
Печ.居 у;
Изм. х на 0,1;尤=0,2;
Выч. у;
(2.4)(2.4)Печ.居 у;
(2.4)
(2.4)
Изм. х на 0,1;尤=0,3;
Изм. * на 0,1; х=2,0;
Выч. у;
Печ. х, у;
Ост.
Теперь по последовательности (2.4) легко составить программу в кодах машины. Можно сосчитать, сколько команд будет содержать эта программа. Если учесть, что пункты, по которым вычисляется у, содержат по 6 команд, а остальные по одной, то общее количество команд по 62 пунктам будет 62+(8 — 1) Х2О= = 162 команды! Таким образом, небольшое изменение условия задачи вызывает значительное увеличение объема программы — потребуется 162 ячейки памяти вместо W ячеек для программы, выполняемой по поеледовательности (2:2). Как уменьшить объем программы?
Если внимательно посмотреть на последовательность (2.4), то заметим, что 20 раз повторяются одни и те же операции: Выч., Печ., Изм. Причем операцию «Изменить》можно заставить машину выполнять по выражению
(2.5)(2.5)х = х + Ах,
(2.5)
(2.5)
реализующему математическую зависимость 尤计『修 + Аг, где i= =1, 2,..., 20 в машине с отведенной под % одной ячейкой памяти. Запишем выражение (2.5) с учетом того, что Дх=0Д : х=х+0,1 в пгт. 5, 8, ♦…,59.
Итак, чтобы избежать 20-кратное повторение к._. 3, 4 и 5, очевидно, необходимо в п. 5 записать: 《Изм. %=% + 0,1》,а после п. 5 каким-то образом возвратиться к п. 3. Такая операция в машине выполняется с помощью специальной команды — команды перехода, в которой должно быть указано, куда требуется перейти. В нашей последовательности в этой команде должен быть указан п. 3, а в программе — адрес команды, куда совершается переход. С учетом сказанного запишем поеледовательность решения задачи:
Вв. а, Ь, с;
Прис. х=0,1;
Выч. у=(аг2+6)/с;
(2.6)(2.6)Печ.居 у;
(2.6)
(2.6)
Изм. х=%+0,1;
Пер. к п. 3;
Ост.
Таким образом, последовательность решения задачи сократим до 7 пунктов вместо 62 в последовательности (2.4). Однако, получив такое сокращение в последовательности (2.6), мы шосле того, как рассчитаем у при %=2, не получим останова машины (перехода к п. 7). По такой последовательности машина не выйдет из замкнутого круга операций по пп. 3—4—5—6 и будет считать до х= 8.
Выйти из зацикливания можно, если ввести в систему команд еще одну специальную команду — команду перехода только при выполнении задаваемого условия. В такой каманде нужно указывать, куда перейти и при каком условии. В нашем случае операция п. 6 запишется:
«6. Переход к п. 3, если х<2».
Здесь в конце каждого прохода цикла значение % будет сравниваться с конечным значением 2, и если х^2, то переход к п. 3 будет выполнен. И как только станет х>2, переход произойдет к п. 7. .
Исходя из рассмотренного следует, что в программах существуют три вида переходов:
естественный осуществляется счетчиком команд устройства управления (см. рис. 1.7) путем изменения на единицу адреса команды. Обязательным условием здесь является запись команд по последовательным адресам;
безусловный осуществляется по специальной команде. Эта команда изменяет естественный порядок выполнения команд и может передавать управление на любую команду вперед по программе или, наоборот, назад путем перевода счетчика команд на соответствующий адрес, указанный в команде безусловного перехода;
условный осуществляется по специальной команде. Эта команда изменяет естественный порядок выполнения команд и может передать управление на любую команду вперед или назад только при соблюдении заданного условия. В противном случае естественный порядг.'ше изменяется и выполняется следующая (ниже расположенная) команда, В условном переходе должно быть указано, куда переходить и при каком условии.
ПОСЛЕДОВАТЕЛЬНОСТЬ ПОДГОТОВКИ ЗАДАЧ
Итак, из примера 2.2 видно, что процесс подготовки задачи для решения на ЭВМ включает: получение (задание) математического выражения ——формула (2.1), по которому составляется программа; определение, в какой последовательности решается заданная задача,——последовательность (2.6); по полученной последовательности составляется программа (см. табл. 2.2). Исходя из рассмотренного примера устанавливаем, что весь процесс решения задач подразделяется на две части: подготовка задачи и решение ее на машине; подготовка завершается составлением про-
граммы и получением исходных данных для решения задачи по этой программе. В целом подготовка и решение задачи, таким образом, состоят из следующих этапов (рис. 2.1, раздел I):
математической формулировки задачи;
алгоритмизации задачи;
Рис. 2.1. Последовательность подготовки задач для решения на ЭВМ: I—при программировании на языке машины; II—с использованием алгоритмических языков; Ш — по стандартным программам
программирования задачи, включает составление исходной программы и ее отладку на контрольном примере;
подготовки исходных данных;
решения задачи на машине и анализа результата.
Математическая формулировка задачи включает математическое описание ее условий и определение аналитических выражений и формул, которые подлежат решению на машине. Окончательный вид формул и математических зависимостей обычно называют математической моделью- ;
Математические (логические) или математико-логические модели представляют собой систему зависимостей, в которых постоянные и переменные величины взаимодействуют точно таким же образом или с заданным приближением, как и элементы и параметры реальной системы, которая моделируется этой моделью. Математические модели описывают реальные объекты и процессы выражениями (уравнениями, неравенствами) на специальном формальном языке.
Для перехода от начального словесного описания задачи к математической формулировке модели используют математические методы.
Математическая формулировка задачи требует четкого и полного представления сущности задачи, а также знания и умения пользоваться математическими методами. На практике этот этап обычно преодолевается совместно двумя специалистами: технологом производства, которому нужна эта задача (постановщик задачи) ,и специалистом, владеющим этими математическими методами (математиком-программистом). Однако постановщик задач, владеющий математическими методами, может самостоятельно составлять необходимое математическое описание.
Алгоритм, Чтобы по полученному математическому описанию задачи составить программу, приходится прежде всего определить, в какой последовательности нужно реализовывать полученные формулы. Такую последовательность формулируют и записывают в виде алгоритма решения задачи на ЭВМ.
Алгоритмом называют строгую и четкую конечную систему правил или предписаний, которая определяет последовательность преобразования исходных данных в искомый результат. Применительно к ЭВМ алгоритм есть последовательность действий, которые машина должна выполнить, чтобы получить результат решения задачи. Алгоритм должен обладать следующими свойствами: детерминированностью (однозначностью) —все заранее определено и нет места для производства; массовостью, т. е. применимостью к широкому классу задач, к различным вариантам исходных данных и к любой машине; результативностью, т. е. обязательностью получения конечного результата. Таким образом, алгоритм определяет последовательность выполнения операций. На основании алгоритма составляется программа решения задачи на машине.
Примером алгоритма могут служить последовательности (2.2), (2.4), (2.6), особенность изображения этих алгоритмов заключа-
ется в том, что они записаны в виде последовательно выполняемых пунктов и в словесной форме. Однако принята другая форма изображения алгоритмов (см. ниже).
Программа для ЭВМ есть описание алгоритма решения задачи на языке вычислительной машины. Программа состоит из последовательности операций с указанием, над какими данными, где они расположены в памяти и какие операции должна выполнить машина. Программа на языке вычислительной машины представляет собой последовательность числовых кодов или условной записи (см. табл. 2.2). К программе предъявляются требования экономного расходования памяти и обеспечения быстроты решения.
Составление программы на языке машины ——сложный процесс, требующий больших затрат труда высококвалифицированных программистов. При разработке программы вручную легко возникают ошибки. Поэтому составленную исходную программу проверяют вначале на решенном вручную сравнительно простом примере, который называется контрольным. При этом выявляются ошибки, допущенные как при составлении программы, так и на других предшествующих этапах. Ошибки исправляются, и программа корректируется. Процесс выявления ошибок в программе при решении на контрольном примере называется ее отладкой. После отладки получают уже рабочую программу.
Подготовка исходных данных для решения задачи ——важный этап в решении особенно экономических задач, включающий сбор данных, проверку их правильности, достоверности и точности. Исходные данные должны быть правильно (без ошибок) записаны на машинные носители или введены в машину согласно требованиям программы.
Таким образом, подготовка задачи к решению на машине заканчивается составлением и отладкой программы и подготовкой исходных данных. Для решения задачи программа вводится в машину или вначале на машинные носители.
Решение задачи на машине осуществляет оператор, сам пользователь или специалист, умеющий работать на ЭВМ. Порядок работы на машине описывается в руководстве к конкретной операционной системе, а при решении задачи по данной программе —— в инструкции к программе. Результат решения в виде табуляграммы (таблицы), текста или графиков выдается постановщику задачи, для которого она решается.
Автоматизация программирования. Составление программ связано со значительным расходом времени и труда программиста. Уже на начальных этапах использования ЭВМ возникла задача: как этот трудоемкий процесс переложить на саму машину, т. е. как автоматизировать программирование. В настоящее время существуют два направления автоматизации программирования, заключающиеся в использовании: стандартных программ; алгоритмических языков.
Стандартная программа (СП) —это заранее составленная и отлаженная программа решения задачи конкретного ти- 36
па. Объем и состав программного обеспечения ЭВМ является важнейшей характеристикой современных машин. Стандартные программы могут использоваться самостоятельно или входить составной частью в разрабатываемую программу. В первом случае необходимо знать правила записи исходных данных, во втором необходимо в общей программе записать команду, передающую управление этой программе.
Стандартные программы широко используются для вычисления логарифмов, степенных функций, тригонометрических и специальных зависимостей, извлечения корней, решения дифференциальных уравнений, перевода из десятичной системы счисления в двоичную и обратно и т. д. Они хранятся как в основной памяти (в постоянной памяти ПЗУ), так и во внешних ЗУ. Использование стандартных программ позволяет избежать процесс программирования и существенно облегчить подготовку задачи к решению на машине. Последовательность подготовки задач с использованием стандартных программ показана на рис. 2.1, раздел III.
Алгоритм ические языки. Пополняя программное обеспечение машины стандартными программами, можно свести ручное программирование к определенному минимуму. Однако даже для простых арифметических выражений количество вариантов программ так велико, что полная автоматизация программирования на базе СП практически невозможна. Здесь проблема решается с помощью алгоритмических языков.
Алгоритмическим языком называют совокупность символов и правил, позволяющих описывать алгоритмы и однозначно истолковывать содержание этого описания. Основной смысл алгоритмических языков состоит в том, что их символика и логика (правила записи) близки к принятым в математике и в естественном английском или русском языках. Вместе с тем эта символика и правила строго однозначны и могут автоматически (формализованно) переводиться в команды машины. Перевод программ, составленных на алгоритмическом языке, на язык машины выполняется специальной программой, которая называется программой- транслятором.
Использование алгоритмических языков существенно уменьшает трудоемкость программирования и упрощает процесс подготовки задачи для решения на ЭВМ (рис. 2.1, раздел II). Однако использование алгоритмических языков приводит к увеличению времени решения задач на ЭВМ.
Существует ряд алгоритмических языков, объединенных в две группы: проблемно-ориентированные языки (ориентированные на класс задач) и машинно-ориентированные (ориентированные на тип ЭВМ). Проблемно-ориентированные языки программирования отражают особенности класса задач, к описанию которых они приспособлены. В качестве таких унифицированных языков програм-, мирования в настоящее время широко используются следующие языки:
Фортран — для научных и инженерных задач на ЭВМ большой и средней мощности в английском варианте. Наряду с Фортраном еще широко используется алгоритмический язык Алгол-60 в английском варианте.
Бейсик — для научных, инженерных и несложных экономических задач, как язык начинающего программиста. Бейсик стал основным языком для микроЭВМ.
ПЛЦ—универсальный язык, обладающий вычислительными возможностями как Кобола, так и Фортрана, а также и другие языки.
Таким образом, проблемно-ориентированные языки учитывают специфику решения самих задач и могут быть применены к любому типу машин. В отличие от этого машинно-ориентированные языки учитывают особенности программирования для конкретного типа машин.
К классу машинно-ориентированных языков программирования относятся автокоды, с помощью которых лрограммист может писать программы для конкретных машин в наиболее удобной ему форме, однако с учетом их системы команд. Каждый из автокодов представляет собой язык символического программирования (кодирования команд) для заданной машины. Переход от символической программы (автокода) к машинной осуществляется самой машиной автоматически с помощью специальной программы- транслятора. В литературе для обозначения такого транслятора часто используется термин «ассемблер》,а входной язык такого автокода называют языком ассемблера.
Алгоритмические языки по структуре подобны естественным языкам. Последние имеют иерархическую структуру: алфавит, слова, предложения, текст. Аналогично в алгоритмическом языке имеются символы, элементы языка, операторы (предложения), программа. Символы включают набор букв, цифр и знаков, количество и состав которых определяется самим алгоритмическим языком. Под элементами понимают постоянные и переменные величины: константы (числа), имена (обозначения) переменных (аргументов, функций, констант), имена конструкций языка (операторов, подпрограмм, программ). Оператор, подобно предложению, составляет основную синтаксическую конструкцию языка с законченным набором операций. Синтаксис в алгоритмическом языке —— это правила записи операторов (предложений) и в целом текста программы.
Способы описания алгоритмов. Существует несколько способов списания алгоритмов, например в виде последовательности (2.2), (2.4), (2.6). Однако наибольшее распространение получил способ описания алгоритмов в виде структурной схемы (блок-схемы). В таком виде алгоритм состоит из отдельных блоков (геометрических фигур), соединенных между собой линиями, указывающими последовательность выполнения этих блоков. Если эти линии ведут процесс сверху вниз и слева направо, то на них стрелки не указываются. Стрелки на соединительных линиях показывают обя- 38
Наименование
Процесс
Решение
Неавтономная память
Модификация
Ручной ввод
Ввод-вывод
Документ
Соединитель
Пуск-остано#
Комментарий
Функции
Выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположения данных
Выбор направления выполнения алгоритма или программы в зависимости от некоторых перамен- ных условий
Ввод-вывод данных в случае ис* пользования запоминающего устройства, управляемого непосредственно процессом
Выполнение операций, меняющих: команды или группу команд, изменяющих программу
Ввод данных оператором в процессе обработки при помощи устройств, непосредственно сопряженных с вычислительной машиной
Преобразование данных в форму,, пригодную для обработки (ввод! или регистрации результатов обработки (вывод)
Ввод-вывод данных, носителем: которых служит бумага
Указание связи между прарван- ными линиями потока, связывающими символы
Начало, конец, прерывание процесса обработки данных или выполнение программы
Связь между элементом схемы и пояснением
зательно, если процесс идет в обратных направлениях. Операция (действие) записывается в фигуре словесно или с помощью формул. Все блоки имеют разное начертание. Графическое обозначение блоков установлено ГОСТ 194428—74 «Обработка данных и программирование. Схемы алгоритмов и программ. Обозначения условные графические». Некоторые из этих обозначений приведены в табл. 2.3.
АЛГОРИТМЫ ТИПОВЫХ ЗАДАЧ
Линейный процесс ——это процесс, в котором операции выполняются последовательно одна за другой в естественном и единственном порядке следования.
Пример 2.3. Найти значение функции
у = arctgW^ — 4ас + ln(b2 — 4ac)](2.7)
при значении аргумента *=0,1 н заданных значениях % Ь, с.
Очевидно, функцию у можно вычислить в следующей последовательности. Сначала найти значение выражения Ь^™4 от, которое обозначим 2. Затем определяется выражение yz + lnz и, наконец, arctg (Уг — Inz).
Запишем последовательность решения задачи с учетом исходных данных, вывода результата и останова:
Вв, а, с;
Прнсв. х=0,1;
Выч. z=b2 — 4 ас;
Выч. // = arctg(Vs4-ln2);I '丿
Печ. х, у,
Ост.
Используем начертания блоков из табл. 2.3 и изобразим схему алгоритма (рис. 2.2). В алгоритме все блоки имеют последовательное соединение и выполняются один за другим в естественном порядке следования номеров блоков.
Обычно алгоритм не расписывается до элементарных операций. Так, блок 4 содержит пять операций, а блок 5 будет включать три подпрограммы для определения стандартных функций численными методами. Более того, блок 2 и 6 также связаны с подпрограммами перевода чисел из десятичной системы счисления в двоичную при вводе и обратно при выводе. Степень детализации выбирается такой, чтобы установить лишь основную последовательность выполнения машинной задачи. Та последовательность, которая очевидна или известна и не представляет трудности для составления программы, не расписывается. В целом детализация алгоритма в определенной степени произвольная. При этом пре-
следуется цель — однозначно формализованно описать последовательность выполнения задачи при минимальной детализации процесса.
e mq掣0 )e mq掣0 )「2「2В самих блоках названия операций обычно не записывают. Форма блока и его содержание дают полное представление об операции: блок 2 ——ввод а, Ь, с; блок 3 — присваивание аргументу х численного значения ——0,1; блоки 4 и 5 ——вычисления функций по приведенным формулам; блок 6 — вывод на печать (документ) результата у. Блоки 1 и 7 устанавливают начало и конец (останов машины) вычислительного процесса.
e mq掣0 )
e mq掣0 )
「2
「2
г-3г-3х=0х=0—г~n = ad + b—г~n = ad + b1-41-4Рис. 2.2. Схема алгоритма линейного вычислительного процессаРис. 2.2. Схема алгоритма линейного вычислительного процессаОстанов )Останов )l51у = arctg (\^+lnz)l51у = arctg (\^+lnz)Циклический процесс — это процесс, в котором вычисления выполняются многократно по одним и тем же математическим зависимостям, но при разном значении специально изменяемой входящей в них величины. Этот многократно повторяющийся участок вычислительного процесса называют циклом. Циклические алгоритмы позволяют существенно сократить объем программы за счет многократного выполнения ее циклического участка.
г-3
г-3
х=0
х=0
—г~n = ad + b
—г~n = ad + b
1-4
1-4
Рис. 2.2. Схема алгоритма линейного вычислительного процесса
Рис. 2.2. Схема алгоритма линейного вычислительного процесса
Останов )
Останов )
l51
у = arctg (\^+lnz)
l51
у = arctg (\^+lnz)
Пример 2.4. Для задачи примера 2.2 и последовательности (2.6) составить блок-схему алгоритма табуляции (составления таблицы) функции (2.1).
Решение данной задачи состоит в многократном вычислении функции у по заданной формуле (2Л) с подстановкой каждый раз нового значения аргумента %, отличающегося от предыдущего на А%=0,1 в соответствии с последовательностью (2.6).
схемысхемыИзобразим эту последовательность в виде,
схемы
схемы
(рис. 2.3, а): блок 1——начало выполнения программы, блок 2 —— ввод данных, блок 3 ——присваивание начального значения х, блок 4 — вычисление по формуле, блок 5 — печать величин х, у. Блок 6 изменяет аргумент 尤 на шаг Ах = 0,1 и готовит процесс для повторного вычисления функции у. Блок 7 — условный переход. В нем указывается условие повторения цикла: если х^2, т. е. в случае «да», процесс возвращается на блок 4, а в случае «нет» процесс не возвращается н по линии естественного перехода переходит к блоку 8 на останов машины. Таким образом, блок условного перехода имеет один вход и два выхода:《да》一когда условие выполняется, и《нет》——условие не выполняется.
На схеме (рнс. 2.3, б) дано другое изображение условного перехода. В блоке 7 пишется не само условие, а выражение, которое сравнивается с нулем: х — 2. Могут быть три результата сравнения: 1)工一2<0; 2) % — 2 = 0; 3) х — 2>0. Следовательно, блок здесь имеет один вход и три выхода, обозначенных соответственно:
Рис, 2.3. Схема алгоритма циклическоговычислительного процесса с двумя ва-риантами изображения блока 7 (услов-ного перехода)Рис, 2.3. Схема алгоритма циклическоговычислительного процесса с двумя ва-риантами изображения блока 7 (услов-ного перехода)
Рис, 2.3. Схема алгоритма циклическоговычислительного процесса с двумя ва-риантами изображения блока 7 (услов-ного перехода)
Рис, 2.3. Схема алгоритма циклическоговычислительного процесса с двумя ва-риантами изображения блока 7 (услов-ного перехода)
<0; =0; >0. Поскольку по условию задачи процесс должен возвращаться при х ——2^0, то два выхода соединены вместе и идут на блок 4 (на цикл). Сам цикл состоит из многократного выпол-
нения блоков 4——7. Эти блоки повторяются 20 раз. Один круг прохода цикла будет отличаться от другого значением аргумента х. Аргумент х, меняющийся в цикле, называют управляющей переменной цикла. При организации цикла для управляющей переменной в алгоритме необходимо задать: начальное значение: %=0 (блок 3); конечное значение: х=2 (блок 7); шаг изменения переменной Ах=0,1 (блок 6). Эти три блока (3, 6 и 7) обязательные в цикле. Рассмотрим теперь, как будет выполнять машина алгоритм по рис. 2.3,6, если была допущена ошибка и неправильно возвращен процесс на цикл (неправильно соединили выходы блока 7). На схеме цифрами в скобках указаны варианты ошибочных соединений.
Вариант (1)—с блока 7 процесс возвращается на блок 3. Рассмотрим последовательность работы алгоритма. Согласно блоку 3 переменной х будет присвоено начальное значение х=0, в
блоках 4 и 5 машина рассчитает функцию и напечатает 尤 и у, при начальном значении аргумента (при 尤= 0). В блоке 6 значение аргумента станет равным л = 0Д +0,1 =0,2. Блок 7 выполнит сравнение 0,2^2, и процесс пойдет по линии《да》на блок 3 — связь указана пунктиром с цифрой (1). Блок 3 присвоит переменной х значение 0,1 вместо 0,2. В блоках 4 и 5 будет повторно рассчитана и напечатана функция у при %=0,1. Блок 6 вновь присвоит аргументу значение %=0,2. Блок 7 аналогично отошлет процесс на блок 3, где аргументу вновь будет присвоено х=0Д и т. д. Процесс будет повторяться бесконечное число раз. В этом случае говорят, что процесс зациклится.
Вариант (2) —с блока 7 процесс возвращается на блок 5; поскольку в этом случае блок 4, где рассчитывается у, не будет вхо-
дить в цикл, то независимо от того, что аргумент изменяется от 0,1 до 2 с шагом 0,1, величина у остается неизменной, рассчитанной при %=0,1. Следовательно, на печать будет выведено 20 стро・ ^ек табуляграммы, в которой х будет изменяться от 0,1 до 2, а у будет оставаться одинаковым, определенным при %=6,1.
[ По варианту (3) машина, один раз рассчитав и напечатав у при %=0,1, сделает 20 циклов, изменяя х от 0,1 до 2 с шагом 0,1 на блоках 6 и 7 и остановится.
Разветвляющийся процесс.
Пример 2.5. Протабулировать функцию
"О, если х < 1;У= { %(*), если 1 < 尤 <2;
I /g(^), если 尤》2.
на интервале 0《%《3 с шагом Дх=0,1. Исходя из условия циклический расчет ведется по выражениям
у = /式尤)на интервале 0《% < 1;
У =片(*)”” 1《尤 V 2;
у = /з(%)*” 2《尤《3*
Используя алгоритм рис. 2.3, можем построить три последовательных цикла (рис. 2.4, а): блоки 3——6 — 1-й цикл, блоки 7—10 — 2-й цикл и блоки 11—14 — 3-й цикл. Однако в таком алгоритме три раза повторяются блоки 4 и 5. Их можно не повторять (т. е.
Рис. 2.4. Схема алгоритма разветвляющегося циклического процесса: а — выполненная без разветвления; 6 — вариант разветвления
исключить блоки 8——9 и 12—13), если соединить последовательно блоки 6f 10f 14 (указано пунктиром), а с блоков 7 и 11 вместо1 соединений на блоки 8 и 9 процесс передать на блок 4. В этом случае схема алгоритма будет иметь вид рис. 2.4, б. /
Рассмотрим работу полученного алгоритма. Блок 2 присва- нвает переменной цикла начальное значение: #=0. Блок 3 рассчитывает искомую функцию по 1-му выражению. Блок 4 печатает значения аргумента х и функции у. Блок 5 изменяет переменную никла на шаг 0,1. Блок 6 проверяет условие расчета по формуле fi (尤).Если условие выполняется, вычислительный процесс пер ей- дет на цикл (на блок 3). По циклу (блоки 3—6) будет сделано 10 кругов. На последнем, десятом, блок 5 присвоит переменной цикла значение x=L В этом случае следующий блок 6, проверяя условие 1<1, зафиксирует его невыполнение, и процесс пойдет по линии《нет》на блок 7.
Следующий блок 7, проверяя условие х<2, зафиксирует его выполнение (так как х=1) и передаст управление на блок 10, а затем ——на блок 4, т. е. начинается 2-й цикл (блоки 4——7, 10). В этом цикле блок 6 все время будет передавать управление по линии «нет». В этом замкнутом контуре процесс совершит также 10 кругов. На последнем круге блок 5 присвоит переменной цикла значение %=2. Теперь и блок 7 передаст управление по линии 《нет》на блок 8 (т. е. условие 2<2 не выполняется).
Аналогично по замкнутому контуру (блоки 4—8, 11) будет совершено 11 кругов при изменении переменной цикла в пределах 2《%《3. На последнем круге, когда блок 5 выполнит операцию х=3 + 0,1 = 3,1, блок 8, проверяя условие 3,1《3, передаст управление по линии «нет» на останов машины (на блок 9).
В рассмотренном алгоритме (рис. 2.4, б) имеются три вида переходов от блока к блоку:
естественный, при котором блоки следуют один за другим в направлении от начала к концу алгоритма. К таким относятся переходы между блоками: 1->2->3 + 4->5 + 6;
условный, когда переход к следующему блоку выполняется в зависимости от условия результата решения задачи (сравнения значения переменной с числом или нулем). Примером таких переходов служат: 6->3; 7-> 10; 8-> 11. Причем один из переходов от блока сравнения выполняется как естественный (переходы 6->7; 7 —>8, 8->9);
безусловный, в котором переход выполняется не на следующий по ходу вычислительного процесса от начала к концу, а на любой другой — назад или вперед. Примеры таких переходов: 10 — 4 и 11-> 4. В рассматриваемом примере можно еще и по- другому скомпоновать алгоритм. Например, блок 2 соединить не с блоком 3, а с блоком 6. В этом случае вход в циклы будет через блок 6, а в остальном процесс будет идти без изменения.
Заметим одну особенность работы алгоритма, если произошла ошибка в его составлении и в блоке 6 ошибочно записано неравенство %>1 (вместо правильного х<1). При такой ошибке алго-
ритм будет работать следующим образом. При х=0 машина напе- чапает значение функции, вычисленное по формуле fi(x). После блока 5 будет х = 0,1. Блок 6 передаст управление по линии《нет》 (так как при 0,1 >1 условие не выполняется) на блок 7, который по линии еда» передаст управление на блок 10, и начнется 2-й цикл, в пределах 0,1 ^х<1, в котором расчет будет вестись по формуле ^2(х). Как только станет х= 1,1, блок 6 передаст управление. по линии 《да》 (так как при 1,1>1 условие выполняется), и расчет пойдет по формуле &(%)• Так как для всех последующих значений х условие х>1 выполняется, то процесс не будет остановлен и зациклится.
Суммирование. _
Пример 2.6. Вычислить сумму чисел аъ аг,..., ап:
s =。工 + & + . • • +。枕=』。厶 (2.10)
где 口乙 i— 1, n — исходные данные, которые можно представить массивом (массив——задаваемая совокупность величин, обозначаемая одним именем). В нашем случае Л == (аь ..., ап)—вектор, т. е. одномерный массив, а。卜 а2,..., ап — элементы массива (см. с. 92).
Будем обозначать массив заглавной буквой, а в скобках указывать его размер: 4 (^), где 4 — имя массива, ^ — размер массива (количество элементов в массиве).
Примем обычный порядок сложения чисел. Вначале первое сложим со вторым, получим сумму двух первых чисел. К этой сумме прибавим третье число. Получим уже сумму трех чисел. Затем к ней прибавим четвертое и т. д. до последнего. При таком порядке сложения можно обойтись одной ячейкой памяти для хранения всех промежуточных и окончательной (искомой) суммы. Такое «накапливание» суммы реализуется при помощи рекуррентного выражения.
s = s+ 生,『=1,忆 (2.11)
Примем начальное значение суммы равным нулю: s = 0. Зададим индексу i начальное значение i= 1. Тогда получим сумму с 1-м числом: 3 = 0+%.
Изменим индекс на единицу: i=i+1 =2 и вновь просуммируем, но уже со 2-м членом по выражению (2.11): s= (0+а£) +аг* Вновь изменим индекс и просуммируем с третьим числом: £ = =(0 + «1 + «2) +^з- Повторяя эти операции до i=nt получим искомую сумму
s = (° + 。1十 g + ….+a〃一i) +。小
Исходя из рассмотренного принципа накапливания суммы алгоритм будет включать следующие операции (рис. 2.5): блок 2 — ввод исходных данных (одномерного массива) вектора 4 размером N (где N — заданное число); блок 3 — сумме s и индексу i присваиваются начальные значения: s = 0, i= 1; блок 4 — находит-
ся сумма по выражению s—s + ac блок 5 — изменяется значение индекса на единицу: i=i+l. Теперь можем вновь возвратиться к блоку 4 для прибавления к промежуточной сумме следующего^на- чения。£・ А чтобы закончить суммирование, введен в цикл условный переход с выходом из цикла, когда станет i>n (блок 6).
Пример 2.7. Вычислить сумму членов следующего ряда:
步3!5!7! 丁▲ 丿(2з十1)!「
№0/
с точностью 8 для заданного значения аргумента х.
Поскольку находится сумма,
используемиспользуемпринцип накапливания суммы по выражению
используем
используем
Рис. 2.5. Схема алгоритма вычисления суммы элементов массиваРис. 2.5. Схема алгоритма вычисления суммы элементов массиваУ= У+ ^
Рис. 2.5. Схема алгоритма вычисления суммы элементов массива
Рис. 2.5. Схема алгоритма вычисления суммы элементов массива
где z=(-1 尸*々+1/(2々+1)!;女=0, 1, 2,一.一 переменная, определяющая номер члена.
Составим последовательность нахождения суммы.
Задаем значение аргумента х.
Присваиваем начальные значения сумме и переменной у=0, 々=0.
Находим значение члена 2= (—1)^+У(2^+1)!
Суммируем по выражению y=y+z・
Изменим значение переменной k=k+ L
Используя безусловный переход, можно было бы вновь возвратиться к п. 3 для нахождения следующего члена и т. д., тем самым найти решение задачи суммирования ДО 8.
Согласно условию требуется вычислить сумму лишь до заданной точности & т. е. до такого члена суммы, абсолютное значение которого стало равно заданной точности. Следовательно, теперь можно сформулировать условие окончания цикла: если \z\ ^g, переход на повторение цикла не нужно выполнять (или если |z|>8, идти на продолжение цикла).
В рассмотренной последовательности нерационально рассчитываются члены суммы;,машина каждый- раз вновь перемножает х, начиная с первого, и каждый раз, определяя факториал, перемножает натуральный ряд, начиная с единицы. Значительно рациональнее было бы получать последующий член из предыдущего, умножая предыдущий член на разность с последующим: г = =г-Az (т. е. использовать процесс накапливания произведения).
\Найдем эту разность, разделив последующим член на предыдущий
\( 一 1)к-県2 5— 1)4- 1(2兑 + 1)1(2左)(2« 4-1)'
Поскольку при 力=0, Аг=—оо, то начинать необходимо с k= 1. Следовательно, с помощью полученного выражения
一 (23)(23+1)
можно определять члены, начиная не с 々 = 0, а только с k— 1. Тогда, чтобы определить первые члены ряда: х——炉/З!, необходимо задать начальные значения: z=xt у—х, ^=1. Теперь можно получить схему алгоритма (рис. 2.6).
Рассмотрим работу алгоритма. В блоке 2 присваивается численное значение аргумента %=尤0, в блоке 3 — начальные значения накапливаемой суммы у=х, накапливаемого произведения 2=%, переменной цикла (номер члена ряда) 々=1. Блоки 4 и 5 реализуют искомую сумму ряда: в 1 круге:
z _ (%)
' 2 (2 + 1)3—
G = 2;
Рис. 2.6. Схема алгоритма вычисления суммы сходящегося рядаРис. 2.6. Схема алгоритма вычисления суммы сходящегося ряда2 .2(2 -2+ 1)2 .2(2 -2+ 1)в 3-м круге:в 3-м круге:力=4 и т. д.力=4 и т. д.во 2-м круге:
Рис. 2.6. Схема алгоритма вычисления суммы сходящегося ряда
Рис. 2.6. Схема алгоритма вычисления суммы сходящегося ряда
2 .2(2 -2+ 1)
2 .2(2 -2+ 1)
в 3-м круге:
в 3-м круге:
力=4 и т. д.
力=4 и т. д.
Как только наступит условие |z|^е, блок 7 передаст управление то линии《нет», машина напечатает искомое значение функции (блок 8) и остановится (блок 9).
Цикл в цикле
Пример 2.8. Вычислить значение полинома 汽-宜 степени
у= а^ + аре"— +。/〃-2 + ... + ап-\^ + а“ = 2 а^-1 /(2.14)
для m значений переменной х (т. е. для х$ и у力 j=l,加),/где。厶 t=0, л ——заданные коэффициенты. Чтобы свести расчет к алгоритму циклического процесса, представим полином в виде формулы Горнера, вынося х за скобки л раз
у = (•一((а© + ajx + &) % + •— + 毓一i) % + 以父 (2.15)
Выразим каждый последующий член уравнения через предыдущий, используя выражение
у = у.% + а,,(2.16)
где @з i=0, 〃 一 элементы одномерного массива 4 исходных данных.
Итак, получаем цикл, внутри которого реализуется формула накапливания произведения и суммы (2.16). Переменной цикла будет индекс i коэффициентов а「Изменяя индекс, изменяется и коэффициент — элемент массива Л. Пределы изменения индекса 1《У汽,шаг Д/=1.
Но по условию задачи необходимо вычислить значения полинома для m переменных х, т. е. для х;, /= 1, m, которые вместе представляют массив Х(М). Тогда для каждого значения х; нужно организовать свой цикл накапливания произведения и суммы по формуле'
力=力.看+修。(2.17)
Следовательно, получаем еще один внешний цикл, в котором будет изменяться аргумент Xj. Чтобы его изменить, нужно изменять индекс /. По индексу будет выбираться из массива Х(М) соответствующий аргумент х;. Предел изменения индекса 1 ^/^т, шаг Д/ = 1.
Получаем следующую последовательность расчета: задаем х^ = х{ и рассчитываем у§=у\ по (2.17) в цикле, задавая начальное значение У\ = а^ и изменяя 〃£ от а【до ап. Затем переходим на %2 и рассчитываем у? вновь по (2.17) в том же цикле задавая У2 = @о и изменяя 。£ от ах до а« и т. д. до последнего хп.
В целом алгоритм будет иметь следующую структуру (рис. 2.7): блок 2 ——ввод и размещение в памяти массивов Х(М)и A (N+1); блок 3 ——присваивание начального значения индексу / = 1, величина которого меняется по внешнему циклу; блок 4 ——присваивание начального значения индексу i= 1 и переменной 归=询,которые
Рис. 2.7. Алго-Рис. 2.8. Алгоритм умножения матрицритм Горнера для вычисления значений полиномаРис. 2.7. Алго-Рис. 2.8. Алгоритм умножения матрицритм Горнера для вычисления значений полиномаПример 2.9. Умножение матриц. Даны две прямоугольные матрицы А (М, N) н В (N, Р) (см. с. 92).
Рис. 2.7. Алго-Рис. 2.8. Алгоритм умножения матриц
ритм Горнера для вычисления значений полинома
Рис. 2.7. Алго-Рис. 2.8. Алгоритм умножения матриц
ритм Горнера для вычисления значений полинома
А =А =а“。12 ... ain 02】022 ' • • a2 nа“。12 ... ain 02】022 ' • • a2 nOm] a?n2 • ♦ ♦ ^mnOm] a?n2 • ♦ ♦ ^mnn I ЬП2 . ♦ ♦ Ьпрn I ЬП2 . ♦ ♦ Ьпр包I b12 .一6Ipb21b22 • • .ь2P
А =
А =
а“。12 ... ain 02】022 ' • • a2 n
а“。12 ... ain 02】022 ' • • a2 n
Om] a?n2 • ♦ ♦ ^mn
Om] a?n2 • ♦ ♦ ^mn
n I ЬП2 . ♦ ♦ Ьпр
n I ЬП2 . ♦ ♦ Ьпр
Найти матрицу С(М, Р)
С11 С12 . . . Cip
尸 С21 &2 …С2P
Cml Cm2 . . > Cmp
как произведение первых двух матриц: С(М, Р)=А(М, W) X ХВ(М Р), где М М Р — размеры матриц.
Каждый элемент искомой матрицы С определяется как произведение 1-го вектора-строчки первой матрицы на /-й вектор-столбец второй матрицы:
。廿=二?卜由小 j = \,р; i = (2.18)
Алгоритм, реализующий (2.18), имеет три вложенных друг в друга цикла (рис. 2.8). Внутренний цикл по переменной й (блоки 6——8) организует вычисление суммы произведений а访匕丽 по принципу накапливаемой суммы. Начальные значения суммы и переменной цикла присваиваются блоком 5. Средний цикл по переменной j (блоки 5——12) вычисляет вектор-строчку искомой матрицы С. После получения значения каждого элемента строчки в виде суммы s (блоки 6—8) она присваивается соответствующему элементу (блок 9) и запоминается (блок 10). Блоки 4, 11, 12 организуют этот средний цикл по / (начальное и конечное значение и шаг). В этом цикле при переходе к новому элементу。叮 восстанавливаются начальные значения суммы и переменной внутреннего цикла (блок 5). Внешний цикл по i (блоки 4—14) осуществляет переход ст одной к другой строчкам. Блоки 3, 13 и 14 определяют начальное значение, шаг и конечное значение переменной внешнего цикла. Причем при переходе от строчки к строчке восстанавливается начальное значение переменной / (блок 4).
Нахождение величин с заданными признаками
Пример 2.10. Дан ряд чисел — одномерный массив 4(N) = =(аь а2,..., ап). Найти наименьший и наибольший элементы массива. '
Примем следующую схему решения. Обозначим наименьший и наибольший искомые элементы: amin, «тах- Зададим им начальное значение для атт самое большое число в машине, a Qmax — самое малое число: атт= Ю8, атах = —108. Будем сравнивать эти значения последовательно с каждым элементом вектора, начиная с @卜 Если очередной элемент окажется меньше amm или больше Qmax, то значение amm или ^тах заменяется на значение этого элемента.
Перебрав все элементы, мы тем самым ч определим искомые наибольший и наименьший элементы.
Используя эту схему, построим алгоритм (рис. 2.9). Блок 2 —— ввод массива A(N). В блоке 3 присваиваются начальные значения amm, «max и индексу ——1~ 1. В блоке 4 производится сравнение: если йтш>ай то процесс идет по линии《да》и вместо предыдуще-
меменоног иЦг иЦ«max ему ыло«max ему ылозначения атщ ему присваивается значение @е (блок 10), и затеи
ме
ме
но
но
г и
Ц
г и
Ц
«max ему ыло
«max ему ыло
меняется значение индекса (блок 6) и через блок 7 вновь про-
и замена значе-и замена значе-' возвращается на блок 4 для сравнения со следующим эле* том. Аналогично осуществляются сравнение
и замена значе-
и замена значе-
в блоках 5 и И. расчета мож- бы несколько
упростить. Вместо мак- симгкльной и минимальной констант 108 и —108 можно задать значение первого элемента массива: amin= —;^1, QmaT1—% (блок 3), а сам цикл начать со сравнения со вта-
рым элементом, своив начальное
при-зна-при-зна-чение индексу i=2.
при-зна-
при-зна-
Пример 2.11. Задан одномерный мас-
сивсивчисел — векторчисел — векторA (N) = (@£, @2, • • • > ап) ♦ Определить количество отрицательных, нулевых и положительных элементов массива.
сив
сив
чисел — вектор
чисел — вектор
Обозначим через м, н, р количество отрицательных, нулевых и положительных элементов соответственно.
Зададим имЗададим имначальначальные значения, равныеные значения, равныен=0,н=0,нулю: ж=0,нулю: ж=0,р=О. Будем сравнивать каждый элемент массива с нулем, начиная с первого — s: если элемент •отрица-
Зададим им
Зададим им
началь
началь
ные значения, равные
ные значения, равные
н=0,
н=0,
нулю: ж=0,
нулю: ж=0,
тельный, то ем единицу ячейке 川: если равен то р=р+1.тельный, то ем единицу ячейке 川: если равен то р=р+1.прибавля- о《
тельный, то ем единицу ячейке 川: если равен то р=р+1.
тельный, то ем единицу ячейке 川: если равен то р=р+1.
гРис. 2.9. Алгоритм нахождения наибольшего и
К числу Внаименьшего из чисел
儿=加+1;
нулю, то 兄=兄十1, и, наконец, если положительный.
Построим схему алгоритма (рис. 2.10). После блока ввода (блок 2) присвоим начальные значения накапливаемым суммам 加=0,咒=0, р = 0 и переменной цикла ——индексу i= 1 (блок 3).
Сравниваем 必(первый раз i=l) с нулем (блок 4): если аУ。, управление передается на блок 10: м = м+1; если 仪£ = 0, то на блок 5:我=我+1; если 4>0, то на блок И: р = р+1. Затем от всех трех блоков 5, 10 и 11 процесс Идет на изменение переменной цикла на шаг i = i+l (блок 6). Блок 7 (условный переход) сравнивает текущее значение переменной цикла с числом и: если i^n, то управление передается по линии《да》на блок 4; если нет, то на блок печати и останов машины (блоки 8 и 9).
Перестановка элементов-чисел в массивах
Пример 2.12. Дана квадратная матрица 4 (М N).
Рис. 2.10. Алгоритм нахождения количества отрицательных, нулевых и положительных чиселРис. 2.10. Алгоритм нахождения количества отрицательных, нулевых и положительных чисел4 =4 =a|i的2 • - •a1"021022 • ■ .02 n
Рис. 2.10. Алгоритм нахождения количества отрицательных, нулевых и положительных чисел
Рис. 2.10. Алгоритм нахождения количества отрицательных, нулевых и положительных чисел
4 =
4 =
°n 1 °п2 ... On п
Необходимо поменять местами элементы главной и обратной диагоналей: Оц С Ощ» @22 С ^2,n—1, • • • » Опп
Рассмотрим вначале сам принцип перестановки двух элементов, например а и Ь. Пусть а=2,7; Ь~ = 0,3. Если мы запишем a = b, то из ячейки b число 0,3 перешлется в ячейку а вместо числа 2,7, которое исчезнет. Если, наоборот, b = a, тобу” дет потеряно число 0,3. Поэтому, чтобы сохранить оба числа, необходима вспомогательная третья ячейка с, в которую переводится число 2,7 операцией с~а, а затем уже переводится число 0,3 из ячейки Ь в
ячейку а операцией a = b. Теперь, чтобы закончить перестановку, число 2,7 из ячейки с переслать в ячейку b операцией Ь = с. Следовательно, перестановка двух чисел выполняется в три операции с использованием вспомогательной ячейки:
с = a
а, — b b = с
Для выполнения перестановки по всем элементам диагоналей необходимо попеременно переходить от одной пары элементов к последующей, изменяя индексы у элементов. Найдем законы из< менения индексов.
у главной диагонали: а”,&2,°пп индексы изменяются сразу оба, начиная от 1 до и с шагом 1. Обозначим их через i. Тогда получим общее значение элемента главной диагонали: ан, где I ^изменяется от 1 до и с шагом 1. У обратной диагонали: ■1,% ^2,п-i, • • • > ап,\ можно заметить, что второй индекс меняется как раз наоборот, от 几 до 1 с шагом Д =——1. Такой закон изменения можно привязать к закону изменения t по выражению 几+1—厶 При i=l получим n+ 1—1 =几;при i = 2 будет n+ 1—2 = n—1; при i=n получим n+ 1——n= 1. u
Следовательно, общее обозначение элемента обратной диагонали будет мт.
Рис. 2.11. Алгоритм перестановки элементов в массивах: а — переста-новка элементов главной и обратной диагоналей матрицы; 6 — располо-жение элементов в порядке их возрастания
Изменяя в цикле индекс 厶 мы можем построить алгоритм перестановки значений элементов главной и обратной диагоналей (рис. 2.11,а). После ввода матрицы 4(М N), где N — число — размеры матрицы (блок 2), присваиваем переменной цикла — ин-
дексу £ начальное значение i= 1 (блок 3). Затем с использованием вспомогательной переменной b делаем перестановку первых элементов диагонали (блок 4). Блок 5 изменяет переменную цикла на шаг, а блок 6, сравнивая текущее значение переменной цикла i с числом п, возвращает процесс на блок 4 (если t^n) или передает управление на блок 7 (если i>n).
Процесс пройдет 孔 раз по циклу (блоки 4——6), выполнив поставленную задачу.
Пример 2.13. Дан ряд чисел Л (N) = (аь..., ап)・ Требуется расположить их в порядке возрастания: каждое последующее число должно быть больше или равно предыдущему.
Примем следующую схему перестановок. В массиве (оц,.…ап) первый элемент % сравниваем последовательно с каждым следующим /-м элементом, начиная от /=2 (т. е. с @2) и кончая j — n (т. е. с а”). Если окажется, что @1>@力 то элементы меняем местами по схеме блока 4 алгоритма (рис. 2.11,а). В результате такого цикла на месте а〔 будет находиться минимальный элемент. Исключаем теперь этот элемент at и снова уже в массиве (@2,・・・, @п) аналогично сравниваем а2 с остальными, начиная с аз (/ = 3), и находим следующий минимальный элемент, который окажется уже на месте второго элемента а2. Исключаем теперь элемент。2 и вновь в массиве (аз,. • •, ^п) аналогично ищем минимальный элемент и т. д. до последних двух элементов (a”—i; а”). В результате все элементы расположены в порядке их возрастания.
Заметим, что в рассмотренной последовательности минимальный элемент находится и размещается на месте первого с помощью циклического процесса. Переменной цикла является / — индекс элементов массива. Он меняется от / = 2 до j = n при нахождении минимального для а】; от / = 3 до j = n для а2 и т. д., для an-i только для j = n. Следовательно, кроме цикла по переменной /, имеет место другой «внешний» цикл, в котором изменяется индекс начального элемента, с которым сравниваются все последующие, и начальное значение переменной / «внутреннего» цикла. Обозначим переменную «внешнего» цикла Л Ее начальное значение — i=l (仪1), конечное —几一1 (an-i). Начальные значения переменной / соответственно будут / = i +1.
С учетом рассмотренной схемы построен алгоритм (рис. 2.11,6). В алгоритме блок 2 вводит массив исходных чисел, общее количество которых равно М Блок 3 присваивает начальное значение ,= 1 (индексу искомого минимального элемента) переменной «внешнего» цикла. В блоке 4 присваивается начальное значение переменной «внутреннего» цикла / = t+l, которое всякий раз на единицу больше переменной 厶 Блок 5 сравнивает начальный искомый минимальный элемент с последующими. При первом выполнении цикла сравнивается % с &: если 仪1〉&, то процесс идет по линии《нет》на блок 6, где производится замена чисел: из двух чисел минимальное переводится на место элемента аь Блок 7 изменяет переменную цикла и через условный переход (блок 8) процесс идет на цикл и возвращается на блок 5. Теперь сравнива-
!ютс^。[ с аз и т. д. до сравнения 0 с а^; всякий раз, если。1>@力 в блоке 6 переставляются элементы.
После того как закончится «внутренний» цикл, процесс от блока 8 перейдет на блок 9, который изменит переменную «внешнего» цикла, i=2. Через условный переход (блок 10) процесс возвратится на блок присваивания начального значения переменной «внутреннего» цикла: / = 3 (блок 4). Затем блок 5 начнет сравнивать по «внутреннему» циклу а2 с последующими числами, начиная с @з・ Аналогично, если а2>а^ происходит замена чисел (блока 6) и т. д. до последнего прохода《внутреннего》цикла, когда i=n——1, a j=几, и сравнивается ап^ с ап. После этого блок 7 присваивает 1 = п+ 1. В результате блок 8 передает управление по линии «нет» на блок 9, где присваивается £=/?, и блок 10 передает управление на блок 11 (печать полученного ряда чисел) и на останов машины (блок 12).
Контрольные вопросы
Составьте программу в условных кодах одноадресной машины, например, для выражения у^ах+b. Поясните, что такое команда и программа.
Каково назначение и какие операции выполняют безусловный и условный переходы?
Какова последовательность и содержание этапов подготовки и решения на ЭВМ задач?
Что такое алгоритмы, их назначение и как они изображаются?
Что такое алгоритмические языки, их назначение и классификация?
Изобразите алгоритм цикла и покажите, при каких ошибках вычислительный процесс может «зациклиться» (не выйти из цикла).
Изобразите и поясните работу алгоритма нахождения суммы чисел.
Изобразите и поясните, как работает алгоритм цикла в цикле.
Изобразите и поясните работу алгоритма нахождения максимального и минимального элемента в массиве и их индексов.
Изобразите и поясните работу алгоритма нахождения в массиве количеств элементов — больше, меньше и равно единице.
Изобразите и поясните работу алгоритма перестановки элементов массива в порядке убывания их величии.
Глава 3
РЕШЕНИЕ ЗАДАЧНА ПРОГРАММИРУЕМЫХМИКРОКАЛЬКУЛЯТОРАХ
ОБЩИЕ СВЕДЕНИЯ О МИКРОКАЛЬКУЛЯТОРАХ
В практике инженерных и экономических расчетов встречается множество задач с небольшим объемом вычислений и исходных данных. Такие задачи не всегда можно оперативно и выгодно решать на универсальных ЭВМ. и даже на микроЭВМ. с составлением соответствующих программ. Для решения таких задач используются разнообразные микрокалькуляторы (МК), отличающиеся друг от друга вычислительными возможностями, набором различных функций, габаритами, конструкцией и др. Микрокалькуляторы обычно делят на следующие группы: простейшие, выполняющие четыре арифметических действия и некоторые их комбинации; инженерные, выполняют дополнительно еще тригонометрические, логарифмические и другие стандартные функции; программируемые (ПМК), позволяют решать задачи по программам, составленным пользователем; портативные микроЭВМ, имеющие алгоритмические языки высокого уровня.
Во всех МК предусмотрен ручной ввод чисел и ручное задание операций с помощью клавиатуры. Ввод результата расчета производится на цифровые или алфавитно-цифровые индикаторы. Числа и символы вводятся в десятичной системе счисления последовательно, начиная со старшего разряда, и автоматически переводятся в двоичные коды.
Программирование на микрокалькуляторе рассмотрим на примере ПМ.К «Электроника МК-61».
Общая характеристика ПМК «Электроника МК-61». Диапазон чисел: 1 ■ 10~"IхI 9,9999999• 10". Мантисса имеет восемь десятичных разрядов, в том числе один целый, а порядок — два. Клавиатура содержит 30 клавиш. Индикатор — 12-разрядный (точка, разделяющая целую и дробную части числа, разряда не занимает). На индикаторе данные располагаются согласно рис. 3.1.
Микрокалькулятор работает в двух режимах:
режим автоматической работы ——это обычный режим всех вычислений, в том числе и по программам;
режим программирования, в котором программа вводится в машину с помощью клавиатуры и редактируется.
В режим программирования М.К переводят путем последовательного нажатия клавиши F и клавиши совмещенной операции ПРГ. Обратно в режим автоматической работы МК возвращается нажатием клавиш F и совмещенной операции АВТ.
Масса «Электроника МК-61》一0,25 кг, габариты—167Х78Х Х36 мм. Питание — от встроенного аккумулятора или от сети 220 В через зарядное устройство, прикладываемое к микрокалькулятору.
5656ПорядокПорядокМантисса (число)Мантисса (число)Знак мантиссыЗнак мантиссыИ 12И 12Знак _f порядкаЗнак _f порядкаааКод рре- денной i-й комавХыКод рре- денной i-й комавХыКод предыдущей <Н1ЬйКод предыдущей <Н1ЬйКод предыдущей (i-2)产 командыКод предыдущей (i-2)产 командыАдрес следующей (i+D-й JАдрес следующей (i+D-й Jкомандыкомандыкомандыкоманды
56
56
Порядок
Порядок
Мантисса (число)
Мантисса (число)
Знак мантиссы
Знак мантиссы
И 12
И 12
Знак _f порядка
Знак _f порядка
а
а
Код рре- денной i-й комавХы
Код рре- денной i-й комавХы
Код предыдущей <Н1Ьй
Код предыдущей <Н1Ьй
Код предыдущей (i-2)产 команды
Код предыдущей (i-2)产 команды
Адрес следующей (i+D-й J
Адрес следующей (i+D-й J
команды
команды
команды
команды
б
Рис. 3.1. Индикатор микрокалькулятора М.К-61: а ——вос-произведение чисел с десятичным порядком; 6 ——воспро-изведение кодов команд и адреса команды в режимепрограммирования
Структурная схем а микрокалькулятора. МК состоит из клавиатуры, индикатора, большой интегральной схемы БИС (собственно ЭВМ), корпуса, аккумулятора. БИС включает запоминающие устройства (ЗУ), арифметико-логическое устройство (АЛУ), устройство управления (УУ) с генератором тактовых импульсов (ТГ) и устройство управления вводом и выводом данных и команд (УУ Вв-Выв).
Запоминающие устройства служат для хранения данных и программ и включают следующие виды памяти.
Постоянное запоминающее устройство (ПЗУ), в котором хранятся все программы выполнения команд и стандартных функций. Эта память пользователю недоступна, а программы включаются соответствующими клавишами команд.
Адресуемая память (рис. 3.2) предназначена для хранения данных (чисел). Она состоит из 15 регистров: RGO, RG1,RG9, RG。,…,RGe. Запись в память (т. е. в любой регистр) осуществляется последовательным нажатием двух клавиш: х-> П (память)' и соответствующей цифры 0, 1,…,9 или буквы a, b, с, d, е.
ЗасылкаЗасылкаСчитываниеСчитываниеXХ1XХ1т Zт ZСчитывание из любого регистра памяти выполняется последо* вательным нажатием клавиши извлечения из памяти П->х и клавиши, соответствующей номеру регистра: 0, 1,...
Засылка
Засылка
Считывание
Считывание
X
Х1
X
Х1
т Z
т Z
Рис. 3.2. Запоминающие устройства микрокалькулятора; а — адресуемая память: 0,1,..., е — имена регистров RGO, RGI,..., RGe;
6 — стековая память; XI, X, У, Z, Т — названия регистров памятиRGX1, RGX, RGY, RGZ, RGT; в — программная память; 00,01,97 — адреса ячеек памяти
Стековая (магазинная) память предназначена для промежуточного (оперативного) хранения чисел, участвующих непосредственно в выполнении операций. Она состоит из четырех регистров, условно обозначенных буквами X, Y, Z, Т, и одного вспомогательного XI——регистра предыдущего результата. Память работает по принципу《магазина винтовки»—первым вошел, последним вышел. Основной регистр стека — X. Он непосредственно соединен с индикатором и клавиатурой, т. е. число, находящееся в RGX, непосредственно воспроизводится на индикаторе, и число, набираемое на клавиатуре, непосредственно попадает в RGX.
Если теперь нужно заслать в стековую память второе число, оно поступает в RGX, а первое пересылается в RGY. Если засылаем третье число, то оно поступает в RGX, а второе и первое соответственно пересылаются в RGY и RGZ. Наконец, если заслать еще одно четвертое число, то числа размещаются так: четвертое —— RGX, третье — RGY, второе — RGZ, первое — RGT.
При вызове чисел из стековой памяти считывается первым четвертое число из RGX. Все остальные пересылаются, вниз: третье — в RGX на место четвертого, второе — в RGY и первое — в RGZ. И если требуется считать первое число, нужно прежде считать третье, затем второе и только после этого первое. При каждом считывании числа пересылаются вниз к RGX.
Заметим также, что при выполнении двуместных (т. е. с двумя числами) операций числа размещаются в RGX и RGY. Одноместные операции (например, cos. In и др.) выполняются над числом в RGX.
Г^1 [ 士] [ аг ] [ в/о] [ с/п ] LO L1 L2 L3QQQQQ$m【X} 8s {X} ta тех V 1/ХsirT4 |x| 8「i ЗН to~1 0* я О * х2ооиооеХ lg In F Х^З” Bx СЧ10ХНОП。А АВТ V ПР「④ CF ИНВвойий abedГ^1 [ 士] [ аг ] [ в/о] [ с/п ] LO L1 L2 L3QQQQQ$m【X} 8s {X} ta тех V 1/ХsirT4 |x| 8「i ЗН to~1 0* я О * х2ооиооеХ lg In F Х^З” Bx СЧ10ХНОП。А АВТ V ПР「④ CF ИНВвойий abed
Г^1 [ 士] [ аг ] [ в/о] [ с/п ]
LO L1 L2 L3
QQQQQ
$m【X} 8s {X} ta тех V 1/Х
sirT4 |x| 8「i ЗН to~1 0* я О * х2
ооиоо
еХ lg In F Х^З” Bx СЧ
10ХНОП。А АВТ V ПР「④ CF ИНВ
войий abed
Г^1 [ 士] [ аг ] [ в/о] [ с/п ]
LO L1 L2 L3
QQQQQ
$m【X} 8s {X} ta тех V 1/Х
sirT4 |x| 8「i ЗН to~1 0* я О * х2
ооиоо
еХ lg In F Х^З” Bx СЧ
10ХНОП。А АВТ V ПР「④ CF ИНВ
войий abed
Программная память предназначена для хранения составленных пользователем программ. Она состоит из 98 ячеек соответственно с адресами: 00, 01,..., 97. Доступ к ячейкам памяти будет описан ниже.
ВЫЧИСЛЕНИЯ БЕЗ СОСТАВЛЕНИЯ ПРОГРАММ
Рассмотрим клавиатуру для решения инженерных задач без составления программ и использования программной памяти.
Клавиатура МК «Электроника МК-61» (рис. 3.3) включает 30 клавиш, из которых 2 выполняют только по одной операции (клавиши F и К), 13 — каждая по две операции (основную и совмещенную) ,10 — по три ■операции (основную и две совмещенные) и 5 — по четыре. Основная операция обозначена на самой клавише, а обозначения совмещенных операций даны над клавишей.
Рассмотрим клавиши основных операций.
Префиксные {п р и с т а в о ч н ые) клавиши.
F — основная префиксная клавиша, она нажимается для выполнения совмещенной операции. Если основная операция выполняется прос-
ТО нажатием клавиши, ТО рпс 3 3 Клавиатура микрокалькулятора МК-61 совмещенная ——последовательным нажатием префиксной F и соответствующей клавиши, над которой у верхнего левого угла или в центре дано обозначение совмещенной операции.
К — косвенная префиксная кладиша. Она используется при выполнении косвенных переходов, косвенных обращений к адресуемым регистрам и ряда дополнительных операций, обозначение которых дано над клавишей у ее верхнего правого угла.
Кл а в иши ввода чисел.
0, 1,..., 9,.——клавиши ввода чисел-констант и дробной разделительной запятой (или точки). Числа вводятся, начиная со
старшего разряда. При вводе отрицательных чисел знак минус вводится после ввода самого числа.
/——/ ——клавиша смены знака числа и знака порядка числа. Используется при вводе отрицательных значений.
ВП — подготовительная клавиша для ввода порядка числа. Числа (константы) с порядком, например—2,375-10-7, вводятся в следующей последовательности:
вводится мантисса (само число) 2,375;
если мантисса отрицательная, то нажимается клавиша смены знака /—/;
нажимается клавиша ввода порядка ВП, при этом на индикаторе в разрядах 11 и 12 появляются 00;
вводится порядок 7;
если порядок отрицательный, то нажимается клавиша смены знака /—/.
Клавиши основных арифметических операций»
X, +, 4-,клавиши соответственно умножения, сложения^ деления, вычитания.
Кл а в и ши управления стеком.
Сх — сброс содержимого регистра X, г. е. в регистр засылается ноль: 0->(RGX), где обозначение регистра в скобках означает содержимое этого регистра.
Bf ——продвижение числа в стеке вверх по следующей схеме:
При нажатии клавиши ВТ число из RGX дублируется в RGY, число из RGY переходит в RGZ, число RGZ переходит в RGT, т. е. все числа пересылаются вверх на один регистр; предыдущее число RGT стирается.
Клавиша В, используется для разделения вводимых подряд чисел. Например, если нужно на МК перемножить два числа 37 и 8,9, то в этом случае вводят первое число, затем нажимают клавишу Bf, затем вводят второе число и нажимают клавишу умножения X, т. е. 37 Bf 8,9X.
^-> — клавиша обмена содержимого между регистрами RGX и RGY по схеме:
Т т
Z 2
Продвижение чисел в регистрах стека автоматически происходит также при выполнении следующих операций:
засылка числа в RQX продвигает стек вверх по схеме, как при нажатии клавиши В,:
из другого регистра или с клавиатуры
Знак арифметических операций (т. е. выполнение двухместных операций) продвигает стек вниз с получением результата в RGX и засылкой предыдущего результата в RQX1 по схеме:
Клавиши упр авления адресуемой памятью.
х->П — клавиша засылки в адресуемый регистр. Чтобы заслать число в 力й адресуемый регистр, нажимают вначале клавишу П, а затем клавишу i-й цифры (буквы), означающей номер регистра:П/, где(= (0, 1,..., 9, а,..., е). При этом чис
ло пересылается из регистра X в регистр г (RQX) -> (RGf), где (RGi), (RGX)—содержимое регистров RGi и RGX соответственно, f знак пересылки из RQX в RGL Например, если число нужно заслать в RGi, то число вначале набирается на клавиатуре, т. е. вводится в RGX, а затем нажимаем последовательно клавишу х->П и клавишу 厶
П х ——клавиша извлечения из памяти. Чтобы извлечь число из t-го адресуемого регистра, нажимают клавишу П->х, а затек клавишу z-й цифры или буквы: П->Х1, где 1= (О, 1,..., 9, а,..., е). При этом число пересылается из RGi в RQX: (RGi) -> (RQX).
Рассмотрим теперь совмещенные операции. Поскольку совмещенные операции выполняются при нажатии вначале префиксной клавиши F или К, а затем соответствующей клавиши, над которой дано обозначение совмещенной операции (слева — с клавишей F, справа — с клавишей К), все эти операции будем записывать с обозначением префиксной клавиши F или К.
Операции стандартных функций (выполняются с префиксной клавишей F).
F sin, F eos, F tg — тригонометрические функции;
F sin-1, Fcos-1, F tg-1 — обратные тригонометрические функции;
FIn, Fig — логарифмы;
Fxy, F 10х, F% Fx2, F 1/X — степенные функции и обратное деление.
Для выполнения операций число берется из регистра X. Для двухместной операции ху числа берутся соответственно из регистров RGX и RGY. Например, если нужно найти синус числа, число следует заслать в RGX, а затем последовательно нажать клавиши с sin [х],
г ―I, где sin — совмещенная операция, а 7 — основная (вэтой
операции число 7 и операция [xj не участвуют) .
Опер ации управления стеком (выполняются с префиксной клавишей F)
F Вх — восстановление предыдущего результата передвигает стек вверх по схеме:/
Здесь из регистра предыдущего результата RQX1 число переходит и дублируется в регистрах: (RGX1) -> (RGX). Все остальные числа продвигаются в стеке вверх, а из регистра Т число стирается.
F CF —сброс действия префиксной клавиши F.
F「一кольцевое передвижение чисел в стеке вниз по схеме:
Здесь число из регистра X передается в регистр Т и дублируется в регистре XI. Если выполнить четыре раза подряд операцию кольцевого передвижения, то получим исходный вариант: число, расположенное в RQX до операций, вновь возвратится в RGX.
Засылка в регистр предыдущего результата происходит также при выполнении всех совмещенных операций стандартных функций (F sin, F cos,...) по схеме.
тт
zz
YY
工Х1
числа и чиселчисла и чисел
числа и чисел
числа и чисел
Например,
12,345
К[х]
12
Индикация
Команда
Индикация
(введено число)
целой части
К{х} — выделение дробной части числа.
Например,
12,345
К{х}
3.45 — 01
Индикация
Команда
Индикация дробной1
(введено число)
части 0,345
К |х| — определение
абсолютного значения числа.
Например,
—67.891
к |х|
67.891
Индикация
Команда
Индикация абсолют-
(введено число)
ного значения числа
К ЗН — определение знака числа.
Например,
—4
К ЗН
—1
10
к ЗН
1
Индикация
Команда
Индикация знака
(введено число} К max — определение
максимального
значения из двух чиселг
расположенных в RQX и Например,
70.2f (RGY)
43.1 f (RGX)
RGY.
К шах
70.2
Числа в RQ
Команда
Индикация макси-
стека
мального числа
Операции выделен и я частей (выполняются с префиксной клавишей К).
К [х] — выделение целой части числа.
К СЧ ——генерация случайного числа в интервале от 0 до 1.
На индикаторе появляется положительное случайное число, меньшее единицы.
Пер евод временных и угловых величин из: о дн их величин в другие (выполняется с префиксной клавишей К).
К О'" — перевод величин в часах, минутах, секундах и долях секунды в величины в часах и долях часа.
Например, перевод величины 10 ч 26 мин 38 с
10.2638К 产10.443886
ИндикацияКоманда Индикация величины
исходной величиныв часах 10,443886 ч
10 ч 26 мин 38 с
К О'” 一перевод величины в часах и долях часа в величину в
часах, минутах, секундах и долях секунды .Например, перевод величины 21,608 ч
21.36288Индикация резуль-тата21 ч 26 мин 28,8 с21.36288Индикация резуль-тата21 ч 26 мин 28,8 с21.608К 戸
21.36288
Индикация резуль-тата21 ч 26 мин 28,8 с
21.36288
Индикация резуль-тата21 ч 26 мин 28,8 с
ИндикацияКоманда
величины в часах
минутах и доляхминутах и доляхК» — перевод угловой величины в градусах,
минутах и долях
минутах и долях
минуты в величину в градусах и долях градуса Например, перевод величины 36°27‘
36.27К 不36.45
ИндикацияИндикация
36°27‘Команда36,45°
К О'—— перевод угловой величины в градусах и долях градуса
к*о'Командак*о'Командав величину в градусах, минутах и долях минуты. .Например, перевод величины 80,8°
к*о'
Команда
к*о'
Команда
80.8Индикацияисходной80.8Индикацияисходной80.48
80.8
Индикацияисходной
80.8
Индикацияисходной
Индикация резуль-тата 80о48Л
величины
Пример 3.1. Найти функцию у= “'" S+g при задан- 严一匕前
ных аргументах а, Ь.
Прежде чем решать задачу на МК, выберем регистры для размещения аргументов и функций. Для размещения а и Ь выберем соответственно регистры а и Ь, а для функций у ——регистр с.
Зашлем а н В в RGa и RGb:
а л^П а
Ъ л->П b
Запишем последовательность решения задачи таблицей (табл. 3.1).Таблица 3.1
Нажимаемые
Пересылка чисел в регистрах стека
Содержимое регистров стека — RGa; RGY;
клавише
RGZ; RGT
П->ха
…(RGX)
a
口 f % 6
»(RGX); — (RGY)
b; a
(RGX)
a + b
F sin
sin (a+力)(RGX)
sin (a + 6)
F/
sin2 (a+匕)f (RGX)
sin2 (a + b)
…(RGX); sin2 (a+b) f (RGY)
a; sin2 (a + &)
a sin2 (a + 匕)f (RGX)
a sin2(Q + 匕)
0,3
0,3 f (RGX); a sin2 (a+ b) f (RGY)
0,3; a sin2 (a + 6)
F 10х
10°,3f (RGX);
IO0-3; a sin2 (a + b)
10
П x a
af (RGX); 10。,3f (RGY); a sin2 (a +方)f (RGZ)
a; IO0-3; a sin2 (a*6)
Продолжение
№ ц/п
Нажимаемые клавиш»
Пересылка чисел в регистрах стека
Содержимое регистров стека —RGX; RGY; RGZ; RGT
11
口 f % 6
& f (RGX); a + (RGY);100,3 -*-
6; a; 100-3; a sin2 (a+b)
f (RGZ); a sin2 (a+b)f (RGT)
12
X
曲f (RGX); 10°,3f (RGY);
a sin2 (a+6) f (RCZ)
ab\ IO0-3; a sin2 (a+b)
13
F厂
而—(RGX);
У@Ь; 100'3; a sin2 (a+6)
14
一
1Оо,з(RGX);a sin? (。+
10о,з — 丫曲;a sjn2(a+&)
+ XRGY)
15
(RGX)
y—(asin2 (a+6))/
/(IO».3 —Va&)
16
Г1 C
A (RGc)
Расчет начнем со сложения а + b. Для этого числа а и & нужно выбрать из RQa и RGb (операции 1 н 2). При выполнении 1-й операции число а поступает в RGX, при второй—число а передается в RGY, а число b поступит в RQX. При выполнении 3-й операции (сложение) результат будет в RGX. В операциях 4 и 5 изменяется лишь содержимое RGX, которое будет равно sin2(а+ 6). Для получения числителя считываем а из R&a (операция 6), при этом число, равное sin2 (a+b)t переходит по стеку в RGY. Затем умножаем (операция 7).
Результат умножения @sin2(a + b) будет в RGX, т. е. получен числитель выражения искомой функции у.
Приступаем к расчету знаменателя. Вводим число 0,3 (операция 8). Оно поступает в RGX, а числитель a sin2 (а+ 6) переходит в RGY. В операции 9 получаем 100'3. Теперь считываем из RGa число а (операция 10). Предыдущие числа 10°,з и a sin2 (а + Ь) переходят по стеку вверх соответственно в RGY и RGZ. При считывании числа b из RGb (операция И) число поступает в RGX, а все три шредыдущие числа а; 10°*3; а sin2 (a+b) продвигаются в стеке вверх и занимают соответственно регистры RGY, RGZ и RGT.
При умножении ab (операция 12) числа продвигаются вниз. В 13-й операции получаем fab. Затем получаем знаменатель, производя операцию вычитания 100-3 — ^ab (операция 14). В результате этой операции числа продвинулись снова вниз, и теперь числитель расположен в RGY. Остается выполнить операцию деления (операция 15) и заслать согласно условию задачи результат в RGc (операция 16).
Если нет необходимости комментировать операции и показывать пересылку чисел в стеке (см. столбец 3, табл. 3.1), то последовательность решения задачи (т. е. последовательность нажатия клавиш) можно записывать в строчку в следующем виде:
(3.1)(3.1)П->х а П+х b+F sin F х2 П+х а х 0,3 F х2 П->х а П-^х bXF У? х->Пс
(3.1)
(3.1)
В дальнейшем при необходимости пояснений в столбце «Комментарий» будем давать лишь само содержимое регистров стека без указания их обозначений и стрелки передачи. Поскольку регистры изображаются в последовательности: RGX, RGY, RGZ, RGT, то в этой последовательности будет даваться их содержимое: на 1-м (левом) месте содержимое RGX, на 2-м — RGY и т. д. Обозначение регистров будем применять для RGX1 и регистров адресуемой памяти (см. столбец 4, табл. 3.1).
Пример 32 Вычислить среднее значение 〃ср и среднеквадратичное отклонение о(х ряда чисел ab a^..., an. Используем формулы:
Примем следующую последовательность расчета. Вначале от редел им две суммы: Si = W & и 兔=,吟,а затем по формулам (3.2) рассчитаем %р и aa.
Первую сумму лолучаем путем последовательного и л-крат- ного выполнения двух операций — ввода числа и сложения:
°'в ^*+ ^+ Л12 3 4 5 6 и°'в ^*+ ^+ Л12 3 4 5 6 и吁(RGX)
°'в ^*+ ^+ Л12 3 4 5 6 и
°'в ^*+ ^+ Л12 3 4 5 6 и
>"(RGY) a2—^(RGX) a【+a2f (AGX) a3"+(RG义);tX[ +a2"+(RGY) Q【H-^-J-Gts—>-(RGX)
При суммировании n чисел будет выполнено 2п операций (шагов). Окончив суммирование, зашлем сумму s± в RG0, нажав клавиши ПО Si-> (RG0).
Аналогично можно получать и вторую сумму s2 — сумму квадратов. Отличие будет только в дополнительной третьей операции ―• возведение в квадрат. Получаем следующую последовательность операций: a1Fx2a2Fx2 + a3Fx2 + и т. д. Всего будет Зм ——1 операций.
После получения второй суммы обе суммы будут находиться в регистрах: (RGX)~S2; (RGY)—s^ а также (RGO) -^-si. Теперь рассчитаем искомые величины по формулам (3.2):
1234567891011212345678910112%тГИs什(RG1); (RGY)
12345678910112
12345678910112
s【f (RGX); S2~*(RGY)
n拉f (RGX); s】f (RGY); slIRGZ)
+tXcp=Si/?i—>(RGX) j M—>(IRGX1)
х—>П2 tXcp-^-(RG2)
F Bxn-^(RGX); %p->(RGY)
Bfrif (RGX); ri—(RGY); acpf (RGZ)
В彳"f (RGX); /if (RGY); — (RGZ); Ocpf (RGT)
If (RGX); IRGY);…(RGZ); %p+(RGT)
—(m—l)f (RGX); "f (RGY); %pf (RGZ)
F 1/x1/5—1)+(RGX); n->(RGY); acp-^(RGZ)
X "/S—l)f (RGX); Qcpf (RGY); l/(n—l)-^(RGXl)
13
F Вх
14
П->х1
15
X
16
17
Elf х 2
18
F Х2
19
X
20
/-/
21
+
22
F У
В приведеннойВ приведенной1/(1)+(RGX); п/(л—1)->(RGY)
В приведенной
В приведенной
工出什(RGX); l/(n—1)->(IRGY); n/(n—1)->(RGZ)
EM/S—1)->(IRGX); n/(n—1)->(RGY)
n/(n—l)-^(RGX); 2。2"(打_i)->(RGY)
acpf (RGX); n/(n—1)->(RGY);,*/(%—g(RGZ) a%pT"(RGX);
a2cp n/(n—l)-^(RGX); Ea%/S—l)f (RGY)
—a^cp.%/ (也—l)f (RG 文 j;
2a2:/(n—1)—a2cpn/(n—i)f (RGX)
aa~*"(RGX)
последовательности в первой операции полу
ченная сумма квадратов s2 засылается в RG1. Затем пересылаем первую сумму 斗 в RGX из RGY. Операциями 3 и 4 получаем среднее значение аср и засылаем его в RG2 (операция 5). Чтобы не вводить повторно п, операцией 6 восстанавливаем п, а операциями 7 и 8 дублируем п в RGY и RGZ для удобства дальнейших расчетов. Затем последовательно лолучаем п—1, 1/(〃一1) и л/(п——1). Операцией 13 восстанавливаем 1/(п—1), операциями 14 и 15 считываем из RG1 сумму квадратов и получаем первый член подкоренного выражения формулы (3.2). Операциями 16—19 получаем второй член подкоренного выражения. Поскольку члены расположены в RGX и RGY наоборот, то перед вторым членом ставится минус (операция 18), а затем выполняется операция сложения.
Результаты расчетов находятся в следующих регистрах: (RG 0)=iai: (RG 1) = 2吋;(RG2) = аср; (RGX) = 2=1i = l
В приведенном варианте решения с раздельным получением сумм приходится вводить в машину каждое число дважды. Рассмотрим вариант совмещения процесса получения сумм при однократном вводе каждого числа. Причем одну сумму будем накапливать в регистрах стека, а другую ——в адресуемой памяти.
«1
а】一>(RGX)
ВТ
吁(RGY)
F х2
蹈+ (RGX)
Г! 1
吟 + (RG1)
。什(RGX);玛f(RGY)
&
。什(RGX); a】f (RGY); o^—(RGZ)
+
。[+a2-^(RGx); tXL>(RGXl)
8
F Вх
Q2f (RG文);Q] +Q2~^(RGY)
9
F х2
吟—(RGX);
10
П->х 1
。21f (RGX); 6?什(RGY);。】+。2f (RGZ)
11
+
Q%+Q2什(RGX); Qi+Q什(RGY)
12
х->П1
* + 吟+(RG1)
13
%+『(RGX);*+淤l政y)
14
03f(RGX);a[+0什(R6y);-(RGZ)
15
+
tXi 4-6X2+^3~*"(IRGX); tXg—>(RGX1)
16
F Вх
的7"(RGX);a1 +02+a3+(RGY)
17
F %2
。23f (RGX)
18
П->х 1
。2【+。2什(RGX); a23f (RGY); aI+a2-J-a3->(RGZ)
19
+
tx2[H-tx^+tx^—>(RGX) j a1+02+a3~>(1?6y)
20
х+ГП
*+a%+a23f (RG1)
21 и т.
Д-
。【+1^2+^з-^(RGX); * +a%+。23f*(RGY)
В операциях 1——5 получаем начальное значение сумм: для суммы чисел в RQX: (RQX)—的 н суммы квадратов чисел в RG1: 哈 f (RG1).
Операции 6—13 — получение сумм двух членов; 14—21—трех и т. д. В результате (8п — 3)-х операций получаем
£а( f (RGX) и 士 ajf (RG 1). t=lj=l
Логические операции (выполняются с префиксной клавишей К)・ В машине предусмотрены следующие четыре операции:
КА — поразрядное логическое умножение (операция 《И» — конъюнкция);
KV — поразрядное логическое сложение (операция «ИЛИ» — дизъюнкция);
К® — поразрядное логическое сложение по модулю 2 (операция «Исключающее ИЛИ»);
К ИНВ — поразрядная логическая операция инверсии.
Логические операции производятся поразрядно с двумя (или одной при инверсии) логическими константами, которые записываются в шестнадцатеричных кодах. Каждый шестнадцатеричный разряд величины в свою очередь записывается 4-разрядным двоичным кодом. В совокупности эти 4-разрядные двоичные коды составляют 16 различных двоичных одноразрядных констант (табл. 3.2). Для 'их индикации использованы 16 символов: десять цифровых: 0, 1,..., 9, пять специальных: —, L, С, Г, Е и пробел (символ не высвечивается). Однако прямой ввод возможен только девяти констант клавишами: 0, 1,...,8. Константы 9, 10,...»15 можно вводить двумя величинами с использованием логического сложения (операции «ИЛИ»).
Таблица 3.2
В десятичном коде
В двоичном коде
Вводятся клавишами
Инициируются символами
0000
0001
0010
ООН
0100
0101
оно
0111
1000
1001
8 и 1
10
1010
8 и 2
11
1011
8 и 3
12
1100
8 и 4
С
13
1101
8 и 5
Г
14
1110
8 и 6
Е
15
1111
8 и 7
Пробел
Логическая величина может содержать не более семи шестнадцатеричных разрядов. Учитывая то, что каждый шестнадцатеричный разряд содержит четыре двоичных разряда, машина одной логической операцией реализует 28 логических схем с двумя входами (кроме инверсии), описанных в п. 1.2. Старший (восьмой) разряд используется как признак логической константы. При вводе логических констант необходимо набирать в старшем разряде незначащую цифру, отличную от нуля.
При индикации в старшем разряде воспроизводится цифра 8 как признак логической константы. Рассмотрим примеры.
Логическое сложение двух величин y = %iV%2・ Пусть %丄=8618408 и %z= 7887635. Переведем поразрядно в двоичный код в соответствии с табл. 3.2. Затем выполним поразрядное логическое сложение. Полученный результат переведем из двоичного (логического счисления) в шестнадцатеричный код:
Х[=1000ОНО 0001юоооюо. оооо юоо
Vx2=01111000 10000111ОНО ООП 0101
у=11111110 10011111ОНО ООП 1101
一Е 9—6 3r
Используем символ 1 (отличный от нуля) для заполнения старшего разряда и запишем последовательность нажатия клавиш:
18618408 Bfl.7 887635 KV
на индикаторе получцм результат:
8,-Е9-63Г
где цифра 8 в старшем разряде является признаком выполнения логической операции, — обозначен пробел.
В данном примере исходные константы имеют символы не более 8. Рассмотрим пример, когда в исходных константах необходимо иметь шестиадцатеричные коды более 8.
Логическое умножение двух величин у=Х1Д%2* Пусть %】= = Еш8шГЬ7 и %2 = 89—ljC08. Чтобы ввести эти константы цифровыми клавишами, разложим их на логическую сумму двух соответствующих констант, одна из которых будет состоять из кода 8 в тех разрядах, где величина разряда больше или равна 8, или из кода 0, если величина разряда меньше 8:打=8888880+6707537; х2=8888808 + 0127400.
Полученные четыре константы будем вводить и обрабатывать в следующей последовательности. Введем 1-ю, а затем 2-ю часть величины %]. Выполним логическое сложение двух частей и получим значение %厶 Затем повторим то же самое с величиной х2. Имея две величины %】и %厶 выполним логическую операцию умножения. Покажем все это в двоичных кодах:
8888880 = 1000 1000 1000 1000 1000 1000 0000
V 6707537 = 0110 0Ш (ЮОО 0Ш 0101 (ЮН 0111
Е^8^ГЬ7 = 1110 1111 1000 1111 1101 1011 0111
8888808 = 1000 1000 1000 1000 1000 0000 1000
V 0127401 = 0000 0001 0010 0111 0100 0000 0001
打=89——C09 = 1000 1001 1010 1111 1100 0000 1001
修=1110 1111 1000 1111 1101 1011 0111
V x2 = 1000 1001 1010 1111 1100 0000 1001у = 1000 1001 1000 Till 1100 0000 0001
' ' 4 S '、«~, J、~—„ ^、 „ ' '
y=89О 1
Примем 1 в качестве признака логической константы в старшем разряде обеих величин и запишем последовательность нажатия клавищ^ 1 8 8 8 8 8 8 0 BfJ 6707537 KV 1888880 8 Bf 1 0 1 2 7 4 0 1 KV F И КА- На индикаторе получим результат 8, 8 9 8lj COL
Сложение по модулю 2y = %i V х2. Пусть Xi=30880, х2=80001. Переведем константы в. двоичный код. Выполним поразрядно логическое сложение по модулю 2 (исключающее «ИЛИ»). Полученный результат переведем в шестнадцатеричный код, который будет высвечиваться на индикаторе:
修=ООП оооо юоо юоо оооо
V
х2 = 1000 0000 0000 0000 0001
7 = 1011 0000 1000 1000 0001
L О 881
Запишем последовательность нажатия клавиш: 1 3 0 8 8 0 Bf 1 8 0 0 0 1 К |±1 • На индикаторе получим результат: 8, L 0 88 1.
Инверсия числа. Пусть х=112. Преобразуем в двоичный код 尤= 0001 0001 0010. Инверсия этого кода будет х = = 1110 1110 1101. Переведем в шестнадцатеричный код х=Е Е Г. Запишем последовательность нажатия клавиш, используя единицу в старшем разряде величины: 1 1 1 2 К ИНВ. На индикаторе получим: 8, Е Е Г.
3.3. ВЫЧИСЛЕНИЯ ПО ПРОГРАММАМ
Программа представляет собой последовательность команд (нажимаемых клавиш), подобно тому, как это показано в табл.3.1, столбец 2. Номера по порядку (столбец 1) фактически и будут составлять адреса ячеек памяти, кроме константы 0,3 (п. 8). Для ее записи потребуются три ячейки памяти по одной на каждый- знак, включая запятую.
Для набора программы используются все выше рассмотренные клавиши и, кроме того, следующие специальные клавиши для программирования.
Кл а ви атур а, предназначенная специально для программирования, включает шесть основных операций (клавиш) и 11 совмещенных.
шг —клавиша потактового прохождения (просмотра)' программы——один шаг вперед. При нажатии клавиши в счетчик адреса команд засылается единица: (СчАК) = (СчАК) + 1, а в программной памяти подключается следующая ячейка.
ШГ — клавиша потактового прохождения программы назад — один шаг назад. Счетчик адреса команд работает по выражению (СчАК) = (СчАК) —1.
Клавиши ШГ и ШГ используются в режиме программирования ПРГ при редактировании программы.
БП — клавиша безусловного перехода.
Безусловный переход БП должен содержать адрес ячейки, куда совершается переход. Поэтому команда БП размещается в двух ячейках памяти (рис. 3.4, а); в ячейке с адресом 10 размещается
Рис. 3.4. Примеры размещения команд переходов в программной памяти: а — безусловный переход, БП ——команда, 17 — адрес перехода; б — условный переход: FX=0 — команда, 10—адрес перехода; в — команда цикла, FLO — команда, 19 — адрес начала цикла
Клавиши В/О, С/П, ПП выполняют разные операции в зависимости от режима работы микрокалькулятора (табл. 3.3).
Таблица 3.3
Клавиши
Режим ПРГ
Режим АВТ
в/о
Возврат из подпрограммы
Установка на нулевой адрес программной памяти (адрес 00)
с/п
Стоп
Пуск (нлн стоп при автоматическом выполнении программы)
ПП
Переход к подпрограмме
Потактовое выполнение программы
В режиме программирования ПРГ клавиши ПП и В/О выполняют команды перехода из основной программы в подпрограмму и обратного возврата в основную программу (рис. 3.5). Подпрограмму обычно организуют тогда, когда в основной программе имеется несколько одинаковых участков. Эти одинаковые участки выделяют в подпрограмму и исключают их из основной программы. А там, где эти участки были в основной программе, размещают команду ПП, которая передает управление на начальный адрес подпрограммы. Последней командой в подпрограмме является команда В/О, которая возвращает вычислительный процесс обратно в основную программу. Подпрограмма размещается в той же программной памяти. Команды ПП и В/О изменяют содержимое счетчика команд (СчАК).
оо
ПППППереход наПереход наподпрогподпрограммурамму8080ПППП8080|\|\с/пс/п8/08/0ВозвратВозвратиз подпрогиз подпрограммыраммыI/ VI/ VОсновная〉прог-раммаОсновная〉прог-раммаПодпрограммаПодпрограмма9797
ПП
ПП
Переход на
Переход на
подпрог
подпрог
рамму
рамму
80
80
ПП
ПП
80
80
|\
|\
с/п
с/п
8/0
8/0
Возврат
Возврат
из подпрог
из подпрог
раммы
раммы
I/ V
I/ V
Основная
〉прог-рамма
Основная
〉прог-рамма
Подпрограмма
Подпрограмма
97
97
Рис. 3.5. Примеры размещения Команд переходов к под-программе: ПП — команда перехода к подпрограмме;80 — адрес перехода (начала подпрограммы); В/О —команда возврата из подпрограммы
В режиме автоматической работы АВТ клавиша В/О устанавливает счетчик адреса команд на нулевой (исходный) адрес 00: 00f (СчАК); клавиша ПП производит операцию потактового выполнения программы. Каждое нажатие клавиши ПП вызывает выполнение одной команды программы и переход на следующий адрес: (СчАК) = (СчАК) + 1.
Клавиша С/П в режиме ПРГ запускает команду останова программы. Путем нажатия этой клавиши в режиме АВТ програм-
ма запускается на исполнение (пуск программы). Нажатие клавиши С/П при выполняемой программе приводит к останову программы.
Рассмотрим теперь совмещенные операции.
переход в режим программирования.
переход в режим автоматической (обычной) работы.
РПРГ — FABT —FX<0FX=0 FX^O FX*0РПРГ — FABT —FX<0FX=0 FX^O FX*0команды условных переходов.
РПРГ — FABT —
FX<0
FX=0 FX^O FX*0
РПРГ — FABT —
FX<0
FX=0 FX^O FX*0
Рис. 3.6. Алгоритмы условного перехода (а) н цикла (б)Рис. 3.6. Алгоритмы условного перехода (а) н цикла (б)Продолжение программыПродолжение программыКоманды условных переходов FX*0 (где *—условия: <» = ,》,#,т. е. х<0, х=0, %》0, х=#0) работают то принципу — если условие не выполняется, условный переход будет совершен и, наоборот, если условие выполняется, то условного перехода не будет. Команда условного перехода занимает две ячейки памяти. В первой записывается сама команда с условием, а во второй—* адрес перехода (см. рис. 3.4, б). Команда включает следующие операции (рис. 3.6, а):
Рис. 3.6. Алгоритмы условного перехода (а) н цикла (б)
Рис. 3.6. Алгоритмы условного перехода (а) н цикла (б)
Продолжение программы
Продолжение программы
содержимое (RGX) сравнивается с нулем;
если условие * не выполняется (нет), то программа переходит на следующую ячейку памяти, где содержится адрес перехода; в счетчике адреса команд (СчАК) устанавливается этот адрес, и совершается переход по указанному адресу;
если условие выполняется (да), машина перескакивает через ячейку, где записан адрес перехода, и продолжает выполнять программу, не совершив условного перехода
0 12 3LLLLFFFF0 12 3LLLLFFFFкоманды цикловкоманды циклов
0 12 3LLLLFFFF
0 12 3LLLLFFFF
команды циклов
команды циклов
Команды циклов организуют цикл, используя для переменной цикла соответствующий регистр: RG0 — при команде FLO; RG1 — при FL1; RG2 — при FL2; RG3 ——при FL3. Команда размещается в двух ячейках памяти (см. рис. 3.4, в): в 1-й ——сама команда с
указанием номера используемого регистра, во 2-й записывается адрес начала цикла. Команда выполняет следующие операции (рис. 3.6, б). Модифицирует (изменяет) на минус единицу содержимое регистра цикла Rd, по выражению: (RGi) =(RGi) — 1, где i= (0, 1, 2, 3). Содержимое RGi сравнивает с нулем. Если содержимое не равно нулю, т. е. условие (RGi)=0 не выполняется (нет), программа переходит к следующей ячейке, где размещен
адрес перехода, т. е. адрес начала цикла; счетчик адреса команд (СчАК) устанавливается на считанный адрес, и программа возвращается на начало цикла. Если же содержимое регистра RGi стало равным нулю, т. е. если условие (RGi)=0 выполняется (да),
программа пропускает один адрес, выходит из цикла и продолжает программу.
К НОП ——команда «нет операций», применяется в том случае, когда при редактировании нужно исключить ненужную команду и не переписывать в памяти всю программу. Команда К НОП за
писывается на место удаляемой команды.
Этапы программирования. Общая последовательность подготовки и решения задач на микрокалькуляторах по программам обычная (см. рис. 2.1). Она включает известных два первых этапа: математическая формулировка задачи и алгоритмизация. Однако последующие этапы имеют свои особенности.
После формулировки задачи и построения алгоритма (если в этом возникла необходимость) выполняются следующие этапы: составление программы ((программирование задачи);
ввод программы в память и ее редактирование;
отладка программы на простых исходных данных;
ввод исходных данных задачи и выполнение программы.
Составление программы. Подробно программу составляют в виде таблицы со столбцами.
Адрес команды. Начальный адрес обычно 00. Но он может быть любым. Дальнейшие адреса должны быть последовательные: 00—01—02 и т. д. Максимальный адрес — 97.
Клавиши, записывающие соответствующую команду. На одну команду их может быть от 1 до 3.
Код команды. Каждая команда имеет свой двухсимвольный код. В качестве символов используются цифры: 0, 1,..., 9 и еще. пять добавочных специальных символов: — L Г С Е.
Всего в микрокалькуляторе 214 кодов (табл. 3.4). Коды используются для контроля правильности ввода и расположения команд в памяти. Они выводятся на индикатор в режиме ПРГ.
Комментарий, для пояснений действий команд.
Составление программы рассмотрим на следующем примере.
\ 2-я \циф- \₽а
1-я \ циф-\ ра \
О
1
2
3
4
5
6
7
8
9
—
L
С
Г
E
0
0
1
2
3
4
5
6
7
8
9
/-/
вп
Сх
BF
FBx
1
+
—
<
十
*->
F10X
FK
F 1g
F In
F sin-i
F cos—i
F tg-1
F sin
F cos
F tg
2
Fit
F厂
Fl/x
ху
F П
коГ
КО」'
3
К病
К|х[
к зн
К ^
К 1х]
К{х}
К шах
КД
К +
к инв
к сч
4
х->ПО
xfE
X
->П2
гПЗ
х->П4
—П5
х->П6
х->П7
xf П8
х-> П9
xf Па
х->Пв
хт Пс
xf Fid
х->Пе
5
二/n
>П
3/0
ПП
К НОП
Fx*O
FL2
Fx》O
FL3
FL1
Fx<0
FLO
Fx = O
6
gxO
Axl
Г
1-> х2
Л->хЗ
П-*х4
Пт х5
П->х6
gx7
П->х8
Пт х9
П->ха
П->хв
П->хс
n->xd
П->хе
7
Кх#ОО
<х=#с1
Кх#02
0*03
1х,04
<х¥=05
Кх,06
Кх*07
Кх=#08
Кх*09
Кх*Оа
Кх=#Ов
Кх=#Ос
Kx^O
Kx=#Oe
8
квпо
КБП1
КБП2
КБПЗ
К5П4
КБП5
КБП6
КБП7
КБП8
КБП9
КБ Па
КБПв
КБПс
КБПй
КБПе
9
к
;х>00
Сх>01
Кх2О2
Сх^ОЗ
;х>04
Кх>05
Кх^Об
Кх>07
Кх>08
Кх》09
Кх^Оа
Кх>Ов
Кх>Ос
Kx^Od
Kx^Oe
КППО
кпш
КПП2
кппз
КПП4
КПП5
КПП6
КПП7
КПП8
КПП9
КППа
КППв
КП П о
КПП6
КППе
L
Кх->ПО
Кх-*П1
Кх—П2
Кх->пэ
Кх->П4
Kxf П5
Кх-П6
Кх->П7
Кх->П8
Кх-*П9
Кх->Па •
КхтПв
Кх->Пс
Kxf Fid
Кх->Пе
С
Кх<00
Кх<01
Кх<02
Кх<03
Кх<04
Кх<05
Кх<06
Кх<07
Кх<08
Кх<09
Кх<Оа
Кх<Ов
Кх<Ос
Kx<Od
Kx<Oe
Г
КП+хО
КП->х1
К2х2
КП->хЗ
К 2X4
<х->5
КП->х6
КП-^х7
КП->х8
КП+х9
KUf ха
КП-»-хв
Kg хс
K2xd
КП->хе
Е
Кх>00
Кх»О1
Кх=02
<х=03
Кх=04
Кх = 05
Кх = 06
Кх=07
Кх=08
Кх=09
Кх=Оа
Кх=Ов
Кх=Ос
Kx=Od
Кх = Ое
Сл
Пр имер 3.3. Составить программу для нахождения суммы по выражению
s =s =
s =
s =
Построим алгоритм в виде следующей последовательности:
Приев. i=l s=0;
Выч. s=s+2tg(i/3)+5;
Изм. i = i+1;
Если К7, ндтн к п. 2;
Печ. s;
Ост.
В соответствии с полученным алгоритмом составим программу в виде табл. 3.5. Поскольку в задаче две величины: i, s, отведем для них два регистра: (RG0)—i; (RG1)—s・ Для засылки значений этих величин произведем следующие операции:
1 х^П 0; If (RG0)
0 х->П 1: 0~>(RGl)
Таблица 3.5
Адрес команды
Клавиши
Код команды
Комментарий
1
2
3
4
00
01
02
03
04
05
06
07
08
09
10
П->х0
3
Ftg
2
X
5
+ П->х1
х->П1
60 03
13
1Е 02
12 05
10
61
10 41
(RGX)
3f (RGX); i(RGY)*
i/3-> (RGX)
tg (〃3) + (RGX)
2f (RGX); 2tg (,3)f (RGY)
2tg (i/3) f (RGX)
5f (RGX); 2tg (,3)f (RGY)
2tg ("3)+5+(RGX)
Sf (RGX); 2tg (〃3)+5f (RGY) s+2tg (j/3)+5f (RGX) s=s+2tg (Z/3)+5(RG1)
11
12
13
14
15
16
17
18
19
20
П
1
+
х ->П0
8
FX>0
00
П->х1
С/П
60
01
10
40
08
11
59
00
61
50
if (RGX)
If (RGX); i + (RGY)
i+lf (RGX)
i = i+lf (RG0)
8f (RGX); 一(RGY)
i —8 f (RGX)
Если (RGX) ^0: нет, к адр. 18
да, к адр. 19
Адрес перехода
(RGX)
Останов
11
12
13
14
Вариант с коме
FL05Г
0000
Пт 幻61
С/П50
1ндой FLO
(RG0) = (RG0) — 1; (RG0)=0?
Если нет, то к адр. 00
Если да, то s + (RGX)
□станов
Адрес начала программы выбираем 00. В ячейку с этим адресом записываем команду считывания i из RGO. В табл. 3.4 ищем код этой команды. Он равен 60. Команды с адресами 01——10 выполняют расчет выражения для получения суммы s = s + 2tg (〃3) +5 в регистре RG1. Коды этих команд находим аналогично из табл. 3.4. С помощью команд 11—14 изменяем i=i+l в регистре RG0. Команды 15——18 готовят и выполняют условный переход. Поскольку в машине нет условия х^0, то выбирается условие 力№. Однако чтобы был совершен условный переход при i=7 в случае выбора команды F Х^0, необходимо вычитать 8. Команда 19 выводит результат на индикатор перед тем, как остановить. Команда стоп С/П необходима для останова машины, фиксирования и чтения результата.
Программу можно упростить, применив вместо F Х^0 команду цикла FLO. Поскольку команда цикла выполняет операции с изменением переменной цикла от большего к меньшему пределу, то в RG0 нужно вводить 7 вместо 1, т. е. нажать клавиши 7
П 0.
В табХ 3.5 в конце приведено окончание программы, когда использована команда цикла FL0.
Итак, программа составлена. Ее нужно ввести в машину.
Ввод программы в память. Прежде чем вводить программу в машину, необходимо выполнить две операции:
установить начальный адрес программы. Если начальный адрес 00, то необходимо нажать клавишу установки на нулевой адрес В/О. Если начальный адрес не нулевой, а другой, например 47, то необходимо сделать безусловный переход на заданный адрес, нажав клавишу безусловного перехода БП и цифровые клавиши 47;
перевести машину в режим программирования ПРГ. При этом на индикаторе будет воспроизводиться начальный адрес: адрес 00 или адрес 47 (см. рис. 3.1, б).
Рассмотрим теперь по табл. 3.6, как будет изменяться индикация при вводе команд. После установки начального адреса В/О и перевода в режим ПРГ вводим первую команду Пт % 0 — во 2-м и 3-м разрядах индикатора (см. рис. 3.1, 6) воспроизводится код введенной команды, а счетчик адреса команд переключается на следующий адрес 01. При вводе второй команды ——числа 3 в левой части индикатора воспроизводится код 03, код предыдущей команды 60 перемещается вправо, а в разрядах адреса воспроизводится адрес следующей подготовленной к вводу ячейки. При вводе третьей команды + появляется код 13, а предыдущие передвигаются вправо и т. д. до конца программы (см. табл. 3.6).
Редактирование, т. е. исправление ошибок в программе, осуществляется в том же режиме ПРГ путем перебивки неправильной команды, адрес которой должен воспроизводиться на индикаторе. Чтобы подвести к требуемому адресу, используют клавиши потактового прохождения программы назад и вперед: шг, шг. в том случае, когда нужно удалить команду и не пе- 77
Адрес i-й команды
Нажимаемые клавиши!
Индикация
Комментарий
кода i-Й команды
кода ((-1)-й команды
кода (f-2)-ft команды
адреса (i+D-й команды
В/О
00+ (СчАК)
00
РПРГ
00
Переход в ПРГ
口 f %0
60
01
01
3
03
60
02
02
13
03
60
03
03
Ftg
1Е
13
03
04
04
2
02
1Е
13
05
05
X
22
02
1Е
06
06
5
05
22
02
07
07
+
10
05
22
08
08
口 f %1
61
10
05
09
09
+
10
61
10
10
10
ГП
41
10
61
11
11
FLO
5Г
41
10
12
12
00
00
5Г
41
13
13
口 f
61
00
5Г
14
14
с/п
50
61
00
15
ребивать последующие команды, на место удаляемой записывают пустую команду К НОД.
Отладка программы. После того как занесли в память, проверили и отредактировали программу, производят следующие операции:
переводят машину в режим автоматической работы, нажав клавишу F АВТ;
вводят в память исходные данные для отладки программы или для решения задачи, нажав клавиши XXX 尤f ГП, где XXX — исходные данные, i — номер регистра памяти;
устанавливают счетчик адреса команд СчАК на начальный адрес программы, нажав клавишу В/О, если начальный адрес 00, или клавиши БП XX, где XX — начальный адрес программы;
выполняют отладку — проходят программу по командам, нажимая клавишу потактного выполнения программы ПП и сверяя, какой результат находится в RGX. Одно нажатие клавиши ПП—• выполнение одной команды. Если выявлены ошибки, связанные с неправильными командами, то их исправляют, перейдя в режим ПРГ. Отлаженную программу теперь можно выполнять.
Выполнение программы. Перед запуском программы необходимо проверить и провести следующие операции:
проверить по индикатору, в каком режиме машина. Если в режиме ПРГ, переводят в режим АВТ, нажав клавиши F АВТ;
вводят в память исходные данные по задаче, если они еще не введены, нажимая клавиши XXX ГН;
устанавливают машину на начальный адрес программы, нажав клавишу В/О (или клавиши БП XX, если начальный адрес ненулевой);
запускают программу на выполнение, нажав клавишу пуска С/П. \
На рис. 3.7 изображетй^последовательность подготовки и решения задач по программе?\Блок 1 выполняется вне машины. Блок 2 — подготовка машины \ вводу программы. Машина переводится в режим АВТ, если онарнла в другом режиме (F АВТ — дано в скобках). Затем устанавлив^тся начальный адрес 00. Если начальный адрес не нулевой, а XX, та делается условный переход на этот адрес (БП XX — дано в скобках). После этого машина переключается в режим ПРГ. Блок 3 ——ввод программы. Блок 4 — редактирование. Передвижение по программе вперед и назад на один адрес ——шаг осуществляется клавишами ШГ, ШГ. Если
у Режим ПРГау Режим ПРГаСоставление исходной программыСоставление исходной программыВ режим АВТВ режим АВТУстановка начального адреса 00 или XXУстановка начального адреса 00 или XXВ режим ПРГВ режим ПРГВвод программыВвод программыРедактированиеВ режим(исправлениеАВТ |ошибок)IРедактированиеВ режим(исправлениеАВТ |ошибок)I
у Режим ПРГа
у Режим ПРГа
Составление исходной программы
Составление исходной программы
В режим АВТ
В режим АВТ
Установка начального адреса 00 или XX
Установка начального адреса 00 или XX
В режим ПРГ
В режим ПРГ
Ввод программы
Ввод программы
РедактированиеВ режим
(исправлениеАВТ |
ошибок)I
РедактированиеВ режим
(исправлениеАВТ |
ошибок)I
Ввод исходных данных контрольного примераВвод исходных данных контрольного примераУстановка начального адреса СЮ или XXУстановка начального адреса СЮ или XXОтладка (покомандное выполнение программы)Отладка (покомандное выполнение программы)Ввод исходных данных задачи XXX в RGiВвод исходных данных задачи XXX в RGiУстановка начального адреса 00 или XXУстановка начального адреса 00 или XXПуск программыПуск программыВыполнение программь)Выполнение программь)Рис. 3.7. Последовательность подготовки и решения задач по программеРис. 3.7. Последовательность подготовки и решения задач по программе
Ввод исходных данных контрольного примера
Ввод исходных данных контрольного примера
Установка начального адреса СЮ или XX
Установка начального адреса СЮ или XX
Отладка (покомандное выполнение программы)
Отладка (покомандное выполнение программы)
Ввод исходных данных задачи XXX в RGi
Ввод исходных данных задачи XXX в RGi
Установка начального адреса 00 или XX
Установка начального адреса 00 или XX
Пуск программы
Пуск программы
Выполнение программь)
Выполнение программь)
Рис. 3.7. Последовательность подготовки и решения задач по программе
Рис. 3.7. Последовательность подготовки и решения задач по программе
нужно сразу перейти на несколько адресов, то используют команду безусловного перехода. Но для его использования необходимо перейти в режим АВТ, а затем вновь возвратиться в режим ПРГ, использовав клавиши F АВТ БП XX F ПРГ. Блок 5 — отладка программы. Подготовка к отладке включает ввод исходных данных XXX %f 口厶 установку на начальный адрес программы В/О или БП XX. Отладка ——выполнение программы по одной коман* де ——выполняется клавишей ПГТ. Если отладка не требуется, то блок 5 пропускается. Блок 6 — подготовка к выполнению программы, которая включает ввод исходных данных задачи, установку начального адреса и пуск на выполнение. Блок 7 ——выполнение производится автоматически. Программа автоматически ос^ танавливается командой стоп С/П.
Заметим, что в рассмотренной последовательности только два этапа выполняются в режиме ПРГ — ввод программы и ее редактирование.
■ Рассмотрим примеры составления программ.
Пример 3.4. Составить программу для нахождения факториала 川=1・2・ ...л.
Факториал можно находить по выражению «накапливаемого» произведения s=s •財 где k меняется от 2 до п с шагом 1, а начальное значение s принимается равным 1. С учетом этого имеем:
В в. п;
Приев. 5=1;
Приев.左=2;
Выч. s=s •兑;
Изm.々=左+1;
Переход к 3, если 左W 拉;
Выв. s;
Останов.
Чтобы использовать команду цикла FLi, где i = (0,1,2,3). Целесообразно произведение накапливать не с 々=2, а с fe=n. Примем: для циклической переменной 尼 регистр RG0, а для произведения s — RG1. Тогда получим программу:
Адрес000102030405060708Адрес0001020304050607081EXFW1EXFWКодКомментарий017RGX)41S—(RG1)60左―(RGX)61Sf (RGX); IRGY)12s-fRGX)41s=s・B-> (RG1)5Г(RG0) = (RG0)—1; (RG0)=0?02Если нет, то к 0250Если да, то стопКодКомментарий017RGX)41S—(RG1)60左―(RGX)61Sf (RGX); IRGY)12s-fRGX)41s=s・B-> (RG1)5Г(RG0) = (RG0)—1; (RG0)=0?02Если нет, то к 0250Если да, то стопКлавишиКлавиши
Адрес
00
01
02
03
04
05
06
07
08
Адрес
00
01
02
03
04
05
06
07
08
1EXFW
1EXFW
Код
Комментарий
01
7RGX)
41
S—(RG1)
60
左―(RGX)
61
Sf (RGX); IRGY)
12
s-fRGX)
41
s=s・B-> (RG1)
5Г
(RG0) = (RG0)—1; (RG0)=0?
02
Если нет, то к 02
50
Если да, то стоп
Код
Комментарий
01
7RGX)
41
S—(RG1)
60
左―(RGX)
61
Sf (RGX); IRGY)
12
s-fRGX)
41
s=s・B-> (RG1)
5Г
(RG0) = (RG0)—1; (RG0)=0?
02
Если нет, то к 02
50
Если да, то стоп
Клавиши
Клавиши
В командах с адресами 00 и 01 присваивается начальное значение произведения s в регистре RGL В командах 02—05 реализуется выражение s = s*k. Команды 06—07 реализуют цикл, используя регистр RG0. Для вывода результата из регистра RG1 после окончания цикла команда не требуется, поскольку результат после команды с адресом 05 и так находится в регистре RGX, а команды с адресами 06 и 07 регистр RGX не занимают.
Пример 3.5. Составить программу по алгоритму (см. рис» 2.3) для нахождения функции у= (ах2 + Ь)/с в интервале 0,1^х^ ^2,0 с шагом Ах=0,1 при заданных а=7,9; Ь=3,2; с=0,4.
Для участвующих величин выберем следующие регистры: af (RGa); b—(RGb); ст (RGc);尤f (RG0); g—(RG1). Цикл будем организовывать с использованием команд циклов FLL С этой целью по формуле (2.3) определим количество шагов % при изменении аргумента х п= (2 — 6,1)/0,1 + 1=20 шагов. Тогда переменной цикла зададим начальное значение i=20 при шаге &=—1 и конечном значении i=0 (см. рис. 3.6, б). Значение аргумента х будем получать исходя из переменной цикла i: %= (21 —
—/)/10, т. е. при i=20 ставлять программу.—/)/10, т. е. при i=20 ставлять программу.х^0,1; при i=l х=2,0. Теперь можно со
—/)/10, т. е. при i=20 ставлять программу.
—/)/10, т. е. при i=20 ставлять программу.
012345678901234567890о о о о & о о о о о11111111112012345678901234567890о о о о & о о о о о11111111112о a b сп出 2 Y 以 Т I 2 0 ^21п 一 lo口 义口+nqFaо a b сп出 2 Y 以 Т I 2 0 ^21п 一 lo口 义口+nqFa20021011032 -2LOC3OF3O00400610012&16161550520021011032 -2LOC3OF3O00400610012&161615505220i=20f (RGO)21i; 2121 — i1; 21 — i10; 21 — i%=(21 — i)/10炉a; x2 ■ax2 b; ax2c;。炉十力 y=(ax2^b}/c Считывание, затем нажимаем С/П (RGO) = (RGO)—1; (RGO)=O?Если иет, то к 03Если да, то стоп220i=20f (RGO)21i; 2121 — i1; 21 — i10; 21 — i%=(21 — i)/10炉a; x2 ■ax2 b; ax2c;。炉十力 y=(ax2^b}/c Считывание, затем нажимаем С/П (RGO) = (RGO)—1; (RGO)=O?Если иет, то к 03Если да, то стопАдрес Клавиши Код Комментарий
012345678901234567890о о о о & о о о о о11111111112
012345678901234567890о о о о & о о о о о11111111112
о a b с
п出 2 Y 以 Т I 2 0 ^21п 一 lo口 义口+nqFa
о a b с
п出 2 Y 以 Т I 2 0 ^21п 一 lo口 义口+nqFa
20021011032 -2LOC3OF3O00400610012&161615505
20021011032 -2LOC3OF3O00400610012&161615505
2
20
i=20f (RGO)
21
i; 21
21 — i
1; 21 — i
10; 21 — i
%=(21 — i)/10
炉
a; x2 ■
ax2 b; ax2
c;。炉十力 y=(ax2^b}/c Считывание, затем нажимаем С/П (RGO) = (RGO)—1; (RGO)=O?
Если иет, то к 03
Если да, то стоп
2
20
i=20f (RGO)
21
i; 21
21 — i
1; 21 — i
10; 21 — i
%=(21 — i)/10
炉
a; x2 ■
ax2 b; ax2
c;。炉十力 y=(ax2^b}/c Считывание, затем нажимаем С/П (RGO) = (RGO)—1; (RGO)=O?
Если иет, то к 03
Если да, то стоп
В командах с адресами 00—02 в регистр цикла RG0 засылается начальное значение переменной цикла, равной 20. В ком андах 03——09 рассчитывается аргумент х по переменной цикла i. В командах 10——17 определяется у. Команда 17 нужна, чтобы считать результат из регистра RGX. После считывания нажимается лишь одна клавиша пуска С/П и ожидается следующее значение функции. Команда цикла FLO модифицирует переменную цикла (AG0) = (RG0) — 1, сравнивает ее с нулем (RG0)=0 и, если она еще не равна нулю, возвращается на начало цикла по адресу 03.
В приведенной программе в столбце «Комментарий» принята упрощенная запись содержимого регистров стековой памяти — на первом месте дается содержимое регистра RGX, на втором—содержимое регистра RGY. Например, в команде с адресом 05 запись. i; 21 означает if (RGX); 21 f (RGY).
Теперь программу нужно ввести. Для этого нажимают клавишу установки на нулевой адрес В/О и переводят в режим ПРГ, нажав F ПРГ. После ввода и редактирования (если в этом возникла необходимость) переходят в режим автоматической работы, нажав F АВТ, вводят исходные данные, нажимая клавиши 0,7х->П а 2,Зх->ПЬ 1,4х->Пс, устанавливают на нулевой адрес, нажав В/О, и запускают программу, нажав С/П. Получив первый ответ 8,175, нажимают С/П и получают второй 8,7, снова С/П и третий ответ 9,575 и т. д.
Пример 3.6. Составим программу нахождения среднего значения 〃ср и среднеквадратичного отклонения па элементов массива Л= (аь аг,..., ап) по формулам (3.2) примера 3.2.
Воспользуемся последовательностью нахождения суммы элементов и суммы их квадратов с однократным вводом значения каждого элемента и последовательностью расчета аср и па? полученными в примере 32 Программу построим так, чтобы вводить в память только одно число п — количество элементов, а затем однократно значение каждого элемента.
Выберем регистры для хранения исходных данных, промежуточных и искомых результатов:
переменной цикла — регистр RG0;
суммы элементов — & = £〃£ — регистр RGY, как и в примере 3.2, т. е. сумму 曰 будем хранить в стеке;
суммы квадратов элементов 我=工生2 ——регистр RG1;
числа элементов п — регистр RG2;
среднего значения 〃ср ——регистр RG3;
среднеквадратичного отклонения па ——регистр RGX.
С учетом принятого распределения памяти и используя последовательности операции в примере 3.2, составим программу.
Адрес Клавиши Код Содержимое стека
01234567890123456789012345678901234000000000011111111112222222222333330123456789012345678901234567890123400000000001111111111222222222233333A F Fn FA F Fn FFBB1 - FXFnx ^nF x/^ + FCFBB1 - FXFnx ^nF x/^ + FC62IRGX)40—(RGO)00(Для начальн. сумм: Si = O; $2=0)41sl(RGI) (1-й раз s2=0)50(Для ввода a) Qi; sj (команда С/П) Sl = Sl+Oi; Oif (iRG文 1)100%•; a22*; Si61S2;叫;Si10S2 = S2 + Ct2t; Si41s2f (RG1)1451; 525Гn=n——1; n=0?04Если нет, к 04Если да (RG2)->(RGX) =п; Si; s26213■cp=Si/% s2; n->(RGXl)43^cp~>(RG3)0九;0cp; S2OEи; n; ctep; S2OEИ; П; П; Ctcp011; П; П; «ср11九—1;九;оер231/(九—1);九;0ср12nl(n—1); аср; 1/(м—l)f (RGX1)0l/(n—1); n/(n—1); %p61S2; 1/(卅—1);九/(л—1); 0ср $2/(^—1);卅/(九—1); 0ср1214"/(佗-1);询/(九一1); оер63dcp; п!(п—1); Sa/(м—1); ctcp22■%「; П/(П—1); S2/(/l—1); %p12 OL10/Ш^срН?!—1); S2Kti1); Лер—/ia'cp/(/i—1) j $2/(/1—i); %p S2/(/1-1)-九0%p/(九—1); Лер21(Га; @ср50Останов62IRGX)40—(RGO)00(Для начальн. сумм: Si = O; $2=0)41sl(RGI) (1-й раз s2=0)50(Для ввода a) Qi; sj (команда С/П) Sl = Sl+Oi; Oif (iRG文 1)100%•; a22*; Si61S2;叫;Si10S2 = S2 + Ct2t; Si41s2f (RG1)1451; 525Гn=n——1; n=0?04Если нет, к 04Если да (RG2)->(RGX) =п; Si; s26213■cp=Si/% s2; n->(RGXl)43^cp~>(RG3)0九;0cp; S2OEи; n; ctep; S2OEИ; П; П; Ctcp011; П; П; «ср11九—1;九;оер231/(九—1);九;0ср12nl(n—1); аср; 1/(м—l)f (RGX1)0l/(n—1); n/(n—1); %p61S2; 1/(卅—1);九/(л—1); 0ср $2/(^—1);卅/(九—1); 0ср1214"/(佗-1);询/(九一1); оер63dcp; п!(п—1); Sa/(м—1); ctcp22■%「; П/(П—1); S2/(/l—1); %p12 OL10/Ш^срН?!—1); S2Kti1); Лер—/ia'cp/(/i—1) j $2/(/1—i); %p S2/(/1-1)-九0%p/(九—1); Лер21(Га; @ср50Останов
01234567890123456789012345678901234
00000000001111111111222222222233333
01234567890123456789012345678901234
00000000001111111111222222222233333
A F Fn F
A F Fn F
FBB1 - FXFnx ^nF x/^ + FC
FBB1 - FXFnx ^nF x/^ + FC
62
IRGX)
40
—(RGO)
00
(Для начальн. сумм: Si = O; $2=0)
41
sl(RGI) (1-й раз s2=0)
50
(Для ввода a) Qi; sj (команда С/П) Sl = Sl+Oi; Oif (iRG文 1)
10
0
%•; a
22
*; Si
61
S2;叫;Si
10
S2 = S2 + Ct2t; Si
41
s2f (RG1)
14
51; 52
5Г
n=n——1; n=0?
04
Если нет, к 04
Если да (RG2)->(RGX) =п; Si; s2
62
13
■cp=Si/% s2; n->(RGXl)
43
^cp~>(RG3)
0
九;0cp; S2
OE
и; n; ctep; S2
OE
И; П; П; Ctcp
01
1; П; П; «ср
11
九—1;九;оер
23
1/(九—1);九;0ср
12
nl(n—1); аср; 1/(м—l)f (RGX1)
0
l/(n—1); n/(n—1); %p
61
S2; 1/(卅—1);九/(л—1); 0ср $2/(^—1);卅/(九—1); 0ср
12
14
"/(佗-1);询/(九一1); оер
63
dcp; п!(п—1); Sa/(м—1); ctcp
22
■%「; П/(П—1); S2/(/l—1); %p
12 OL
10
/Ш^срН?!—1); S2Kti1); Лер
—/ia'cp/(/i—1) j $2/(/1—i); %p S2/(/1-1)-九0%p/(九—1); Лер
21
(Га; @ср
50
Останов
62
IRGX)
40
—(RGO)
00
(Для начальн. сумм: Si = O; $2=0)
41
sl(RGI) (1-й раз s2=0)
50
(Для ввода a) Qi; sj (команда С/П) Sl = Sl+Oi; Oif (iRG文 1)
10
0
%•; a
22
*; Si
61
S2;叫;Si
10
S2 = S2 + Ct2t; Si
41
s2f (RG1)
14
51; 52
5Г
n=n——1; n=0?
04
Если нет, к 04
Если да (RG2)->(RGX) =п; Si; s2
62
13
■cp=Si/% s2; n->(RGXl)
43
^cp~>(RG3)
0
九;0cp; S2
OE
и; n; ctep; S2
OE
И; П; П; Ctcp
01
1; П; П; «ср
11
九—1;九;оер
23
1/(九—1);九;0ср
12
nl(n—1); аср; 1/(м—l)f (RGX1)
0
l/(n—1); n/(n—1); %p
61
S2; 1/(卅—1);九/(л—1); 0ср $2/(^—1);卅/(九—1); 0ср
12
14
"/(佗-1);询/(九一1); оер
63
dcp; п!(п—1); Sa/(м—1); ctcp
22
■%「; П/(П—1); S2/(/l—1); %p
12 OL
10
/Ш^срН?!—1); S2Kti1); Лер
—/ia'cp/(/i—1) j $2/(/1—i); %p S2/(/1-1)-九0%p/(九—1); Лер
21
(Га; @ср
50
Останов
В командах с адресами 00 и 01 число п пересылаем в регистр цикла RG0 и регистра RG2. Команды 02, 03 засылают начальные нулевые значения суммы а регистры RG1 s2=0 и оставляют в RGX для Si = 0. Команда 05 реализует накапливание суммы элементов Si — Si+ai в регистрах стека. Команда 06 восстанавливает в RGX значение ай сумма 邑 переходит в RGY. Команды 07—10 реализуют накапливание суммы квадратов s2—s24-fli2.
Команда 11 готовит стек для получения суммы s^ суммированием следующего элемента. Теперь команды цикла (12, 13) организуют цикл и передают управление на команду начала цикла 04, В этой части программы будут получены s, в RGX и s2 в RGY и в RG1.
В командах 14—16 рассчитывается аСр. Команды 17——19 восстанавливают и дублируют в стеке число п. Команда 20 вводит 1 в RGX на место п, поскольку операция Bf (команда 19) разделяет ввод двух чисел. Команды 21——33 реализуют расчет о*
Чтобы запустить программу, нужно ввести в RG2 число /г, нажав клавиши п П2, где л ——количество элементов в массиве, а затем уже в процессе выполнения программы вводить элементы массива.
3.4. КОМАНДЫ КОСВЕННЫХ ПЕРЕХОДОВИ ОБРАЩЕНИЙ
Команды косвенных переходов и обращений к памяти в отличие от основных (не косвенных) команд переходов выполняются то косвенным и модифицированным адресам.
Косвенный адрес — это адрес перехода, который указывается не прямо в самой команде, а в i-м регистре памяти RGL В самой же команде содержится индекс i (т. е. номер) регистра, в кото
ром записан адрес перехода или обращения к памяти. Команда выполняется следующим образом. Считывается команда. Из команды выбирается номер регистра 厶 Из i-ro регистра RGi считывается адрес (RGi), по которому уже осуществляется переход (рис. 3.8).Модификация адреса ——это изменение его на ± 1. Знак модификации строго связан с i-м индексомром записан адрес перехода или обращения к памяти. Команда выполняется следующим образом. Считывается команда. Из команды выбирается номер регистра 厶 Из i-ro регистра RGi считывается адрес (RGi), по которому уже осуществляется переход (рис. 3.8).Модификация адреса ——это изменение его на ± 1. Знак модификации строго связан с i-м индексома6RG000RG1—; 01((RGi) = (RGi) 土 1 )—二//Извлечение—*адреса (RGi),^^КосвенныйRGiпереход, i—RGe(RGi)—97а6RG000RG1—; 01((RGi) = (RGi) 土 1 )—二//Извлечение—*адреса (RGi),^^КосвенныйRGiпереход, i—RGe(RGi)—97Рис. 3.8. Пример схемы размещения и выполнения косвенного перехода; а ——адресуемая память; 6 ——программная памятьРис. 3.8. Пример схемы размещения и выполнения косвенного перехода; а ——адресуемая память; 6 ——программная память(номером) регистра, указанным в команде.
ром записан адрес перехода или обращения к памяти. Команда выполняется следующим образом. Считывается команда. Из команды выбирается номер регистра 厶 Из i-ro регистра RGi считывается адрес (RGi), по которому уже осуществляется переход (рис. 3.8).
Модификация адреса ——это изменение его на ± 1. Знак модификации строго связан с i-м индексом
ром записан адрес перехода или обращения к памяти. Команда выполняется следующим образом. Считывается команда. Из команды выбирается номер регистра 厶 Из i-ro регистра RGi считывается адрес (RGi), по которому уже осуществляется переход (рис. 3.8).
Модификация адреса ——это изменение его на ± 1. Знак модификации строго связан с i-м индексом
а
6
RG0
00
RG1
—; 01
((RGi) = (RGi) 土 1 )
—
二/
/Извлечение
—
*адреса (RGi),^^
Косвенный
RGi
переход, i
—
RGe
(RGi)
—
97
а
6
RG0
00
RG1
—; 01
((RGi) = (RGi) 土 1 )
—
二/
/Извлечение
—
*адреса (RGi),^^
Косвенный
RGi
переход, i
—
RGe
(RGi)
—
97
Рис. 3.8. Пример схемы размещения и выполнения косвенного перехода; а ——адресуемая память; 6 ——программная память
Рис. 3.8. Пример схемы размещения и выполнения косвенного перехода; а ——адресуемая память; 6 ——программная память
Для регистров с номерами 0, 1, 2 и 3 при исполнении команды из содержимого регистра вычитается единица
(RGi) = (RGi)—1,(3.3)
где i=(0, 1, 2, 3)——номер соответствующего регистра: RGO, RG1, RG2 или RG3; (RGi) — содержимое i-ro регистра.
Для регистров с номерами 4, 5 и 6 при выполнении команды к содержимому регистра, номер которого указан в команде, прибавляется единица
(RGi) = (RGi)+(3.4)
где i= (4, 5, 6)——номер регистра соответственно RG4, RG5 или RG6.
Для остальных регистров с номерами 7, 8,..., е, т. е. для регистров RG7, RG8,..., RGe, в командах косвенных переходов и обращений содержимое регистров не модифицируется, т. е. не изменяется на единицу.
д
Рис. 3.9. Алгоритмы команд косвенных переходов и обращений:а ——безусловный переход; б ——условный переход; в ——переход кподпрограмме; г ——засылка в память; 6 — извлечение из памяти;i — номер регистра RGi, где хранится адрес перехода или обра-щения
Команда косвенного безусловного перехода. Команда выполняется нажатием трех клавиш К БП i, где К —— префиксная клавиша; БП — клавиша безусловного перехода; i= =(0, 1,...,е)——индекс (номер) регистра RGi, в котором хранится адрес перехода.
Команда выполняет следующие операции (рис. 3.9, а): извлекает содержимое из i-ro регистра RGi;
модифицирует (в зависимости от номера регистра) содержимое f-го регистра (RGi) = (RGi) ± 1 (если i=(0, 1, 2, 3), то —1, если i= (4, 5, 6), то +1, для остальных регистров, i— (7, 8,..., е) содержимое не изменяется). Это содержимое и есть адрес перехода;
делает переход к команде с модифицированным адресом (RGi).
Команда косвенного безусловного перехода К БП i в отличие от команды безусловного перехода БП позволяет модифицировать адрес перехода, т. е. одна и та же команда позволяет на разных шагах делать переходы к разным командам; адрес перехода хранится не сразу после команды БП в следующей ячейке памяти программы, а в регистре памяти для хранения данных (см. рис. 3.4, а и рис. 3.9, а).
Команда косвенного условного перехода. Команда выполняется нажатием трех клавиш К Х*0厶 где К — префиксная клавиша; * = ( =, #=,》, < )——знак соотношений; 文*0 — одно из условия:, Х = 0, Х#=0, Х》0, Х<0; i= (0, 1…, е)— индекс (номер) регистра RG,,в котором хранится адрес перехода.
Команда выполняет следующие операции (рис. 3.9, б);
сравнивает содержимое регистра RGX с нулем по условию Х*0;
если условие выполняется, то делает переход по направлению 《да》на нижеследующую команду (т. е. условного перехода нет);
если условие не выполняется, то делает условный переход по направлению 《нет》и извлекается содержимое регистра RGi;
модифицирует содержимое регистра RGi в зависимости от номера регистра: (RGi) = (RGi) ± 1;
делает условный переход к команде с модифицированным адресом (RGi).
Команда косвенного условного перехода К X *0 i в отличие от простого условного перехода F Х*0 позволяет модифицировать адрес перехода, т. е. переходить на разных шагах к разным командам, и адрес перехода хранится не в памяти программы за командой условного перехода, а в регистре памяти данных (см. рис. 3.4, б и рис. 3.9, б).
Команда косвенного перехода н а подпрограмму. Команда выполняется нажатием следующих трех клавиш: К ПП I, где К — префиксная клавиша; ПП — клавиша перехода к подпрограмме; i=(0, 1,..., е)—индекс (номер) регистра, в котором находится адрес первой команды (начала) подпрограммы.
Команда выполняет следующие операции (рис. 3.9, в): извлекает содержимое регистра RGi;
модифицирует содержимое регистра RGi в зависимости от его номера: (RGi) = (RGi) ± 1;
делает переход на первую команду шодпрограммы с модифицированным адресом (RGt).
В отличие от команды перехода к подпрограмме ПП команда косвенного перехода к подпрограмме К ПП i позволяет модифицировать адрес перехода, т. е. переходить на разных шагах к разным командам подпрограммы или разным подпрограммам, и адрес перехода хранится не в памяти программы за командой ПП, а в регистре памяти данных (см. рис. 3.5 и рис. 3.9, в).
Ком анда косвенной засылки в память. Команда выполняется нажатием следующих трех клавиш: К %f 口 i, где К ——префиксная клавиша; х +Г1 — клавиша засылки в i-й регистр адресуемой памяти; i— (0, 1,*..,е)——номер регистра, где записан номер регистра, в который заносятся данные.
Команда выполняет следующие операции (см. рис. 3.9, г): извлекает содержимое регистра RGi;
модифицирует содержимое регистра RGi в зависимости от его номера: (RGi) = (RGi) ±1;
засылает содержимое регистра RGX в регистр адресуемой памяти, модифицированный номер которого находится в регистре RGi: (RGX) f (RG(RGi))..
В отличие от команды засылки в адресуемую память х-> П: команда косвенной засылки К %f Hi позволяет модифицировать номер регистра, т. е. одной командой на разных шагах засылать в разные регистры.
Ком ан да косвенного извлечения из памяти. Команда выполняется нажатием трех следующих клавиш: К -> П I, где К — префиксная клавиша; х->П —- клавиша извлечения из памяти; i= (0, 1,..., е)—номер регистра, где записан номер регистра, из которого извлекаются данные.
Команда выполняет операции (рис. 3.9, d):
извлекает содержимое регистра RGi;
модифицирует содержимое регистра RGi в зависимости от номера регистра: (RGQ = (RGi) ± 1;
извлекает содержимое регистра, номер которого является содержимым регистра RGi, и пересылает в регистр RGX: (RG(RGi))f (RGX).
Команда К П->xi отличается от команды П->х£ тем, что номер регистра, из которого нужно извлечь данные, хранится не в памяти программы, а в регистре адресуемой памяти, и этот номер может изменяться.
Пример 3.7. Составить программу вычисления полинома /г-й степени (2.14) для заданных коэффициентов @心 i='(0, 1,..., n) и задаваемых аргументов х.
Воспользуемся формулой Горнера (2.15) и алгоритмом, реализующим эту формулу (см. рис. 2.7). Распределим память меж-
ДУ переменными (рис. 3.10 а). Переменную внутреннего цикла /в разместим в регистре RG0 с начальным значением ,в = ^・ Число кругов п в цикле и сами коэффициенты разместим также в памяти и будем вводить до выполнения программы. Для извлечения из памяти коэффициентов а£ используем команду косвенного извлечения КП->х i и разместим номера извлекаемых коэффициентов % в регистре RG1, модифицирующем содержимое по формуле (RGi) = (RGi) — 1. Аргумент х будем размещать в регистре RG2, а искомое значение у будем оставлять в стеке и считывать во внешнем цикле с индикатора. При принятом распределении памяти для величин п и а^ /= (0, 1,...,п) остаются регистры RG3,..., …,RGe. Всего—12 регистров. Разместим п в регистре RGd, а Оо, ..гОэ — в регистрах RGc,..., RG3. Таким образом, вычислять можно полиномы не более девятой степени.
еб
Рис. 3.10. Алгоритм Горнера для вычисления значенийполинома на ПМК: а — размещение величин в памяти;
6 — блок-схема алгоритма
Построим алгоритм применительно_2<_ПМК (рис. 3.10, б). Блок 1 ——ввод исходных данных n, Qi, i=0, п, которые вводятся один раз. Блок 2 ——ввод аргумента х, он вводится в цикл с разными
значениями. Блоки 3—9 выполняются по программе после нажатия клавиши пуска (блок 3). Во внутреннем цикле работают две переменные ,》 и ,仁 Переменная iB ——для организации цикла командой FLO, а переменная iK ——для косвенного извлечения коэф*
фициентов по команде КП->х1. Теперь составим программу:
Адрес
Клавиши
Код
Комментарий
00
Л 2
42
j(RGX)
01
П->х Д
6Г
— (RGX)
02
хтЛ 0
40
—(RG0)
03
1
01
1
04
02
12
05
хт 口 1
41
12f (RG1)
06
П->х С
6С
00® =。。);
07
口fX 2
62
看驴
08
义
12
09
КП—х 1
Г1
(RG1) = (IRG1)—1; ctt; yx
10
+
10
y^yx^-ai
11
FLO
5Г
(RG0) = (RG0)—1; (RG0)=0?
12
07
07
«нет», переход к 07
13
С/П
42
«да», счит.驴—(RGX); ввод (RGX)—%
14
БП
51
Безусловный переход
15
00
00
Переход к 00
Команда с адресом 00 вводит х в регистр RG2. Поэтому перед пуском программы нужно ввести в регистр RGX значение аргумента х, по которому рассчитывается у. Команды 01 и 02 пересылают величину п из регистра RGd в регистр цикла RG0. Команды 03——05 засылают исходный номер регистра, из которого командой косвенного извлечения из памяти КП->х1 будет извлекаться очередной коэффициент полинома. Команды 06——10 — получение накапливаемой суммы у. Команды 11 и 12 — команда цикла. Команда 13 ——для считывания искомого значения у и ввода в машину следующего значения аргумента х. Затем командами безусловного перехода (14 и 15) осуществляется переход к команде 00 и х засылается в регистр RG2.
Чтобы облегчить ввод исходных данных n, а^ i = 0, п, составим вспомогательную программу с тем, чтобы использовать две операции: ввод числа и пуск. Такую программу можно реализовать, используя команду косвенной засылки в память К%—>口厶 Программу запишем в ячейки программной памяти после основной программы:
Адрес
Клавиши
Код
Комментарий
16
1
01
1
17
4
04
14
18
Xf 口 1
41
(RG1—14
19
С/П
50
Для ввода исх данных
20
К х->П 1
L1
(RG1) = (RG1)—1; (RG(RG1)).(RGX)
21
БП
51
22
19
19
j переход к 19'
Команды с адресами 16—18 засылают исходное число в регистр косвенной засылки в память RG1 для получения после модификации (RG1) = (RG1)——1 номера регистра RGd, в который
засылается число 孔.Команда 19 ——для ввода исходных данных; команда 20 ——для модификации номера регистра и ввода числа в регистр с модифицированным номером; команды 21 и 22 ——безусловный переход на ввод следующего числа.
Вместе эти две программы устанавливают следующий порядок работы на машине.
После ввода программы, редактирования и отладки в режиме АВТ нажимают следующие клавиши:
БП 16 — устанавливают начальный адрес вспомогательной программы (программы ввода);
С/П — запускают программу ввода. Программа останавливается на команде 19. Индикатор воспроизводит число 14;
п С/П а0 С/П th С/П... ап С/П — вводят исходные данные: n, @о, @i,・・・,。71, после каждого числа нажимают клавишу пуск С/П;
В/О ——устанавливается начальный адрес 00 основной программы;
х С/П ——вводят значение аргумента х и запускают программу. После окончания счета на индикаторе высвечивается искомый результат у. Чтобы рассчитать при следующем аргументе, вводят значения % и нажимают клавишу С/П.
Для контрольной проверки можно взять следующие исходные данные: а0= 1, 〃i = 2, @2 = 3, @з=4, а4 = 5, тогда /г=4. Расчет должен дать следующий результат: при %=6 будет у = 5, при х= 1 будет z/= 15...
Контрольные вопросы
Что такое стек, его назначение, принцип работы и какими клавишами микрокалькулятора он управляется?
Каково назначение и какими клавишами управляется адресуемая память микрокалькулятора?
Что такое программируемая память микрокалькулятора, как записывается программа в память, редактируется, отлаживается и выполняется?
Какова последовательность и содержание этапов подготовки и решения задач по программам на микрокалькуляторах?
Расскажите о командах переходов микрокалькулятора. Приведите примеры их использования.
Как организуются циклы в программах микрокалькуляторов? Приведите примеры.
Что Вы знаете о командах косвенных переходов и обращений к памяти микрокалькулятора? Каковы их возможности и как они выполняются?
Составьте программу табулирования функции типа y—f(x) при нзме、 нении х^х^.хп с шагом А% для микрокалькулятора.
Составьте программу нахождения среднего значения п чисел для микрокалькулятора.
Составьте программу нахождения максимума функции y = f(z) при изменении х^х^.хп для микрокалькулятора.
Глава 4АЛГОРИТМИЧЕСКИЙ ЯЗЫК БЕЙСИК
Алгоритмический язык Бейсик разработан для программирования задач с небольшим объемом исходной информации в режиме диалога человека с машиной. Название языка происходит из первых букв английских слов Beginner's All-purpose Symbolic Instruction Code, что означает ——«многоцелевой язык символических инструкций для начинающих». В нашей стране этот язык получает большое распространение на микроЭВМ.
ПРОСТЕЙШИЕ КОНСТРУКЦИИ ЯЗЫКА
Символы языка. Выбор символов в языке Бейсик зависит от возможностей клавиатуры вводных устройств диалоговых систем——электрифицированной пишущей машинки, телетайпа, дисплея, поскольку язык был ориентирован на диалоговый режим человека с машиной. Приняты следующие символы языка:
заглавных латинских букв от А до Z.
10 арабских цифр от 0 до 9,
разделительных знака: . (точка); , (запятая), ; (точка с запятой), z (апостроф),
арифметических знаков: + (плюс), — (минус), X (умножение), / (деление) f (возведение в степень),
знаков отношений: = (равно), 关 (не равно), > (больше), 》 (больше или равно), W (меньше или равно), < (меньше),
специальные символы: ( ) (круглые скобки), % (процент), Q (знак денежной единицы) , & (амперсенд).
Поскольку в некоторых устройствах (например, телетайп) клавиатура не содержит отдельных из перечисленных символов, то для их замены употребляются следующие сочетания символов:
* или г возведение в степень вместо f;
=больше и равно вместо》;
=меньше и равно вместо W;
< не равно вместо #=.
Кроме того, в русском варианте Бейсика алфавит включает заглавные русские буквы, не совпадающие по написанию с латинскими.
Величины делятся на постоянные (константы), не меняющие своего значения в расчетах, и переменные, значение которых меняется в процессе расчета.
Константы делятся на цифровые и символьные. Форма записи цифровых констант (т. е. чисел) близка к естественной с той лишь разницей, что для отделения дробной части числа вместо запятой используется точка. Знак у положительных чисел может быть опущен. Для записи очень больших и очень малых чисел предусмотрена возможность использования формы с десятичной степенью (порядком числа). Порядок числа записывается после числа и отдел兄ется от него буквой Е, причем порядок может быть только целой константой. Диапазон значений констант ограничивается возможностями конкретной машины. Так, диапазон допустимых чисел на ЕС ЭВМ составляет от 10~75 до 10+75. Для микроЭВМ «Искра-226» — диапазон от 10~" до Ю"Х 伙 9,9999999999999.
Например:
Запись на БейсикеЧисло
70 (или +70)70
—8.76—8,76
5.4ЕЗ (или 5.4Е+3)5,4* Ю3
—3.9Е—4 (или —0.39Е—3) —0,00039
Неправильная запись
S2Константа начинается с буквы
3/4Содержит специальный символ
5.6Е——7.8 Порядок не целая константа
Символьные константы состоят из строки любых символов, заключенной в кавычки, или набора кодов шестнадцатеричной системы.
Переменные делятся на три типа: действительные цифровые, целые цифровые и символьные.
Для обозначения действительных переменных используются имена, состоящие либо из одной латинской -буквы, либо из латинской буквы и последующей за ней цифры: А, XI, T9, DO и др. При такой системе обозначений можно получить 26 + 26X10=286 различных имен.
Целые цифровые переменные обозначаются аналогично, как и действительные переменные, но отличаются тем, что после имени следует символ %.
Символьные переменные отличаются тем, что после имени стоит символ 0 • Например:
А% —имя целой цифровой переменной;
А2 — имя действительной цифровой переменной;
N10 ——имя символьной переменной.
Вычисления над целыми величинами ЭВМ выполняет значительно быстрее, чем над действительными. Символьные переменные используются для обработки текстов и работы с информацией.
Массивы. Под массивом понимают совокупность переменных, объединенных по какому-то признаку. В Бейсике допускаются одномерные массивы-векторы:
4 = &, @2Q”).
и двумерные массивы-матрицы:
Ь11 Ь[2 • • • bin
0_b21b22 • •.b2九
где Л и В — имена массивов;
«1, аг, ...» Ьп, &12... — элементы массивов;
1, 2, ...» п, 11, 12, ..., mn — индексы элементов массива.
Имена массивов обозначаются буквой или буквой с цифрой, как и простые переменные, но в отличие от них после имени ставятся открывающая и закрывающая скобки. Элементы массива обозначаются, как и сам массив, но в скобки проставляются индексные переменные или константы. В случае двумерного массива в скобках будут две переменные или константы, разделенные запятой. Например,
А ( ) —имя цифрового массива;
В (2,1)——имя цифрового элемента 621 массива В;
В1 0 ( ) —имя символьного массива. В качестве индекса может быть константа, простая переменная или выражение. Никаких ограничений на сложность этих формул в Бейсике нет. Однако в большинстве практических задач индексные выражения редко бывают сложнее выражения;:' aX^+bt где а, b ——целые константы и л — целая переменная.
Выражения в Бейсике соответствуют общепринятым математическим выражениям и записываются только в один ярус, включая индексы и степени. В выражения могут входить константы, простые и индексированные переменные, стандартные и нестандартные функции.
Выражения вычисляются с использованием тех численных значений, которые имеют входящие в него переменные к моменту его исполнения в программе. Поэтому при составлении программ необходимо тщательно следить за тем, чтобы переменные, входящие в выражение, всегда были определены к моменту вычисления этого выражения.
Порядок выполнения операций определяется круглыми скобками. Внутри скобок операции выполняются слева направо в следующей последовательности: вычисление функций; возведение в степень; умножение и деление; сложение и вычитание; Например, выражение A+B/C*D——ЕТК будет выполняться в следующей последовательности: 1) В/С, 2) (В/С) *D, 3) А+ (B/C^D), 4) EfK, 5) (A+B/C*D) —(EfK)・
Стандартные функции. Для обозначения стандартных функций в Бейсике используются имена. По этим именам вызываются соответствующие подпрограммы, по которым находятся
эти стандартные функции. Аргумент функции заключается в скобки и записывается непосредственно за именем функции. В качестве аргумента может быть переменная, константа и выражение, в которое также могут входить другие стандартные функции. Аргументы тригонометрических функций SIN, COS, TAN даются в радианах. Для использования графиков применяются специальные операторы. Единственной функцией, не содержащей аргумента, является RND. Она работает как генератор случайных чисел с равномерным законом распределения в диапазоне (0,1). В Бейсике приняты следующие стандартные функции:
SJN(X) —sin% (синус),
COS (X) — cos % (косинус),
TAN(X) — tgx (тангенс)*,
ЕХР(Х) — ех (экспонента),
LOG(X) — Inх (натуральный логарифм),
ABS(X) —|х| (модуль),
SQR(X) — У х (квадратный корень), INT(X) — (ближайшее целое к %), SGN (X) — (знак %):
если х>0,
Signx= 0,》%=0,
—1,》%<0,
RND— (выборка случайного числа), Р1число л (3.14159265359), ROUND (X, N) —округление х *: до N-ro десятичного знака, если N>0; до ближайшего целого числа, если N = 0; до N + 1-го разряда слева от десятичной точки, если < О, ARCSIN (X) — arcsin х *, ARCCOS(X) —arccosx *, ARCTAN (X) — arcctgx[Ha ЭВМ ДВК-2М —ATN (X)].
Примеры записи (обычная s на Бейсике):
三好三(X— У)/2/ТТ2
XiXi(七 + aik)a + 5,3(七 + aik)a + 5,3三 X (I)/((X (I)丄 A (I,К)) f АО+ 5,3)三 X (I)/((X (I)丄 A (I,К)) f АО+ 5,3)
Xi
Xi
(七 + aik)a + 5,3
(七 + aik)a + 5,3
三 X (I)/((X (I)丄 A (I,К)) f АО+ 5,3)
三 X (I)/((X (I)丄 A (I,К)) f АО+ 5,3)
где переменная а обозначена именем АО.
21n2_e48sM + 0M4y)mZ 羌 LOG (Z) - EXP (4 *COS(Xf2+0,004 * Y))
/in (1 - /炉一|y|)丰 SQR (LOG (1 - SQR (X?2 — ABS(Y))))
Типичные ошибки в записи формул: 2x4-6s2X + B — пропущен знак умножения,
МикроЭВМ ДВК-2М не имеет.
— = Х/—А ——два знака операций подряд,
〃 ('—^~ё~^^)三А* (Т — (В — SIN(Х))/(С — D) — не хватает закрывающей скобки,
sin%+bmSINX—В — аргумент синуса не в скобках.
Операторы, как основная синтаксическая единица языка, имеют следующую конструкцию:
п <имя> <параметры>
где п — номер оператора (целая константа от 1 до 9999). Номера проставляются в порядке возрастания, но необязательно подряд, например, 10, 20, 30 и т. д.;,
<имя>—ключевое слово, имя оператора, по которому находится тот участок или участки программы в программе-трансляторе, который исполняет этот оператор. Имя представляет собой полное или сокращенное (в виде аббревиатуры) английское слово (табл. 4.1);
<параметры> — представляют собой ту информацию, которая необходима для исполнения этого оператора.
Таблица 4.1
№ п/п
Запись оператора
Операторы
Страницы
1
2
3
4
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DATA 也,也2, •♦.
DEF р(аь 。2,.・•) = выражение DIM。1(也1,也 12),02(也2),...
END
FOR а=Ьн ТО Ьк STEP Ьш GOSUB п
GOTO 九
IF 瓦 *ь2 THEN n INPUT ab «2, •. • LET a—b (или a — b) NEXT a
ON в GOTO九1,得… PRINT 瓦,62,... READ ab & REM текст RESTORE RETURN STOP 'текст' MAT !READ ai,•
MAT INPUT a】,傲 MAT PRINT01, 出,… MAT A=B
MAT A=ZER MAT A=CON MAT A=IDM
MAT A=B+C MAT A=B —C MAT A=B*(b) MAT A=B*C MAT C=TRN(A) MAT C=INV(A)
Задания данных числами Нестандартных функций Размерности массивов Конца записи программы Цикла
Перехода к подпрограмме Безусловного перехода Условного перехода
Ввода данных с терминала Присваиваиня
Последний оператор в цикле Переключатель
Вывода (печати)
Выборки из блока данных Комментарий
Восстановления данных
Возврата из подпрограммы Останова
Выборки массивов
Ввода массивов
Вывода массивов
Матричный оператор присваивания
Присваивания массиву нулей Присваивания массиву единиц Приведения матрицы к единичной
Сложения массивов Вычитания массивов Умножения массива на скаляр Умножения массивов Транспоннроваиня матрицы Обращения матрицы
101 • 105
108
98 97
106 96 96
104
95
97 97
99
101 105 103 106
98 .
109 ПО ПО
111
ш 111
ш 111 ш 112 112 113 ИЗ
Параметрами могут быть выражения, величины, имена, текст, номера операторов, другие операторы. Ряд операторов не имеет параметров, например, END, RESTORE и др. В табл. 4.1 принята следующая аббревиатура: а, а^…一имена переменных или массивов; k,尼 1, Ei, k2t h⑵…—константы; bf 仇,6H,.-.——имена, константы или выражения; л, Ль ... — номера операторов; 0 — соотношение (неравенство); А, В, С——имена массивов. Завершается оператор нажатием управляющей клавиши в клавиатуре терминала——《возврат каретки», нажатие которой вызывает переход курсора на следующую строку, т. е. к набору следующего оператора.
Допускается запись нескольких операторов в одну строку под одним номером с разделением операторов специально установленным для данной ЭВМ разделительным знаком:
п <имя> <параметр>、<нмя> <параметр>... где、一 разделитель операторов.
ОСНОВНЫЕ ОПЕРАТОРЫПРИСВАИВАНИЯ И УПРАВЛЕНИЯ
Оператор присваивания LET. Оператор осуществляет операцию присваивания переменным численных значений или значений других переменных. Причем численные значения могут определяться ио приведенным в операторе выражениям. Оператор имеет форму записи
.LET а = Ь(4.1)
где LET (пусть)—ключевое слово (нмя) оператора присваивания; а — имя переменной (простой илн индексированной); b ——константа, имя переменной нли выражение.
Если b — константа, то оператор присваивает переменной а эту константу, т. е. засылает в ячейку памяти, отведенную под а, данное тасло b из оператора программы. Если b — переменная, то оператор присваивает переменной а численное значение (переменной 6, т. е. пересылает содержимое ячейки памяти b в ячейку памяти а. Если & — выражение, то оператор вычисляет это выражение и вычисленное значение присваивает переменной а. Например,
10 LET А = 2
20 LET Z = Y
30 LET В (5) = (А * X + D)/COS (Т)
Оператор LET позволяет выполнять несколько присваиваний. Такой оператор имеет форму записи
LET 5 = & n • • • о。卜=b(4.2)
где 。1, 。2,.. •,。在—имена переменных, которым присваивается численное значение а; b — может быть константой, именем переменной, выражением.
Например:
AERT T TEEELLLООО4 5 6AERT T TEEELLLООО4 5 6/в5G)=+dt一二二一CGB二二一BFP/в5G)=+dt一二二一CGB二二一BFP
AERT T TEEELLLООО4 5 6
AERT T TEEELLLООО4 5 6
/в
5G)=+dt
一二二一CGB二二一BFP
/в
5G)=+dt
一二二一CGB二二一BFP
Здесь в операторе с номером 60 величина В принимает новое численное значение, отличное от значения В в выражении (A+G)/B.
Применяется запись операторов присваивания без ключевого слова LET. Например:
10 А = 7.3
15 В= —4.57
20 XI = A* COS(B/(—5)+3)
Оператор перехода GOTO. Оператор выполняет операцию безусловного перехода и имеет форму записи
GOTO п(4.3)
где GOTO (перейти к) ™ имя оператора; п ——номер оператора, который должен выполняться следующим после оператора перехода (положительная целая константа).
Оператор с номером п может находиться в любой исполняемой части программы. Например:
ю R = 1 н S = о
i>12 S к S + SIN(R)/R f 4
I13 R = R + 1
I14 GOTO 12
В рассмотренном примере с помощью оператора перехода GOTO, выполняющего переход с оператора 14 на оператор 12, организован цикл из операторов 12, 13, 14 для получения суммы бесконечного ряда
Чтобы заставить машину выйти из цикла, необходимо применить оператор условного перехода.
Оператор условного перехода. Оператор выполняет операцию условного перехода и имеет следующую структуру записи:
IF 瓦 0 尻 THEN n(4.4)
где IF (если)—имя оператора; b〔,方2 — арифметические выражения; 0 — знак операции отношения (=, =#, >, ^, <, W); THEN—служебное слово; л — номер оператора, к которому совершается переход, если условие Ь,® Ь? выполняется.
В том случае, когда условие b\Qbz не выполняется, сохраняется естественный порядок следования операторов, т. е. выполняется оператор, расположенный сразу ниже оператора IF.
Пример 4.1. Участок программы для вычисления суммы
NEW
20 R=1、S=O
>30S = S + SIN(R)/RM
Да40R=R+1
士=50 IF RW20 THEN 30
Нет!^60 END
RUN
В примере: \—разделитель операторов, END — оператор конца записи программы (см. ниже), NEW — директива ввода новой программы, RUN — директива пуска (см. п. 4.6). Эти директивы организуют ввод и запуск данной программы.
Оператор-переключатель ON. Оператор осуществляет условный переход на один из нескольких операторов, т. е. разветвление вычислительного процесса на несколько направлений. Выбор направления производит специальная (переключающая) переменная (выражение^. Оператор ON является дальнейшим развитием операторов перехода GOTO и IF. Оператор GOTO выполняет переход только к одному оператору, номер которого указан в самом операторе GOTO. Оператор IF выполняет переход уже на один из двух операторов, т. е. реализует разветвление в двух направлениях: если условие, заданное ;в операторе IF, выполняется, то вычислительный процесс переходит к оператору, номер которого указан в самом операторе IF, если условие не выполняется, то переход осуществляется на ниже расположенный оператор. Оператор ON выполняет переход на один из нескольких операторов, номера которых указаны в самом операторе ON. Выбор номера оператора определяется значением специальной величины ——переключающей переменной. Форма записи оператора
ON b GOTO nb 几2,孔左 (4.6)
где ON (по)—имя оператора; b ——переключающая переменная илн арифметическое выражение, принимающее значение 1, 2,...,^, и указывающая порядковое местоположение номера оператора, на который должен быть выполнен переход; GOTO — служебное слово; п1( л2,..., Пк ——номера операторов, к которым производится переход.
Оператор выполняет следующие операции:
вычисляет выражение b и получает численное значение Ь. Если b имеет дробную часть, последняя отбрасывается. Величина Ь может принимать целые значения от 1 до к. Если Ь<1 или &>к, то машина выдает сообщение об ошибке;
из списка номеров меток пь 〃2, •••, 〃к выбирает номер, порядковое расположение которого равно Ь, т. е. если Ь=1, то выбирается номер 孔 1, если Ь = 2, то 孔2 и т. д.;
выполняет переход к оператору с выбранным номером. Например:
ON SGN (D) + 2 GOTO 260, 200, 240
Если D<0, то SGN(D) =—1 (см. стандартные функции), следовательно, SG'I(D)+2 = 1, и в результате выбирается первый по порядку номер 260. На оператор с этим номером и будет произведен переход. Если D = 0, то SGN(D) =0, a SGN(D) +2 = 1. Выбирается второй по порядку номер 200. Переход будет выполнен на оператор с номером 200. Наконец, при D>0 будет SGN(D) = 1, а SGN(D) +2 = 3. Переход будет на оператор 240.
Операторы цикла FOR и NEXT. Оператор заголовка цикла FOR открывает цикл, т. е. является первым -оператором цикла, а оператор NEXT — последним оператором цикла. Операторы, нахо-
£7£77—48
£7
£7
дящиеся между этими операторами, и составляют сам цикл. Цикл имеет следующую структуру записи:
j——>FOR а=Ьн ТО 6к STEP
I I операторы, входящие自 7)
I 二二二 j в цикл[ *,
!NEXT а
где FOR (для) — имя оператора заголовка цикла; а ——имя управляющей переменной цикла; Ьа? &к, Ьш — константы, переменные, определяющие начальное, конечное значения переменной цикла а н шаг соответственно; ТО (до)» STEP (шаг)——служебные слова; NEXT (следующий)——имя последнего оператора цикла. Если шаг 6Ш = 1, то запись STEP bm можно опустить.
Цикл реализуется следующим образом. Оператор FOR присваивает переменной цикла а начальное значение Ьн (т. е. a = b^t а затем последовательно выполняются все нижеследующие операторы вплоть до последнего оператора NEXT, от которого управление возвращается вновь на оператор FOR. Оператор FOR изменяет переменную цикла а на величину шага &ш по выражению a = a + bm, сравнивает а с конечным значением 6К. Если а^6к, то вновь выполняются операторы,, входящие в цикл. Если нет, то процесс выходит из цикла и выполняется оператор, расположенный ниже оператора NEXT.
Пример 42 Программа выполнения формулы (4.5):
NEW
10 S = 0
20 FOR R=1 ТО 20 STEP 1
30 S = S + SIN(R)/Rf4
40 NEXT R
50 END
RUN
Операторы конца программы END и останова STOP, Оба оператора выполняют одну и ту же функцию — запланированный останов. Отличие в том, что оператор END должен обязательно присутствовать в любой программе и иметь максимальный номер в программе, т. е. должен быть последним в тексте программы. Оператор STOP может быть в любом месте программы там, где нам необходимо остановить работу программы.
В момент выполнения операторов STOP пользователь получает сообщение о нормальном останове с указанием номера оператора, вызвавшего останов.
Выполнение программы может быть прервано незапланированным образом при ошибочных ситуациях типа деления на (нуль, выборки из уже пустого оператора данных DATA и т. д. При таком останове выдается сообщение(о характере ошибки и об ошибочном операторе.
Оператор END не имеет содержательной части. Оператор STOP допускает запись текста
STOP /текст/(4,8)
где 'текст'——сообщение, поясняющее выполнение вычислительного процесса, или директиву, что нужно сделать, чтобы процесс пошел дальше. Например, STOP'CMEHHTE KACCETF.
ОПЕРАТОРЫ ВВОДА И ВЫВОДА
Оператор вывода PRINT. Оператор выводит на терминал результаты вычислений и пояснительные тексты. Он имеет следующую форму записи:
(4.9)(4.9)PRINT %,戾,• • •
(4.9)
(4.9)
где PRINT (печатать)——имя оператора;匕曾 匕2, • • • 一 перечень элементов списка, разделенных запятой или точкой с запятой.
В качестве элемента списка могут быть: имя переменной, численное значение которой выводится на печать; арифметическое выражение, результат вычисления которого выводится на печать; любой пояснительный текст, взятый в кавычки.
При использовании запятой величины печатаются через 15 позиций. При длине строки 75 позиций в строке образуется пять зон по 15 позиций. В каждую зону печатается по одной величине, начиная с позиций 1, 16, 31, 46, 61. Причем указанные первые позиции используются только для печатания знака минуса у отрицательных величин, а сами величины печатаются, начиная с позиций 2, 17, 32, 47, 62.
Пример 4.3.
NEW■
10 А= —1
20 В = 2
30 с = з
40 D = —4
50 Е=А*В
60 F=B*C
70 G=C*D
80 H = D*A
90 PRINT А, В, C, D, E, F, G, H
100 END
RUN
В приведенной программе оператор PRINT будет печатать (рис. 4.1, а) значения величин: А — в позиции 1 и 2 (в позицию 1 знак минус); В — в позицию 17 (позиция 16 остается пустой, так как нет знака минуса); С ——в позицию 32 (позиция 31 остается пустой); D — в позиции 46 'и 47 (есть знак минус); Е ——в позиции 61 и 62. Остальные величины, превышающие пять элементов, размещаются в следующую строку в следующие позиции: 2 — величина F; 16—18—величина G; 32 — величина Н.
При использовании точки с запятой величины печатаются с промежутком ib две позиции, т. е. между последней цифрой предыдущей величины и первой цифрой последующей величины делаются два пробела (или один, если вторая величина со знаком минус).
Если в приведенной программе в операторе PRINT имена переменных разделить точкой с запятой '
90 PRINT А; В; С; D; Е; F; G; Н
то значения величин напечатаются, как показано на рис. 4.1, б. Перед 2, 3, 6 и 8-м числами будут два пробела (нет знака минуса) ;перед 4, 5 и 7-м ——по одному пробелу (второй пробел занимает минус).
1631466175 Позиция
-2|2Гзр|-2
61-12I 4II
IIII
Зона 1 Зона 2Зона 3Зона 4 ^^Зона 5 >
7.4 23.7 6.7895 1.15-7.34.567 9.470.79
IIII .
Зона 1] Зона 2| Зона 3| Зона 4 I Зона 5
в
РАСЧЕТ ЭЛЕКТРИЧЕСКИХ НАГРУЗОК
[III
|СТ. ГР. 15Э ПЕТРОВ А.В. ||
Зона 1 I Зона 2| Зона 3| Зона 4| Зона 5
Рис. 4.1. Размещение сообщений при выводе оператором PRINT; а — величины отделены запятой; 1, 16, 31, 46, 61——первые позиции зон, в ко- ■ торые печатается минус при отрицательных числах; б ——величины отделены точкой с запятой; в — величины разделены точкой с запятой н запятой; г ——вывод текста, пропуск строки и пропуск зоны
В одном операторе могут применяться как точка с запятой, так и запятая. Величины, разделенные точкой с запятой, печатаются через два пробела (не считая знака минус). Величина, записанная после запятой, печатается в начале следующей не занятой зоны.
Например, пусть величины А = 7.4, В = 23.7, С = 6.7895, D = 1.15, Е = —7.3, F=4.567, 1 = 9.47, J=0.79. Запишем оператор PRINT
320 PRINT А; В; С; D, Е, F; I, J
Оператор разместит числа следующим образом. Величины А, В, С и D будут печататься через два пробела (перед минусом — через один). Они займут зону 1 и не полностью зону 2)(рис. 4.1, s). Величина Е, отделенная запятой, будет печататься с начала следующей свободной зоны 3. Величина F, отделенная запятой, будет печататься тоже с начала следующей 4-й зоны. Величина 1, отделенная точкой с запятой, будет печататься сразу за F через два пробела. Последняя величина J, отделенная запятой,—в следующую зону 5.
Оператор PRINT может выполнять вычисления и печатать их результаты.
Например,
130 PRINT X, (А*Х,2 + В)/С, 15*76, В —С
В первой зоне печатается текущее значение X, во второй ——результат вычислений (А*Х,2 + В)/С, в третьей ——результат вычислений 15*76 и, наконец, в четвертой зоне)——результат вычислений b--С.
Если необходимо в строчке пропустить зону, то в операторе PRINT дается в кавычках пробел, и он отделяется запятой* А если необходимо пропустить строку, записывается оператор PRINT без списка.
Пример 4.4.
NEW
10 PRINT ТАСЧЕТ ЭЛЕКТРИЧЕСКИХ НАГРУЗОК'
20 PRINT
30 PRINT ' ; ЛСТ.ГР. 15Э ПЕТРОВ А. В/
40 END
RUN•
Первый оператор PRINT печатает сообщение РАСЧЕТ ЭЛЕКТРИЧЕСКИХ НАГРУЗОК, начиная с 1-й позиции печати. Второй оператор «печатает» пустую строку, т. е. пропускает строку. Третий оператор печатает сообщение СТ. ГР. 15.Э ПЕТРОВ А. В., начиная с позиции 16 (зона 2).
Оператор выборки данных READ. Оператор выбирает (считывает) данные, введенные в программу оператором DATA, и присваивает их переменным. Форма оператора
READ а】,…(4.10)
где READ (читать) — имя оператора; %, а2,... —' перечень переменных, которым присваиваются данные, взятые из оператора DATA.
Оператор данных DATA. Оператор содержит константы (числа), которые оператор READ присваивает переменным при выполнении программы. Оператор может размещаться в любом месте
программы, т. е. он не является исполнимым оператором, реализующим алгоритм программы. Форма оператора
DATA 电,局….(4.11)
где DATA (данные)—^'имя оператора;也,局,…一перечень констант.
Например,
20 DATA 17, —0.6, 3.8, 135, 42.8
30 READ W, А, В, С.
40 END
При выполнении оператора READ переменной W будет присвоено значение 17, переменным А, В и С — соответственно —0,6; 3,8; 135. После этого в блоке данных (в операторе DATA) останется только одно число 42,8. Оно может быть выбрано при выполнении другого оператора READ.
Из оператора DATA данные считываются последовательно одним или несколькими операторами READ.
Пример 4.5.
NEW
10 DATA 1, 0.5, 5.12, 0.2, 10, 20.2
20 READ X
30 PRINT X, Х,2
40 GOTO 20
50 END RUN
Программа реализует цикл из операторов 20, 30 и 40. В каждый проход цикла оператор READ поел ед о в ател ьно считывает из оператора DATA очередное число и присваивает его переменной X. Оператор PRINT печатает это число и квадрат этого числа. Поскольку цикл бесконечный (использован оператор безусловного перехода GOTO), то оператор READ, сделав шесть проходов, считывает все восемь чисел и вновь возвращается на оператор READ. Поскольку в операторе DATA все числа считаны, то оператор READ не будет выполняться и машина на этом операторе остановится, напечатав сообщение OUT OF DATA IN20 (конец данных, остановка на 20-й строке).
Оператор DATA можно не только располагать в любом месте программы, но и разделять его на части,и считывать из него разными операторами READ
Пример 4.6.
NEW
10 READ А, В
20 DATA 22, 6, 19, 5, 31, 7, 2
30 READ С
40 D = Bf2 —4*А*С
50 PRINT D
60 GOTO 10
70 DATA 12, 3, 25, 17, 9, 27
80 END RUN
Программа содержит цикл (10—60). В нем два оператора READ, вместе они считывают три числа. В программе два опера- 102
тора DATA. Считывание в цикле будет в следующей последовательности; В первый проход цикла оператор READ А, В считает числа 22 и 6; второй оператор READ С считает число 19. В результате А=22, В = 6, С=19. Во второй проход считываются также три числа А=5, В = 31, С = 7. В третий проход цикла первый оператор READ А, В считывает число 2 из первого оператора DATA и число 12 из второго оператора DATA и А = 2, В= 12. Второй оператор READ считывает из этого же оператора DATA следующее число 3. Наконец, в следующий проход цикла будут считаны числа 25, 17, 9. Машина остановится на операторе 10, поскольку оператор READ А, В должен считывать два числа, а осталось в операторах DATA всего одно число 27. При этом будет выведено 'сообщение OUT OF DATA IN 10 (конец данных, остановка на операторе 10).
Пример 4.7. Программа расчета среднего значения s = ~ 2«г.
NEW
10 DATA 10, 56, 16, 9, 23, 53, 41, 2, 18, 13, 32
20 READ N
30 S = 0
40 K=1
50 READ A
60 S = S+A
70 K=K+i
80 IF K《N THEN 50
90 S = S/N
100 PRINT 'СРЕДНЕЕ ЗНАЧЕНИЕ; S
110 END
RUN
Рассмотрим программу. В операторе DATA дано 11 чисел. Из них первое — это количество суммируемых чисел. До выполнения цикла считывается число 10, и оно присваивается переменной N (оператор 20), затем сумме S присваивается исходное нулевое значение (оператор 30) и переменной цикла К—начальное значение (оператор 40). В цикле считывается число 56, и оно присваивается переменной А (оператор 5。), затем к сумме S прибавляется число 4 = 56 (оператор 60), изменяется переменная цикла на шаг (оператор 70), сравнивается переменная цикла К с конечным значением (оператор 80), и если KWM то процесс возвращается на начало цикла на оператор 50. Оператор 50 считывает из оператора DATA следующее число 16 и присваивает ее переменной А = 16 и т. д. После того как процесс пройдет 10-й раз цикл, оператор IF передаст управление на оператор 90, который полученную сумму разделит на М Оператор PRINT напечатает текст «СРЕДНЕЕ ЗНАЧЕНИЕ» и его значение S.
Оператор восстановления данных RESTORE. Оператор позволяет повторно вновь выбрать из оператора DATA уже перед этим выбранные данные. После его выполнения выборка из оператора DATA начинается с самого первого числа. Оператор может употребляться в любой момент работы программы, в том числе не дожидаясь полной выборки чисел из оператора DATA.
Например.
10 DATA 7, 1.3, 2.7, 1.9, 0.8
20 READ N, А, В, C
100 RESTOiRE
110 READ А, А, В, C,
В приведенном примере оператор 20 READ считывает из оператора DATA четыре первых числа, оставляя не считанным пятое число 0.8. Оператор 100 RESTORE восстанавливает считывание с первого числа 7. Оператор НО READ повторно считывает четыре числа, исключая первое и включая последнее. Первое число 7 считывается, присваивается переменной А и тут же заменяемся вторым 1.3.
Оператор ввода INPUT. Оператор INPUT, так же как и оператор READ, вводит данные в память машины. Разница в том, что оператор READ вводит данные, которые уже заранее включены в программу в операторе DATA и введены вместе с программой. Фактически оператор READ пересылает данные из программы в память и присваивает их указанным переменным. Оператор INPUT вводит данные с терминала во время выполнения программы. Форма записи оператора
INPUT о】,а,…(4.12)
где INPUT (ввести)—имя оператора; %, 出….一имена переменных, которые должны вводиться.'
При выполнении программы машина, дойдя до оператора INPUT, выводит запись этого оператора на экран терминала и останавливается. Пользователь набирает на клавиатуре одно или несколько чисел в соответствии с количеством указанных в операторе переменных, разделяя их запятыми. Затем нажимает клавишу перевод строки (возврат .каретки). Машина вновь запускается, присваивает первое число первой переменной, второе ——второй и т. д. и продолжает выполнение программы.
Пример 4.8. Составить программу для расчета среднего значения и среднедвадратичного отклонения, используя формулы (3.2) из примера 32
Воспользуемся последовательностью, принятой в примере 3.6, но дополнительно не будем вводить фиксированное число п (количество чисел), а будем его накапливать. Это предоставит возможность использовать программу для любого значения п. Для окончания цикла, т. е. если числа все введены, будем вводить нуль.
NEW
10 Sl=0
20 S2 = 0
30 N = 0
40 INPUT A
50 IF A = 0 THEN 100
60 Sl-Sl+A
70 S2 = S2+Af2
80 N = N+1
90 GOTO 40
100 C = S1/N
110 D = SQR((S2 — Cf2*N)/(N—1))
120 PRINT 'СРЕДНЕЕ'; С, 'ДИСПЕРСИЯ*; D, ЧИСЛО ЭЛЕМЕНТОВ*; N
130 END
RUN
В программе операторы 10 и 20 присваивают суммам начальное нулевое значение. Оператор 30 присваивает нулевое значение величине N — счетчику количества введенных чисел. Операторы 40—90 организуют цикл, в котором вводится очередное число А (оператор 40), введенное число прибавляется к суммам (операторы 60—70), в счетчик количества введенных чисел засылается единица (оператор 80). Цикл образован с помощью оператора безусловного перехода (оператор 90).
Если все числа введены, то набирается нуль. Оператор 50 проверяет значение введенного числа. Если А = 0; то выходит из цикла, делая переход на оператор 100. Рассчитывается среднее значение, затем дисперсия (оператор ПО), и результат выводится оператором PRINT с указанным пояснительным текстом.
Оператор комментарий REM. Оператор позволяет вставлять в программу комментарий (тексты), поясняющий ее работу. Оператор можно записывать в любом месте программы. Он не влияет на выполнение программы.
При выполнении программы комментарий не печатается. Он печатается вместе с текстом программы, только когда программа распечатывается по директиве LIST (см. ниже). Форма записи оператора
REM ТЕКСТ(4,13)
Например,
10 REM ПРОГРАММА РАСЧЕТА НАГРУЗОК
20 REM СОСТАВИЛ СТУДЕНТ ПЕТРОВ А. В. (15Э) 30
ФУНКЦИИ И ПОДПРОГРАММЫ
Оператор нестандартных функций DEF. Выше были приведены стандартные функции SIN (X), COS (X) и др. Оператор позволяет создать дополнительно к ним еще и другие функции. Оператор целесообразно применять тогда, когда одно и то же выражение многократно вычисляется в различных местах программы. Оператор позволяет избежать многократной записи выражения. Оно записывается один раз в операторе DEF, и ему присваивается имя. Это имя используется в программе вместо выражения, приведенного в оператор DEF. Форма записи оператора
DEF Кщ, а2, • - •) = выражение (аь а2, • - •)(4.14)
где DEF (от definition ——определение)——имя оператора; / ——имя нестандартной функции, состоящее из трех букв (в некоторых машинах имя функции должно начинаться с букв FN); °з а2,...——аргументы функции (формальные); выражение (。1, 。2,...) 一 выражение, выделяемое в операторе DEF.
В тех местах программы, где были эти выражения, записывается имя функции с указанием в скобках имен фактических аргументов
/(厶,d2, ••・)(4.15)
где d], dz,... — имена аргументов, которые должны быть в этом выражении на соответствующем месте программы.
Пример 4.9. Имеется программа с тремя операторами, реализующими одинаковые выражения:
50 A=i.7*Xf2 + 2.i*X*Y+0.8*Yf2
100 B = L7*Z,2+2.1*Z*T+0.8*Tf2
150 C=L7*Yf2+2.i*Y*S+0.8*s+2
300 END ''''
Выделим выражение в оператор DEF. Дадим ему имя FNC, а формальные аргументы в выражении обозначим V и W. Вместо выражений в программе записываем имя функции, но с указанием фактических аргументов. В результате получим:
5 DEF FNC (V, W) =L7*Vf2+2・i*V*W+0.8*Wf2
50' A=FNC (X, Y)
100 B=FNC (Z, T)
150 C = FNC (Y, S)
300 END ''''
Оператор перехода к подпрограмме GOSUB. Подпрограмма —— это оформленный специальным образом участок операторов, к которому можно обращаться из разных мест программы и возвращаться обратно в эти же места.
Оператор GOSUB передает управление на первый оператор подпрограммы и запоминает то место, куда нужно возвратиться после выполнения подпрограммы. Форма записи оператора
(4.16)(4.16)GOSUB п
(4.16)
(4.16)
где GOSUB (идти к подпрограмме) — нмя оператора;九一номер первого оператора подпрограммы.■
Оператор возврата из подпрограммы RETURN. Оператор возвращает управление из подпрограммы обратно в то место, из которого был сделан переход к подпрограмме. Адрес возврата запоминается при исполнении оператора GOSUB.
Пример 4.10. Составить программу вычисления числа сочетаний из n по m по выражению
т! (п — т)!т! (п — т)!(4.17)(4.17)
т! (п — т)!
т! (п — т)!
(4.17)
(4.17)
для задаваемых величин пит.
Расчет факториала п! = 1 -2-... -п организуем подпрограммой. При этом предусмотрим, что, если п<0, факториал приравнивается нулю п! = 0, вычисление останавливается, а машина выводит
сообщение «ФАКТОРИАЛ ИЗ ОТРИЦАТЕЛЬНОГО ЧИСЛА>. Если п=0, то факториал будет n! = 1. При п>1 расчет факториала будем выполнять в цикле с использованием выражения: f=f*^, где f — накапливаемое значение факториала,々一переменная цикла. При этом начальные значения f=l, 々 = 2. Конечное значение переменной цикла k = n,
С учетом сказанного программа запишется:
NEW
10 INPUT N, М
50 L = N ,
60 GOSUB 160
70 C = F
80 L = M
90 GOSUB 160
100 C = C/F
110 L=N —M
120 GOSUB 160
C==C/F
140 PRINT 'СОЧЕТАНИЕ ИЗ'; N; ТЮ'; M; 'РАВНО'; C
150 GOTO 10
160 ON SGN(L)+2 GOTO 170, 200, 220
170 F = 0
180 PRINT 'ФАКТОРИАЛ ИЗ ОТРИЦАТЕЛЬНОГО ЧИСЛА*
190 GOTO 280
200 F=1
210 RETURN
220 F=1
230 FOR K = 2 TO L
240 F = F * К
250 NEXT К、
260 RETURN
280 END
RUN
Поясним программу. Участок программы от оператора 10 до оператора 150 составляет цикл, выполненный на операторе безусловного перехода GOTO (оператор 150). Участок программы——операторы 160——260 — является подпрограммой расчета факториала от аргумента L. '
Цикл включает три обращения (перехода) на подпрограмму (операторы 60, 90, 120) соответственно для расчета трех факториалов.: п!, /и!, (п ——m)!. Перед тем как перейти к подпрограмме, принятому в программе аргументу факториала L присваивается соответствующая величина: N, М, N — М (операторы 50, 80, 110). Само выражение (4.17) решается по операциям в операторах 70, 100, 130, где F — имя найденного в подпрограмме факториала F=L!, С ——имя искомого сочетания Cnm.
Оператор 140 выводит искомый результат с пояснительным текстом: «СОЧЕТАНИЕ ИЗ N ПО М РАВНО С», где N, М, С — числа..
Подпрограмма начинается переключателем ON (оператор 160). Если оказалось, что L отрицательное, т. е. L<0, то SGN(L) +2= 1 и переход будет по первому номеру к оператору 170, который присвоит факториалу нуль, затем будет выведено сообщение «ФАК-
ТОРИАЛ ИЗ ОТРИЦАТЕЛЬНОГО ЧИСЛА» (оператор 180) и процесс перейдет к оператору 280 END. Если оказалось, что L = G, то SGN(L)+2=2 и переход будет по второму номеру к оператору 200, который присвоит факториал F=l, а затем оператор 210 возвращается обратно в основную программу. Наконец, если L>0, то SGN (L) +2 = 3 и переход будет к третьему оператору 220. Последний присвоит начальное значение факториалу F=L а затем будет выполнен цикл расчета факториала (операторы 230—290).
После окончания цикла оператор 260 RETURN возвратит процесс обратно в основную программу соответственно на операторы 70, или 100, или 130.
ОПЕРАТОРЫ ДЛЯ РАБОТЫ С МАССИВАМИ
Алгоритмический язык Бейсик может предоставлять пользователю дополнительные вычислительные возможности работы с массивами. Задачи обработки массивов сравнительно часто встречаются в инженерных и экономических расчетах. Операторы для работы с массивами отличаются от обычных операторов присваивания, ввода, вывода и других тем, что в запись оператора введено первым дополнительное имя МАТ (от matrix ——матрица), после которого ставится сам 'исполнимый оператор. Например, МАТ READ, MAT PRINT и др.
Все операторы для работы с массивами (будем их называть матричными операторами) могут быть разделены на три группы: матричные операторы ввода-^вывода;
матричные операторы присваивания;
матричные операторы преобразования массивов.
Кроме того, в программах, где используются массивы, обязательно должен присутствовать оператор размерности массивов.
Оператор размерности массивов DIM. Оператор резервирует место в памяти для размещения массивов и задает размерность символьных переменных. Он записывается в начале программы до использования элементов массивов в других операторах.
Форма записи оператора
DIM S(电 1,电2),电(砌….(4.18)
где DIM (dimension — размерность) 一 имя оператора; Яь аг,... — имена массивов; /г”, Gi2,々2, • • • — размеры массивов (количество строк н столбцов в двумерном массиве илн количество элементов в одномерном массиве).
Пример 4.11.
NEW
20 DIM А (8,12), С (12), D (12)
30 FOR 1-1 ТО 8
40 FOR J=i ТО 12
50 INPUT A (I, J)
60 NEXT J
70 NEXT I
80 FOR J = I TO 12
90 Sl=0
100 S2 = 0
110 FOR 1 = 1 ТО 8 120 S1 = S1+A (I, J) 130 S2 = S2 + A (I, J)f2 140 NEXT I
150 C (J)=Sl/8
160 D (J)=SQR ((S2 — C(J)*8)/(8—1))
170 NEXT J
180 FOR J=1 TO 12 STEP 4
190 PRINT C(J), C(J+1), C(J + 2), C(J + 3) 200 PRINT D(J), D(J+1), D(J + 2), D(J + 3) 210 PRINT 220 NEXT J
230 END RUN
. В программе рассчитываются среднее значение и дисперсия по столбцам матрицы А ( ) размером 8Х12 (см. примеры 4.8 и 3.2). Оператор 20 резервирует место в памяти для исходных двумерного массива А ( ), средних значений С ( ) и дисперсий D ( ) по столбцам элементов матрицы. Операторы 30—70 организуют два цикла FOR/NEXT для ввода исходного массива. Поскольку ввод принят по строкам, внутренний (вложенный) цикл организован по второму индексу J исходной матрицы. Операторы 80——170 рассчитывают среднее значение С ( ) и дисперсию D ( ) с помощью двух «вложенных» один в другой циклов.
Поскольку значения рассчитываются теперь по столбцам, то внутренний цикл выполнен по первому индексу I. Операторы 90 и 100 присваивают начальные значения суммам. Операторы 120 и 130 накапливают сумму элементов и сумму квадратов. Операторы 150 и 160 рассчитывают искомые средние значения и дисперсии по J-му столбцу. Операторы 180 и 220 организуют цикл вывода искомых величин. В каждую строчку выводятся четыре величины средних значений (оператор 190) по одной в зону вывода (разделитель ——запятая). Ниже другой строчкой выводятся значения дисперсий (оператор 200) также по одной в зону вывода. Оператор 210 оставляет пустую строку для отделения следующих двух строк с данными. Всего будет три пары строк по четыре величины в строку, а всего будет выведено 12 полученных значений, поэтому в операторе цикла взят шаг 4,
Оператор выборки массивов MAT READ. Оператор производит выборку чисел из блока данных DATA и формирует из этих чисел массивы. Форма записи оператора
MAT READ аь а2,...(4.19)
где МАТ — имя матричного оператора; READ—■ нмя оператора выборки данных (4.9); %, а2> • - • — имена массивов.
Оператор вначале формирует первую матрицу, затем вторую и т. д. Если массив двумерный (т. е. в случае матрицы), то массив формируется по строкам; вначале вся первая строка, затем вторая и т. д.
Оператор ввод^. массивов MAT INPUT. Оператор вводит массивы с терминала во время выполнения программы. Форма записи оператора
MAT INPUT в, а,…(4.20>
где INPUT — имя оператора ввода (4.12); о【,а2» • • - — имена массивов.
Оператор вводит и формирует вначале полностью первый массив, затем второй и т. д. В случае матрицы массив формируется по строкам.
Оператор вывода матрицы MAT PRINT. Оператор выводит на экран терминала значения элементов массивов. Форма записи оператора
MAT PRINT аь &,…(4.21)
где PRINT — имя оператора вывода (печати); а^ а2, • - ■ — имена массивов, после каждого нз которых, включая и последнее, ставится либо запятая, либо точка с запятой.
Оператор организует вывод значений элементов массива либо по стандартному формату — по одной величине в зону, если за именем массива стоит запятая, либо по уплотненному формату — с двумя пробелами между соседними элементами, если после имени массива поставлена точка с запятой. Каждый новый массив начи^ нает печататься с новой строки. Матрицы выводятся по строкам.
Пример 4.12. В программе примера 4.11 для ввода и вывода данных применимы матричные операторы:
NEW
20 DIM А (8,12), С(12), D(12)
50 MAT INPUT А
80 FOR J=1 ТО 12
90 Sl=0
100 S2=0
ПО FOR 1=1 ТО 8
120 Si=Sl+A (I, J)
130 S2as2+A (I, J)十2
140 NEXT I
150 C(J)=Sl/8
160 D(J)hSQR(S2—C(J)*8)/(8—1))
170 NEXT J
190 MAT PRINT C; D;
230 END RUN
В программе применены матричный оператор ввода (оператор 50), который вводит и формирует матрицу по строкам: а”, а⑵•••,«ь 12, «21, а22,-.-а8,12, и матричный оператор вывода (оператор 190), который выводит на экран или на печать «плотную запись» через один пробел вначале массив С, а затем D (в операторе использованы точка с запятой).
Заметим, что один оператор 50 MAT INPUT А заменяет пять операторов, а один оператор 190 MAT PRINT С; D-—пять операторов, но только по стандартному выводу «плотной записи》.
Матричные операторы присваивания. Операторы организуют присваивание элементам одного массива численных значений (ну- 110
ли или единицы), численных значений элементов другого массива, сумму или разность элементов двух других массивов. Размеры массивов и индексы их элементов должны совпадать. Общая форма записи операторов
МАТ А=В(4.22)
где А — имя массива, элементам которого присваиваются численные значения. В качестве В могут быть: служебные (ключевые) слова: ZER, CON, IDN; имя другого массива — В; выражения: В + С, В ——С, где В, С ——имя массивов.
В зависимости от того, что записано на месте В, оператор производит следующие присваивания:
присваивает всем элементам массива А нули (оператор «очистки» массива)
MAT A=ZER(4.22, а)
присваивает всем элементам массива А единицы (оператор присваивания единиц элементам матрицы)
MAT A=CON(4.22,6)
присваивает элементам диагонали матрицы А единицы, а всем другим элементам — нули (оператор приведения матрицы к единичной)
MAT A=IDM(4.22,8)
присваивает элементам массива А значения элементов другой матрицы (матричный оператор присваивания)
МАТ А=В(4.22, г)
Причем пересылка ведется из элемента массива В в элемент массива А с одинаковыми индексами: А(1,1) =В(1,1), А(1,2) =В(1,2), и т. д.
присваивает элементам массива А сумму элементов двух других массивов (оператор сложения массивов)
МАТ А=В+С(4.22, д)
Размеры массивов А, В, С и значения индексов их элементов должны совпадать;
|присваивает элементам массива А разности элементов двух других массивов (оператор вычитания массивов). Размеры массивов А, В, С и значения индексов их элементов должны совпадать
МАТ А=В—С(4.22, е)
Матричный оператор присваивания нулей, т. е. MAT A=ZER, например матрице А (М, N), выполняет следующую программу: юо for 1=1 то м НО FOR J= 1 TO N 120 A (I, J)=0 130 NEXT J 140 NEXT I
Программа содержит два цикла. Один из них вложен в другой. Оператор 120 выполняет основную функцию присваивания каждому элементу матрицы нуля.
Для случая присваивания элементам матрицы единиц МАТ A = CON оператор 120 будет иметь запись
120 A (I, J) = l
Для оператора приведения матрицы к единичной MAT A = IDM вместо оператора 120 будут следующие три оператора:
120 A(I, J)=o
121 IF I*J THEN 130
122 A(I, J) = l
Здесь оператор 120 присваивает очередному элементу матрицы нуль, но затем в операторе 121 проверяет соотношение индексов. И если 1#=J, что является признаком того, что элемент не находится на диагонали, то оператор IF передает управление на последний оператор внутреннего цикла (оператор 130) и процесс переходит на другой индекс, т. е. другой элемент. В противном случае, когда 1 = J (а это признак, что элемент находится на диагонали) ,процесс переходит на нижеследующий оператор 122, который присваивает этому элементу единицу.
Для матричного оператора присваивания МАТ А = В, где В — массив В (М, N), вместо оператора 120 будет
120 A (I, J)=B (I, J)
Для оператора сложения массивов МАТ А=В + С, где В ——массив В (М, N), С — массив С (М, N), оператор 120 запишется
120 A (I, J)=B (I, J)+C (I, J)
Для оператора вычитания массивов соответственно имеем:
120 A (I, J) = B (I, J)—С (I, J)
В случае, если вместо матрицы А (М, N) будет вектор А (М), т. е. одномерный массив, то в программе вместо двух циклов будет один. Все остальное остается идентичным.
Оператор умножения массива на скалер. Оператор умножает все элементы массива (матрицы или вектора) на выражение. Форма записи оператора
МАТ А=В*(8)
где А, В ——имена массивов; Ь — выражение, число или имя переменной.
Оператор вначале вычисляет выражение Ь, а затем в цикле умножает каждый элемент массива В, а результат присваивает соответствующему элементу массива А.
Оператор умножения матриц. Умножаться могут как квадратные матрицы с одинаковым количеством строк и столбцов, так и прямоугольные матрицы, у которых число столбцов первой матрицы совпадает с числом строк второй матрицы (см. пример 2.9). Если, например, размерность умножаемых матриц соответственно будет А (М, N) и В (N, Р), то результирующая матрица будет иметь размер С (М, Р), а каждый элемент матрицы С рассчитывается по выражению (2.18).
Оператор имеет следующую форму записи:
МАТ С = А*В(4.23)
где С, А, В — имена массивов. Размеры этих массивов указаны в операторе размеров DIM С(М, Р), А(М, N), B(N, Р), где М, N, Р — константы.
Матричное умножение выполняет следующую программу с тремя вложенными друг в друга циклами (рис. 2.8):
100 FOR 1=1 ТО М
НО FOR J=1 ТО Р
120 C(l, J)=0
130 FOR K=1 ТО N
140 С (I, J)=C(I, J)+A (I,K)*B(K, J)
150 NEXT К
160 NEXT J
180 NEXT I
Оператор транспонирования матриц. Операция транспонирования матрицы равносильна повороту ее на 180^ вокруг главной диагонали. Столбцы и строки матрицы меняются местами, например, C(I, J) =A(J, I). Форма записи оператора
MAT C=TRN (А) (4.24>
где С, А — имена массивов; TRN (от transpose — транспонировать) —'Служебное слово.
Оператор обращения матрицы. Обратная матрица А-1 к матрице А есть такая матрица, которая, будучи умноженная на матрицу А, дает результат в виде единичной матрицы Е
A*A-i = E(4.25>
где А ——исходная матрица; А-1——обращенная матрица; Е ——единичная матрица, имеющая диагональные элементы, равные единице, а все остальные —— равные нулю.
Оператор имеет форму записи
MAT C=INV (А)(4.26>
где С — имя обратной матрицы; А ——нмя исходной матрицы; INV (от inverse —обратный) — служебное слово.
ДИРЕКТИВЫ БЕЙСИКА
При работе на ЭВМ по программе всегда требуется сообщить- машине, что с этой программой нужно сделать, например, запустить программу на исполнение, вызвать программу из архива (памяти ЭВМ), занести ее в архив, исключить из архива, оттранслировать составленную программу, отредактировать ее, изменить режим работы и т. д. Эти указания составляют специальный язык команд, которые называют директивами.
В отличие от операторов программы команды не нумеруются и подлежат немедленному исполнению после их набора на терминале. Сама директива состоит из имени (полное или сокращенное английское слово), за которым могут записываться параметры директивы, в качестве которых могут быть имена программ, данных.
8-488-48из
8-48
8-48
номера операторов и др. Весь набор команд можно условно разделить на четыре группы.
Первая группа сводится к стандартной последовательности вопросов, задаваемых со стороны ЭВМ, на которые пользователь должен ответить, чтобы решить свою задачу. В ряде случаев наряду с вопросами предлагаются и варианты ответов. Отвечая на вопросы, пользователь сообщает машине необходимую информа- дию для решения поставленной им задачи.
Вторая группа команд связана с обслуживанием архива (программ и данных, хранимых в памяти ЭВМ). В архиве, который существенно облегчает процедуру повторных расчетов по программам, пользователь может хранить данные и тексты своих программ.
К третьей группе относится набор команд (директив), с по мощью которых формируется заказ на обработку исходной программы: директивы редактирования и распечатки текста программ мы, задания на трансляцию с алгоритмического языка и выполнение рабочей программы и др.
Четвертую группу составляют средства, позволяющие вмешиваться в ход выполнения программы: прервать счет, получить нн・ •формацию о состоянии решения задачи и т. д.
Для создания архива в памяти ЭВМ выделяется область постоянного хранения. Здесь иользователь может хранить свои файлы. Слово файл (file) дословно обозначает картотеку документов, а в вычислительной технике это слово распространено на способы ^организации, хранения и доступа к информации. Файл есть совокупность определенным образом взаимосвязанных между собой записей ——набора данных определенной структуры. Файлом может быть набор операторов (т. е. программа), набор данных. Раз- —линают файлы с записями постоянной длины (все записи, напри* мер, операторы, имеют одинаковую длину), переменной длины (указание о длине содержится в самой записи) и неопределенной длины (каждая запись заканчивается специальным 'символом — признаком конца записи). Так, текст программы образует файл задачи; его записями являются отдельные операторы, которые могут иметь либо постоянную длину (например, 80 символов), либо неопределенную (признаком конца записи здесь служит символ «возврат каретки》). Вызов файла производится по имени.
Рассмотрим некоторые из основных директив.
NEW (новый) —директива ввода новой программы, очищает рабочую область памяти для записи новой программы. В директиве в качестве ее параметра, т. е. за именем директивы NEW, может быть указано ммя новой 'программы, т. е. имя файла. Если директива не содержит параметра, т. е. имени файла, то имя должно быть введено как ответ на вопрос ЭВМ. Директива NEW вводится перед набором программы.
OLD (старый) —директива вызова файла (программы) из архива. По этой директиве очищается рабочая область и вызываемый файл переписывается в рабочую область. Имя вызываемого 114
файла может быть указано как параметр директивы (за словом OLD) или при ответе на вопрос ЭВМ об имени файла.
RUN (пуск, прогон)—директива запуска программы, записывается сразу за последним оператором программы. По этой директиве исходная программа транслируется (переводится с языка Бейсик на машинный язык), редактируется (проверяется, есть ли в программе ошибки). И если ошибок нет, то запускается на выполнение с последующей печатью полученного результата. Программу можно запустить с любого оператора, для этого за словом RUN нужно поставить номер этого оператора.
Во всех примерах, рассмотренных выше, мы записывали перед программой директиву NEW, а после последнего оператора программы —директиву Run.
Директива RUN запускает программу, а поскольку программа новая (директива NEW), то она транслируется, редактируется, исполняется (если нет ошибок) и в соответствии с оператором PRINT выводит результат.
SAVE (сохранять)——директива запоминания в архиве. По этой директиве содержимое рабочей области, например программа, копируется в памяти постоянного хранения (т. е. в архиве). Имя, указанное пользователем в качестве параметра днректнвн, должно начинаться с буквы и содержать не более пяти символов. Если в архиве ранее находилась программа с таким же именем, то новый файл записывается на место старого.
LIST (распечатать)—печать программы. Директива вызывает печать на АЦПУ текущего содержания рабочей области (программы, находящейся в рабочей области памяти). Если требуется распечатать не всю программу, а только【какую-то часть, то в директиве указываются номера начального и конечного операторов. Например,
LIST 40, 80
По этой директиве будут распечатаны все операторы программы, начиная от 40-го и по 80-й.
Если требуется распечатать старую программу, вначале вызывается из архива эта программа директивой ОЬО<имя>, где <имя> ——имя вызываемой программы, а затем директивой LIST распечатывается текст этой программы.
DELET (delete — уничтожить) —исключить из архива. По этой директиве в каталоге архива стирается имя программы, указанное в качестве параметра директивы.
Контрольные вопросы
Какие имеются типы констант, переменных и массивов в языке Бейсик и признаки их различия?
Как записываются выражения на языке Бейсик? Приведите примеры.
Как на языке Бейсик записывают оператор присваивания и какие операции он производит, если переменной присваивается константа, значение другой переменной или выражение?
Каково назначение, какие действия выполняют и как записывают операторы условного н безусловного переходов и переключатель на языке Бейсик? приведите и объясните примеры.
Каково назначение, какие операции выполняют и как записывают на языке Бейсик операторы, организующие циклы? Приведите примеры.
Расскажите о назначении, о выполняемых функциях и записи операторов языка Бейсик: READ, DATA, RESTORE, INPUT. "Приведите примеры.
Расскажите об операторе вывода PRINT на языке Бейсик. Напишите операторы для вывода заголовка и шапки простейшей таблицы.
Как строят н записывают на языке Бейсик нестандартные функции и подпрограммы н . какие используют здесь операторы? Приведите примеры.
Когда, зачем и как на языке Бейсик используют оператор размерности массивов? Приведите примеры.
Расскажите о матричных операторах присваивания и какие функции они выполняют.
Расскажите о матричных операторах ввода и вывода.
Составьте программу на языке Бейсик для табулирования функции типа 一y=f(”) прн изменении х в заданном интервале н с заданным шагом.
Составьте программу на языке Бейсик для нахождения среднего значения п чисел.
Составьте программу на языке Бейсик для нахождения максимального и минимального по значению элемента матрицы с указанием их индексов.
. Составьте программу на языке Бейсик для нахождения в массиве, состоящем из символьных элементов: Р, R, Q, S, Т, количества элементов каждого вида символа.
Составьте программу на языке Бейсик для расположения элементов массива в порядке убывания их значений.
Расскажите о назначении операций, выполняемых директивами (коман- Ламн) Бейсика.
Глава 5
АЛГОРИТМИЧЕСКИЙ ЯЗЫК ФОРТРАН
Алгоритмический язык Фортран (Фортран ——FORmulas TRANslation — переводчик формул) допускает описание алгоритмов любых задач и в первую очередь предназначен для программирования инженерно-технических задач. Фортран имеет больше возможностей по сравнению с Бейсиком. С момента своего создания Фортран претерпел изменения и имеет ряд версий. Наиболее распространенной версией является Фортран-IV.
ПРОСТЕЙШИЕ КОНСТРУКЦИИ ЯЗЫКА
Символы Фортрана включают заглавные латинские буквы от А до Z (26 букв); цифры от 0 до 9 (10 цифр); специальные символы: = (равно), + (плюс),—— (минус), * (звездочка), / (дробная черта), ( ) круглые скобки, , (запятая), . (точка), , (кавычка), & (амперсенд), 0 (знак денежной единицы).
Для разделения отдельных величин, слов и выражений в Фортране используется пробел, который не имеет начертания и в программе представляется в виде пропуска. Этот пропуск в большинстве случаев (кроме специально оговоренных) не влияет на выполнение программы и поэтому может использоваться при программировании достаточно произвольно для улучшения читаемости Фортран-программы.
Величины делятся на постоянные (константы) и переменные (простые и индексированные), обозначаемые именами (идентификаторами) . '
Величины (константы и переменные) в свою очередь делятся на типы со следующими их указателями в программе:
целые — INTEGER,
действительные — REAL,
логические — LOGICAL,
комплексные — COMPLEX.
Константа ——число (или символы), непосредственно записанное в .программе и представляющее конкретные численные или символьные значения конкретной величины.
Целые константы — числа, в которых отсутствует десятичная точка и дробная часть, отделяемая этой десятичной точкой.
Действительные константы — числа, в которых имеется десятичная точка, отделяющая дробную, часть от целой.
Действительные и целые константы отличаются способом их представления в памяти машины и выполнения над ними арифметических операций. Отрицательные константы имеют знак минус. Максимальная абсолютная величина целой константы — не более 10 цифр, диапазон действительной константы от 10~75 до 1075> В арифметических операциях с целыми константами в результатах дробная часть отбрасывается, например, 4* (7/2) = 12. Чтобы дробная часть была сохранена, необходимо записать 4.*(7./2.) = =14, где *— знак умножения.
Примеры чисел: целые: 79;——281; 1; +3219267; 0; действительные: 296.14; —0.72; +L; .15; 0.0.
Константы могут быть представлены в виде числа и его порядка. Порядок отделяется от числа с помощью буквы Е (или D, если константа имеет двойную точность).
Например, —29,4三一0,294* 102= —0,294Е + 2; 6000=6,0* 103s мб.ЕОЗ; 0,0012=1,2-10^sl,2E—3.
Если обозначить через 枕——целую часть числа, т — дробную часть числа, ft — степень (порядок числа), то возможны следующие варианты записи констант: п.т\ 〃.; тп; п.тЕ±А;孔.Е土左; ./nе 土々.
Переменная в Фортране (символьное обозначение) —идентификатор (имя) величины, которая может принимать различные значения в программе. Переменной отводятся ячейки (участок) памяти, где хранятся присваиваемые ей соответствующие численные значения. Простая переменная обозначается последовательностью букв и цифр, начинающейся только с буквы, количество символов в которой не должно быть больше шести. Примеры переменных: Q248IA; Nl; ALPHA; КА; LAMBDA; X; М12В; Yl; I; неправильно обозначенные переменные: EPSILON (более 6 символов) ;4X2Z (начинается не с буквы); X—12 (содержит специальный символ); R7.4 (содержит специальный символ).
Переменная целого типа имеет имя, начинающееся с любой из букв: I, J, К, L, М, N, и может принимать только целочисленные значения.
Переменная действительного типа, имя которой начинается с любой другой буквы, принимает только действительные числовые значения.
Указанное различие действует 《по умалчиванию», т. е. если Вы умолчали и специальным оператором не оговорили, какие переменные целого, а какие действительного типов (см. ниже), то машина сама принимает в качестве целых переменные, имена которых начинаются с букв I, J, К, L, М, N, а остальные принимает как действительные.
(5.1)(5.1)Переменная с индекса м и обозначает элемент соответствующего массива и имеет следующую форму записи:
(5.1)
(5.1)
a 伉,灰,• •• , %),
где а—1 нмя (идентификатор) массива, элементом которого является данная индексная переменная; i« ——индексы. Максимальное количество индексов, т. е. максимальная размерность массивов, для Фортран-IV не может превышать семи.
Примеры (даны по форме: «обычная запись» 曰 запись на Фортране) :
。如三 A(2,N); a34 mA (3,4); а加三 А (М, N);吗三 ALPHA (I),
Xj 三 X (J).
Индексы могут принимать целые положительные значения не меньше единицы. Они могут задаваться в виде выражения не сложнее следующей формы:
(п^ 1± т), (5.2) где тг п — целые константы без знака; i ——простая переменная целого типа.
Каждый из символов в (5.2) может отсутствовать и запись иметь следующей формы: (zn); (t); (i±m); (n^t).
Примеры: NOR (2, 1, 7); Y(2*J); A1(4*K—1); GAMMA (1, 2, J+l); X(9*J+12, 3, K—4).
Область памяти, отводимой под переменную, которая называется длиной переменной, может быть различной. Стандартная длина переменных целого и действительного типов ——4 байта (32 двоичных разряда), комплексных переменных ——8 байт. Нестандартная длина переменных целого типа——2 байта, действительного типа — 8 байт (двойная точность), комплексных—16 байт (двойная точность). Нестандартная длина задается операторами-описателями типов переменных (см. ниже).
Идентификатор (имя) — это любая последовательность букв и цифр, начинающаяся с буквы, количество символов в которой не может превысить шести. Идентификаторы в программе служат для обозначения (переменных, функций, процедур, подпрограмм и.др.
Арифметические выражения в Фортране соответствуют общепринятым алгебраическим выражениям и записываются в один ярус, включая индексы и степени. В выражение могут входить константы, переменные (простые и с индексами), функции (стандартные и нестандартные). Выражение вычисляется с использованием тех численных значений, которые имеют входящие в него переменные к моменту его исполнения в программе. Поэтому при составлении программы необходимо тщательно следить за тем, чтобы переменные, входящие в выражение, всегда были определены к моменту его вычисления.
Знаки арифметических операций в Фортране: + (сложение); —(вычитание); * (умножение); / (деление); ** (возведение в степень).
Порядок старшинства выполнения операций в бесскобочных выражениях: стандартные (или нестандартные) функции; возведение в степень; умножение и деление; сложение и вычитание; логические операции и операции отношений. Для установления поряд-
ка выполнения операций применяют круглые скобки (каждая открывающая скобка должна иметь 'соответствующую закрывающую). Все вычисления производятся в порядке записи, т. е. слева направо, с учетом скобок и старшинства операций. Например, А*В + С——Ь**К выполняются в следующей последовательности: А*В; (А*В)+С; D**K; (А*В + С) — (D**K)・ Исключением из этого правила является возведение в степень, эти действия выполняются справа налево. Например, А**В**С выполняются в следующей последовательности: В**6; А**(В**С).
Стандартные функции в Фортране, представляющие фактически подпрограммы, выполняются при обращении к ним ио имени функций, а аргументы функции записываются в скобках сразу же за именем функции. Аргументом может быть константа, переменная или арифметическое выражение. Фортран располагает стандартными функциями со следующей их записью:
Inx^ALOG(X) Igx^ALOGlO(X) 呼 gEXP(X) y7=SQRT(X) |x|^ABS(X) sin% 三 SIN(X) cosx^COS(X) t 驶三 TAN(X) ctgmCOTAN(X) arcsinx^ARSIN (X) arccosx^ ARCOS (X) arctgx=ATAN(X) shx= (e*—ef) /2 三 SINH (X) chx= (^ + B一第)/2 曰 COSH(X) thx=shx/chx^TANH(X)
Преобразование из целого в действительноеПреобразование из целого в действительноеФункции ошибок:
Преобразование из целого в действительное
Преобразование из целого в действительное
|= FLOAT (N)
Преобразование из действн- 1^tfty/y\ тельного в целоеj =〈丿
где аргументы стандартных функций: X — действительная ве
личина (или выражение); N ——целая величина.
которой результат является целой величиной*которой результат является целой величиной*Значения стандартной функции являются действительными,
которой результат является целой величиной*
которой результат является целой величиной*
кроме IFIX(X), у Пр и м ер ы:
勺勺家三(X — Y)/2/T**3,
勺
勺
(勺 +0法)" +5,3(勺 +0法)" +5,3三 X (I) / ((X(I) + A (I,K)) ** ALPHA + 5.3),
(勺 +0法)" +5,3
(勺 +0法)" +5,3
^^―^^ 三(А * X ** 2 — SIN (3.14 * X) ** 2/SQRT (А 十 X),
1 In (1 —2 Tly I)三
SQRT (ALOG (1 - SQRT (X ** 2 十 ABS (Y)))).
Выражение может содержать величины различных типов (целые, действительные, комплексные), 1причем, если выражение содержит только целые величины, результат будет целым. Присутствие в арифметической операции хотя бы одной действительной величины делает результат действительным. При наличии хотя бы одной комплексной величины результат будет комплексный. Однако вычисление будет более эффективным, если действительные и целые величины не будут пер ем еш и в аться в одном выражении (например, запись Х + 3. предпочтительней, чем Х+3). Заметим, что, если в сложном выражении выполняется операция с целыми величинами, результат будет целым (дробная часть отбрасывается). Например, 5/3=1; 1/2 = 0; —7/3 = —2. Или в сложном выражении R + §*I/l + N/3 (где R = 10.6; S = 3.5; 1 = 5; J=2; N = 7) результат будет равен: 10.6 + 3.5*5/2 + 7/3= 10.6+17.5/2 + 7/3 = 10.6 + 8.75 + + 2=19.35 + 2.0=21,35. Здесь выражение S*I/J будет выполнено как действительное, поскольку S ——действительная величина; выражение 7/3 будет выполнено как целое, а при последующем сложении с действительными величинами будет преобразовано в действительное. Результатом общего выражения будет действительная величина.
При возведении целого числа в целую степень результат будет целым, во всех других сочетаниях — действительным.
Операторы Фортрана. Оператор соответствует предложению, фразе естественного языка и является основной синтаксической единицей языка. Оператор Фортрана имеет следующую конструкцию записи:
h имя параметры (5.3) где п — метка оператора (целая константа без знака не более чем из пяти цифр). Метки в программе могут стоять в любом порядке. Они лишь не должны повторяться. Метки ставятся лишь при отдельных операторах. Их присваивают только тем операторам, на которые есть ссылка в других операторах. Имя ——имя оператора, ключевое слово, по которому находится оператор данного типа. В качестве имени взяты соответствующие английские слова, например: IF — имя оператора условного перехода; параметры — данные, которые необходимы, чтобы выполнить заданный оператор. В параметры могут входить выражения, величины, имена, другие операторы, метки, текст и т. д. Ряд операторов не имеет параметры.
В программах обрабатываются различные величины, данные и переменные. Все они могут иметь различную форму, вид представления и другие параметры. Вся эта информация должна быть сообщена транслятору, обрабатывающему эти величины. Для этой цели служат операторы-описатели. Данные операторы не исполняются, из них берется лишь необходимая информация для правильного и требуемого процесса обработки данных. В связи с этим операторы Фортрана делятся на две группы: исполнимые, с помощью которых организуется вычислительный процесс, и неисполнимые, предназначенные для описания величин, массивов, функций, программ, процедур и т. д.
Исполнимые операторы: присваивания (без имени), присваивания метки — ASSIGN, перехода — GOTO, условный —
IF, цикла — DO, продолжения — CONTINUE, останова — STOP, паузы — PAUSE, перехода к подпрограмме — CALL, возврата — RETURN, ввода —READ, вывода— WRITE, печати — PRINT.
Неисполнимые операторы: размеров — DIMENSION, формата ——FORMAT, конца ——END, общих областей — COMMON, эквивалентности — EQUIVALENCE, начальных значений — BLOK DATA; неявного типа — IMPLICIT, явного типа: действительный—REAL, целый — INTEGER, комплексный ——COMPLEX, ло* гический — LOGICAL, двойной точности ——DOUBLE PRECISION, оператор-функция (имя присваивает программист), подпрограм* мы-функции — FUNCTION, подпрограмма общего вида — SUBROUTINE, внешних подпрограмм — EXTERNAL.
Форма записи основных операторов приведена в табл. 5.L В записи заглавными латинскими буквами даны имена типов операторов (т. е. ключевые слова), а строчными — параметры.
Таблица 5.1
№ п/п
1Форма записи
Операторы
Страницы
а=Ь
Присваивания
124
ASSIGN и ТО i
Присваивания метки
CONTINUE
Продолжения
130
CALL 卩(协,y2,...)
Вызова подпрограммы
144
COMPLEX 切也(也)]厶 1, 。2/2(々2)1电1
Описания комплексного типа
147
COMMON /qi/口,/。2&, 〃禽
Общих областей
DO n i=j,左,1
DIMENSION 勿(电),&(々2),...
Цикла
128
Размеров
140
END
Конца текста программы
131
10
EXTERNAL p2>...
Внешних подпрограмм
11
EQUIVALENCE (口),(c2),...
Эквивалентности
12
FORMAT (список)
Формата
134
13
f (xb x2,.. .) = формула
FUNCTION f(%i, x2,...)
Оператор-функция
141
14
Подпрограммы-функции
142
15
GOTO n
Перехода
125
16
GOTO (几1, n2, •.-,几Q, i
Переключатель
125
17 ,
GOTO i,(n1,电,...)
Перехода по предписанию
18
IF (6) nb 几备 n3
Условный арифметический
126
19
IF (6) s
Условный логический
127
20
IMPLICIT SJ1(&), S2f2(C2),.・.
INTEGER加也(也)便11,
Описания неявного типа
147
21
Описания целого типа
147
22
。2为(局)k2!,...
LOGICAL 打力(財)|当], 。2/2(左2)⑵]
Описания логического типа
147
23
PAUSE 加
Паузы
131
24
READ (幺几)Qi,。2,
Ввода
131
25
RETURN
Возврата
142
26
REAL /qJi(E) |zi 1,Q2f2(居)|迎|, • • •
Описания действительного типа
147
27
STOP m
Останова
131
28
SUBROUTINE 卩(修,%2,…)
Подпрограммы общего вида
144
23
WRITE (电 n)勿,。2
Вывода
132
Здесь: а — имена переменных массивов; b — имя, константа, выражение; с — список имен переменных; i — имя переменной целого типа; j,左,I ——имена, константы целого типа; 比 т ——константы целого типа; /г ——метки операторов (константа); f, р ——имена функций и подпрограмм; /——длина величины (константа); х —— формальные параметры (имена); у — фактические параметры (имена, константы, выражения); 2 ——константы; s — имя оператора.
Неисполнимые операторы не участвуют непосредственно в реализации алгоритма вычислений и, как правило, размещаются в начале программы. При этом любой оператор, описывающий величину (переменную), должен предшествовать другим таким же операторам, ссылающимся на эти переменные. Исключение составляет оператор FORMAT и END.
Оператор FORMAT размещается в любом месте программы, а оператор END завершает текст программы, он последний оператор в тексте программы.
Исходная прогр амм а — программа, составленная на а л гор итм и ческом языке и подготовленная к трансляции программой-транслятором Фортрана.
Рис. 5.1. Банк для записи исходной программы на Фортране
Бланк для записи исходной программы. Программа Фортран составляется из операторов и записывается на специальных бланках (рис. 5.1). Эту программу обычно называют исходной, из которой в результате трансляции и редактирования
получается рабочая 'Программа на машинном языке. Каждая строчка бланка содержит не более 80 колонок (позиций) и при перфорации занимает одну перфокарту. В каждую позицию записывают только один символ (букву, цифру, точку, скобку, пробел и т. д.).
В позиции 1—5 размещают только метку; пробелы в метке во внимание не принимаются. Эти позиции в бланке отделяются опорной линией. Сам оператор (его имя и параметры) записывают в одну строку и размещают в позициях 7—72. Если оператор не помещается в одной строчке, он может быть продолжен на последующих строках (при этом последний знак не дублируется в новой строке, как это принято в обычных математических записях).
Строки-продолжения должны иметь пустые позиции 1—5, а в 6-й позиции должен быть записан любой символ〉кроме нуля и пробела, что является признаком строки-продолжения. Количество строк-продолжений не может превышать 19.
Позиции с 73-й по 80-ю вспомогательные, они не обрабатываются транслятором и используются программистом для вспомогательных записей.
Запись ко мментариев. Программа может содержать различного рода пояснения, облегчающие чтение и понимание программы. Текст комментариев можно разместить в любом месте программы. Каждая строка бланка с текстом комментарий отличается тем, что в 1-й позиции этой строки записывается символ С, который является признаком строки комментария. Сам текст комментария может начинаться со 2-й позиции. В записи комментария можно использовать любые символы, включая заглавные буквы русского алфавита. Текст комментария вводится в ЭВМ вместе с программой, размещается в (памяти машины и выводится на печать вместе с текстом программы. Однако он игнорируется при трансляции и не влияет на трансляцию 'программы.
ОСНОВНЫЕ ОПЕРАТОРЫПРИСВАИВАНИЯ И УПРАВЛЕНИЯ
Оператор присваивания. Оператор предназначен для присваивания переменным численных значений или значений других переменных. Причем численные значения могут определяться по приведенному в операторе выражению. Его форма, записи
а=Ь (54> где а ——имя переменной (простой илн индексированной); & — константа, имя переменной или выражение.
Если & есть константа, то оператор присваивает переменной а значение этой константы, т. е. засылает в ячейку памяти, отведенную под а, данную константу из оператора (5.4) программы. Если Ь — переменная, то оператор пересылает содержимое ячейки шамяти, отведенной под Ь, в ячейку памяти, отведенную под а:
(а)<-(Ь). Если b — выражение,- то оператор вычисляет это выражение и полученное значение присваивает переменной а.
Например,
А=2Х=Х+0.25
Z = YJ = J—1
Х(5) = (А*Х + В)/С B(I, J)=C J = BAJ = E
Если Ь ——имя переменной, то нельзя менять местами а и Ь. Например, пусть а= 1,3; 6 = 2,7. Если запишем а=Ь, то после его выполнения будем иметь: а=2,7; & = 2,7. Если запишем Ь = а,то будем иметь: Ь = 1,3, а=1,3.
Оператор перехода GOTO. Оператор выполняет безусловный переход и имеет форму записи
GOTO и(5.5>
где GOTO (перейти к)——имя оператора; п—■ метка оператора, на который должен быть совершен безусловный переход (и ——константа целого типа без знака).
Оператор с меткой п, на который совершается переход, может находиться в любой части программы.
Например,
R=1
S=0
12 S = S + SIN(R)/R**4
R = R+1
GOTO 12
Участок программы состоит из пяти операторов. Четыре из них — операторы присваивания, а последний — оператор перехода. Он осуществляет безусловный переход назад к третьему по счету оператору, имеющему метку 12 и выполняющему суммирование по выражению s = s+ (sin г)/г4.
В соответствии с программой машина последовательно выполняет следующие операции: присваивает переменной г число— единицу; (присваивает сумме (переменной s) начальное значе* ние — нуль; вычисляет выражение 0 + sin 1/14 и результат присваивает переменной s вместо нуля; увелитавает значение г на единицу по выражению r=r +1; оператор GOTO заставляет вернуться к оператору с меткой 12 и вновь вычислять новое значение s + sin 2/24, присвоив результат переменной s. В результате оператор GOTO организует цикл. В ходе выполнения цикла накапли* вается значение суммы по выражению
▲г4
до значения г=оо, т. е. без выхода из цикла.
Вычисляемый оператор перехода GOTO — переключатель. Оператор используется тогда, когда в программе необходимо выполнить безусловный переход к одному из нескольких операторов
в зависимости от значения некоторой переменной. В операторе приведены метки всех этих операторов, а также переменная, указывающая порядковый номер расположения метки оператора, к которому нужно перейти. Форма записи оператора
GOTO (пь п2> - ■ •)小),i(5.6)
где и:, г— (I, 2,..., ^)—метки операторов, к которым должен совершаться переход; г — переключатель (простая переменная целого типа), указывающий порядковый номер расположения выбранной метки.
Оператор выполняет переход к одному из операторов с меткой ль 孔2, •••,孔片 в зависимости от значения i: при i= 1 переход будет к оператору с меткой «ь при t=2 — к оператору с меткой Па и т. д.; при i = k ——к оператору с меткой rik. Если значение i лежит вне предела Igig比 то будет выполняться следующий ниже по порядку оператор за оператором GOTO.
Например,军
GOTO (15, 18, 7, 120, 18, 2), N
где при N = 1 переход будет к оператору с меткой 15, при N = 2 ——к оператору с меткой 18 и т. д., при N=6 — к оператору с меткой 2.
Условный арифметический оператор IF. Оператор выполняет условный переход в зависимости от результата сравнения с нулем величины, полученной при расчете арифметического выражения, приведенного в операторе.
Форма записи оператора
IF(6)nb 几2,几з(5.7)
где IF (если)——имя оператора; b ——арифметическое выражение (или переменная); пь 几2,几з — метки операторов (целые константы без знака).
Оператор выполняет следующие операции: вычисляет выражение b и получает численный результат; результат (6) сравнивает с нулем и находит: он или меньше нуля (&) <0, или равен нулю (Ь) —0, или больше нуля (Ь)>0; выполняет переход к оператору с меткой «ь если (&) <0, или к оператору с меткой 孔2, если (6) =0, или к оператору с меткой «з, если (&) >0.
Пример 5.1. Участок программы для вычисления суммы
30.
R=1 S = 0 12 S = S + SIN(R)/R**4 R=R+1
IF (R—30.) 12, 12, 15
15 <печать> <останов>.
По условию задачи суммирование производится при изменении г в пределах от 1 до 30. Оператор IF должен возвращать управление на оператор с меткой 12, если г^ЗО. Преобразовав |не- равенство, шолучим: г—30^0. Следовательно, с нулем сравнивается выражение (г——30), а поскольку к оператору с меткой 12 воз-
врат (переход) должен быть, если г—30<0 и г—30=0, то на месте 1 и 2-й меток должна стоять метка 12.
Пример 52 Составить участок программы для вычисления функции
{
5,3х+ 16,3 , если х<л, 4,7х, если х=л, 7,1х2—5,3 , если х>л.
IF (Х—3.14) 7,9,11
7 Y=5.3*X+16.3
GOTO 16
9 Y = 4.7*X GOTO 16 11 Y = 7.1*X**2—5.3 16 <печать> <останов>
Программа реализует разветвляющийся процесс. Разветвление дает оператор IF, в котором с нулем сравнивается выражение (%—л). Если (х——л) <0, то делается переход к оператору с меткой 7, а затем при помощи оператора GOTO процесс переходит к концу программы к оператору с меткой 16. Аналогично, если (х—л) =0, переход к оператору с меткой 9, а затем через оператор GOTO идет на конец программы. Третье разветвление проходит через оператор с меткой 11. А поскольку он последний в записи разветвления, то после выполнения его делается естественный переход к ниже расположенному оператору с меткой 16.
Условный логический оператор осуществляет выполнение заданного действия в зависимости от 'результата вычисления заданного логического выражения. Форма записи оператора
IF(b)s(5.8>
где b = bQb?——логическое выражение; s — любой исполнимый оператор, кроме оператора DO или другого условного логического оператора IF; ①,历一 выражения; ® ■—операция отношений.
Операции отношений в Фортране записываются в видес
.GT. — больше (>), .GE. — ие меньше (/), .LT. — меньше (<), 丄Е. — не больше (£), .EQ. — равно ( = ), .NE. — не равно (=#)
Условный логический оператор вычисляет значение логического выражения — отношение b и передает управление либо оператору s% если условие выполняется, либо прямо оператору, следующему за данным условным логическим оператором, если условие не выполняется.
Например,
IF (A.LE.4) X=Y**2 с=х+в
IF(A.GT.B+Y) GOTO 7 Z=C+B+Y
7 IF(A.EQ.O) STOP
Здесь при а《4 будет вычислено выражение %=呢 а затем оператор c=x+bt Если же а>4, то оператор х = у2 будет пропущен и сразу будет выполняться оператор с=х + Ь. При выполнении второго оператора IF, если а>Ь+у, управление будет передано на оператор с меткой 7 через оператор GOTO. При a^b+у <следующим будет выполняться оператор z = c + b^y. Третий оператор IF передает управление на STOP, если будет а=0. Иначе будет выполняться следующий ниже оператор.
Оператор цикла DO. Оператор используется для организации циклов. Форма записи оператора
DO и i=/,电! (5.9) где DO (выполнить)——имя оператора; и ——метка последнего оператора, принадлежащего циклу (целая константа без знака). Первым оператором в цикле является сам оператор DO;(——имя переменной цикла (простая переменная целого типа) ; j, k, / — простые целые переменные или целые константы больше нуля; j ——начальное значение переменной цикла; k ——конечное значение переменной цикла; !——шаг, с которым изменяется переменная цикла при каждом проходе цикла.
Оператор цикла выполняет следующие операции: присваивает переменной цикла начальное значение ,=/; передает управление на выполнение операторов, расположенных сразу за оператором цикла, включая последний оператор цикла с меткой /г; после выполнения оператора с меткой /г возвращает процесс на оператор DO; изменяет значение переменной цикла на шаг I по выражению /=/+/; проверяет значение переменной цикла /, сравнивая с конечным значением k, и если i&幺 то передает управление на выполнение операторов, входящих в цикл, включая последний оператор с меткой п, и т. д. вплоть до того момента, когда переменная цикла не станет больше конечного значения k по условию i>k. В этом случае процесс выходит из цикла и выполняется следующий оператор после оператора с меткой п.
Итак, назначение оператора DO можно трактовать следующим образом: выполнить многократно все операторы, следующие за ■оператором DO, включая последний оператор с меткой п, причем при первом выполнении переменная i должна быть равной t = j, при каждом следующем повторении она увеличивается на 厶(последний раз цикл повторяется, когда переменная станет равной
При использовании оператора цикла необходимо учитывать следующие пр авил а. *
Шаг I переменной цикла должен быть только целым и положительным. Если шаг равен единице (Z— 1), то《по умолчанию» его можно опустить и писать оператор DO по форме
DO и г—/, ^ (5.9, а)
Внутри цикла не должно быть операторов, изменяющих значения параметров цикла: i, /, fe, /. Параметр i определяется только оператором DO, а значения переменных /,財 I должны быть определены до входа в цикл (если они не константы, а переменные) . ■
Вход в цикл DO должен производиться только через оператор DO. Не разрешается передача управления, например, при помощи операторов GOTO или IF, лежащих вне цикла, оператору, расположенному внутри цикла DO. Исключением может быть выход на стандартную программу, но с обязательным возвращением внутрь цикла при условии, что отсутствуют изменения значений любого из параметров цикла.
Выход из цикла может быть осуществлен в любое время до естественного окончания цикла. В этом случае значение переменной цикла определено и может быть использовано в дальнейших расчетах. При естественном окончании цикла переменная цикла не определена.
Разрешается использование цикла в цикле. В этом случае область действия внутреннего цикла должна полностью находиться в области действия внешнего цикла. Такие циклы называются вложенными.
Допустима следующая структура записи циклов:
a DO 1 I =...■ja DO 2 J =….——aDO 3 K=…——32:1 '''''a DO 1 I =...■ja DO 2 J =….——aDO 3 K=…——32:1 '''''ADO 1 I -ADO 1 I -DO 2 J =...2.DO 2 J =...2.DO 3 К = • •.3 ''DO 3 К = • •.3 ''ADO 1 I =…—a DO 1 J =…-AD。j К =...ADO 1 I =…—a DO 1 J =…-AD。j К =...
a DO 1 I =...
■ja DO 2 J =….
——aDO 3 K=…
——3
2:
1 '''''
a DO 1 I =...
■ja DO 2 J =….
——aDO 3 K=…
——3
2:
1 '''''
ADO 1 I -
ADO 1 I -
DO 2 J =...
2.
DO 2 J =...
2.
DO 3 К = • •.
3 ''
DO 3 К = • •.
3 ''
ADO 1 I =…
—a DO 1 J =…
-AD。j К =...
ADO 1 I =…
—a DO 1 J =…
-AD。j К =...
Недопустима структура циклов:
—ADO 11 = ..
aD。2 J =..
1 ....
2..
Последним оператором цикла с меткой п не могут быть операторы перехода GOTO, условный IF, другой оператор цикла DO. Поскольку после выполнения последнего оператора управление должно быть передано на начало, то это действие будет противоречить действию указанных операторов управления. Чтобы обойти это противоречие, используют «фиктивный» оператор CONTINUE, Пример 5.3. Имеется массив из 26 значений 物,/ — 1,26 и переменная х. Требуется занести в ячейку z первое из у^ больше, чем 尤.Если такого у< не найдется, то в ячейку z следует поместить 尤./Составляем алгоритм (рис. 5.2). Блок 1 вводит в машину массив Y (26) и значение переменной х. Поскольку нужно перебрать элементы массива Y и каждый сравнить с переменной %, задаемся начальным значением индекса / = 1 (блок 2). Затем в блоке 3 сравниваем у; с 尤.Если у;>х, то выходим из цикла и ттрн・
Рис. 5.2. Алгоритм нахождения в массиве первого числа 川 больше заданного хРис. 5.2. Алгоритм нахождения в массиве первого числа 川 больше заданного х556767Неправильная запись GAMMA=A(1) "±>15 DO 11 1 = 2,80IIF (GAMMA—A (I) )15,15,30 '->30 GAMMA=A(I)11 CONTINUEНеправильная запись GAMMA=A(1) "±>15 DO 11 1 = 2,80IIF (GAMMA—A (I) )15,15,30 '->30 GAMMA=A(I)11 CONTINUEПравильная записьQAMMA=A(1)>DO 11 1 = 2,80IFGAMMA—A ⑴)11,11,30~>30 GAMMA=A(I)「a 11 CONTINUEПравильная записьQAMMA=A(1)>DO 11 1 = 2,80IFGAMMA—A ⑴)11,11,30~>30 GAMMA=A(I)「a 11 CONTINUE
Рис. 5.2. Алгоритм нахождения в массиве первого числа 川 больше заданного х
Рис. 5.2. Алгоритм нахождения в массиве первого числа 川 больше заданного х
5
5
6
7
6
7
Неправильная запись GAMMA=A(1) "±>15 DO 11 1 = 2,80
IIF (GAMMA—A (I) )15,15,30 '->30 GAMMA=A(I)
11 CONTINUE
Неправильная запись GAMMA=A(1) "±>15 DO 11 1 = 2,80
IIF (GAMMA—A (I) )15,15,30 '->30 GAMMA=A(I)
11 CONTINUE
Правильная запись
QAMMA=A(1)
>DO 11 1 = 2,80
IFGAMMA—A ⑴)11,11,30
~>30 GAMMA=A(I)
「a 11 CONTINUE
Правильная запись
QAMMA=A(1)
>DO 11 1 = 2,80
IFGAMMA—A ⑴)11,11,30
~>30 GAMMA=A(I)
「a 11 CONTINUE
сваиваем 2=у^ (блок 9). Если у;^х, то цикл продолжаем, переходим на блок 4, где присваивается новое значение индексной пе^ ременной /, затем сравниваем / с конечным значением 26 (блок 5) и, если /^26, переходим на цикл к блоку 3.
В алгоритме цикл образуется по переменной /, которая и является переменной цикла. Ее начальное значение /= 1. Конечное j=26 и шаг Aj= 1. Поскольку все параметры цикла целые простые величины больше нуля, то мы можем использовать оператор DO. Он один выполнит действия трех блоков: 2, 4 и 5, которые охватывают единственный блок 3, входящий в цикл. Применив оператор DO, последним и единственным в его цикле окажется оператор условного перехода IF, что противоречит правилу применения DO. Следовательно, приходится применить фиктивный оператор CONTINUE. Составим теперь программу для блоков 2—6 и 9 алгоритма (см. рис. 5.2).
〈ввод Y(26), Х>
DO 5 J=l,26
IF (X—Y(J)) 6, 5, 5
CONTINUE
僦7
Z = Y (J)
<печать>
<останов>
Любая последовательность передачи управления внутри цикла должна в конечном счете приводить к последнему оператору цикла, а не к самому оператору DO.
Прим ер 5.4. Найти наименьшее из 80 значений а^ /= 1,80, которое необходимо присвоить переменной у. Запишем участок цикла
Оператор продолжения CONTINUE служит для завершения циклов в том случае, когда цикл оканчивается оператором передачи управления (например, GOTO, IF) или разветвлением. Опе- 130
ратор используется всегда, когда нужен пронумерованный исполняемый оператор, не выполняющий на самом деле никаких фактических вычислений. CONTINUE (продолжить) —имя оператора.
Оператор останова STOP останавливает вычислительный процесс и завершает выполнение данной программы. Форма записи
STOP m(5.10)
где т—'целая константа без знака, состоящая из не более 5 цифр.
При останове по данному оператору константа /и выводится на печать и указывает, по какому оператору STOP останавливалась программа. В простых программах т отсутствует.
Оператор конца END определяет конец записи текста программы и занимает последнюю строчку программы. Он не имеет метки и параметров.
Операторы STOP и END могут иметь следующие взаимные расположения:
STOP
STOP
ENDEND
Оператор паузы PAUSE приостанавливает выполнение программы для производства каких-либо действий со стороны пользователя (программиста), работающего на машине, например для установки магнитной ленты, пакета дисков, подключения устройства и др. Форма записи оператора
PAUSE т
PAUSE 'текст'(5.10, а)
где PAUSE (пауза)——имя оператора; m — либо пусто, либо целое положительное число не более чем из 5 цифр; текст — комментарий. Число и комментарий выводятся на печать и указывают, по какому оператору остановилась программа.
ОПЕРАТОРЫ ВВОДА И ВЫВОДА
Обычно программы стремятся составлять в общем виде так, чтобы они могли быть использованы без изменения для решения определенной группы задач, отличающихся друг от друга исходными данными. В этом случае исходные данные не задают непосредственно и жестко в программе с помощью операторов присваивания, а предусматривают возможность их ввода в ЭВМ. Операции ввода данных в ЭВМ, а также вывода полученных результатов выполняются операторами ввода и вывода.
Оператор ввода READ выполняет операции считывания с носителей информации данных, имена которых указаны в операторе, перевод их в машинную форму и размещение их в шамяти машины.
В частности, оператор READ считывает числа с устройств ввода, например с перфокарт, терминала, на которых они предварительно заданным образом записаны, и размещает их в ячейки
памяти, отведенные под соответствующие переменные, указанные в операторе. О том, каким образом записаны данные на носителях, указывается в специальном операторе FORMAT, метка которого приводится в операторе READ. В операторе также должно быть указано, с какого устройства осуществляется ввод. Исходя из этого оператор имеет следующую конструкцию записи:
READ (財 л) аь а2... (5.11)
где READ (читать) — имя оператора;女——иомер устройства ввода (или файла с назначенным устройством); л ——метка оператора FORMAT, в котором указаны форма и размеры считываемых данных; а「з …一 перечень элементов списка, например, имен переменных, значения которых оператор вводит в оперативную память машины.
Оператор вывода WRITE осуществляет выборку из оперативной памяти значений переменных,, указанных в операторе, и размещает их на соответствующих носителях информации. В частности, оператор выбирает из памяти численные значения выводимых переменных, преобразует их из двоичной в десятичную систему счисления и печатает их на АЦПУ. Форма записи оператора WRITE аналогична форме записи оператора READ
WRITE (幺 п) % % … (5.12)
где WRITE (писать)—имя оператора;々一номер устройства вывода (или файла с назначенным устройством); п — метка оператора FORMAT, в котором указаны форма и размеры выводимых данных; а1( а2, • • ■—' перечень элементов списка, например, имен переменных, значения которых выводятся из памяти.
Файл ——это совокупность определенным образом взаимосвязанных между собой данных. Файл могут образовать исходные данные, относящиеся к какой-либо задаче, исходная программа, В качестве файлов могут рассматриваться совокупность перфокарт, подготовленных к вводу, совокупность данных на заданном участке магнитной ленты и т. 口* Каждый файл при вводе и выводе назначается -на определенное физическое устройство. Если никаких назначений нет, то действуют стандартные назначения, например, номер 左=5 означает устройство ввода с терминала, а но мер & = 6 — алфавитно-цифровое печатающее устройство (АЦПУ).
Рассмотрим конструкцию списка в операторах ввода и вывода. В качестве элементов списка а】,а2> • • • могут быть: имена переменных (простых и с индексами), имена массивов, циклические элементы. Циклические элементы организуют ввод или вывод данных в цикле (по схеме оператора DO), записываются в скобках и имеют следующую структуру:
(di,d2、(5.13) где 九 厶,…一вложенные в цикл элементы списка, в качестве которых могут быть имена переменных (простых ——d^ или с индексами ——d2i), а также вложенные циклические элементы; i=j, k, / ——шапка циклического элемента: t —— имя переменной цикла (целого типа), /, k, / — начальное, конечное значения переменной цикла и шаг соответственно, в качестве которых могут быть или имена, или константы целого типа.
Циклический элемент работает аналогично оператору DO: переменной цикла присваивается начальное значение: i=j и считываются (вводятся или выводятся) слева направо все элементы, входящие в цикл: di, d2i,.... Затем переменная цикла изменяется на шаг: i=i+Z, и вновь слева направо считываются все эти элементы и т. д. до последнего считывания, когда станет i=^.
Циклические элементы используются для ввода и вывода массивов. В этом случае элементами цикла являются переменные с индексами, а индексы являются переменными цикла. Например, для ввода массива А(20) нужно использовать циклический элемент
READ (5, 7) (А(1), 1=1, 20)
где 5 — номер устройства ввода; ' 7 — метка оператора FORMAT; (А(1), 1 = = 120)——циклический элемент; А(1)—элемент цикла (переменная с индексом); I—' переменная цикла; 1—начальное значение; 20 — конечное значение переменной цикла, а шаг не указан «по умалчиванию», т. е. он равен единице.
Если требуется ввести или вывести двумерный массив, необходимо использовать циклический элемент с вложенным вторым циклическим элементом. Например, для ввода матрицы В(10,17) нужно записать
READ (5,8) ((В (I, J), J=l」7), 1 = 1,10)
Здесь в операторе задан один циклический элемент, в котором шапкой является 1=1,10, а элементом цикла (B(I, J), J = 1,17)— вложенный другой циклический элемент с шапкой J= 1,17 и с элементом цикла ——переменной с индексами B(I, J). При данной записи матрица будет вводиться по строкам: В(1,1), В (1,2),..., В(1,17), В(2,1), В(2,2),.・.
Чтобы организовать ввод по столбцам, необходимо поменять местами переменные цикла
READ (5,8) ((B(I,J), 1=1,10, J=l,17)
В Фортране предусмотрена возможность вводить и выводить массивы《по умалчиванию», не используя циклические элементы, а указывая в списке лишь имена этих массивов. Так, для ввода приведенных выше массивов А(20), В(10,17) достаточно записать
READ (5,9) А,В
Здесь оператор будет вводить элементы массивов в следующей последовательности: А(1), А(2),..., А(20), В(1,1), В(2,1),..., В(10,1), В(1,2), В(2,2),...,В(10,2), В(1,3), В(2,3),..., В(1,17), В(2,17),..., В (10,17). Следовательно, если указаны лишь имена массивов, то «по умалчиванию» они вводятся или выводятся по столбцам, т. е. внутренний цикл организуется по первому индексу, а внешний — по второму. Рассмотрим примеры.
Для ввода двумерного массива А(13,7) по строчкам, т. е. в последовательности: А(1,1), А(1,2),А(1,7), А(2,1), А(2,2,),・・・,
A(2,7),..., A(13,l), A(13,2),..., A(13,7), оператор READ будет иметь вид
READ (5,11) ((A(I, J), J=l,7), 1=1, 13)
11 FORMAT ...
где A(I, J)——элемент списка ввода ——индексированная переменная, вводится циклом; J=l, 7 — параметры внутреннего цикла (шаг равен единице и он опускается) ;1=1, 13 ——параметры внешнего цикла.
Приведенная запись циклического элемента соответствует следующей обычной записи цикла DO с оператором ввода:
DO 20 1=1,13
DO 20 J=l,7
20 READ (5,11) A(I, J)
11 FORMAT ...
Определим последовательность вывода простых переменных х, со, одномерного Y (5) и двумерных массивов А и В, если оператор WRITE имеет следующую запись:
WRITE (6」2)Х, ((A(I,J) J= 1,4,2), B(I + 1,2), 1 = 1,2), OMEGA, Y
Последовательность вывода будет: X, А(1,1), А(1,3), В(2,2), A(2,l), А(2,3), В(3,2), OMEGA, Y(l), Y(2),…,Y(5).
Оператор формата FORMAT содержит данные о форме и размерах вводимых и выводимых переменных, т. е. их тип, а также данные о взаимном их расположении на носителях информации. Оператор позволяет выводить также текст, всегда имеет метку и может располагаться в любом месте программы произвольно. Форма записи оператора
FORMAT (список)(5.14)
где FORMAT — имя оператора; список — перечень форматов.
Существует несколько типов форматов, определяющих структуру и размеры данных или текстов. Рассмотрим основные типы форматов.
Формат типа! используется для ввода и вывода значений целых переменных. Вид записи формата
Ло(5.15)
где I ——тип формата (буква I); со — константа, определяющая длину записи величины (т. е. количество позиций, отведенных под величину, включая знак).
Если длина формата больше количества цифр числа, то пробелы «пусто» оставляются слева (число прижимается к правой границе поля формата). Например, при вводе по формату (15) со следующим набором цифр в строках будет введено с 1-й строки
Первая перфокартаВторая перфокартаТретья перфокартаПервая перфокартаВторая перфокартаТретья перфокарта
Первая перфокарта
Вторая перфокарта
Третья перфокарта
Первая перфокарта
Вторая перфокарта
Третья перфокарта
число 37, со 2-йF370, с 3-й — минус 3 (так как цифра 7 вышла
за длину формата, что означает ошибку).
Или другой пример. Имеем 1 = 52, J = 600, К=27349. Эти значения выводятся на печать следующими операторами:
WRITE (6, 13) I, J, к
13 FORMAT (16, 15, 14)
На печать будет выведена строка
——j—52 — j600****
где ****——ошибка при выводе третьего числа; значение переменной К имеет больше цифр, чем позиций, предусмотренных форматом.
Пусть в строке (на перфокарте) записаны следующие цифры:
которые вводятся операторами:
READ (5,14) I, Л, J2
14 FORMAT (17,16,17)
В результате ввода переменные получат следующие значения: 1 = —400, Jl=7002, J2 = 13296.
Формат типа F используется для ввода и вывода значений действительных переменных в основной форме (без порядка числа). Вид записи формата
£з ■ d(5.16)
где F ——тип формата (буква); (о ——константа, определяющая общее количество позиций, отведенных под число (включая знак числа, если оно отрицательное, целую часть, разделительную точку, дробную часть числа); d — константа — число позиций, отведенных под дробную часть.
Если число занимает не все позиции, то пустые позиции остаются слева. Если количество цифр в дробной части числа превышает d, то дробная часть округляется по обычным правилам, если меньше d,——дополняется нулями. Если количество цифр целой части превышает величину, равную з—d—1, число не входит в формат, и все поле формата заполняется звездочками. При вводе чисел дробная точка в исходной записи может отсутствовать.
Например, на экране терминала записаны значения переменных: х= —1,23; у= 12,345; z = 67,890 и t = —31,27 следующим образом:
Необходимо записать операторы ввода:
15 FORMAT (F6.2, F9.3, F6.3, F7.2)-
READ (5,15) X, Y, Z, T
где значение х дано без разделительной десятичной точки.
Примеры ввода значений переменных:
ЧислоФормат12345,678F10.4—251,36796F10,41,8F10.4—345,6F6.3ЧислоФормат12345,678F10.4—251,36796F10,41,8F10.4—345,6F6.3Запись12345.6780251.3680—j — 1.8000****** (ошибка)Запись12345.6780251.3680—j — 1.8000****** (ошибка)
ЧислоФормат
12345,678F10.4
—251,36796F10,4
1,8F10.4
—345,6F6.3
ЧислоФормат
12345,678F10.4
—251,36796F10,4
1,8F10.4
—345,6F6.3
Запись
12345.6780
251.3680
—j — 1.8000
****** (ошибка)
Запись
12345.6780
251.3680
—j — 1.8000
****** (ошибка)
Формат типа Е используется для ввода и вывода значений действительных переменных, представленных в форме с порядком числа.
Вид записи формата
(5.17) где Е ——тип формата (буква); со ——константа ——общее количество позиций, отведенных под число, включая все его элементы, в том числе разделительную десятичную точку и букву Е; d 一一 число позиций после десятичной точки (дробной части числа).
При вводе десятичная точка и буква Е могут в исходной записи и отсутствовать. Например, вместо Е + 02 может быть записано Е02, Е2, +02, +2, но при отсутствии Е порядок должен обязательно отделяться от числа знаком порядка. При отсутствии десятичной точки считается, что дробная часть содержит d знаков. Если десятичная точка перфорируется, то параметр d оператором READ игнорируется.
Примеры ввода чисел:
Исходная запись
Формат
Вводится число
Примечание
一一一0.4567Е+02
Е14.2
—0.4567.102
Игнорируется d
— J l_i j -{-0-23450Е2
Е14.2
0.2345.102
То же
t_j l-j l_i L_i l_j l-. 0.2345 + 2
Е14.2
0.2345.102
То же и нет Е
j j —34.56—03
Е11.4
—34,56.102
То же
j—543E02
Е8.2
5.43.102
Нет точки
j +3 + 04
Е6.0
ЗЛО4
Нет точки и Е
При выводе число
занимает со
'ПОЗИЦИЙ. При
этом обязательно
отводятся позиции для размещения: знака числа (плюс заменяется пробелом), не менее одной позиции целой части, десятичной точки, буквы Е, знака порядка (плюс заменяется пробелом) и две позиции под значимую часть порядка. В этой связи необходимо соблюдать условие(o^d + 7. При использовании формата Е числа выводятся в нормализованном виде: нуль целых, а первая цифра после точки ——значащая.
'Примеры вывода чисел:
Число
Формат
Печатается
Примечание
4,8.108
Е11.5
0.48000Е-09
19,8
Е7.1
0.2Е-02
■ Округление
—0.0078
Е12.3
亠一0.780Е—02
—5.67.10-13
Е12.3
亠一0,567Е—12
2
Е10.2
——0.20Е j(H
Если необходимо вводить и выводить действительное число с двойной точностью, то вместо формата типа Е (длина 4 байта) применяется аналогичный формат типа D (длина 8 байт), отличающийся только двойной точностью.
Формат типа Н и литералы (текстовые единицы, строки) используются для выдачи на печать текстовой информации (заголовки, таблицы, примечания, указания, пояснения, названия, комментарии и др.).
Текст записывается непосредственно в оператор FORMAT. Имеются две формы записи текста с указанием и без указания длины:
со Н текст(5.18)
'текст'
где со ——константа, указывающая количество позиций, отведенных под текст; Н ——тип формата (буква); текст ——совокупность символов, составляющих заданный текст; ' — апостроф (кавычка).
В тексте применяются любые (кроме апострофа) символы, в том числе русские заглавные буквы. Например,
7 FORMAT (17НКОРНИ КОМПЛЕКСНЫЕ)
16 FORMAT ('ПРОГРАММА НАХОЖДЕНИЯ НАИБОЛЬШЕГО') где первый текст «корни комплексные» записан в формате типа Н и содержит 17 позиций, включая пробел.
Или, например, для вывода на печать значений искомых корней: х【=——257,043, х2=69,92 в строчку со следующим текстом: корни уравнения: Х] = «число», %2 = «число» операторы будут:
WRITE (6,18) XI, Х2
18 FORMAT ('j',22 НКОРНИ-УРАВНЕНИЯ: j —-XI =,F8.3,3X,3HX2 = , *,F8.2)
Здесь /」一для управления печатью (см. ниже). Машина напечатает строчку
КОРНИ-УРАВНЕНИЯ: J J jXI =—257.043 — — jX2= 一」69.920
Аналогичную строчку мы получим с оператором
FORMAT С j 一 一 --КОРНИ^УРАВНЕНИЯ: - - -Х1 =\F8.3,,一 - -X2 = \F8.2)
Если выводится только текст, например заголовок: «Дифференциальные уравнения», то оператор WRITE записывается без списка переменных
WRITE (6,19)
19 FORMAT ('ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ')
Формат типа X используется, если необходимо пропустить позиции (колонки перфокарты) при вводе и дать пробелы при выводе. Вид записи формата
зХ(5.19)
где со——число пропускаемых позиций (колонок, пробелов); X — тип формата (буква).
Например, если значение переменной х=—3456,075 в исходной строке записано с 10-й по 18-ю по формату F9.3, то оператор FORMAT записывается в виде.,
20 FORMAT (9X,F9,3)::
READ (5,20) X где формат типа X использован, чтобы пропустить девять начальных позиций строки.
Или, например, для печати в строчку значений трех переменных х, у, k с форматами F9.3, F8.5J7 и с тремя пробелами между ними оператор FORMAT будет иметь вид
21 FORMAT (F9.3,3X,F8.5,3X,I7)WRITE (6,21) X, Y, К
Формат типа А предназначен для описания текстовых величин в символьной форме. Текстовые величины не используются для арифметических вычислений, а подвергаются логической обработке. Например, логическими величинами могут быть фамилии студентов. Обработка этих величин может заключаться, например, в расположении фамилий по алфавиту. Формат имеет вид
А(о (5.20)
где А ——тип формата (буква); (о ——константа ——количество позиций, отводимых под величину.
В Фортране имеется ряд других форматов, например, типа L — логических величин; типа Т — указатель порядкового номера позиции, с которой начинается последующий ввод и вывод; типа Z — величин любого типа, представленных в шестнадцатеричной системе; типа С — универсальный, замещающий типы: I, F, Е, D, а также бесформатного ввода-вывода.
Повторители форматов. Если в списке оператора FORMAT встречаются одинаковые форматы, то их можно записать одним форматом, проставив перед ним число его повторений. Например, список форматов (12, 15, 15, 15, F8.3, F8.3) можно записать (12, 315, 2F8.3). Можно повторять группы форматов, применяя скобки и образуя форматные группы, например, запись (I3,2(I4,F9.4)) означает следующий список форматов (13, 14, F9.4, 14, F9.4).
Задание нескольких записей в одном операторе FORMAT. Под записью понимают содержимое одной перфокарты или одной строки. В ряде случаев удобно в одном операторе формата описывать структуру нескольких записей, т. е. содержимое нескольких перфокарт при вводе или нескольких строк при выводе. Для этого используют в качестве разделителей форматов дробную черту вместо запятой. Например, при вводе операторами
READ (5,29) X, Y ,22 FORMAT (E18.7/F10.4)
с первой строки из яервых 18 позиций будет считано значение переменной х, со второй строки из первых 10 позиций ——значение переменной у.
Можно записать несколько дробных черт подряд в зависимости от того, сколько строк нужно пропустить. Например, при выводе операторами
WRITE (6,23) X, Y, Z, Т,
23 FORMAT (2F8.4///3I4)
вначале будут выведены значения переменных X, Y, затем будет пропущено две строки и на третью строку будут 1напечатаны значения переменных Z, Т, S.
.Управление печатью. При выводе информации на не- qai|> первый символ записи в операторе формата не печатается, а используется для задания характера движения бумаги перед началом печати строки. Наиболее часто используются следующие четыре символа управления печатью:
(пробел)——пропуск одной строки (т. е. переход на следующую строку);
0 (нуль) —пропуск двух строк;
1—переход на начало следующей страницы. Страница состоит из заданного количества строк;
Нпечать в ту же строку (движение бумаги отсутствует).
Управляющий символ можно задавать форматом типа Н или литералом, например FORMAT (1HO,5F9.3) или FORMAT (’(y,EF9.3), где задается управляющий символ —《0》一пропуск двух строк. Управляющий символ 《一》может быть задан в форматах самих величин. Например, вместо FORMAT ('Y F10.4) можно задать FORMAT (F11.4). Если на месте символа управления печатью стоит неположенный символ, произойдет ошибка.
Управление печатью при несоответствии списков операторов ввода (вывода) и формата. Возможны два случая несоответствия: список ввода (вывода) исчерпан, а в форматном списке имеются неиспользованные форматы; описок ввода (вывода) не исчерпан, а в форматном списке использованы все форматы.
При первом несоответствии перебор форматов и выполнение соответствующих действий будет продолжаться до конца списка форматов. В этом случае может оказаться элемент формата, по- требующий обращения к списку ввода (вывода)..
При втором несоответствии перебор форматного списка будет повторен, начиная с первого формата. Если в форматном списке имеются форматные группы, перебор форматов начинается с первого формата последней внешней форматной группы (т. е. группы, не содержащейся в другой форматной группе). Каждый переход на такой повторный перебор сопровождается переходом на следующую запись (строку). Например, необходимо определить последовательность ввода с терминала при втором случае несоответствия списков по оператору
FORMAT (8Х, 2F8.4/2 (16,14,2 (I3,F7.2))〃,M,)
Оператор организует считывание с 1-й строки терминала, начиная с 9-й позиции, значения двух переменных по формату F8.4. Затем со следующей строки будут считаны значения переменных по форматам, заданным двумя вложенными друг в друга форматными группами, последовательно по форматам: 16, 14, 13, F7.2, 13, F7.2, 16, 14, 13, F7.2, 13, F7.2. Всего 12 чисел с позиций 1—60 строки. После этого произойдет пропуск одной 'перфокарты, и со
следующей будет считан символ, который заменит букву М. Если теперь список ввода (оператора READ) не исчерпан, то произойдет повторный перебор форматного списка, причем начиная с внешней форматной группы, т. е. формата 16, и со следующей строки.
Оператор размеров DIMENSION задает размеры входных, выходных и промежуточных массивов и необходим всегда, когда в программе используются массивы и индексированные переменные, являющиеся элементами массивов. Для указанных массивов оператор резервирует необходимый объем памяти. Он записывается без метки и размещается в начале программы до первого исполнимого оператора. Форма записи оператора
DIMENSION。1(电),02(比),.一(5.21)
где。1, 。2, • • •一 имена массивов;々i, k2t.. ■ — указатели размерности массива.
Указатель имеет вид:(自)=(加川 m2it..., mni)t где 加旧 ^i2i,..., tnni ——максимальные значения индексов ьго массива; п —— размерность массива. Например,
DIMENSION A(I), B(J, К, L), С(М, N) где А, В, С — имена массивов; I, J, К, L, М — константы или переменные целого типа, указывающие максимальный размер индексов.
Пример ввода массива:
■ DIMENSION А(20)
READ (5,24)А
24 FORMAT (F10.3)
Здесь оператор размеров зарезервирует память для массива А (20). Оператор READ введет все 20 элементов массива, расположенных по одному в строке терминала, занимая согласно формату F10.3 позиции с 1-й по 10-ю. Если расположить массив по 8 элементов в двух строках (16 элементов) и 4 элемента на третьей строке, т. е. более компактно, оператор формата будет иметь следующую структуру: FORMAT (8F10.3).
5・4・ ФУНКЦИИ И ПОДПРОГРАММЫ
В процессе составления исходной программы часто возникает необходимость выполнять одну и ту же последовательность операторов в различных частях программы. Разными могут быть лишь значения переменных. В этом случае удобно записывать повторяющуюся формулу или группу операторов в программе только один раз и затем обращаться к ней из всех мест программы, где используются вычисления, задаваемые этой формулой или группой операторов. Такой прием реализуется в Фортране путем использования оператора-функции, подпрограммы-функции FUNCTION, подпрограммы-процедуры общего вида SUBROUTINE. Подпрограмма облегчает составление и отладку программы, экономит тем самым время и объем памяти. Подпрограмма-функция и подпро- трамма-процедура являются самостоятельными программами, они разрабатываются, транслируются и хранятся в памяти независимо 140
от основной программы и как программные единицы оканчиваются оператором END. Основная программа также является самостоятельной программной единицей.
Рператор-функция реализует формулу (выражение) для вычисления искомой функции; применяется тогда, когда одна и та же формула многократно вычисляется в различных местах программы, и тем самым позволяет избежать многократного выписывания этой формулы. Формула записывается один раз в операторе- функции, и ему как искомой функции-результату присваивается имя. Эта функция-результат как переменная может использоваться н других выражениях основной программы. Форма записи оператора-функции
/ 的,/, ...) = формула(5.22)
где f ——имя оператора-функции (устанавливается по общим правилам как для обычной переменной); %〔,%备——имена формальных параметров (аргументов) функции (простые неиндекси ров а нны е переменные, входящие в выражение «формула»); формула——выражение, выделяемое в оператор-функцию.
Оператор-функция записывается в начало программы до первого исполнимого оператора.
В тех местах программы, где эти выражения должны быть расположены, вместо них пишется имя оператора-функции, по которому и происходит обращение к указанному оператору-функции
/(Уь %,…)(5.23)
где f—1 имя оператора-функции; рз у» …——фактические аргументы функции (переменные, взятые из самой программы, константы, выражения).
Примеры операторов-функций:
SC2 (W) = (SIN (W) +COS (W) )/2
DIAGO (X,Y,Z)=SQRT(X**2+Y**2+Z**2)
где SC2, DIAGO — имена функций; X, Y, W, Z — формальные параметры операторов-функций.
При использовании оператора-функции необходимо соблюдать следующие правила:
количество фактических параметров в обращении (5.23) должно совпадать с количеством формальных параметров в операторе-функции (5.22);
типы и длины фактических аргументов в (5.23) должны совпадать с типами и длинами соответствующих формальных параметров в (5.22). Соответствие устанавливается по порядку их следования в списках параметров: первому формальному параметру соответствует первый фактический, второму ——второй и т. д.;
в качестве фактических параметров могут использоваться константы, переменные, выражения;
оператор-функция располагается только в той программе, в которой она используется, т.е. (5.22) и (5.23) должны принадлежать одной и той же программной единице.
Пример 5.5. Для примера 4.9 составим участок программы использованием оператора-функции, присвоив ему имя FOR;FOR (V, W) = L7*V**2 + 2」*V*W + 0,8*W**2 '(Y, S),Пример 5.5. Для примера 4.9 составим участок программы использованием оператора-функции, присвоив ему имя FOR;FOR (V, W) = L7*V**2 + 2」*V*W + 0,8*W**2 '(Y, S),АВСАВСОООFF FОООFF FRRRRRR
Пример 5.5. Для примера 4.9 составим участок программы использованием оператора-функции, присвоив ему имя FOR;
FOR (V, W) = L7*V**2 + 2」*V*W + 0,8*W**2 '
(Y, S),
Пример 5.5. Для примера 4.9 составим участок программы использованием оператора-функции, присвоив ему имя FOR;
FOR (V, W) = L7*V**2 + 2」*V*W + 0,8*W**2 '
(Y, S),
АВС
АВС
ОООFF F
ОООFF F
RRR
RRR
Здесь в обращении к оператору-функции вместо формальных аргументов V и W ставятся фактические X и Y в первом выражении, Z и Т — во втором, Y и S — в третьем.【
Подпрограмма-функция FUNCTION — это программа вычисления значения некоторой функции, которая оформляется в виде подпрограммы. Подпрограмма используется в тех случаях, когда функцию необходимо определять несколько раз в программе. Участок программы, на котором определяется эта функция, и выделяется в подпрограмму-функцию. Структура записи подпрограммы-функции
(5.24)(5.24)FUNCTION f(x^ 不,…) ]Содержательная часть I подпрограммы RETURN END,
(5.24)
(5.24)
где FUNCTION (функция)——имя оператора заголовка подпрограммы-функции; f ——имя функции (устанавливается по общим правилам как для обычной переменной) ;工1,尤2, • • •一 имена формальных параметров (аргументов) функции.
Подпрограмма-функция записывается в конце основной программы после оператора END. Поскольку подпрограмма-функция является отдельной программной единицей, метки и имена, используемые в ней, являются локальными и могут совпадать с метками и именами других программных единиц.
В качестве формальных параметров могут быть переменные, имена массивов, имена других внешних подпрограмм.
Если в качестве формального параметра используется массив, то последний должен быть описан в подпрограмме оператором размеров DIMENSION, в котором допускается в качестве максимальных значений индексов использовать наряду с целыми константами также и целые переменные. Последние должны включаться в список формальных параметров. Например,
FUNCTION FOR (А, В, N)DIMENSION A (N), В (N)
где А, В ―имена массивов; N — размер массива; FOR — имя подпрограммы- функции.
Оператор возврата RETURN (возвратиться) является последним исполняемым в подпрограмме оператором. Он завершает вычисления в подпрограмме и осуществляет возврат в вызывающую программу в оператор, из которого производилось обращение. В подпрограмме-функции должен обязательно присутствовать хо- 142
тя 'бы один оператор возврата. Заканчивается запись текста под- прокраммы-функции, как любой программной единицы, операто- ром下 ND.
Обращение к подпрограмме-функции осуществляется так же, как и к оператору-функции (5.23), по имени и с указанием в скобках фактических параметров: /(“匕 “2,・・•), где f— имя подпрограммы-функции; % 欠,…一фактические параметры функции: имена переменных, массивов, внешних подпрограмм, выражения, константы, при использовании которых необходимо соблюдать следующие правила:
количество фактических параметров в (5.23) должно совпадать с количеством формальных параметров в (5.24);
типы и длины фактических параметров должны совпадать с типом и длиной соответствующих формальных параметров. Соответствие устанавливается согласно порядку следования тех и других параметров слева направо;
если формальный параметр ——имя подпрограммы, то фактическим является также имя подпрограммы. В этом случае имя подпрограммы, используемой в качестве фактического параметра, должно быть объявлено в операторе EXTERNAL.
Обращение в подпрограмме-функции приводит к тому, что подпрограмма вычисляет значение функции с использованием конкретных (численных значений) фактических параметров (аргументов) ,которые заменяют формальные аргументы, указанные в операторе заголовка FUNCTION. После выполнения подпрограммы-функции обращение (имя) функции заменяется вычисленным ее значением. Имя может находиться в том числе и в выражениях основной программы.
Пример 5.6. Для примера 4.10 (п. 4.4) составим подпрограмму-функцию, присвоив ей имя FACT.
READ (5.1) N, М
1 FORMAT (212)
С НАХОЖДЕНИЕ ЧИСЛА СОЧЕТАНИЙ ИЗ N ПО М CNM=FACT (N)/(FACT(M)* FACT(N-M)) WRITE (6,2) N, M, CNM-
2 FORMAT ('-СОЧЕТАНИЕ ИЗ —',12,' ГЮ-',12,'—РАВНО—',F8,2) STOP END
FUNCTION FACT (N)
С ПОДПРОГРАММА НАХОЖДЕНИЯ ФАКТОРИАЛА ИЗ N ПО M IF(N) 1,2,3
FACT=0
STOP 27
FACT=1 RETURN
FACT=1
DO 6 K=2, N
FACT=FACT*K
RETURN
FND
В программе CNM — имя сочетания по (4.17). В выражении три раза записано имя подпрограммы-функции FACT. Фактиче-
скими параметрами этих обращений являются N, М, N — М, где N — М — выражение. В подпрограмме оператор IF сравнивает параметр N с нулем. Если N<0, то передача идет на оператор с меткой 1: функции присваивается нуль, и затем машина останавливается (STOP) и печатает число 27, сообщая об останове на этом операторе. Если N = 0, то осуществляется переход к оператору с меткой 2; факториалу присваивается единица, а следующий оператор RETURN возвращает управление в основную программу на оператор расчета CNM. Наконец, если N>0, то по метке 3 процесс перейдет к оператору, в котором присваивается начальное значение «накапливаемого произведения», равного единице (FACT = 1), а затем в цикле DO находится произведение ——значение факториала. Затем второй оператор RETURN возвращает процесс в основную программу.
Подпрограмма общего вида SUBROUTINE (или другое название——подпрограмма-процедура) предоставляет возможность получать не один, а несколько результатов (функций). Если подпрограмма-функция вычисляет одну функцию, то подпрограмма общего вида может возвращать в основную программу несколько результатов. Подпрограмма общего вида имеет структуру аналогично структуре подпрограммы-функции, которая отличается лишь оператором-заголовком:
SUBROUTINE р(хь 打,…)
jСодержание подпрограммы(5 25)
RETURN • END
где р ——имя подпрограммы (устанавливается по общим правилам, как для любого идентификатора);尤i, х2> • • •一 имена формальных параметров. Допускаются такие же виды формальных параметров и те же правила их описания, что и в подпрограмме-функции.
Подпрограмма общего вида, так же как и подпрограмма- функция, выполняется только при обращении к ней из другой программы единицы. Однако имя подпрограммы общего вида р не является именем функции, т. е. результатом, как в подпрограмме- функции, и оно не может использоваться в выражениях других программ. Поэтому для обращения к подпрограмме общего вида применяется оператор вызова CALL.
Оператор вызова CALL (или другое название оператор-процедур а) осуществляет вызов подпрограммы общего вида. Форма записи оператора
CALL p(gi, % …)(5.26)
где р ——имя вызываемой подпрограммы общего вида; у,,学2, • • •——фактические параметры: имена переменных, массивов, внешних подпрограмм, выражения, константы; CALL (вызвать)—имя оператора.
Между формальными и фактическими параметрами должно быть аналогичное соответствие, что и для лрограммы-функции. Подпрограмма общего вида записывается после основной программы так же, как и подпрограмма-функция.
После окончания вычислений по подпрограмме и выполнения оператора возврата происходит возвращение в вызывающую inpo- грамму на оператор, непосредственно следующий за оператором вызона.
Ес|ли потребуется закончить выполнение основной программы в подпрограмме общего вида, последняя может содержать оператор STOP.
Пример 5.7. Имеются массивы с размерами А(80), В(45), С (66), D(30). Найти в каждом массиве элементы с максимальным и минимальным значениями. Среди найденных значений найти самое максимальное и минимальное значения. Составить программу решения задачи.
Проанализируем условие задачи. Нужно найти максимальный и минимальные элементы в пяти массивах: в четырех заданных — А, В, С, D — и дополнительно полученном, состоящем из восьми найденных максимальных и минимальных элементов. Дадим имя этому массиву Е. Его размер Е(8).
Нахождение максимума и минимума в пяти массивах целесообразно выполнить одной подпрограммой. Поскольку каждый раз находятся два результата, то выбирается подпрограмма типа SUBROUTINE. Дадим имя подпрограмме MAXMIN. Для нахождения максимума и минимума в подпрограмму нужно передавать массив, который может быть задан двумя параметрами: именем и размером. Дадим имена формальным параметрам: X ——имя массива, N ——имя размера массива, ХМАХ ——имя элемента с максимальным значением, XMIN — то же с минимальным значением. Отсюда следует конструкция оператора SUBROUTINE MAXMIN (X, N, ХМАХ, XMIN).
В основной программе будут операторы ввода массивов, вызова подпрограммы и вывода на печать результата. Для того чтобы определить операции ввода и вывода, необходимо знать тип и размеры элементов массивов. Зададим, что элементы всех массивов действительного типа с максимальным размером ——четыре разряда в целой части, два — в дробной. Они могут быть отрицательными. Учитывая еще разделительную точку, получим следующий формат (F8.2).
В подпрограмме используем схему алгоритма нахождения максимума и минимума (рис. 2.9). Составим теперь программу и подпрограмму:
С12*С12*ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНЫХ И МИНИМАЛЬНЫХ ЭЛЕМЕНТОВОПРЕДЕЛЕНИЕ МАКСИМАЛЬНЫХ И МИНИМАЛЬНЫХ ЭЛЕМЕНТОВDIMENSION A(80), B(45), C(66), D(30), E(8)READ (5,1) A,B,C,D FORMAT (10F8.2)DIMENSION A(80), B(45), C(66), D(30), E(8)READ (5,1) A,B,C,D FORMAT (10F8.2)CALL CALL CALL CALL CALLCALL CALL CALL CALL CALLMAXMIN MAXMIN MAXMIN MAXMIN MAXMINMAXMIN MAXMIN MAXMIN MAXMIN MAXMIN(А,80,Е(1),Е(2)) (В,45(Е(3),Е(4)) (С,66,Е(5),Е(6)) (D,30,E(7),E(8))(А,80,Е(1),Е(2)) (В,45(Е(3),Е(4)) (С,66,Е(5),Е(6)) (D,30,E(7),E(8))(E,8,EMAX,EMIN)WRITE (6,2) EMAX, EMIN(E,8,EMAX,EMIN)WRITE (6,2) EMAX, EMINFORMAT (^МАКСИМАЛЬНЫЙ一ЭЛЕМЕНТ^—— МИНИМАЛЬНЫЙ^ ЗЛЕМЕНТ—F8.2)FORMAT (^МАКСИМАЛЬНЫЙ一ЭЛЕМЕНТ^—— МИНИМАЛЬНЫЙ^ ЗЛЕМЕНТ—F8.2)F8.2/'」F8.2/'」
С
1
2
*
С
1
2
*
ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНЫХ И МИНИМАЛЬНЫХ ЭЛЕМЕНТОВ
ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНЫХ И МИНИМАЛЬНЫХ ЭЛЕМЕНТОВ
DIMENSION A(80), B(45), C(66), D(30), E(8)
READ (5,1) A,B,C,D FORMAT (10F8.2)
DIMENSION A(80), B(45), C(66), D(30), E(8)
READ (5,1) A,B,C,D FORMAT (10F8.2)
CALL CALL CALL CALL CALL
CALL CALL CALL CALL CALL
MAXMIN MAXMIN MAXMIN MAXMIN MAXMIN
MAXMIN MAXMIN MAXMIN MAXMIN MAXMIN
(А,80,Е(1),Е(2)) (В,45(Е(3),Е(4)) (С,66,Е(5),Е(6)) (D,30,E(7),E(8))
(А,80,Е(1),Е(2)) (В,45(Е(3),Е(4)) (С,66,Е(5),Е(6)) (D,30,E(7),E(8))
(E,8,EMAX,EMIN)
WRITE (6,2) EMAX, EMIN
(E,8,EMAX,EMIN)
WRITE (6,2) EMAX, EMIN
FORMAT (^МАКСИМАЛЬНЫЙ一ЭЛЕМЕНТ^—— МИНИМАЛЬНЫЙ^ ЗЛЕМЕНТ—F8.2)
FORMAT (^МАКСИМАЛЬНЫЙ一ЭЛЕМЕНТ^—— МИНИМАЛЬНЫЙ^ ЗЛЕМЕНТ—F8.2)
F8.2/'」
F8.2/'」
STOP
END
SUBROUTINE MAXMIN (X,N,XMAX,XMIN)
DIMENSION X(N)
XMAX^X(l)
XMIN=X ⑴
DO 1 1 = 2,N
IF (X(I).GT.XMAX) XMAX=X(I)
IF (X(I), LT.XMIN )XMIN = X(I)
CONTINUE
RETURN
END
Рассмотрим составленную программу. В операторе размеров заданы четыре входных массива и один полученный при выполнении программы. В операторе ввода массивы заданы только именами, а развернутым оператор ввода имел бы вид: READ (5,1) (А(1), 1 = 1,80), (В(1), 1=1,45), (С(1), 1 = 1,66), (D(I), 1 = 1,30). В операторе формата задан повторитель 10, что означает, что в одну строку исходных данных набивается по 10 чисел. И поскольку количество вводимых элементов значительно больше, чем объявлено в операторе формата, то формат будет повторяться многократно. Операторы вызова формируют массив Е от Е (1) до Е(8). Самый максимальный и самый минимальный элементы обозначены ЕМАХ и EMIN. Они и выводятся на печать в две строчки с соответствующим поясняющим текстом.
В подпрограмме применен оператор размеров, поскольку обрабатывается массив и он должен быть размещен. В качестве исходных значений ХМАХ и XMIN взято значение первого элемента Х(1). Цикл DO целесообразно начинать с 2.
Использование стандартных программ. В Фортране предусматривается возможность использовать программы из библиотеки программ, входящих в состав программного обеспечения каждой ЭВМ. Каждая такая программа имеет свое имя. Для обращения к ним указываются имя функции и список фактических параметров (аргументов).
Основная часть стандартных программ составлена по типу подпрограммы SUBROUTINE.
К каждой программе в документации к ЭВМ имеется описание и инструкция по использованию, Обращение к программе выполняется с помощью оператора CALL с указанием фактических параметров, которые должны быть согласованы со списком формальных параметров, приведенных в описании к программе.
5.5. ОПЕРАТОРЫ ОПИСАНИЯТИПОВ ПЕРЕМЕННЫХ
Поскольку различные типы величин (целые, действительные, логические, комплексные) по-разному обрабатываются и представляются в машине, они должны быть описаны. В Фортране 146
имеются формы описания величин: 《по умолчанию» и с помощью операторов описания типов переменных.
«Принцип умолчания» позволяет описывать целые и действительные величины и заключается в том, что имена целых переменных начинаются с букв I, J, К, L, М, N, а действительных — со всех других букв. Возможности описания с помощью операторов описания типов значительно шире, они позволяют описывать переменные всех типов. Причем описание с помощью операторов описания типов имеет приоритет перед описанием 《по умолчанию».
Оператор описания неявного типа IMPLICIT описывает тип и длину переменных и массивов, имена которых начинаются с букв, указанных в нем, т. е. подобно тому, как это делается《по умолчанию»——по первой букве имени, но с той разницей, что' начальные буквы выбираются по усмотрению программиста. Форма записи оператора
IMPLICIT Si厶(门),s2/2(c2),... (5.27)
где IMPLICIT (неявно выраженный)——имя оператора; s〔, s2, • • ■——указатель типа переменной (имя оператора явного типа) : REAL (действительный), INTEGER (целый), LOGICAL (логический), COMPLEX (комплексный); /ь 勾,.一一 указатель длины переменной в байтах: *2, *4, *8, *16 или совсем не указывается, если принимается стандартная длина: 4 байта для действительных,, целых и логических и 8 байт для комплексных; с「办,...一 список первых букв имен переменных и массивов (список может включать указатель алфавитной последовательности этих букв 。【——。冗,где 。1 — первая,。在一последняя буква взятых по алфавиту букв.
Например, опишем оператором неявного типа переменные: действительные с длиной 8 байт: ASK, SUM, В2, С13, DELTA; целые: FOR, Fl, Н2, GX; логические: V, VI, VUL. Запишем оператор
IMPLICIT REAL*8(A—D, S), INTEGER (F—H), LOGICAL(V)
где *8 — указатель нестандартной длины 8 бант у действительных переменных; А ——D — указатель алфавитной последовательности букв А, В, С, D. Согласно оператору все переменные, имена которых начинаются с букв А, В, С, D и S, будут отнесены к переменным действительного типа длиной 8 байт; все переменные, начинающиеся с букв F, G, Н, будут целого типа, а с букв V — логического типа.
Оператор неявного типа, если он имеется в программной единице, должен быть первым оператором после оператора-заголовка. Обычно в одной программной единице используется не более одного неявного оператора типа.
Операторы описания явного типа объявляют тип переменной не по начальным буквам их имен, а по имени. Они могут описы-
вать размеры массивов и присваивать переменным начальные значения. Форма записи операторов
s£a"i(自)/q/, a2t2(k^lz2l9 . , .(5.28)
где s — указатель типа переменных (имя оператора явного типа), который определяет, какой тип переменной задает этот оператор; t, /ь %,….——указатели длины переменной (/ — общий, /ь /2, - - •——конкретно каждой переменной); си, Оз, имена переменных или массивов, которым задается этот тип s. Если а(——нмя массива, то ему может быть указан также и размер 左亡;feb 在2, •…—— размеры массивов (они задаются как перечень максимальных значений индексов массива); %i, s2,...——начальные значения переменных или список начальных значений элементов массива.
Если начальные значения одинаковые, то список может задаваться с повторителем: r*z, где z — начальное значение (константа); г — целое число, обозначающее количество повторений константы. Количество констант должно соответствовать количеству элементов массива. В операторе могут отсутствовать компоненты t,必 財,23
Рассмотрим примеры. Опишем переменные предыдущего примера с помощью операторов явного типа:
REAL*8 ASK, SUM, В2, С13, DELTA INTEGER FOR, Fl, H2, GX LOGICAL V, VI, VUL
Рассмотрим еще один оператор
REAL Y/7.23/, ALPHA (4)/3.7,-8.65,2.16,2.16/
который объявляет, что переменная у и массив а являются величинами действительного типа. Он присваивает начальное значение переменной у = 7,23; определяет размер массива а (массив одномерный, состоит из четырех элементов), присваивает численные значения всем четырем элементам массива. Поскольку у двух элементов массива одинаковые значения 2.16, то можно применить повторитель и записать ALPHA(4)/3.7, —8.65,2*2.16/.
Контрольные вопросы
Как классифицируют и записывают величины и массивы на языке Фортран?
Как записывают выражения на языке Фортран? Приведите примеры.
Что такое операторы на языке Фортран, как их классифицируют и записывают в программе?■
Как на языке Фортран записывают оператор для присваивания переменной значения константы, значения другой переменной или выражения?
Каково назначение, какие действия выполняют и как записывают операторы GOTO и IF? Приведите примеры.
Расскажите и приведите пример использования операторов для организации цикла.
Какие операции выполняют, как записывают операторы ввода и вывода? Приведите варианты записи операторов для ввода и вывода матриц.
Расскажите о назначении оператора формата и об основных форматах, используемых на языке Фортран. Приведите примеры.
Когда, зачем и как используют оператор размерности на языке Фортран? Приведите пример.
Каково назначение и как записывают операторы-функции на языке Фортран? Приведите примеры.
Каково назначение, как используют и записывают подпрограммы на языке Фортран? Приведите примеры.
Расскажите об операторах описания типа переменных, об их классификации, назначении и поясните, как их записывают.
Составьте программу на языке Фортран для табулирования функции типа у=Ю при изменении' х в заданном интервале и с заданным шагом.
Составьте программу на языке Фортран для нахождения среднего значения п чисел.
Составьте программу на языке Фортран для нахождения максимального и минимального по значению элемента матрицы с указанием их индексов.
Составьте программу на языке Фортран для нахождения в массиве количества элементов, равных нулю, отрицательных и положительных.
Составьте программу на языке Фортран для расположения элементов массива в порядке убывания их значений.
Глава 6
МЕТОДЫ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ
ОБЩИЕ СВЕДЕНИЯ。МЕТОДАХ РЕШЕНИЯ ЗАДАЧ
Большое разнообразие практических задач, различная их структура, многообразие количественных и качественных соотношений параметров задач вызывают необходимость применения различных математических методов для поставки и решения этих задач на ЭВМ. Математические методы, как совокупность приемов и операций, устанавливающих количественные отношения параметров в объектах и процессах производства, дают возможность формировать математические модели, математически описывать эти объекты и процессы.
В инженерной практике сельскохозяйственного производства можно выделить две группы задач: инженерные или научно-технические, отличающиеся, как правило, сложными математическими зависимостями; экономические или производственно-технические, включающие большой объем исходной и результативной информации и множество логических операций.
Для решения на ЭВМ первой группы задач в основном используются численные методы вычислительной математики, как методы приближенного и точного решения математических задач, основанные на построении конечной пос ледов ательност и простых (арифметических и логических) действий над конечным множеством чисел.
Для решения на ЭВМ второй группы задач применяются: информационно-логические процедуры (задачи выборки данных из массивов, компоновки, сортировки, группировки данных, редактирование текстов и др.); процедуры прямого счета (например, учетные и отчетные задачи); методы теории исследования операций (задачи оптимизации или оптимального управления). Из всех этих задач наибольший интерес при управлении и планировании производства представляет последняя группа задач ——задачи оптимизации (см. гл. 7).
Правильность выбора того или иного математического метода оценивается тем, насколько модель, построенная на этих методах, соответствует заданной точности отображения самого производственного объекта.
Единственным критерием адекватности математических моделей объекту является практика, дающая подтверждение выводов, следующих из анализа математических моделей в условиях реального производства. Однако на этой стадии мы имеем очень серьезные трудности. Если, например, в физике эксперимент базируется на безусловной повторяемости событий и ситуаций, то в общественно-производственной сфере мы практически никогда не имеем тождественных ситуаций. Эксперимент, как один из главных частей любой науки, практически невозможно поставить при математическом моделировании производства. Сельскохозяйственное предприятие с его реальным окружением *не поместишь в лабораторию. Проведение эксперимента на реальных предприятиях может быть связано с серьезными отрицательными последствиями или вообще невозможно.
На первый взгляд может показаться, что чем больше факторов в модели учтено, тем лучше сама модель. На самом деле построение очень детальной модели не всегда целесообразно. При большом количестве переменных трудно, а иногда и невозможно анализировать модель. Малое количество учитываемых факторов приводит к высокой вероятности значительных погрешностей моделирования.
Существуют три основные причины, вызывающие ошибки при моделировании: неточность исходной информации; методические •ошибки, вызванные недоучетом тех или иных факторов; ошибки расчета, обусловленные выбором характера вычислительного процесса, математического метода и округлениями.
ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯИНЖЕНЕРНЫХ ЗАДАЧ
Выше упоминались или рассматривались некоторые методы решения инженерных задач: численные методы нахождения стандартных функций (тригонометрических, степенных и др.)» формула Горнера (п. 3.4, пример 3.7) и др.
Рассмотрим дополнительный ряд численных методов, их алгоритмы и программы для решения на ЭВМ наиболее часто встречающихся инженерных задач.
Метод итераций (последовательных приближений) применяется для решения нелинейных алгебраических и трансцендентных уравнений. Чтобы применить метод итераций, обычное алгебраическое или трансцендентное уравнение вида
f ОО (6.1) заменяется тождественным ему уравнением
х =屮(х)
Выбирают начальное приближение для корня х0, подставляют его вместо % в правую часть преобразованного уравнения и вычис* ляют как функцию уточненное значение x〔 в левой части. Полу-
ченное значение %i вновь подставляют в первую часть и находят 打 в левой части и т. д. по формуле
= Ф (看).(6.2)
Если последовательность х0,尤1,%2,・..,%з x^+i сходящаяся, т. е. существует предел .
lim 修+1 — lim 平(%) const,
предел является корнем уравнения х. Условием сходимости (существования предела) процесса итерации является неравенство
%‘а)у 1.(6.3)
Условие (6.3) является правилом преобразования f (х) в ф(х).
Так как расчет, выполненный по уравнению (6.2), повторяется, то вычислительный процесс будет циклическим с параметрами: начальное значение переменной цикла — х0, расчетная формула — у=(р(%), где y=Xi+i и х = %й условие изменения переменной — х=уу условие окончания цикла |х—у \ ^е, где е — заданная точность отыскания корня. В соответствии с установленными параметрами строим алгоритм (рис. 6.1).
ций
Пример 6.1. Найти корни уравнения х3——х=2 методом итераций. Решая уравнение относительно наиболее значимой переменной х3, получаем х=у х+2 или у^у х+2.
Используем алгоритм рис. 6.1, и, приняв начальное значение х=2 и е = 0,0005, построим программу на языке Бейсик.
NEW
10 Х = 2
20 Y=(X+2)f(l/3)
30 IF ABS (Y—X)^0.0005 THEN 60
40 X=Y
50 GOTO 20
60 PRINT X
70 END
RUN
Программа на Фортране имеет вид
Х=2
7 Y=(X + 2)**(L/3.)
IF (ABS (Y—X)—0.0005) 3,3,5
5 X=Y
GOTO 7
3 WRITE (6,9) X
9 FORMAT (F10.3) STOP END
6.3. АППРОКСИМАЦИЯ ФУНКЦИЙПО СПОСОБУ НАИМЕНЬШИХ КВАДРАТОВ
При обработке результатов эксперимента часто возникает задача построения эмпирической формулы, дающей аналитическое выражение функциональной зависимости, заданной таблицей. Для этого можно воспользоваться интерполяционными полиномами, которые всегда позволяют найти такой полином, при котором экспериментальные и расчетные значения функции в заданных точках полностью совпадают. Но такая аппроксимация в практике обычно не используется, так как результаты эксперимента содержат случайные погрешности, и полученные эмпирические формулы, несмотря на их сложность, будут отражать реальное состояние системы со значительными погрешностями.
Способ наименьших квадратов ——наиболее распространенный. Основная идея способа заключается в следующем. Пусть результаты измерений переменных % н у интересующей нас зависимости у=Ф(х) представлены значениями: %i и у】,4 н У2,…,Хп н Уп и пусть у =(р(х) есть искомая эмпирическая формула. Требуется так подобрать параметры функции 屮(%), чтобы сумма разностей
£(屮(尤力——ZA),в которую подставлены измеренные х» и yi, была наименьшей. Так как разности могут быть как положительными, так и отрицательными, то за критерий качества аппроксимации принимают наименьшую сумму квадратов разностей:
£ w(七)-min.(6.4)
Рассмотрим наиболее часто встречающиеся на практике случаи, когда функция(р(х) линейная и когда она выражается полиномом второй степени (параболой).
Аппроксимация линейной функции. Пусть в опыте получена следующая совокупность зависимых значений: %» и у^ i= 1,л* Требуется подобрать по методу наименьших квадратов параметры 00 и G] линейной функции y = a()x+alt изображающей данную экспериментальную зависимость. Найдем значения а0 и аь при
Рис. 6.2. Алгоритм аппроксимации линейной функцииРис. 6.2. Алгоритм аппроксимации линейной функции% = —、у, — а。— £ 修itn% = —、у, — а。— £ 修itn
Рис. 6.2. Алгоритм аппроксимации линейной функции
Рис. 6.2. Алгоритм аппроксимации линейной функции
% = —、у, — а。— £ 修itn
% = —、у, — а。— £ 修itn
которых достигается минимум суммы квадратов отклонений. Для этого подставим 〕в (6.4) выражение a0Xi + ^i вместо 屮(%», продифференцируем (6.4) по ао и а1 и приравняем производные нулю:
2苕也-(ад +О1)]. Х£ = о, где(—J . = %,
2В", — Зо% + а)] -1=0, где 傍).二 1 •
Сокращая на два и группируя, приведем уравнения к виду:
(6.5)(6.5)а。£ х『+ aj 2 х; = 2 UiXi,i=l/—1i=l
(6.5)
(6.5)
gо 2看十甸九=.?弘.
/ —1/ = 1
Решая систему линейных уравнений, находим а0 и си, удовлетворяющие условию (6.4):
п及"
п £%
/=1i=l
Алгоритм вычислительного процесса аппроксимации результатов наблюдений линейной эмпирической формулой показан на рис. 6.2, где через А, В, С и D обозначены соответствующие накапливаемые суммы.
Пример 6.2. Требуется построить эмпирическую формулу буксования трактора Т-4А на стерне в зависимости от усилия на крюке по экспериментальным данным, приведенным в табл. 6.1.
Таблица 6.1
Усилие на крюке, кг (х<)
200
400
600
800
1000
Буксование трактора, % (у$)
2,2
5,0
8,3
10,1
12,3
Считая зависимость линейной, используем алгоритм рис. 6.2 и составим программу
DIMENSION Х(100), Y(100)
READ (5,1)N, (X⑴,Y(I), 1=1,N)
1 FORMAT (12/(10(14, F4,l)))
A=0
B = 0
C = 0
D = 0
DO2 1 = 1,N
A=A+X(I)
B = B+Y(I) C=C + X⑴ **2
2 D = D + X(I)*Y(I)
A0= (N*D—B*A)/(N*C—A**2)
A1 = B/N—A0*A/N
WRITE (6,4) AO, Al
4 FORMAT (30X, ‘ФОРМУЛА БУКСОВАНИЯ ТРАКТОРА T-4A' /30Х,' Y」=‘,
* F8.4/ X— 十」,F8.4)
STOP
END
Согласно оператору формата с меткой 4 машина напечатает
ФОРМУЛА БУКСОВАНИЯ ТРАКТОРА Т-4А у = 0.0126*Х + 0.0200
Контрольные вопросы
Что Вы знаете о математических методах, используемых при решении задач на ЭВМ, как их классифицируют?
Какие Вы знаете численные методы решения на ЭВМ инженерных задач?
Расскажите о методе итераций, постройте алгоритм и программу на алгоритмическом языке для реализации метода итераций.
Расскажите, когда и как применяется аппроксимация функций по способу наименьших квадратов? Поясните работу алгоритма и программы аппроксимации линейной и квадратичной функций.
Глава 7ЗАДАЧИ ОПТИМАЛЬНОГО УПРАВЛЕНИЯИ МЕТОДЫ ИХ РЕШЕНИЯ
ОБЩИЕ СВЕДЕНИЯ О ЗАДАЧАХ ОПТИМИЗАЦИИ
Известно, что управление — это выработка и осуществление воздействия на объект или процесс (в нашем случае — производственный) с целью поддержания, улучшения функционирования и развития этого объекта. При управлении приходится прежде всего решать задачу выбора управляющих воздействий из множества возможных (допустимых), при которых достигалась бы цель функционирования объекта. Однако в реальных производственных условиях ставится задача не просто управлять, а управлять наиболее целесообразным способом и выбирать «лучший» вариант управления, целесообразность которого оценивается специальным показателем——критерием оптимальности. Под «лучшим», т. е. оптимальным, управлением можно понимать такое управление, при котором, например, на производство продукции затрачивается наименьшее количество энергии, труда и сырья или при котором получают максимальную производительность труда, максимальную прибыль и т. д. Однако существует область допустимых и недопустимых вариантов управления. Область допустимых решений определяется тем, что при управлении не нарушены заданные ограничения. Такими ограничениями на производстве могут быть ограничения в трудовых ресурсах, сырье, технике, шлощадях, машинах, нормативах и т. д.
Таким образом, оптимальное — это такое управление, выбранное из числа допустимых, при котором достигается цель управления (выполняется программа функционирования управляемого объекта) наивыгоднейшим путем, оцениваемым критерием оптимальности. Принимать решение по управлению приходится в условиях возмущающих воздействий на систему, выводящих ее из устойчивого оптимального режима. В широком смысле в область задач оптимального управления входят задачи оперативного планирования, прогнозирования, анализа. Задачу оптимального управления (в частности, оптимального планирования) поясним на примере.
Пример 7.1. Пусть имеется колхоз. Его посевная площадь составляет 1000 га. На этой площади необходимо посеять два вида культур: Л и В. На период сева колхоз располагает трудовыми ресурсами в 2,5 тыс. человеко-дней. Колхозу установлен план продажи государству культуры Л не менее 800 т. Затраты труда на посев составляют: культуры Л и В ——0,5 и 4,7 человеко-дней на 1 га. Предполагаемый доход от продажи государству: культуры А — 100 руб. с 1 га и В — 250 руб. с 1 га. Урожайность культуры Л — 2 т с 1 га. Определить, какую часть площади нужно засеять культурой Л, а какую ——культурой В, чтобы колхоз получил максимальный доход.
Сформулируем математическую постановку задачи. Обозначим через %i и %2 неизвестные (искомые) посевные площади под культуры А и В соответственно. Критерием оптимизации здесь является максимум дохода:
z =二 100 尤]-250%•》一max.
Исходя из полученного уравнения, ,которое называется целевой функцией (или функцией цели), выгодно засеять всю площадь культурой В. Однако для этого не хватит трудовых ресурсов. Кроме того, государству ,нужно продать не менее 800 т культуры А. Составим уравнения ограничений:
по площади%1+%2&1000 га
по трудовым ресурсам 0,5%i + 4,7х2^2500 человеко-дней
п0 плану2修?800 !
Для наглядности поиска оптимального варианта решения задачи рассмотрим ее геометрическую интерпретацию (рис. 7.1).
Рнс. 7.1. Геометрическая интерпретация задачи линейного программирования
В двухмерном пространстве с координатными осями %i и х2 построим ограничения, связанные с землей, трудом и планом. Поскольку нас могут интересовать только положительные значения переменных %i》0, %2^0, выбирается 1-я четверть пространства. С учетом всех ограничений получена область допустимых решений, которая обозначена штриховкой (область 4——В——С——D).
Приняв некоторое значение целевой функции z, построим ее уравнение и обозначим направление перемещения ее в сторону максимума. Максимальное значение Zmax получим, если уравнение целевой функции пройдет через точку С, являющуюся одной из вершин области допустимых решений.
Рассмотренный пример относится к задаче оптимального производства и в общем виде имеет следующую постановку. Имеется m видов ресурсов: S】,S2,..., Sm (земля, сырье, рабочая сила, сельскохозяйственная техника и т. д.) в количествах соответственно: 仇,&2,. - •, bm. С помощью этих ресурсов может производиться п видов продукции: 〃i, 〃2, •••,〃п・ Известна норма затрат а订 каждого t-ro вида ресурсов на единицу каждого /-го вида продукции, где t= 1, т, /= 1, п, а также удельный доход с; от реализации каждого /-го вида продукции. Требуется определить, какое количество каждого /-го вида продукта надо произвести, чтобы получить максимальный доход.
Обозначим через 尤厶 /= 1, п количество продуктов 〃八 которые запланируем. Выразим полный доход z, получаемый от производства запланируемых количеств xj всех видов продукции:
z = QX] + с?х? + ... + спхп ―* max.
Чтобы на запланированное количество продукции хватило ресурсов, накладывают следующие ограничения:
+ а12х2 + •…千 alnxn
&21%1 +。22尤2 + • • * + ^2Л 力2;
amiXl + ^М2%2 + • • • +a加也尤也《忆・
Наконец, необходимо учесть условия неотрицательности переменных:
Таким образом, математическая постановка задачи формулируется следующим образом:
найти максимум функции
г т гпах(7.1)
при соблюдении ограничений
У а//《&, Z = 1,/п (7.2)
и неотрицательности переменных
х7>0, / (7.3)
Геометрически такая задача представляется уже в л-мерном пространстве. Область допустимых решений образует многогранник. Оптимальное решение находится в одной из вершин этого многогранника. Сформулированная задача является задачей линейного программирования.
Итак, в результате решения задачи оптимального управления из множества возможных вариантов должен быть выбран оптимальный вариант. В ряде задач выбор оптимального варианта представляет определенные трудности. Сложность такого выбора покажем на следующем примере.
Пусть требуется посетить в районе 20 хозяйств. Необходимо определить оптимальный маршрут следования по критерию минимального суммарного пути проезда. Как можно было бы поступить? Можно найти все варианты маршрутов, по каждому определить суммарную длину пути и выбрать маршрут с минималь^ ным расстоянием. Можно показать, что количество вариантов ^ будет равно факториалу от количества хозяйств: ^ = 20!^ 弋2,4・1°18 Если по каждому маршруту определять на ЭВМ величину суммарного пути со скоростью 0,01 с, то для отыскивания оптимального маршрута потребуется 800 млн. лет непрерывной работы машины. Следовательно, для решения такой задачи в приемлемые сроки необходимо применять специальные математические методы и вести целенаправленный перебор вариантов.
Трудность решения задач оптимального управления производственно-экономическими системами определяется не только тем, что существует необозримое множество решений, но и сложностью самих условий, в которых приходится принимать решения по управлению:
сложность (в том числе и нелинейность) связей параметров управляемой системы и окружающей ее среды. Математическая модель системы будет иметь соответствующие сложные зависимости между переменными;
стохастичность параметров управляемой системы и окружающей среды. В природе и жизни, в том числе в производстве (особенно в сельском хозяйстве), явления и процессы в большей степени носят случайный (стохастический) характер. Следовательно, в модели системы будут параметры и зависимости, имеющие вероятностную характеристику;
неполнота информации об управляемой системе и окружающей среде, т. е. отдельные параметры в модели системы не известны;
конфликтность ситуаций, в которых приходится принимать решения. Конфликтность характерна тем, что значения параметров системы зависят не от нас, а от активно противодействующей нашим решениям системы и среды. Такие задачи характерны для конфликтной борьбы и описываются методами теории игр (игровыми моделями).
Для решения на ЭВМ большого разнообразия задач оптимального управления созданы и продолжают разрабатываться различные математические методы (теории), с помощью которых строятся те или другие математические модели управления сложными инженерными, экономическими и производственно-техническими системами.
Математической дисциплиной, наиболее полно изучающей и разрабатывающей методы решения задач оптимального управления (выбора «наивыгоднейшей» операции), является теория исследования операций. Задача исследования операций состоит в том, чтобы выбрать (аналитическим путем определить) из множества допустимых решений (операций) такое оптимальное решение, при котором целевая функция (критерий оптимальности) обращается в экстремум (минимум или максимум). Допустимые решения определяются заданными ограничениями. Теория исследования операций включает ряд математических дисциплин и методов: математическое программирование, теорию вероятностей, теорию игр, сетевое планирование и др.
Математическое программирование — раздел прикладной математики, разрабатывающей теорию и методы решения условных экстремальных задач. Последние отличаются от экстремальных задач классического анализа наличием неравенств среди ограничений. Область оптимального решения таких задач может находиться не в экстремуме самой функции, а на границе зоны допустимых решений (на ограничениях). Из методов математического программирования наиболее широкое распространение при решении задач оптимального управления производственно-экономическими системами получило линейное программирование.
Линейное программирование — раздел математического программирования, в котором решаются задачи отыскания максимума (минимума) линейной функции z при линейных ограничениях в виде равенств или неравенств (7.1——7.3、. К задачам линейного программирования, успешно решаемым hs ,ВМ, можно отнести задачи оптимального планирования производства, транспортные задачи, задачи оптимальной загрузки оборудования, технико-экономического 'планирования, оптимального размещения и специализации сельскохозяйственного производства, оптимальной структуры и доукомплектования МТП, оптимальной структуры посевных площадей, оптимальной структуры стада крупного рогатого скота, оптимизации кормовых рационов животных и многие другие задачи. Для решения задач линейного программирования на ЭВМ широко используется симплекс-метод, а для транспортных задач — более простые методы, например метод потенциалов.
Задачи, в которых на значения всех или части переменных величин наложены требования целочисленности, решаются методами целочисленного программирования. При наличии коэффициентов и зависимостей, имеющих вероятный характер в уравнениях целевой функции или ограничениях, задачи решаются методами стохастического программирования. Специальный класс задач, в которых минимизируемая функция квадратичная, а ограничения линейные, требует применения методов квадратичного программирования. Пошаговые процессы поиска решения во времени или пространстве выполняются с использованием методов динамического программирования.
Теория вероятностей ——математическая наука, изучающая закономерность случайных массовых явлений. Вероятность—числовая характеристика степени возможности появления какого-либо определенного события в тех или иных определенных повторяющихся условиях. С помощью теории вероятностей решаются такие задачи, как планирование сроков и продолжительности проведения всех механизированных работ (поскольку наступление сроков сева, уборки и др. является случайным); планирование технического обслуживания машин (приходится учитывать вероятность отказов машин и агрегатов); планирование поставки запасных частей и ремонтных материалов, узлов, инструментов и т. л.; планирование текущих и капитальных ремонтов (случайность величины годового объема механизированных работ).
Методы теории вероятностей совершенно необходимы при конструировании и технико-экономической оценке сельскохозяйственных машин и агрегатов, так как большинство рабочих процессов и параметры обрабатываемых материалов являются стохастическими, например размеры семян и корнеклубнеплодов, местоположение корнеклубнеплодов в почве, высота стеблестоя зерновых культур, удельное механическое сопротивление почвы при обработке, влажность почвы и продуктов урожая, износ деталей и узлов машин и т. д.
Учет вероятностного характера процессов при управлении привел к созданию специальных методов, таких, как теория массового обслуживания, теория надежности и восстановления, корреляционный и дисперсионный анализ, метод статистических испытаний и т. д. 「
Теориям кассового обслуживания (теория очередей)—раздел прикладной математики, который изучает процессы, связанные с удовлетворением массового спроса на обслуживание какого-либо вида, с учетом случайного характера спроса и обслуживания.
Метод статистических испытаний (метод Монте- Карло)—численный метод решения задач при помощи моделирования случайных событий.
Теория надежности и восстановления — раздел теории вероятностей, который изучает системы с отказами и устанавливает количественные связи между надежностными парамет-
рами такой системы. Надежность ——способность системы сохранить свои свойства (безотказность, ремонтопригодность, восстанавливаемость и др.) на заданном уровне в течение заданного промежутка времени при определенных условиях эксплуатации.
Математическая статистика ——раздел прикладной математики, разрабатывающей математические методы изучения массовых явлений, т. е. систематизации, обработки и использования статистических данных. Теория вероятностей в отличие от математической статистики изучает не любые массовые явления, а только вероятностные.
Производственные функции — экономико-математический метод, (который устанавливает количественные зависимости параметров производственных процессов и используется для определения влияния отдельных факторов на результаты про-изводства.
Метод сетевого планирования (сетевое планирование и управление — СПУ) —логико-математический метод, в основу которого ^положено графическое (топологическое) изображение производственного плана в виде сети с узлами. Такой план последовательно-параллельных работ можно рассчитывать на ЭВМ. Метод позволяет решать ряд задач (планирования. Одна из основных задач — определение критического пути. Под критическим путем понимают такую последовательность технологически взаимосвязанных работ от начала до окончания всего плана, которая имеет максимальную продолжительность.
Теори я управления запасами ——раздел прикладной математики, изучающей системы, связанные с накоплением, выдачей и пополнением запаса.
Теория игр (игровые методы обоснования решений)——математическая дисциплина, устанавливающая количественные закономерности в конфликтных ситуациях. Под конфликтом понимается ситуация, в которой 'сталкиваются интересы двух и более сторон, преследующих разные цели.
ЗАДАЧИ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
Ниже приводится ряд наиболее характерных задач но вопросам механизации, электрификации в сельскохозяйственном производстве, решаемых методами линейного программирования. Среди этих задач большое распространение нашли задачи оптимизации структуры машинно-тракторного парка. Большая разнородность технологических операций и наличие разных природных зон обусловили наличие значительного числа типов тракторов и сельскохозяйственных маш<ин. Для каждой отдельной операции применительно к условиям данного хозяйства всегда можно указать лучший из возможных агрегатов. Но так как трактор используется не на одной, а на многих операциях, в том числе м на тех, где агрегат с данным трактором не самый эффективный, то ставится задача определить такой состав машинно-тракторного парка, который был бы наиболее экономичен во всей совокупности техноло-
гических операций сельскохозяйственного производства. Различают два вида задач по определению структуры машинно-тракторного парка (МТП): определение перспективной структуры МТП (задача перспективного планирования) и выбор оптимального доукомплектования существующего МТП (задача текущего планирования) .
Определение перспективной структуры МТП
Пример 7.2. Для природно-климатической зоны совхоза наиболее перспектавяыми на предстоящие 5——8 лет являются тракторы типа К-701М, Т-4А, ДТ-75М, МТЗ-80. На основе анализа технологических карт при перспективной структуре посевных площадей был построен график машиноиспользования этих тракторов. В результате были выделены три напряженных периода проведения сельскохозяйственных работ: весенний период (продолжительность 10 дней), летний (продолжительность 10——15 дней) и осенний (продолжительность 25 дней). Расчет оптимальной структуры МТП ведется по наиболее напряженным периодам проведения сельскохозяйственных работ (табл. 7.1).
Таблица 7.1
Объемы и сроки выполнения работ в напряженные периоды
Периоды и работы
Объем работ, га
Сроки выполнения, дней
физических
условных
га
в день
1
2
3
4
5
Весенний по всем работам
13 500
10
1
350
в том числе:
закрытие влаги
18 000
—
6
3 000
предпосевная культивация
15 000
—
5
3
000
сев зерновых
15 0С0
—
6
2
500
Летний по всем работам,
—
10 000
15
660
в том числе междурядная
обработка
1 800
—
8
225
Осенний по всем работам,
30 000
25
1
200
в том числе вспашка зяби
17 000
—
25
680
Из технологических карт расчетным путем определена средняя сменная выработка агрегатов, скомплектованных с данными тракторами на всех операциях с учетом зональных особенностей хозяйства (табл. 7.2).
Условия хозяйства позволяют обеспечить только односменную работу агрегатов. Из технологических карт рассчитаны годовые приведенные затраты на каждый трактор. Они равны: К-701М— 17 000 руб., Т-4А — 9000 руб., ДТ-75М — 6500 руб., МТЗ-80 — 3500 руб.
1个21个2Требуется определить перспективную структуру МТП (количество 力з каждого /-го типа тракторов), чтобы выполнить все сельско-
1个2
1个2
хозяйственные работы в заданные агротехнические сроки при минимуме суммарных годовых приведенных затрат.
Таблица 7.2
Выработка на трактор, га в смену
К-701М
Т-4А
ДТ-75М
МТЗ-80
Выработка в га условной
пахоты
18
10,2
7
4,2
Закрытие влаги
S0
47
32
Предпосевная к)гльтивация
75
45
31
Сев
9G
50
35
Междурядная обработка
пропашных
—
一
12,5
Вспашка зяби
14
7产
5,5
—
Обозначим: искомое количество тракторов в оптимальной структуре: Xi —тракторов типа К-701М, х2 — Т-4А, х3 — ДТ-75М, Ха — МТЗ-80. Тогда суммарные годовые приведенные затраты составят:
2= 170СС % 十 90co*2 + 6500左十 3500也min, (7.4)
Поскольку оптимальность структуры МТП определяется по минимуму полученной функции, то выражение (7.4) и будет целевой функцией.
По данным табл. 7.1 и 7.2 можно написать следующие неравенства:
12修 + 10,2/+ 7% + 4,2修〉1350,(7.5, а)
т. е. объем работ в гектарах условной пахоты, который могут выполнить за смену все тракторы, должен быть не меньше объема работ, который нужно выполнить за смену по агротехническим условиям (для весеннего напряженного периода);
80 X] + 47 不 + 32 x3 > 3000 '
75rl + 4 5无2 4- 31 x3 > 3000 ■(7.5,6)
96 必 + 50 & 十 35 %〉2500
т. е. тракторы, которые используются на операциях закрытия влаги, предпосевной культивации и сева зерновых, должны обеспечить выполнение объема этих работ в смену не меньше, чем нужно выполнить по агротехническим требованиям.
Рассуждая аналогично, напишея неравенства и для других периодов сельскохозяйственных работ:
18 /+'10,2冷 + 7<+ 4,2 招》660,
(7国 6)(7国 6)12,5芻 >225,
(7国 6)
(7国 6)
18%+10,2无2+7% + 4,2鸠 > 1200, 14#1+7,6石 + 5,5 / >630.
И наконец, условие неотрицательности переменных:
尤 1》。;尤2〉°;力з > °;尤4 > °. (7*5, 2)
Итак, полученные выражения (7,4) и (7.5)——это математическая модель данной задачи. Теперь можно строить симплекс-таблицу (см. ниже) и готовить задачу для решения по стандартным программам. В общем виде полученная модель записана выоажениями (7.1)——(7.3), где а订——объем работы i-ro вида, выполняемый трактором /-го типа в смену; bi ——агротехнически обоснованная выработка, которую должны обеспечить все тракторы на i-й операции; Cj= Uj^-Ej^j — приведенные затраты на трактор /-й марки, 6— себестоимость годового содержания /-го трактора; Q — капитальные вложения (цена /-го трактора), т. е. приведенные затраты учитывают не только расходы на содержание имеющихся в хозяйстве машин, но и средства, необходимые для покупки новых машин; £н — нормативный коэффициент экономической эффективности.
Прежде чем готовить задачу к решению на ЭВМ, выясним, насколько точно данная математическая модель описывает реальную систему. Даже поверхностный анализ составленной модели позволяет выявить следующий ряд ее недостатков. Не учтены многие из операций, которые выполняют тракторы в хозяйствах, например уборочные, транспортные, в животноводстве и т. д. Не учтены затраты, связанные с приобретением необходимого шлейфа сельскохозяйственных машин. Не шредусмотрена возможность использования тракторов в 1,5; 2 или 3 смены. Не учтено то обстоятельство, что часть тракторов в период проведения сельскохозяйственных работ будет неисправна и т. д. Покажем, как можно внести в модель необходимые изменения, чтобы, исправить отмеченные недостатки.
В модели можно учесть все операции, на которых используются тракторы. Для этого нужно составить перечень всех работ и написать соответствующее количество уравнений (неравенств). Отвлечение части тракторов для работы в животноводстве и на транспортные работы можно учесть соответствующим коэффициентом по данной марке тракторов. Например, коэффициент 0,7 перед 尤4 в ограничениях будет показывать, что только 70% тракторов МТЗ-80 используется в полеводстве, а остальные ——в других отраслях производства.
Оптимальный -состав МТП, определенный без учета затрат на шлейф сельскохозяйственных машин, может быть далек от оптимального. Эти затраты необходимо учитывать обязательно. Покажем, как это можно сделать. На каждый трактор /-й марки для каждой f-й операции нужен определенный набор машин. Чаще всего в агрегат входят несколько сельскохозяйственных машин и сцепка для их агрегатирования с трактором. Обозначим приведенные затраты на агрегат к трактору /-й марки по i-й операции через
Зм〃-= U м/у + E“Kij. (7.6)
Тогда для всех т операций приведенные затраты на сельскохозяйственные машины к j-му трактору составят:
Зм/ — £ ^Mtj,(77)
а для Xj тракторов /-й марки затраты на шлейф сельскохозяйственных машин составят:
Зм产」=工产乂订勺,/ = 1, м.(7.8)
Поэтому целевая функция в матем атической модели задачи будет
Z+ Зм产(7.9)
Использование тракторов на отдельных операциях с коэффициентом сменности Кем можно учесть, вводя данный коэфф1ициент в соответствующие ограничения. Например, если на вспашке зяби планируется использовать тракторы в две смены (Ксм = 2), тогда ограничения будут иметь вид
2 • 14% + 2 . 7,6х2 + 2 . 5,5х3>680.
Тот факт, что часть тракторов в период проведения сельскохозяйственных работ будет находиться ъа обслуживании или в ремонте, можно учесть введением в модель коэффициента технической готовности
где Мнн — количество машино-дней инвентарных; Моб ——количество машино- дней в ремонте или на обслуживании.
Например, в период вспашки зяби агрегаты с тракторами имеют следующий Ктг: К-701М — 0,9; ДТ-75М — 0,9; Т-4А — 0,85;
МТЗ-80 —0,85..
Тогда ограничение на вспашке зяби с учетом Кем и Ктг будет иметь вид ,
2 • 0,9 • 14修十 2 • 0,85 • 7,6/ 十 2 • 0,9 • 5,5%〉6一0.
В математической модели можно учесть и другие всевозможные условия, в которых будет находиться реальная система, например, ограниченно'сть механизаторских кадров в хозяйстве можно ввести в модель уравнением
£Ксм产j&Z»(7.11)
где Zm——численность механизаторов в хозяйстве.
Выбор оптимального доукомплектования существующего МТП
В процессе эксплуатации часть тракторов и сельскохозяйственных машин списывается с баланса хозяйства, в течение каждого года хозяйство пополняется новыми тракторами и сельскохозяйст-
сельскохозяйственные машины приобре-сельскохозяйственные машины приобре-венными машинами, как правило, модернизированными или совершенно новых конструкций. Ежегодно меняется и объем работ, который должен выполнять МТП. Повышается культура земледелия, меняется структура посевных площадей в зависимости от поставленных в хозяйстве задач м т. д. Поэтому ежегодно перед инженерной службой хозяйства стоит задача доукомплектования
сельскохозяйственные машины приобре-
сельскохозяйственные машины приобре-
Марки тракторов
Количество тракторов
всего
подлежит списанию в текущем году
Т-4А
35
ДТ-75М
47
МТЗ-80
43
Таблица 7.3Таблица 7.3имеет возможность пополнятьимеет возможность пополнятьМТП, какие тракторы и сти в текущем году.
Таблица 7.3
Таблица 7.3
имеет возможность пополнять
имеет возможность пополнять
Пример 7.3. Пусть хозяйство имеет МТП, состав и структура которого приведены в табл. 7.3 и 7.4.
Объем и сроки выполнения работ в различные периоды года, а также выработку на трактор примем такими же, как и в предыдущем примере (см. табл. 7.1 и 7.2). Хозяйство
свой тракторный парк тракторами К-701М, Т-4А, ДТ-75М, МТЗ-80 и соответствующими недостающими сельскохозяйственными ма・ шинами. Порядок составления ограничений такой же, как и в предыдущем примере, только необходимо учитывать агрегаты, имеющиеся в хозяйстве, за вычетом агрегатов, подлежащих списанию.
Таблица 7.4
Типы агрегатов
Наличие сельскохозяА- ствеиных машин на начало года к трактору
Из них подлежит списанию в текущем году к трактору
Т-4А
1 ДТ-75М 1
МТЗ-80
Т-4А
ДТ-75М
мтз-eo
Плуги
34
40
7
5
1
Сеялочные агрегаты
35
41
10
3
3
Агрегаты для культивации
36
37
5
3
1
Агрегаты для боронования
35
44
5
—
Пропашные культиваторы
—
—
30
—
—
3
Обозначим количество тракторов, которое хозяйство должно приобрести в текущем году: Xi — К-701М, х2 — Т-4А, хз — ДТ-75М, %4 ——МТЗ-80. Тогда с учетом принятых обозначений можно написать следующую систему ограничений (для односменной работы тракторов): ' 】8 % + 10,2 (也 + 3 5 — 5) + 7 (% + 47 — 7) + 4,2 (х4 + 43 — 3)》1350,
£0心十 4 7(% 十 35 — 5) + 32 (х3 + 4 7-7) >3000,
75巧 + 45 (冷 +35 — 5) 4-31 (/ + 47—7) >3000,
96 尤1 + 50 (х2 + 35 — 5)十 35 (%* + 47 — 7)》2500,
18 / + 10,2 (& + 35 - 5) + 7 (% + 47 — 7) + 4,2 的 + 43 - 3) > 660,12,5 (爲+ 43 — 3) >225,
18%1 + 10,2(/+35 —5) +7(% + 47 —7) +4,2(芻 + 43 — 3)》1200,14/ + 7,6 施+ 35 —5) + 5,5 施 + 47 — 7) >680.
После преобразований и исключения перекрываемых ограничений имеем
18%1+ 10,2%2 + 7% + 4,2鳩 >603,
£0% + 47/ + 32х3 >310,
75 % + 45尤2 十 31 %》410,
18%1 + 10,2% + 7% + 4,2“ > 458,
14/ + 7,6 冷 + 5,5/ > 232.
В систему ограничений не вошли те операции, которые выполняются имеющимся парком машин.
Целевую функцию-минимум приведенных затрат запишем с учетом шлейфа сельскохозяйственных машин, которые нужно приобрести дополнительно к вновь приобретенным и имеющимся тракторам:
(7.12)
где уц—количество агрегатов i-ro типа к трактору /-й марки, которые имеются в хозяйстве за вычетом агрегатов данного типа, подлежащих списанию.
Для нашего 'Случая целевую функцию можно зависать так:
2 = £ с产j + Xj3M1 + (х2 一 30) 3?i 十(% — 33) З22 + (& — 34) 3?з + (也一
- 32) 324 + (尤3 - 35) 331 + (不3 - 38) 382 + • • * + (居-27) 345, где 3i)— затраты иа агрегат для i-ro вида операций к j-му трактору.
Так как в хозяйстве нет тракторов К-701М и шлейфа машин к этому трактору, то в целевую функцию не включаются все тракторы и весь шлейф сельскохозяйственных машин к ним. Итак, построена модель задачи. Она сведена к модели линейного программирования и может решаться по стандартным программам симплекс-
метода.
Расчет электрических схем
Пример 7.4. Требуется обеспечить стабилизац1ию напряжения в пределах от Um = 36 до。曜=40 В на нагрузке Rh=400 Ом в схеме стабилизатора напряжения на кремниевом стабилитроне 168
использоватьиспользовать(рис. 7.2), если входное напряжение Ubx изменяется от (7вх1=40 до Ubx2=48B. Предполагается— 一
использовать
использовать
AAРис. 72 Схема стабилизатораРис. 72 Схема стабилизатораR.R.с параметрами: 4=39 В,= =18 Ом, io=O,Ol А, 1?п=0,15 А. Требуется рассчитать сопротивление резисторов R。и Ri, если за критерий эффективности работы схемы принята минимальная мощность, рассеиваемая на этих резисторах.
A
A
Рис. 72 Схема стабилизатора
Рис. 72 Схема стабилизатора
R.
R.
иа-иа-Напишем уравнение Кирхгофа для контуровпряжения
иа-
иа-
(U()f г ст) f R], fRh и t/вх —RofR].—*Rh • Uo + »()r CT —/h(Rh+RJ =°, Ubx — R。&т +,н) —,н (Rl + RJ — °.
Решим уравнение относительно R\ и R)
Ri = (UО + 'ст厂ст 一 厶凡)/ /н = (。0 + ’с"ст — Uh) RJU^i,
Ru = IUbx —」h (% + Rh)] / (/ст + /н) = [Ubx — Uh (&/& +0]/ &t + + %/&)•
Запишем полученные уравнения для двух предельных значений питающего напряжения U^x
Rlmln(U()+ i()rст 一 UHl) Rh / UhI,
Rimax ~ (U()+,幫ст — UQ Rh / 〃h2,
Romin =【Ubx1 — Uri (RJRh + 】)]/ 伍 + 4丿&),
Fornax = Wbx2 — 〃н2 (&/Rh + D】/ Gm 十 4/&),
ГДе Rimln, Romln В реЖНМе минимумэ: Ubx=Ubxi, Uh = Uh[, icт = t'o> Rimax, Roma в режиме максимума: Ubk = Ubm, UlUh?, icT = im.
Подставим в уравнения численные значения параметров
Rimm 匸(39 十 0,01 • 13 — 36) 400/36 = 35,3 Ом,
Rin^= (39 + 0,15- 18 -40) 400/40 = 17 Ом,
Romm = [40 — 36 (&/400 + 1)]/ (0,01 + 36/400) =40 - 0,9 &
Romax = [48 - 40 (Ri/400-h 1)]/(0,15 + 40/400) = 32 — 0,4 %.
Теперь можно составить ограничения для R。и R
&《35,3 R〉17 R。>40 — 0,9 & }(7.13, а)
R&32 —0,4% Ri》0;凡>0
Таким образом, если будут выполняться полученные неравенства, то схема будет обеспечивать стабилизацию напряжения в заданных пределах. Ограничения предлагают некоторую свободу выбора номинальных значений резисторов Ri и R°.
Согласно условию задачи критерием качества работы системы является минимальная мощность Р, теряемая на резисторах Ri и Ro
Р = (J + /尸弋)+ /"hRi f min.
Примем для расчета средние значения токов /Ст = 0,15А, /н=0,1А. Тогда уравн^ие целевой функции будет
Р = 0,0625 凡十 0,01 &f min.(7.13, б)
Итак, выражения (7.13) —искомая математическая формулировка данной задачи. Она сведена к модели линейного программирования, для которой существуют стандартные программы.
Расчет механической системыПример 7.5. Платформы, на которых могут быть размещены равномерно распределенные грузы хь хг, %з, подвешены соответственно на тросах А и В, С и D, Е и F. Геометрические размеры платформы и схема их подвески показаны на рис. 7.3. Известно, что предельная нагрузка для тросов А и В составляет 1 тонну, для тросов С и D — 3 тонны, для тросов Е и F — 6 тонн. Требуется определить максимальное количество груза, которое может быть размещено на всех трех платформахz %] + %2 + ”84^ max,(7.14, а)Расчет механической системыПример 7.5. Платформы, на которых могут быть размещены равномерно распределенные грузы хь хг, %з, подвешены соответственно на тросах А и В, С и D, Е и F. Геометрические размеры платформы и схема их подвески показаны на рис. 7.3. Известно, что предельная нагрузка для тросов А и В составляет 1 тонну, для тросов С и D — 3 тонны, для тросов Е и F — 6 тонн. Требуется определить максимальное количество груза, которое может быть размещено на всех трех платформахz %] + %2 + ”84^ max,(7.14, а)匸 6 二匸 6 二1212хгтТТГТГГТт^хгтТТГТГГТт^44А ^тт^А ^тт^ввDDРис. 7.3. платформ: тросы, %】,Рис. 7.3. платформ: тросы, %】,Х1СхемаА, В, С,Х1СхемаА, В, С,подвески D, Е, F-подвески D, Е, F-%2, %з一вес груза; еры в метрах%2, %з一вес груза; еры в метрах
Расчет механической системы
Пример 7.5. Платформы, на которых могут быть размещены равномерно распределенные грузы хь хг, %з, подвешены соответственно на тросах А и В, С и D, Е и F. Геометрические размеры платформы и схема их подвески показаны на рис. 7.3. Известно, что предельная нагрузка для тросов А и В составляет 1 тонну, для тросов С и D — 3 тонны, для тросов Е и F — 6 тонн. Требуется определить максимальное количество груза, которое может быть размещено на всех трех платформах
z %] + %2 + ”84^ max,(7.14, а)
Расчет механической системы
Пример 7.5. Платформы, на которых могут быть размещены равномерно распределенные грузы хь хг, %з, подвешены соответственно на тросах А и В, С и D, Е и F. Геометрические размеры платформы и схема их подвески показаны на рис. 7.3. Известно, что предельная нагрузка для тросов А и В составляет 1 тонну, для тросов С и D — 3 тонны, для тросов Е и F — 6 тонн. Требуется определить максимальное количество груза, которое может быть размещено на всех трех платформах
z %] + %2 + ”84^ max,(7.14, а)
匸 6 二
匸 6 二
12
12
хгтТТГТГГТт^
хгтТТГТГГТт^
4
4
А ^тт^
А ^тт^
в
в
D
D
Рис. 7.3. платформ: тросы, %】,
Рис. 7.3. платформ: тросы, %】,
Х1
СхемаА, В, С,
Х1
СхемаА, В, С,
подвески D, Е, F-
подвески D, Е, F-
%2, %з一вес груза; еры в метрах
%2, %з一вес груза; еры в метрах
Напишем уравнения моментов относительно точек присоединения соответствующих тросов к платформам
Me = 1 Ra + 3 Rc + 4x3 — 8Rf = 0,
Mf = 7Ra + 5Rc + 4x3 — 8Re = 0,
Me — 2Rb + 3/ — 6Rd = 0,
Md ~ 4Rb + 3修一6Rc = 0,
Ma = 2尤 1 — 4Rb =。, Mb = 2%i — 4Ra = 0, где Ra, Rb, •••?Rf—силы натяжения соответствующих тросов А, В….,F. 170
Решим полученные выражения по отношению сил натяжения и заменим их предельными нагрузками на тросы согласно условиям задачи Ra,bWL Rc,dW3, Re,fW6. В результате получаем систему ограничений
//+g&《3(7.14,6)
з, з . 1一
1616 22 3
备看 + "^马+ }/《6,
%1 ^> 0, %2 ^5 °,无3 ^! °.
Анализируя выражения (7.14), видим, что поставленная задача является задачей линейного in рогр а м м«р о в а ни я, имеет множество допустимых решений, среди которых имеется оптимальное. Действительно, если мы максимально нагрузим нижние платформы, получим: Х[ = 2 т,尤2 = 4,67 т, %з = 6,5 т. А если максимально загрузим верхнюю платформу, будем иметь: %i = 0, %2=0, %з=12 т. В первом случае суммарный вес будет 2= 13,7 т, во втором — 2= 12 т. Применив метод линейного программирования, получим по стандартным программам оптимальное решение 打=0, Хг=6, х3= =8,25 Т, 2опт= 14,25 т.
Симплекс-метод для задач линейного программирования
Задача, сформулированная в виде уравнений (7.1)——(7.3) представляет собой так называемую общую (стандартную) задачу л'и- нейного программирования, решаемую на ЭВМ по стандартным программам. Беля ограничения представить в виде равенства, будет иметь место «каноническая» задача. Канонической задачей линейного программирован!ия называется задача отыскания максимума (или минимума) линейной функции (7.1) при ограничениях-равенствах
2 %№= Z = 1, /п(7.15)
и при условии (7.3) неотрицательности переменных.
Каноническая задача имеет смысл только тогда, когда п (число неизвестных переменных) больше т (числа уравнений). Действительно, если число уравнений больше числа неизвестных, то либо
эти уравнения линейно зависимы, и тогда часть из них можно отбросить, либо эти уравнения противоречивы и не существует ни одного допустимого решения. Если же ч-исло линейно-независимых уравнений равно числу неизвестных, то существует единственное решение и не возникает задачи отыскания экстремума (7.1).
Неравенство п>т в канонической задаче обусловливает множество решений системы уравнений (7.15). Среди множества решений существуют так называемые базисные решения, которые строятся следующим образом. Среди п выбирают т ^(по числу уравнений) неизвестных, по которым образуют базис. Все остальные п—т, не вошедшие в число отобранных, полагают равными нулю и называют небазисными (свободными) неизвестными. Существует множество вариантов выбора базиса. Число таких вариантов равно以叫
Базисное решение системы уравнений (7.15) будет допустимым (опорным), если все базисные переменные неотрицательные: Xj^O. Следовательно, допустимым решением (планом) называют любой набор переменных 尤力 удовлетворяющих ограничениям (7.2) и (7.3). Решение задач линейного программирования заключается в том, чтобы среди всех опорных базисных решений выбрать такое, при котором целевая функция (7.1) достигает максимума (или минимума).
Наиболее распространенным методом решения задач линейного программирования канонического вида (7.15) является симплекс-метод. Процедура симплекс-метода заключается в последовательном вычислении точек, находящихся в вершинах многогранника, образующего область допустимых решений. Последовательность вычислений выполняется таким образом, что значения целевой функции при каждом следующем результате строго возрастают. Поэтому симплекс-метод часто называют методом последовательного улучшения плана.
Это свойство -симплекс-метода приводит к тому, что просматривается лий1ь часть решений из общего числа и благодаря этому за приемлемое время можно решить задачи с большим числом переменных (несколько сотен или тысяч). Целенаправленный переход от одного допустимого решения к другому (от одной вершины многогранника к другой) осуществляется при этом за счет изменения состава базисных и небазисных переменных по специальным правилам.
В целом в решении задач с им плекс- м етодом можно различить три этапа: нахождение первоначального базисного решения и формирования исходной симплекс-таблицы; определение допустимого решения (опорного); определение оптимального решения.
Суть преобразований симплекс-метода рассмотрим на конкретном примере только для задач отыскания максимума целевой функции. Любую задачу минимизации можно превратить в задачу поиска максимума, воспользовавшись соотношением min 2 = = max(—a).
П р 'и м e p 7.6. Пусть дана общая задача линейного программирования с условиями
*1 + 10%2 > 10,
%1 + %2》* 2,
石 + 2*2 & 8,勺》0,/=(1,2)г = 2/ 4- х2 -> max.
Этап 1. Преобразуем ограничения в каноническую форму, вводя дополнительные переменные Хз, Х4, Х5, и превратим неравенства в равенства
%1 + 1 0%210+%3,
心+心=2+芻,%上+ 2% == 8%5.
Примем в качестве базисных переменных %з, %4, %з・ Выразим их через свободные неизвестные Xi и х2
Хд = 1 0 + Х^ + IO%?,
& = — 2 + Xi + х2,无5 = 8 —%1 -- 2修,z 2X] +/.
Преобразуем эти уравнения в удобный вид для получения исходной сим^плекс-таблицы
%з — 10 — (— %i — 10x9),
尤4 = — 2 — (— Xj — Л:?),7 16、
尤5 = 8 — (Xj + 2х2),
N 0 - ( — 2%1 — %2)•
Полученную систему уравнений (7.16) запишем в виде исходной симплекс-таблицы 7.5.
Таблица 7.5
Базисные переменные
Свободный член
Свободные переменные
修
*2
Хз
一 10
一 1
х4
一2
一 1
一 1
Х5
8
1
2
2
0
-2
-1
Приравниваем свободные переменные нулю и видим, что данное решение (табл. 7.5) недопустимо, так как при х1 = х2 = 0 имеем %з =—10V0 и %4=—2Vo.
Этап 2. Так как допустимым решением является любое неотрицательное решение (при котором все 修》0), то это значитг что столбец свободных членов не должен содержать отрицательных элементов.
Для нахождения допустимого решения меняют местами базисные и свободные переменные. С этой целью находят так называемый разрешающий элемент (в табл. 7.5 он взят в рамку) по следующему правилу: в строке огрицательного свободного члена находится любой отрицательный коэффициент, который образует разрешающий столбец; находят отношение свободных членов к коэффициентам разрешающего столбца (кроме 2-строки). Наименьшее положительное отношение в данном разрешающем столбце определяет разрешающий элемент. Если в строке отрицательного свободного члена нет отрицательных коэффициентов, то задача неразрешима. В табл. 7.5 разрешающим столбцом может быть как столбец 整,так и х2. Выберем столбец с 打,находим: -10 1 一2 с 8 .
-10 ,-1 ,2 '
Наименьшее положительное отношение —10/—10 определяет разрешающий элемент ——10 . Определив разрешающий элемент, строят следующую таблицу, в которой меняют местами переменные, входящие в строку и столбец разрешающего элемента, т. е. %з и %2, отмеченные в табл. 7.5 стрелками.
Коэффициенты новой табл. 7.7 находят по коэффициентам старой, используя выражения, приведенные в табл. 7.6, где。仃一 элемент 'старой таблицы, а订⑴——элемент новой таблицы; k — индекс разрешающей строки; s ——индекс элементов разрешающего столбца.
Таблица 7.6
Элементы
Элементы таблицы
старой1новой
Разрешающий
Разрешающей строки Разрешающего столбца Все остальные
Qfts(X ⑴ h*= 1/dha
Qhjd^^kj^^kj/^ka'
Uisа ⑴ £з= —di&ldkt
at}а⑴” =а门一diadhjldk»
Таблица 7.7
1
*i
也
尤2
1
1/10
一 1/10
x4
-I
1 9/- 1O|
1/一 10
x5
6
8/10
2/10
г
1
一 19/10
— 1/10
но, допустимое решение найдено:но, допустимое решение найдено:С 28—0, 2=—9С 28—0, 2=—9В табл. 7.7 снова не имеем допустимого решения. Поэтому по вышеописанным правилам (табл. 7.6) находим разрешающий элемент 9/10 и строим новую табл. 7.8, поменяв местами переменные строки и столбца разрешающего элемента (х< и Xi).
но, допустимое решение найдено:
но, допустимое решение найдено:
С 28
—0, 2=—
9
С 28
—0, 2=—
9
1
*41用
8/9
1/9
-1/9
Х1
10/9
一 10/9
1/9
%5
45/9
IMI
1/9
2
28/9
一 19/9
1/9
Таблица 7.8
В табл. 7.8 нет отрицательных свободных членов. Следователь
81045
Х2= —> Х1 = —, Х5= —-> %4 = %з =
9g9
.Проверим, является ли оно максимальным. Выпишем
из табл. 7.8 целевую функцию: z = ——( Х4+ ^хзу. Очевидно,
что за счет увеличения неизвестной %4 (перевода ее из свободной в базисную) значение целевой функции возрастает, так как при х4 стоит отрицательный (при закрытых скобках) коэффициент. Если бы при всех неизвестных в целевой функции стояли положительные коэффициенты, то было бы достигнуто максимальное значение z. Отсюда вытекает признак оптимальности допустимого решения: в г — строке симплекс-таблицы нет отрицательных коэффициентов.
Э т a in 3. Основная операция симплекс-метода заключается в том, что некоторая базисная переменная хд замещается на свободную переменную Эти переменные определяются разрешающим элементом afeS. При этом операция замещения всегда удовлетво
ряет следующим условиям:
значение целевой функции при новом опорном решении должно быть больше, чем на предыдущем;
новое решение системы должно быть также опорным (допу
стимым) •,
Первое условие выполняется, если разрешающий элемент положительный и выбран в столбце отрицательного коэффициента
Таблица 7.9
1
*
无2
2/8
一1/8
一 1/8
Xi
60/8
10/8
2/8
x4
46/8
9/8
1/8
2
122/8
19/81
3/8
г-строки. Второе условие выполняется, если разрешающий элемент находится как наименьшее положительное отношение элементов разрешающего столбца к соответствующим элементам столбца свободных членов. Таким элементом в табл. 7.8 является 18/91 . Пользуясь данными табл. 7.6 и 7.8, строим табл. 7.9.
Итак, в табл. 7.9 получено оптимальное решение: 尤2=2/8, %] = 60/8,尤4=46/8, %5 = %з=0, 2=122/8.
Исходя из рассмотренной последовательности схема алгоритма симплекс-метода должна иметь блоки: 1) нахождение первоначального базисного решения и формирование исходной таблицы; 2) отыскание разрешающего элемента (нахождение отрицательного свободного члена —仇<0 и минимального отношения 瓦/а仃); 3) (пересчет таблицы по формулам табл. 7.6; 4) проверку наличия отрицательного свободного члена. Если он есть, то возвращаются к пункту 2. Отсутствие отрицательного свободного члена означает, что получено допустимое решение; 5) аналогично пунктам
1Начало1НачалоРис. 7.4. Блок-схема реализации симплекс-методаРис. 7.4. Блок-схема реализации симплекс-метода)
1
Начало
1
Начало
Рис. 7.4. Блок-схема реализации симплекс-метода
Рис. 7.4. Блок-схема реализации симплекс-метода
2——4 выполняется пересчет таблицы при поиске оптимального решения. Структурная схема алгоритма симплекс-метода дана на рис. 7.4.
Подготовим задачу определения оптимальной структуры МТП (пример 7.2), используя симплекс-метод. Приведем ограничения (7.5) к каноническому виду, введя дополнительные переменные, общее число которых будет п= 12
18%1 + 10( 2%2 + 7%3 + 4,2務 一 % = 1350,
80尤1 + 47х2 + 32/ — / = 3000,
7 5%Т + 4 5融 + 31%3 — %7 = 3000,
9 6 厶 + 50х2 + З5х3 — % = 2500,
18/ + 10,2也 + 7%3 + 4,2芻一两=660,
12,5芻-元" =220,
l&Vi + 10,2х2 + 7%з + 4,2芻一Xu = 1200,14%т + 7,6尤2 + 5,5%з г 网2 = 68,
Целевая функция записана выражением (7.4).
Задача подготовлена к решению симплекс-методом. В системе программного обеспечения конкретной ЭВМ находим стандартную программу симплекс-метода.
ТРАНСПОРТНЫЕ ЗАДАЧИ
Постановка задачи. Транспартная задача (задача об опта- мальном плане перевозок) в общей постановке формулируется следующим образом. Имеется /п пунктов производства (хранения) однородного продукта, в каждом из которых находится соответственно 仪1,仪2;・・・,仪小 количества продукта. Имеется п пунктов потребления этого продукта, в каждый из которых требуется доставить соответственно 瓦,6?,…,6^ количеств продукта. Известны удельные затраты。叮,i=l,m, /= 1,/г на перевозку единицы продукта из каждого i-ro пункта производства в каждый /-й пункт потребления. Отыскивается оптимальный план перевозок, три котором суммарные транспортные затраты были бы минимальными.
Обозначим через х仃 количество продукта, доставляемого из ьго пункта производства в /-й пункт потребления. Тогда суммарные транспортные затраты, выражающие целевую функцию, будут
z = E Eq 产厂 min.(7.17)
Если общее количество производимого продукта равно общему количеству потребляемого 2。胃=£匕力 то систему ограничений составят равенства:
£初=ab»=厂成(7.18, a)
£修尸办 /(7.18,6)
В соответствии с условиями задачи обратные перевозки не допускаются
初>0.(7.18, в)
Если количество производимого продукта меньше потребляемого т п
WawVWbj, то система ограничений будет иметь вид
7=1 JT
W ^ij ==生,% 二二 1,次,(7.19,a)
X 而 V%, 7 = 1,厶 (7.19,6)
Условия транспортной задачи удобно представить в виде табл. 7.10, где А厶 i= \,т ——• пункты отправления груза (производства продукта), Bjt j— 1,п—пункты нааначения (потребления).
Таблица 7.10
Пункты отцрав- леаая
Пункты назвачеввя
鸟
4
•..
Хп
cu
Х12
Xi3
Cl3
%1 n
Qi
』2
Х21
31
Х22
c22
X2B
C23
X2n
C2n
■2
• ♦ ♦
%ml
Cml
Cm2
%m3
Cm3
Cmn
°m
办
瓦
匕2
力3
Ьп
лm
/=1 i=l
В таблицу в верхний правый угол соответствующей клетки записаны затраты на поставки — с^. В качестве показателя затрат могут использоваться расстояние, время, денежные или трудовые затраты и т. д.
Если мы теперь в соответствующие клетки таблицы будем проставлять численные значения х订(т. е. в клетку 1-1 численное значение хи, в клетку 1-2 —工後,:..,в клетку т-п — хтп), то обнаружим, что в таблице содержатся все уравнения математической модели (7.17) и (7.18).
Строки таблицы позволяют записать уравнения-ограничения баланса вывозимого груза из пунктов отправления, а столбцы — в пункты назначения (7.18). Сумма произведений Qj%灯 каждой клетки таблицы дает выражение целевой функции (7.17).
Частным случаем задач линейного программирования являются задачи распределения. Эти задачи обычно возникают тогда, когда имеется ряд операций (работ), которые можно выполнить различными способами, ресурсы обычно не заданы. Требуется выполнить все операции (работы) так, чтобы затраты были минимальными. В некоторых случаях ресурсы могут быть заданы. Тогда ставится задача так выполнить работы при заданных ресурсах, чтобы получить максимальную прибыль.
Пример 7,7. С двух полей совхоза нужно перевезти картофель в три картофелехранилища. На первом поле получено 1800 т картофеля, на втором поле ——2600 т. В хранилище № 1 нужно доставить 1000 т картофеля, в хранилище № 2 — 1200 т, в хранилище № 3 — 2200 т. Средние расстояния по существующим дорогам от каждого поля до хранилищ представлены в табл. 7.11.
Таблица 7.11
Номер поля
Расстояние до хранилища, км
1
2
3
1
20
20
30
2
30
40
20
Требуется определить такой план перевозок, при котором весь груз будет доставлен в указанных количествах в каждое хранилище с минимальным пробегом транспорта, исчисляемым в тонно- километрах.
Обозначим Xij ——количество груза, которое нужно перевезти с 1-го поля в /--е хранилище, i=(l, 2); /= (1, 2, 3). Тогда уравнения баланса перевозки картофеля (равенства-ограничения) будут иметь вид
"й + "]2 + х1з ^213 1830,“21 + “2 2 ""Н “23 == 2600,+ ^21 = 1000,“12 + “22 = 1200,+ %2з = 2200.
Критерий качества работы системы (целевая функция) запишется в виде уравнения.
г = 20хп 4- 20^12 + ЗОл13 + 30л21 + 40л22 + 20л2з 一 min.
Итак, полученные выражения есть математическая модель исследуемой системы. Для рассматриваемого примера используем запись в виде табл. 7.12.
Таблица 7.12
Пункты отправления
Пункты назначения
4
в*
4
В,
4
打1
20
%12
20
%13
30
1800
力2
%21
30
%22
40
%23
_0
2600
1000
1200
2200
4400
Открытая транспортная задача. Транспортные задачи, в которых пт
2 «/¥=2 bh(7.20)
У】 / =】
носят название открытых транспортных задач или транспортных задач с нарушенным балансом (уравнение 7.19). Открытая транспортная задача легко сводится к уже рассмотренной задаче (7.18) путем введения фиктивного пункта отправления (или назначения) с таким запасом (потребностью), при котором соблюдается условие баланса. При этом нужно ввести условия запрета вывоза груза из фиктивных пунктов отправления. Это достигается тем, что стоимость перевозок груза в фиктивные пункты или из них принимают равной нулю.
Распределение работ по маркам тракторов
Большое количество типов тракторов, имеющихся в хозяйствах, разнообразие технологических операций по возделыванию 'сельскохозяйственных культур вызывают значительные трудности при определении наилучшей расстановки. Задача может быть сведена к транспортной и решена с помощью методов линейного программирования. Действительно математическая модель может быть записана в виде уравнений-ограничений по (7.18) и целевой функции по (7.17), где л:刃——объем работ (га условной пахоты) на 1-й операции, выполняемой /-ми тракторами за время /; Ь『= ^n^Wjt ——объем работ (га условной пахоты), который может быть выполнен тракторами /-й марки за время /;仪修——объем работ (га условной пахоты), который необходимо выполнить на г-й операции за время 力;,门-—затраты (руб.) на выполнение i-ro вида операций работ j-м трактором; п^ ——количество тракторов /-й марки, имеющихся в хозяйстве; Wj — средняя дневная выработка (га условной пахоты) /-го типа трактора; t ——агротехнический срок выполнения операций (дней).
Пример 7.8. Хозяйство имеет состав тракторного парка: К-700А —5 шт.; Т-4А —30 шт„ ДТ-75М —40 шт.; МТЗ-80 —30 шт. (учитываются только МТЗ-80, занятые в полеводстве).
Нужно выполнить одновременно следующие виды и объемы работ: вспашку зяби ——13 000 га условной пахоты (10 000 Физических га); лущение стерни — 2000 га условной пахоты (10 000 физических га); сволакивание соломы — 2400 га условной 'пахоты (10 000 физических га). Агротехнический срок выполнения всех работ — 20 дней. Определить оптимальное распределение работ по маркам тракторов, если известно, что средняя дневная выработка с учетом надежности и сменности тракторов.: К-700А — 25; Т-4А — 20, ДТ-75М — 6, МТЗ-80 — 365 га условной пахоты. Затраты на выполнение работ (в рублях) данными тракторами по каждой операции представлены в табл. 7.13.
Таблица 7.13
Затраты (руб./га) для тракторов
Виды работ
К-700А
1 Т-4А
ДТ-75М
! МТЗ-80
Вспашка зяби
3,7
3,8
5,0
Лущение стерни
3,9
3,5
3,4
Сволакивание соломы
4,0
3,6
3,7
4,1
переменные в видемодели, из которойпеременные в видемодели, из которойуравнения задачи).уравнения задачи).легко можно составитьлегко можно составитьЗапишем исходные данные и искомые табл. 7.14 (табличная запись математической
переменные в видемодели, из которой
переменные в видемодели, из которой
уравнения задачи).
уравнения задачи).
легко можно составить
легко можно составить
Таблица 7.14
Виды работ
Тип тракторов
%
К-700А 1 Т-4A1 ДТ-75М
MT3-80
Вспашка зяби '
3,7
勿2
%I3
4,0
%14
5,0
13 000
Лущение стерни
3,9
%22
3,5
%23
3,4
尤24
5,7
2 000
Сволакивание соломы
x31
4,0
Х32
3,6
X33
3,7
Yr4
士
2 400
bi = rtjW jt
2 500
8 000
4 800
2 100
17 400
В таблице 尤订 ——объем t-го вида работ, выполняемый /-м типом тракторов;仪纟——общий обьем i-ro вида работ; Ь^ ——объем работ, который могут выполнить тракторы /-го типа. Задача сведена к транспортной и может решаться по стандартным программам.
Выбор схемы электроснабжения
Задача заключается в определении оптимальной (по минимуму суммарных приведенных затрат) схемы электроснабжения потребителей, т. е. от каких подстанций и какую мощность нужно
передавать к каждому потребителю. На стадии проектирования электрических сетей обычно известны мощности потребителей и возможность источников (центров) питания (подстанций), также расстояния от подстанций до потребителей.
При постановке задачи на проектной стадии можно принять с достаточной точностью, что мощность, передаваемая по электрическим сетям, пропорциональна токам с коэффициентом 丫3&・ Для данных условий в математической модели электроснабжения предприятий ограничения можно представить в виде
=_L£/='"2』=_L£/='"2』2-2-
=_L£/='"2』
=_L£/='"2』
2-
2-
где /仃——ток, потребляемый j-м потребителем с i-й подстанции; /j — суммарный ток /-го потребителя;厶——суммарный ток t-й подстанции.
Полученные выражения уже показывают возможность свести поставленную задачу к транспортной.
Как правило, номинальный ток подстанции больше суммы токов потребителей, питающихся с данной подстанции:厶>£/聞, i= lfm. Следовательно, имеет место открытая транспортная задача. Для приведения к нормальной транспортной задаче введем фиктивный пункт потребления с необходимым током и нулевым расстоянием от пункта питания.
В качестве критерия оптимальности принимают минимум приведенных затрат на сооружение и эксплуатацию электрической сети「
Зцр = & + ЕнК,
где Сэ — 3y/2Rti()-3 — стоимость потерь электроэнергии в проводах ЛЭП, руб./год; у — отпускная цена кВт-ч электроэнергии, руб.; / — ток в фазе ЛЭП, А; R = ^l/q — сопротивление фазы участка ЛЭП, Ом; р ——удельное сопротивление материала провода, Ом мм/м; / — длина участка, км; т — количество часов в году; ^= (a\-bq)l ——капитальные вложения, руб.; а, b ——расчетные коэффициенты; q ——сечение проводов ЛЭП, мм2; Ен ——нормативный коэффициент капитальных вложений.
Если выбор проводов ЛЭП выполнять по экономической плотности тока 厶,А/мм2, то / = 〃/ Тогда Сэ=3у! (idq) ^-103j т103 = = 3/зрт〃 = а〃, где а=3?гэрт ——постоянный коэффициент.
Таким образом, затраты для участка длиной I равны
Зпр = а// + / J (а 十 〃/J)-力〃 + %/,
где 6】=а+ЕнЬ/А,网=廃。・
Целевая функция для п участков будет
т пm 〃
Для достижения экстремального значения целевой функции достаточно минимизировать ее первый член (причем коэффициент можно не учитывать)
Z = 2 2 min. (7.22)
Итак, задача сведена к транспортной и может быть решена по стандартной программе.
Пример 7.9. В районе электрических сетей строятся четыре новых потребителя электроэнергии: Вь В2, &, &, питание которых может быть подано от трех подстанций (п/ст): Пь П2, Пз, Расчетные мощности и ток потребителей при заданном напряжении сети, расстояние от подстанций до потребителей, резервная мощность, которой располагают подстанции, приведены в табл. 7.15.
Таблица 7.15
Имеющийся резерв мощности, кВ-А(А)
Потребители
以
в.
Потребляемая мощность, кВА
Потребляемый ток, А
520
30
1 040
60
800
46
400
23
Подстанции
Расстояние от подстанции до потребителя, км
〃3
1 560 (90)
1 040 (60)
1 040 (60)
3
4
8,5
14
3,5
10
Математическую модель задачи, описываемую ограничениями (7.21) и целевой функцией (7.22), представим в форме табл. 7.16. Следовательно, задача сведена к транспортной, решаемой по стандартным программам.
Таблица 7.16
Подстанции
Предприятия
厶
当
1 &
в4
U
/н
3
『12
5
/13
14
Л4
3,5
0
90
П2
/21
4
‘22
2
/23
7
厶4
10
『25
0
60
Пз
/31
8,5
‘32
7
/зз
2
厶4
5
厶5
0
60
Л
30
60
46
23
51
210
Здесь В5 ——фиктивный пункт потребления с током 51 А и нулевыми расстояниями от центров питания введен, чтобы получить ра- 3 о
венство 27i=S7j = 210A.
Размещение ремонтного фонда по мастерским
В настоящее время в стране имеется широкая сеть ремонтных предприятий: специализированные ремонтные заводы, ремонтнотехнические предприятия РАПО, колхозов и совхозов. При планировании ремонта техники инженерная служба совхоза (колхоза) должна решить вопрос © том, сколько и какой техники отремонтировать в тех или иных предприятиях в срок и при наименьших суммарных затратах. Производственная мощность ремонтных предприятий ограничена. Себестоимость ремонта на различных предприятиях различна, она зависит от организации ремонтных работ, удаленности ремонтного предприятия от хозяйства и т. д.
Данная задача может быть сведена к транспортной и решена методами линейного программирования. Ограничения можно сформулировать в виде выражений (7.18) и (7.17), где хц ——количество машин Lro вида, ремонтируемых в /-й мастерской (предприятии): at — суммарная потребность в ремонте i-x машин; bj—производственные возможности /-го ремонтного предприятия; Cij = cQij + 2Sij ——затраты на ремонт i-й машины /-го предприятия; с°万一прейскурантная стоимость ремонта t-й машины на /-м предприятии; Sij ——затраты на доставку ьй машины на /-е предприятие.
ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Динамическое программирование (динамическое планирование)—это математический метод оптимизации решений, специально приспособленный к поэтапным (многошаговым) операциям управления. На каждом шаге принимается некоторое решение, от которого зависит успех не только на данном шаге, но и операция в целом с учетом последующих шагов.
Рассмотрим следующий пример. Пусть имеется группа к предприятий Пь П2,...»Пп. На их деятельность и развитие на период Т, состоящий из т хозяйственных лет, выделяются средства. Выделенные на i-й год %», i=l,团 средства распределяются или перераспределяются между предприятиями. Каждое j-e предприятие
получает 尤订,j= 1,〃 средства, где = 仃.
В процессе функционирования предприятий выделенные средства расходуются. Каждое j-е предприятие за t-й год приносит доход Siji^l^m, / = 1^, зависящий от средств, вложенных в предприятие как за данный, так и за предыдущие годы, s^ =
=*(力1% %2力•…,% 仃),за i-й год доход от всех предприятий составит Si = 2sij, а за весь период Т в целом
S = 2 Sj =工二 Sij,»=1 2=1 /=1
Процесс распределения и перераспределения средств между предприятиями есть управление щ, i=l,m на “м шаге, а искомое управление U в целом на период Т представляет совокупность всех шаговых решений
U ~ U Qi, ^2, • • •, "Q.
Эффективность управления (целевая функция) в нашем случае оценивается величиной суммарного дохода от всех предприятий за все т лет. Он зависит от всей совокупности шаговых решений
S = S (U) = S (辽工,辽2,…•,辽m) •
Сложность решения такой задачи состоит в том, что, принимая решение на каждом i-м шаге, приходится учитывать его влияние на будущее, т. е. вопрос заключается в том, как учесть влияние принимаемого решения на эффективность последующих шагов.
При решении таких задач методом динамического программирования эта трудность устраняется следующем образом. Анализируя все шаги,(можно заметить, что среди них есть один шаг, который можно планировать без учета его влияния на будущие шаги. Таким шагом является последний шаг. Его можно планировать так, чтобы он (как изолированный) принес наибольшую выгоду. Это обстоятельство и используется в методе динамического программирования. Поэтому процесс динамического программирования выполняется от конца к началу. Но как планировать последний шаг, если мы не знаем, чем кончился предпоследний? Здесь требуется найти (предложить) варианты условий начала последнего tn-го шага, т. е. чем кончился (zn-1)-* шаг. Для каждого такого варианта условий находят 'из всех возможных такое управление, при котором выигрыш (доход) на последнем шаге был бы максимальным. Максимумов будет столько, сколько вариантов начальных условий. Теперь аналогично оптимизируем управление на предпоследнем (т—1)-м шаге применительно к вариантам условий начала этого шага, но с учетом уже найденных оптимальных вариантов на zn-м шаге. В целом на каждом шаге для каждого начального условия ищется такое управление, которое обеспечивает оптимальное продолжение процесса с учетом всех последующих шагов. Итак, решение ищется вплоть до начального (первого) шага.
Основную идею метода динамического программирования составляет сформулированный Р. Беллманом принцип оптимальности, который заключается в том, что каково бы ни было состояние оптимизируемого процесса в результате какого-то числа шагов, управление на ближайшем шаге должно быть выбрано так, что-
бы оно обеспечивало максимальный выигрыш на всех оставшихся шагах, включая данный. Сформулировано следующее условие реализации принципа оптимальности. Пусть степень успеха принимаемого решения оценивается по минимуму затрат на операцию в целом, т. е. на реализацию многошаговой программы (процесса) .Тогда оптимальное управление на предстоящие 月 шагов до конца операции находится по минимальным затратам, полученным в соответствии с выражением
底(S)= min [Q (s, и) + 底—1 (s'H, (7.23)
где u ——выбираемое управление на предстоящие А шагов до конца операции (искомый вариант решения задачи за 左 шагов до конца операции); s ——состояние системы за 左 шагов до конца операции; s'——состояние системы за А——1 шагов до конца операции; Q (s, и) — величина затрат при u-м варианте управления применительно к s-му состоянию системы на 月-м шаге; fk-t(s') — величина затрат при оптимальном управлении за А——1 шагов до конца операции для s'-ro варианта состояния системы;『在(s)——величина затрат при оптимальном управлении за k шагов до конца операции для s-ro варианта состояния системы, которая определяется как минимальная сумма затрат собственно на ^-м шаге и затрат при оптимальном управлении за предстоящие А——1 шагов до конца операции (минимум ищется по и).
Чтобы обойти трудность учета последующих шагов, задачу начинают решать с последнего шага, для которого
“(s)=min[Q(s, и)]. (7.24) и
Исходя из этого счет шагов ведут с конца: последний щаг 々=1, предпоследний ——月=2 и т. д. Решение ищется путем перебора управлений и на 月-м шаге и получения минимума Q(s,以)при переборе всех вариантов оптимальных управлений для всех состояний системы за 月一1 шагов до конца операции. Рассмотрим пример.
Задача выбора пути
Пример 7.10. Дана сеть путей (рис. 7.5). Из каждого узла сети возможно перемещение как по диагонали, так и по горизонтали или вертикали. Числа у ветвей сети показывают затраты на путь из данного узла до следующего (это может быть расстояние, время, затраты денежных средств, материалов и т. п. в зависимости от цели исследования системы). Требуется найти такой путь из начальной точки хо в конечную точку 躲,при котором сумма затрат будет минимальной. Используем метод динамического программирования. Для этого разобьем сеть на 4 шага (4 вертикальные зоны). Находим, начиная с конца, «условный» оптимальный вариант при переходе из узлов одной вертикали в другую. Причем каждый раз записываем в кружок узла минимальные затраты от данного узла к точке конца пути 祢. Вначале проставляем накапливаемую сумму затрат в узлах последней вертикали 4—4. Суммы составляют соответственно: 8, 17, 27, 40 единиц.
Затем находим минимальные суммы в узлах 3-й вертикали, т. е. ищем оптимальное управление на последнем шаге, исходя из пяти вариантов (узлов) конечных условий предпоследнего (3-го) шага. Соответственно оптимальные значения для этих узлов будут: 10, 17, 25, 34, 46. .
Рис. 7.5. Сеть дорог (к интерпретации задачи динамического программирования); х0, хк — иа. чальиый и конечный пункты движения
Обозначим стрелками пути, по которым получены эти условные оптимальные решения. Затем аналогично отыскивают минимальные затраты для 3, 2 и 1-го шагов. На этом заканчивается расчет «условного» оптимального управления для узла %°. При этом сразу получают ответ об оптимальном управлении при следовании из %о в 尤在.Минимальные затраты составляют 69 единиц. Следовательно, искомая оптимальная трасса прокладывается по двойным стрелкам «условного оптимального управления», начиная с %и. (Алгоритм и программу задачи см., например, в [9, с. 143].)
Выбор трассы линии электропередачи
Пример 7.11. Электрифицируемый пункт С расположен в 20 км от ближайшей точки В существующей линии электропередачи (ЛЭП) (рис. 7.6). Питающая подстанция (пункт А) находится в 30 км от точки В. Трасса проектируемой ЛЭП к пункту С будет проходить частично по лесной (а)= 12 км) и степной (如=8 км) зонам, как указано на плане. Требуется найти оптимальный ва-
риант трассы по минимуму приведенных затрат, определяемых по выражению
3 - С + £ Л,(7.25)
где С — эксплуатационные расходы (руб./км в год); ^ — капитальные вложения (р哈/км); Ен — нормативный коэффициент экономической эффективностигде С — эксплуатационные расходы (руб./км в год); ^ — капитальные вложения (р哈/км); Ен — нормативный коэффициент экономической эффективности
где С — эксплуатационные расходы (руб./км в год); ^ — капитальные вложения (р哈/км); Ен — нормативный коэффициент экономической эффективности
где С — эксплуатационные расходы (руб./км в год); ^ — капитальные вложения (р哈/км); Ен — нормативный коэффициент экономической эффективности
Капи" тальные вложения, тыс. руб ./кмЭксплуатационные расходы, тыс. руб./км в год .Строительство в зоне леса160,6Строительство в зоне степи100,5Реконструкция ЛЭП50,4Капи" тальные вложения, тыс. руб ./кмЭксплуатационные расходы, тыс. руб./км в год .Строительство в зоне леса160,6Строительство в зоне степи100,5Реконструкция ЛЭП50,4Таблица 7.17Таблица 7.17
Капи" тальные вложения, тыс. руб ./км
Эксплуатационные расходы, тыс. руб./км в год .
Строительство в зоне леса
16
0,6
Строительство в зоне степи
10
0,5
Реконструкция ЛЭП
5
0,4
Капи" тальные вложения, тыс. руб ./км
Эксплуатационные расходы, тыс. руб./км в год .
Строительство в зоне леса
16
0,6
Строительство в зоне степи
10
0,5
Реконструкция ЛЭП
5
0,4
Таблица 7.17
Таблица 7.17
Затраты на сооружение и эксплуатацию ЛЭП приведены в табл* 7.17.
Прокладка трассы напрямую потребует соорудить линию длиной /ас = 36 км. Прокладка линии от ближайшей точки В потребует соорудить трассу длиной /вс=20 км и реконструировать участок ЛЭП длиной /ав = 30 км. Очевидно, оптимальный вариант будет расположен в треугольнике АВС.
Обозначим искомую оптимальную трассу по линии
ADEC. Разобьем трассу на три участка: ЕС (зона леса), DE (зо-на степи) и AD (зона действующей ЛЭП). Поскольку шириназон леса и степи постоянна, проекции трех участков на линию АВоднозначно определяют длину этих участков/ес = /〃/ + л12,/de =丿a尸+%2,‘AD =,АВ ~+ %3,
где % и。2 — ширина зон леса и степи.
Выберем хь х2 и %з в качестве независимых переменных, однозначно определяющих трассу ЛЭП.
Запишем целевую функцию — минимум приведенных затрат:
z = f (а 三,“ =31Kaj 十 */ + 32V。2‘ + x・『+ З3Х3 -> min
где 3i=3,0, 32 = 2,0, З3= 1,15 определены по данным табл. 7.17 и выражению (7.25).
Пределы изменения переменных
0《%1《’кB,
о《%2《АВ,
°《*3《“АВ,
где /квгде /кв°1‘АВ,
где /кв
где /кв
;=18 км. 41 +02
Для решения задачи используем метод динамического программирования. Разобьем участок АВ на ряд отрезков одинаковой длины, например на 5 частей по 6 км каждый. При этом каждая переменная может принимать значения, кратные 6. Поиск оптимального варианта проведем в три этапа (шага), начиная с последнего участка трассы.
У ч асток Е С (3-й шаг). Изменяя переменную 修 в пределах О&尤W18 км (табл. 7.18), находим значения приведенных затрат (целевую функцию):
Таблица 7.18
*1, км
0*
6丨12
18
2(%1), ТЫС. руб./гОД
36*
40,3
51
64,9
Звездочкой отмечен оптимальный вариант на данном шаге.
Участок DE (2-й шаг). Изменяя переменную х2 в пределах 0&%2&30 км, находим суммарные затраты уже на двух участках по выражению: & = &(尤» + 32У ^22+х22 = г] (%i) +2,0У 8?+%22fmiи. Расчеты вариантов сведем в табл. 7.19.
Для каждого значения (%i+%2) находим в таблице минимальную величину 之2(尤 1, %2)и отмечаем вариант «звездочкой». Он является оптимальным для каждого варианта, который будет рассматриваться уже на следующем шаге.
Участок AD (1-й шаг). Изменяя переменнуюх3 в пределах 0&%з&30 км, находим суммарные затраты с учетом затрат на следующих шагах по выражению: ^3 = z2(xbx2) +33х3 = г2(Х1,^2)+ +1,15%3fmiи.
Таблица 7.19
.修+*2. КМ
%|, км
х2, км
г2(хь *2), тььс. руб.^од
0
0*
0*
■52*
6
0齿
6*
56*
6
0
56,2
0
12
64,8
12
6*
6*
60,3*
12
0
67
0
18
75
18
6*
12*
69,1*
12
6
71
18
0
80,9
0
21
86,6
24
6 士
18*:
79,3*
12
12
79,8
18
6
84,9
0
30
96,1
30
6
24
90,9■
12*
18*
90*
18
12
93,7
Расчеты вариантов приведены в табл. 7.20.
Таблица 7.20
* + %2, km
%з, км
Z2(,,力2), тыс. руб./год
23(折,*2,%3), тыс. руб./год
30
52
86,5
24
56
83,6
12*
吃
60,3
81*
18
12
69,1
82,9
21
6
79,3
86,2
30
0
90
90
Из табл. 7.20 находим, что минимальные затраты будут при 尤з=18 км и 尤 1 +尤2=12км, а из табл. 7.19 имеем: %】 = 6км, %2=6км. Теперь можно определить длину участков трассы: /ad= 18 км, Nde=10 км, /ес=13,4 км. Общая длина трассы составит /е=41,4км, приведенные затраты 2mm = 81 тыс. руб./год. Для сравнения укажем, что если бы трасса проходила по прямой АС, то 1工=36 км, а 之= 93,7 тьгс. ру6*/год, а если бы через точку В, то Ь = 20 км, n = 86,5 тыс. руб./год.
СЕТЕВОЕ ПЛАНИРОВАНИЕ
Рассмотренные до сих пор методы оптимизации не позволяют решать такие важные для практической деятельности задачи, как планирование научно-исследовательских и опытно-конструкторских работ, проектирование машин, технологий и предприятий, опытное производство и испытание систем (машин) и т. д., в которых участвуют организации и предприятия различных ведомств, различные подразделения одного предприятия и т. п. Сетевые методы планирования позволяют находить оптимальные решения и этих сложных по своей структуре задач. Основу данных методов составляют сетевые модели. Под сетевой моделью понимают модель комплекса взаимосвязанных работ, заданную в форме сети, отображающей упорядоченность работ по времени. Данная модель включает также и другие характеристики системы — время, стоимость, ресурсы, относящиеся к отдельным элементам -или ко всей системе в целом.
Рис. 7.7. Сетевой график ремонта трактора
Различают два основных вида лредставления сетевых моделей: сетевые графики и табличные (цифровые) представления сетевой модели. Сетевые графики используются для анализа сетевых моделей человеком. Табличное представление используется для анализа моделей на ЭВМ. Сетевой график содержит два основных элемента (рис. 7.7): работу и событие. Работой называют любой процесс, приводящий к достижению какого-либо результата. На графике работы обозначаются безмасштабными стрелками. Цифры на стрелках обозначают оценки, например времени выполнения работ. Событие не является процессом и не имеет продолжительности, а есть результат окончания одной или нескольких работ. На графике события обозначаются кружками, цифры в кружках—номера событий. Событие, не имеющее входящих работ, называют исходным (0 на рис. 7.7), а не имеющее выходящих работ, — завершающим (14 на рис. 7.7). Завершающее событие называют целевым, определяющим достижение цели всего комплекса работ. Путем в сетевой модели называется такая последовательность работ (стрелок), в которой конечное событие одной работы совпадает с началом следующей за ней работы. Путь, начинающийся с исходного события и кончающийся завершающий,
называется полным. Для установления зависимости не связанных работой событий между ними вводится фиктивная работа. Фиктивная работа имеет нулевые затраты времени для ее выполнения. Она наносится на график шунктирной линией и вводится в график лишь для того, чтобы изобразить на сети требуемую очередность работ. Например, на рис. 7.7 событие 9 возможно только тогда, когда будут выполнены фиктивные работы (7——9) и (11——9).
Сеть строится исходя из взаимосвязей между событиями. При этом возможны совершенно различные сочетания работ и событий: данная работа должна быть завершена до начала следующей (последовательная цепочка событий); работы могут выполняться одновременно (из одного кружка выходит несколько стрелок); прибытие новых материалов, оборудования и т. д. обусловливает возможность начала новой работы (0 ——события). Сетевые модели могут быть как вероятностными (показатели работы в этих моделях заданы в виде случайных величин), так и детерминированными (величина задана в виде константы).
Сетевой график представляет собой общую картину проекта, в нем учитываются все требования, связанные с выполнением работ. Сетевой график может включать или все мельчайшие детали проекта, или только общие контуры основных видов работ. Независимо от целей, для которых используются сетевые графики, принципы их построения и анализа остаются неизменными.
Построение сетевых графиков. Для построения сетевых графиков необходимо выполнить -следующие работы: составить перечень работ (детализировать все работы, виды деятельности, задачи и т. п.» необходимые для доведения проекта до практического результата); составить перечень ограничений (определить, например, последовательность выполнения работ исходя из технологических и организационных факторов); оценить время (стоимость) вылолнения каждой из работ. Рассмотрим пример.
Пример 7.12. Построить сетевой график ремонта трактора при следующем (упрощенном) перечне работ (табл. 7.21). Первым этапом в составлении сетевого графика является расчленение проекта на отдельные операции, составление полного перечня подлежащих выполнению работ. В данном примере (очень сильно упрощенном) этот этап кажется легким, но если нет полного перечня работ, если упущена какая-то, пусть даже незначительная на первый взгляд -работа, все преимущества сетевого графика теряются. Любая работа связана с затратами времени, следовательно, имеет начало и конец, которые легко поэтому определяются и наносятся на график.
Но прежде чем строить график, необходимо установить очередность работ. Перечень операций (работ) обычно составляется в зависимости от последовательности, в которой они совершаются, и поэтому служит отправным пунктом в установлении их очередности. Очередность устанавливается в ходе получения ответа на два вопроса: что должно предшествовать данной работе? Что должно следовать за данной работой (зачем эта работа)?
Таблица. 7.21
№ п/п
Внды (названия) работ
Условное обозначение работы
HoM0p работы
Опирается на работу, номер
Продолжительность работы, ч
1
2
3
4
5
6
1
Подготовка трактора к ремонту и постановка на место разборки
О【
1
0
2
2
Разборка трактора на основные узлы
2
1
8
3
Разборка н дефектовка деталей двигателя
аз
3
2
6
4
5
Разборка и дефектовка деталей трансмиссии и ходовой части
。4
4
2
6
Разборка и дефектовка деталей заднего моста
。5
5
2
4
Комплектовка деталей двигателя
。6
6
3
4
8
Комплектовка деталей трансмиссии и ходовой части
Комплектовка деталей заднего
。7
7
8
4
5
4
3
9
моста
Сборка и испытание двигателя
。9
9
6
20
10
Сборка и испытание трансмиссии ходовой части
010
10
7
22
11
Сборка и испытание заднего мо-
12
ста
011
11
8
15
Сборка трактора из узлов и об-
9, 10, 11
34
катка
012
13
Покраска
a13
12
14
Приемка трактора из ремонта
014
13
0,5
Очень важно строго обосновывать очередность работ исходя из целей проекта, а не на основе сложившихся традиций и обычаев. Но нужно помнить, что очередность очень сильно зависит от местных условий предприятия и пренебречь этим нельзя. Это хорошо видно в рассматриваемом примере: на отдельных предприятиях ремонт ходовой части и заднего моста объединен, а на большинстве предприятий имеем, наоборот, гораздо большую специализацию при ремонте отдельных узлов трактора. После составления перечня работ и очередности, которая задается показателем —— какие работы предшествуют данной работе, т. е. на какие работы опирается (столбец 5, табл. 7.21), строят сетевой график, на iko- торый наносятся события в установленной последовательности и работы — безмасштабные стрелки, на которых указывается продолжительность выполнения работ (см. рис. 7・7)・
Техника вычерчивания сетевых графиков весьма разнообразна. Можно назвать следующие эффективные 'приемы вычерчивания сетевых графиков:
для выделения общего потока на диаграмме несколько видов работ иногда отображаются с помощью одной стрелки. Расчленение последней на отдельные операции проводится после проверки общей последовательности выполнения работ;
очень крупные проекты целесообразнее составлять то частям (сегментам общего сетевого графика), а затем объединять их в единый график. Подобный подход обычно применяется в отношении тех частей проекта, которые многократно повторяются, например при строительстве многоэтажного дома, на этажах перечень работ одинаков, поэтому вычерчивают лишь один сетевой график по общему перечню работ..
Анализ сетевых графиков. Одна из основных задач сетевого планирования состоит в определении критического пути. Критическим путем в сетевом планировании называют последовательность технологических взаимосвязанных работ от начального до конечного события, имеющую максимальную продолжительность. Т. е. критическим путем называют самый большой путь из всех полных путей (путей, начинающихся с исходного и кончающихся завершающим событием). Работам, лежащим на критическом пути, уделяется особое внимание, поскольку всякая задержка в выполнении любой из работ, лежащих на критическом пути, приводит к срыву срока окончания всего комплекса работ. Поэтому такой метод планирования называют иногда методом критического пути. Для рассматриваемого примера найдем критический путь, определив время выполнения работ по каждому из трех полных путей (ветвей):
верхний (ас&+аз—°6f agf a【2f。13一生4)—Ti = 76,5 ч;
средний (6Z1-—『2=78,5 ч*
нижний1""^а恵一*"a13-^。14)-73=68,5 Ч,
где индексы: 1 —верхней, 2——средней, 3 — нижней ветвей.
Наибольшее время выполнения работ получим на средней (2-й) ветви графика, этот путь и является критическим: Ткр = 7'2= = 78,5 ч. В нашем примере особое внимание нужно уделять работам а% а? и аю (ремонту ходовой части и трансмиссии), которые определяют общую длительность ремонта трактора. Знание Ткр позволяет найти резерв времени по каждой ветви: 1-й (верхняя) АТ】=2 ч, 3-й (нижняя) АТз=10 ч.
В сетевом планировании обычно устанавливаются три оценки времени, необходимого для выполнения работ: оптимистическая /тш, пессимистическая — /Шах и наиболее вероятная ——%в・ Существование данных оценок обусловлено вероятностным характером работ. В сетевых графиках обычно используется так называемая ожидаемая шродолжительность работ ——^Онс, определяемая по формуле *
《 fmin + 4 /нв + Зах
сож7.
См.: Старр М. Управление производством.—М.: Прогресс, 1986.
Сетевой график может быть использован для улучшения (оптимизации) плана. Однако цели оптимизации могут быть разные. Одной из задач является сокращение сроков выполнения проекта. Очевидно, для этого имеет смысл фиксировать именно работы критического пути, снижение длительности которых непосредственно влияет на сроки выполнения проектов. Однако при этом может оказаться, что критическим путем станет другая ветвь графика. Кроме того, форсирование работы требует вложения определенных средств. В результате возникает задача исследования операций: какие дополнительные средства необходимы и в какие работы требуется их вложить, чтобы общий срок выполнения работ по плану был бы не больше заданий величины, а расход дополнительных средств был бы минимальным.
Другая задача — перераспределение имеющихся ресурсов с целью сокращения общего времени выполнения плана работ. На рассмотренном примере установили, что все работы, кроме работ критического пути, имеют какие-то резервы времени. В некоторых случаях оказывается возможным, перебросив материальные и трудовые ресурсы с некритических участков работ на критические, добиться уменьшения суммарного времени выполнения плана. Вновь приходим к задаче оптимального управления: какие ресурсы надо перебросить с каких работ и на какие, чтобы время выполнения всего плана было бы минимальным.
В нашем примере эту задачу можно решить исходя из предположения, что длительность выполнения работы находится в линейной зависимости от числа занятых рабочих, а также трудовые ресурсы с точки зрения квалификации рабочих взаимозаменяемы между различными ветвями графика. Наибольший резерв времени имеется, на нижней ветви: АТз=10 ч. За счет этого резерва можно, перераспределив рабочие ресурсы, сократить время выполнения работ на критическом пути и на (верхней ветви. Обозначим: х — время, на которое увеличится продолжительность работ на 3-й (нижней) ветви за счет передачи ресурсов на другие ветви. Эти ресурсы в определенных пропорциях должны быть поделены между 1-й и 2-й ветвями:也尤 + 局尤=尤 или 也十局=1, где 財 к 局一 коэффициенты распределения ресурсов по 1-й и 2-й ветвям (々1尤——k2x ——время, на которое сократятся продолжительности работ в Ьй и 2-й ветвях соответственно). Учитывая эти обозначения, можно написать следующие уравнения баланса для ветвей сетевого графика:
«5 +,8 + 3) + X = (% + 左 + 4)—自%,
«5 + % + 3) + % =(乙 + " + ^10)—々2%,电+局=L
где /з, /4, ■.., ^п — время выполнения соответственно работ аз, щ,..., «п на ветвях.
Заменим их числовыми значениями
22 + х = 30 —々1%,22+* = 32 —у々1 +々2 = 1 .
Решив полученную систему уравнений, найдем 尤=6,々i = l/3, 局= 2/3. Таким образом, если мы перераспределим ресурсы так, что на ветви 3 продолжительность работ увеличится на 6 ч, а на 1-й и 2-й ветвях сократится соответственно на 2 и 4 ч (々i% = 2, 月2尤=4), то все ветви будут критическими, система не будет иметь резервного времени, а продолжительность ремонта трактора сократится на 4 ч и будет равна 74 ч.
Еще одна задача. После построения сетевого графика выявилось, что потребное время выполнения всего комплекса работ меньше заданного (директивного) срока. Следовательно, имеется резерв времени, которым мы вправе распоряжаться в пределах директивного срока. Тогда, увеличив сроки работы, мы можем сэкономить некоторые средства. Возникает задача: насколько следует увеличить время выполнения работ и каких, чтобы полученная от этого экономия ресурсов были максимальной.
Поставленные задачи могут решаться с использованием линейного, нелинейного, динамического программирования и других методов, которые реализуются на ЭВМ.
Рассмотрим пример определения критического пути с использованием ЭВМ для исходных данных, заданных в табл. 7.21.
Обоэнатам требуемые ресурсы, в том числе продолжительность работ массивом А(М, N), где М — количество всех работ, N — количество типов ресурсов (в примере 7.12 имеем М= 14, N = l). Сведения о том, на какие работы опирается каждая из заданных работ, обозначим массивом LS(M1, 2), где Ml——количество связей между работами (каждая связь указывается двумя цифрами: 1-я — номер рассматриваемой работы, 2-я — номер работы, на которую опирается эта работа). Поскольку одна работа может опираться на несколько работ, количество связей будет больше количества работ, т. е. М<М1. В табл. 7.21 массив LS(M1, 2) состоит из столбцов 4 и 5. Работа 12 в столбце 5 содержит три связи: 12—9, 12—10 и 12—11. А всего связей будет Ml = 16 при М= 14.
Примем следующую схему расчета. Просматриваем элементы LS (1,2) во втором столбце массива LS (столбец 5, табл. 7.21) и находим нули, по которым в первом столбце этого массива LS (1,1) определяем номер начальной работы (в табл. 7.21 будет работа 1). Переписываем этот номер в новый специальный массив, в который будем накапливать последовательности номеров работ,т. е. ветви, начиная от начальной и кончая завершающей работой. Обозначим массив именем LB, размером LB (MB, NB), где МВ — количество ветвей (в примере 7.12 таких путей три); NB ——количество последовательных работ. В примере все три ветви имеют по восемь последовательных работ. Если в массиве LS несколько начальных работ (несколько нулей), то их номера записываем
столбцом в первый столбец массива LB, из которого затем эти номера выбираются по порядку и сравниваются поеледовательно с номерами работ во втором столбце массива LS. Если номера совпали (означает, что найдена работа, опирающаяся на рассматриваемую), то из первого столбца этого массива LS номер работы переписывается во второй столбец массива LB, и (получаем уже последовательность из двух работ (по табл. 7.21 будет 1——2). Перебрав все начальные работы (1-й столбец массива LB), получим 2-й столбец массива LB и тем самым составим последовательности из номеров двух работ. После этого производится аналогичное сравнение уже второго столбца массива LB со вторым столбцом массива LS и заполняется третий столбец массива LB. В результате по табл. 7.21 мы получим три последовательности: 1 —— 2—3, 1—2—4 и 1—2—5.
Повторяя такие циклы, мы найдем все ветви последовательно выполняемых работ. Поскольку на одну работу может опираться несколько работ, то при переборе будет происходить увеличение количества ветвей. А это приведет к тому, что, если записывать новые последовательности в этот же массив LB, они сотрут («налезут») еще не просмотренные последовательности. Чтобы избежать это, используем два вспомогательных массива LB и LC, каждый раз записывая новые последовательности в другой массив. Получив все ветви, находим по каждой продолжительность и из них максимальную. Это и будет критический путь.
Исходя из принятой схемы расчета строим алгоритм (рис. 7.8). В алгоритме примем следующие обозначения массивов и индексов у их элементов: A(I,J), LS(1,1) и LS(I,2), LB(IB, JB), LC(IC, JC). После ввода размеров массивов и самих исходных массивов (блоки 1 и 2) задаем начальные значения индексам массива ветвей IB, JB и' массива связей работ I (блок 3). Находим нули во втором столбце массива LS (блок 4). Если элемент равен нулю, что является признаком начальной работы, то переносим номер начальной работы LS(1,1) в массив LB и переходим в этом массиве на следующую строку (блок 5). Если элемент LS(I,2) не равен нулю, то прямо переходим на следующую строку в массиве связей (блок 6). После проверки условия на окончание цикла (блок 7) вновь возвращаемся к блоку 4. После выхода из цикла (блоки 4—7) мы имеем первую итерацию массива ветвей, состоящую из первого .столбца, в которую топали номера начальных работ.
Будем теперь из полученного исходного массива ветвей LB формировать другой массив ветвей LC, пристраивая к номерам начальных работ номера работ, которые опираются на них. С этой целью устанавливаем начальные значения индексам строк массивов LB и LC, а также массива LS (блок 8). Проверяем, не оказался ли элемент массива LB равным нулю (блок 9). Если не равен нулю, то сравниваем его с элементом массива связей LS (блок 10). Равенство элементов означает, что найдена работа, которая опирается на рассматриваемую работу. Номер этс>й работы
Рис. 7.8. Алгоритм определения критического пути
пересылаем из элемента LS(1,1) в следующий JB+1 элемент массива LC, т. е. во второй столбец массива LC (блок 11). Блоки 11—13 организуют пересылку номеров работ, предшествующих данной, из массива LB в массив LC. Затем переходим на следующую строку массива LC (блок 14) и на следующую строку массива LS (блок 15). Если в блоке 10 оказалось, что номера работ не совпали, то осуществляется прямой переход сразу на следующую строку массива LS (блок 15). После проверки на конечное значение Ml (блок 16) процесс возвращается на повторное сравнение элемента LB (IB, JB) с новым значением LS (блок 10). После того как все элементы массива связей LS будут просмотрены, процесс перейдет от блока 16 на блок 17, где изменяется номер строки массива LB, а затем после проверки, не равен ли элемент нулю (блок 9), производится аналогичное формирование следующих строк массива LC (блоки 10—16).
Если оказалось, что следующий элемент в строке IB массива LB равен нулю (блок 9), то лроверяется, не равен ли нулю первый элемент этой строки (блок 18). Если и первый элемент этой строки равен нулю, то это означает, что все заполненные строки просмотрены, процесс формирования массива LC закончен. Фиксируем количество заполненных в массиве LC строк именем МВ = =1С—1 (блок 21) и переходим в обоих массивах LB и LC на следующий столбец (последующую работу в последовательности работ JB=JB+1 (блок 21)).
Переписываем заполненную часть массива LC в массив LB (блоки 21—27) и вновь переходим к блоку 8 на формирование нового массива ветвей LC, но уже со следующим дополнительным столбцом.
В процессе формирования массива LC может оказаться, что элемент LB.(IB, JB) в следующей строке IB будет равным нулю (блок 9), а первый элемент этой строки не будет равен нулю (блок 18). Это будет означать, что данная строка имеет законченную ветвь (т. е. вышла на конечную работу). Но длительность других ветвей может быть и больше. В этом случае будет совершен переход с блока 18 через блоки 19 и 20 на блок 17: произойдет ше- реход на следующую строку массива LB.
Если при очередном переходе на следующий столбец JB = =JB+1 матрицы ветвей (блок 21) окажется, что все элементы столбца JB массива LB будут равны нулю, то процесс образует цикл через блоки: 28f 8f 9 f 18+19 + 20+17 + 9+18 + fl9 f 20 к т. д. В этом цикле блок 19 будет считать количество проходов строк К = К+1. И если окажется, что число проходов К превысит количество заполненных строк МВ, то блок 20 передаст управлению на блок 29. Это будет означать, что все ветви определены—они все закончились завершающими работами. Теперь можно, работая с массивом LC, определять критический луть и находить при необходимости другие параметры сетевого графика. Процесс переходит к блоку 29, где фиксируется количество заполненных столбцов NB = JB — 1 в матрице LC.
Последняя часть алгоритма реализует расчет продолжительности всех ветвей Т (I), находит критический (путь Imax и его продолжительность Ттах (блоки 29—38). Здесь в блоке 32 введена вспомогательная переменная К в виде простой переменной с целью обозначения номера работы, полученного из массива LC, и подстановки этой переменной в качестве индекса массива А. Блок 38 позволяет закончить перебор строки, как только закончится последовательность работ.
ЗАДАЧИ МАССОВОГО ОБСЛУЖИВАНИЯ
Задачами массового обслуживания в сельскохозяйственном производстве являются: обслуживание комбайнов автомашинами на уборке урожая; обслуживание автомашин контрольно-разгрузочными устройствами элеватора; обслуживание тракторных агрегатов бригадой технического обслуживания и т. д. Такие задачи решаются методами теории массового обслуживания.
В системах массового обслуживания запрос обслуживаемого объекта на выполнение какой-либо работы называется заявкой или требованием. Например, момент наполнения бункера комбайна зерном означает поступление заявки на обслуживание — на разгрузку в автомашину; выработка трактором определенного количества часов также означает поступление заявки (требования) на обслуживание. Обслуживающий аппарат (автомашина, отвозящая зерно от комбайнов, бригада технического обслуживания тракторных агрегатов), способный в любой момент времени удовлетворять только одну заявку, называется каналом обслуживания.
Системы с очередями обычно задаются следующими исходными параметрами.
X ——плотность потока заявок (число поступающих заявок в единицу времени). Обратная величина 1/Х является средним временем (математическим ожиданием) интервала между поступлением двух смежных заявок. В задачах массового обслуживания в основном рассматривается простейший поток требований. Такой поток характеризуется: стационарностью (вероятность поступления заявок за время f зависит только от величины времени t и не зависит от места интервала t на временной оси, например» число заявок за 3 утренних часа практически равно числу заявок на 3 вечерних часа); отсутствием последействия (число заявок, поступающих в систему, независимо от числа и характера предшествующих заявок); ординарностью (одновременное поступление на обслуживание двух или более заявок маловероятно). Для простейшего потока число требований в промежутке времени f распределено по закону Пуассона с параметром
рМ/)=嗒 々 = 0,1,2,...,(7.26)
где р%«)——вероятность поступления точно 论 требований за время от 0 до t.
|л — интенсивность обслуживания — число обслуживанийг которое может быть выполнено данным обслуживающим аппаратом в единицу времени. Обратная величина l/卩 является средним (математическим ожиданием) временем (продолжительностью)' обслуживания одной заявки, которое определяется в результате- статистических наблюдений
詳6 =丄=丄 2 Т。6九(7.27)
где Тоб—среднее время обслуживания одной заявки; Тоб, — время обслуживания f-й заявки; т ——число наблюдений.
По среднему времени обслуживания (Тоб) заявки определяют интенсивность канала обслуживания
а — 就(2 ^сбО.(7.28〉
^об
Преимущественно рассматривается показательный закон распределения времени обслуживания
? 0) = 1 —e一叫(7.29}
где F(t)——интегральный закон распределения времени обслуживания.
п ——число обслуживающих аппаратов системы.
k ——число занятых обслуживающих аппаратов.
В системе обслуживания поток заявок, как правило, является случайным. Обычно случайно и время обслуживания. Работа системы обслуживания протекает нерегулярно: то образуется очередь на обслуживание, то происходит простой каналов обслуживания. Задача теории массового обслуживания — установление оптимальной (с минимальными потерями) зависимости между характером потока заявок, числом каналов и их производительностью (временем обслуживания), а также правилами работы системы обслуживания. Важнейшим параметром системы массового обслуживания является приведенная плотность потока заявок
a =入/n.(7.30)
Если заявки поступают в систему обслуживания с плотностью, например, равной 3 заявкам в час (Х=3), а канал обслуживания обеспечивает удовлетворение только 1 заявки в час (ц= 1), то в системе обслуживания возникает очередь, которая будет расти неограниченно. Чтобы не допускать этого, нужно иметь не один канал обслуживания, а несколько. Если п — число каналов обслуживания, то возможны два случая: а>м ——очередь растет неограниченно; а^и ——существует установившийся режим обслуживания. Первый случай в теории массового обслуживания обычно не рассматривают.
Важное значение для решения вопроса о функционировании системы имеет дисциплина очереди, которая делит системы обслуживания на системы с отказом, с ожиданием и со смешанной дис-
циплиной очереди. В системах с отказами заявка, поступившая в момент, когда все каналы обслуживания заняты, покидает систему и в обслуживании не участвует. В системах с ожиданием заявка, поступившая, когда все каналы заняты, становится в очередь и ожидает, пока не освободится какой-нибудь канал. В сельскохозяйственном производстве наибольшее распространение имеют системы обслуживания с ожиданием.
В задачах массового обслуживания обычно определяют следующие параметры.
Вероятность того, что занято 力 обслуживающих аппаратов. при условии 々0% т. е. число заявок, поступивших на обслуживание, не превосходит числа обслуживающих аппаратов л (условие отсутствия очереди)
Рл = — Ро при А </7,(7.31)
;где ро ——вероятность того, что все обслуживающие аппараты свободны.
Вероятность того, что в системе находится 力 требований в случае, когда их число больше числа обслуживающих аппаратов (условие наличия очереди)
PL ―г—〃о при 无〉а.п!胪iPL ―г—〃о при 无〉а.п!胪i(7.32)(7.32)
PL ―г—〃о при 无〉а.
п!胪i
PL ―г—〃о при 无〉а.
п!胪i
(7.32)
(7.32)
Вероятность того, что все обслуживающие аппараты свободны
Ро А — при а<п,(7.33)
k! (n —1) ! (n — a)
-где a<n ——условие того, что очередь не будет неограниченно возрастать.
Вероятность того, что все обслуживающие аппараты заняты
П =П =;;、‘,/с%(Л — 1) ! (rt — a);;、‘,/с%(Л — 1) ! (rt — a)при a < %при a < %(7.34)(7.34)Вероятность того, что время ;ния (время пребывания в очереди)Вероятность того, что время иия меньше т (заданного)Вероятность того, что время ;ния (время пребывания в очереди)Вероятность того, что время иия меньше т (заданного)ожидания начала обслужива- больше т (заданного)ожидания начала обслужива- больше т (заданного)при 弋 >0.ожидания началапри 弋 >0.ожидания начала(7.35) обслужива-(7.35) обслужива-
П =
П =
;;、‘,/с%
(Л — 1) ! (rt — a)
;;、‘,/с%
(Л — 1) ! (rt — a)
при a < %
при a < %
(7.34)
(7.34)
Вероятность того, что время ;ния (время пребывания в очереди)
Вероятность того, что время иия меньше т (заданного)
Вероятность того, что время ;ния (время пребывания в очереди)
Вероятность того, что время иия меньше т (заданного)
ожидания начала обслужива- больше т (заданного)
ожидания начала обслужива- больше т (заданного)
при 弋 >0.
ожидания начала
при 弋 >0.
ожидания начала
(7.35) обслужива-
(7.35) обслужива-
〃 {/ < Н 二=1 — /7е- т при т > 0.(7.36)
Среднее время ожидания начала обслуживания
〜而F m0.〜而F m0.(7.37)(7.37)
〜而F m0.
〜而F m0.
(7.37)
(7.37)
Средняя длина очереди (среднее число требований, ожида* ющих в очереди начала обслуживания)
М^-^—р^(7.38>
(П — а)2
где при k=n имеем pn = Ph (см. 7.32).
Среднее число требований, находящихся в системе обслу* живания
Mz =Мт + 迎 + 必 £.(7.39>
Среднее число свободных обслуживающих аппаратов
Как уже отмечалось выше, целью анализа систем массового обслуживания является определение наиболее экономичного режима функционирования системы. Если принять в качестве критерия эффективности денежное выражение затрат в обеих частях системы, то целевую функцию можно записать в виде
N = Зож + 3〃 т min, где Зож — затраты в связи с простоем заявок в ожидании обслуживания; Зп — затраты на создание и эксплуатацию п каналов обслуживания.
Рассмотрим целевую функцию. Имеем средние потери каждой заявкой в ожидании обслуживания: т==тож, и среднее число заявок в системе за время t составит n(t) =АЛ Тогда суммарные потери времени в ожидании обслуживания (всеми заявками за время t) составят
7о*(/) ="«户=入(7.41)
Теперь определим затраты в системе на ожидание обслуживания (за время работы системы /):
Зож(0=Сож7'ож W,(7.42)
где Сож — убыток за единицу времени ожидания одной заявки обслуживания.
Наиболее объективной оценкой затрат на создание и эксплуатацию л каналов обслуживания являются приведенные затраты за время f работы системы:
3〃«) = (С“ + £нК“)电(7.43)
где Сп ——затраты на эксплуатацию одного канала обслуживания в единицу времени; Кп—■ капиталовложения (цена канала обслуживания), отнесенные И единице времени работы; Ен — нормативный коэффициент экономической эффективности.
Итак, целевую функцию системы массового обслуживания можно записать в виде уравнения
2=0啾7。抠(f) + (2 +邑簿)nZ->min.(7.44)
В наиболее часто решаемых задачах массового обслуживания отыскивается количество обслуживающих каналов (аппаратов)—
Рис. 7.9. График затрат в системах массового обслуживания: п — количество каналов об-Рис. 7.9. График затрат в системах массового обслуживания: п — количество каналов об-служиванияслуживанияи, и целевая функция рассматривается как функция от числа каналов z=f(n). Из (7.42) и (7.43) видно, что при увеличении количества обслуживающих каналов затраты от простоя заявки в очереди (30?к) снижаются, а затраты на их создание и эксплуатацию увеличиваются (рис. 7.9). Следовательно, суммарные затраты, т. е. целевая функция 2 по (7.44), имеют минимум. Число обслуживающих каналов, при котором целевая функция 2 принимает минимальное значение, явля-
Рис. 7.9. График затрат в системах массового обслуживания: п — количество каналов об-
Рис. 7.9. График затрат в системах массового обслуживания: п — количество каналов об-
служивания
служивания
ется оптимальным — пОпт.ется оптимальным — пОпт.УПРАВЛЕНИЕ ЗАПАСАМИ
ется оптимальным — пОпт.
ется оптимальным — пОпт.
Рис. 7.10. График управления запасами при идеальных условиях (равномерный расход продукции и немедленное удовлетворение заказа)Рис. 7.10. График управления запасами при идеальных условиях (равномерный расход продукции и немедленное удовлетворение заказа)Под запасами понимают материалы, изделия и другую продукцию, хранящуюся на складе для последующего использования. Запасы создаются для того, чтобы ослабить непосредственные зависимости между поставщиком (производителем) и потребителем. Различают две системы управления запасами: с фиксированным размером поставки —方 и с фиксированным интервалом времени между поставками ——То. Все другие системы являются разновидностью этих двух систем.
Рис. 7.10. График управления запасами при идеальных условиях (равномерный расход продукции и немедленное удовлетворение заказа)
Рис. 7.10. График управления запасами при идеальных условиях (равномерный расход продукции и немедленное удовлетворение заказа)
В системе с фиксированным размером поставки фиксированное количество продукции поставляется через равные или изменяющиеся интервалы времени. В идеальном случае фиксированное количество продукции поставляется в тот момент времени, ког-
да ее запас достигает нуля. При мгновенном пополнении запасов и нулевом времени исполнения заказа заказ удовлетворяется в тот же момент времени, в который он подается. Заказанное количество продукции (запас) потребляется с постоянной скоростью, и когда оно достигает нуля, выдается новый заказ. Фактически при таких идеальных условиях обе системы совершенно одинаковые (рис. 7.10). Отклонение от идеальных условий и приводит к указанным двум системам управления запасами.
Запасы связаны с затратами. Чем больше величина запаса, тем меньше вероятность их истощения и, следовательно, потерь СДф от дефицита и отсутствия материалов, приводящих к сбою или остановке производства. С другой стороны, увеличение запаса приводит к росту издержек Схр на хранение продукции. Задача управления запасами состоит в отыскании оптимального размера запаса, а также интервала времени между поставками и их величинами, минимизирующими затраты г, связанные с поставкой и хранением материалов
Z = % + Схр f min.
Рассмотрим случай, проиллюстрированный на рис. 7.10 (с отсутствием издержек от дефицита). Обозначим:方一размер одной поставки (заказа); Со — стоимость доставки одного заказа размером 伙,включая погрузочно-разгрузочные работы; Qr — количество материалов, требующихся в год. Пусть стоимость доставки одного заказа и размер поставки связаны следующей зависимостью:
С0= еп + 々乳,
где Си — основная (не зависимая от размера) часть стоимости одной доставки; 々——коэффициент, определяющий зависимость от размера поставки.
Тогда общие издержки Сг на доставку материалов в год составят
Если проанализировать полученное выражение, то можно сделать вывод, что чем больше размер одной поставки ——go, тем меньше издержки на поставку Сг. Однако при этом будут возрастать издержки на хранение. Найдем их. Пусть издержки хранения Схр определяются из выражения
Jp = аСм«ср,
где См — стоимость хранения единицы материала; дер — среднее количество материала на складе (при равномерном потреблении материала со склада: 9ср = д,2); а — коэффициент издержек при хранении материалов (а>1).
Его можно выразить через ряд частных коэффициентов
а = П %,
где, например, ai — коэффициент накладных расходов при хранении; а2 — коэффициент издержек, связанных с порчей материала; а3 ——коэффициент издержек, связанных с потерей материалов, и т. д.
Общие минимизируемые затраты, связанные с дисциплиной доставки и с хранением,составят
z = & + Схр — Qr (^~ + 々)+ аСм ~ ■► min.(7.45)
Определим зависимость 2(д。), где переменной является размер одной поставки. График такой зависимости аналогичен графику рис. 7.9, считая, что функция 2 (д。) непрерывна, найдем ее экстремум (минимум) то ее первой производной, приравненной нулю:
dz __ Q「Cn + аСм °
d%gU 2*
2QrCn2QrCnСледовательно, оптимальный размер поставки будет
2QrCn
2QrCn
(7.46)
Уравнение (7.46) известно под названием формулы размера партии экономичной величины заказа. Найдем время между двумя поставками
噴Т»(7.47)
где Тг — длительность года в соответствующих единицах времени.
В реальных условиях пополнение и исполнение заказов производятся в течение некоторого времени и с запаздыванием, расход материалов со склада может идти неравномерно и, наконец, параметры системы пополнения запасов имеют стохастический характер. В результате появляется дефицит в материалах. В этой связи следующий заказ подают раньше, чем будут полностью израсходованы материалы предыдущей поставки в соответствии с графиком, приведенным на рис, 7.11. Поставка начинается тогда» когда на складе еще остались материалы величиной Ад・
Из площади трапеции ABCD можно найти среднее количество материала на складе: 9叩=矍+厶夕・ Подставим 夕叩 в уравнение (7.45)
z = Qr[^"+,} + "“ (矍 + А,)* (7.48) Оптимальный размер поставки в этом случае будет аналогичен, что и в (7.46).
Полученные результаты показывают, что величина постоянного переходного запаса увеличивает затраты на содержание складского хозяйства, но не влияет на размер заказа. Величина переходного запаса может быть обоснована путем сравнения затрат на содержание дополнительного запаса и возможных потерь в связи с простоями производства из-за отсутствия материалов. Для пояснения задачи рассмотрим пример.
Пример 7.13. Ремонтное предприятие в течение года потребляет 560 т различных материалов. Затраты на доставку одной партии материалов составляют 100 руб., затраты на хранение одной тонны в течение года — 50 руб., коэффициент издержек при хранении — 1,1. Определить оптимальный размер партии и периодичность поставки.
Для расчета по (7.46) и (7.47) имеем исходные данные: Qr= = 560 т, Сц=100 руб., См = 50 руб./т, а=1,1. Тогда ^опт~ =]/ 2・5£О.£О =45,13т. Tout=45,13/560=0,0806 года = 29 дней.
Определим размер запаса на складе Aq, если убыток предприятия из-за отсутствия материалов составляет 1000 руб./день. Максимальное время выполнения поступившего заказа——15 дней. Если принять число рабочих дней в году — 280, то расход материала в сутки составит 560/280=2 т. Обозначим дополнительные данные: Суб=1000 руб./день, /Зак=15 дней, Qrr=2 т/день. Затраты на хранение запаса величиной Ад составят: C^ = CCq. Убыток от простоя предприятия из-за задержки выполнения заказа: СДф= =Суб (^зак — A^/Qдн) • Совокупные затраты: Z=CwAg + Cy6 «зак — 一 A^/Qah). Анализ полученной зависимости показывает, что при (方зак — Ag/QflH)=0 имеем 2тт=СмАд. Тогда Д^опт = ^зак^дн=30 т.
Контрольные вопросы
Что такое оптимизация и как математически формулируется задача оптимизации? Приведите примеры.
В чем сложности и трудности формулирования и решения на ЭВМ задач оптимизации? Приведите примеры,
Что такое математическое программирование и какие математические методы входят в него?
Как решить задачу иа ЭВМ определения перспективной структуры МТП? Постройте линейную модель задачи.
Как решить на ЗВМ задачу выбора оптимального комплектования МТП? Постройте линейную модель задачи.
Расскажите о назначении и содержании симплекс-метода для решения задач линейного программирования.
Расскажите о транспортных задачах и методах их решения на ЭВМ.
Как решить на ЭВМ задачу оптимального распределения работ по маркам тракторов? Постройте модель задачи.
Как решить задачу оптимального выбора схемы электроснабжения? Постройте модель задачи.
Как решить задачу оптимального размещения ремонтного фонда по мастерским? Постройте модель задачи.
Что такое динамическое программирование н какой принцип заложев в этот метод? Поясните метод на задаче выбора пути.
Как решить задачу оптимизации выбора трассы линии электропередачи? Постройте модель задачи.
Расскажите о методе сетевого планирования на примере сетевого графика ремонта трактора. Поясните понятие «работа», 《событие», «критический путь».
Что такое задачи массового обслуживания и как они решаются на ЭВМ? Поясните основные понятия метода и искомые функции в этих задачах.
Расскажите о задачах управления запасами.
ЛИТЕРАТУРА
Вычислительная техника в инженерных и экономических расчетах/Под ред. А. В. Петрова—М.: Высшая школа, 1984. — 322 с.
Вентцель Е. С. Исследование операций: Задачи, принципы, методология.—М.: Наука, 1980. — 208 с.
Веитцель Е. С. Исследование операций. — М.: Советское радио, 1972.— 552 с
Кравченко Р. Г. Математическое моделирование экономических процессов в сельском хозяйстве. — М.: Колос, 1978. — 424 с.
Мартыненко И. И., Саркисян В. И. Вычислительная техника в инженерных и экономических расчетах. — М.: Колос, 1980.—287 с.
Практикум по вычислительной технике в инженерных и экономических расчетах/И. И. Мартыненко, В. Т. Сергованцев, В. И. Саркисян и др.; Под ред. И. И. Мартыненко.—М.: Колос, 1982.—207 с.
П я р н п у у А. А. Программирование на алгоритмических языках. — М.: Наука, 1983. — 319 с.
Сергованцев В. Т., Бледных В. В. Вычислительная техника в инженерных и экономических расчетах/Под ред. В. Т. Сергованцева. — М.: Финансы и статистика, 1983. — 208 с.
Сергованцев В. Т., Смирнов С. М. Сборник задач по вычислительной технике в инженерных и экономических расчетах. — М・:Финансы и статистика, 1985. — 160 с.
Уолш Б. Программирование на языке Бейсик: Пер. с англ.——М.: Радио и связь, 1987.——336 с.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
Автоматизация программирования 36
Адрес 19
—косвенный 83
—модифицированный 83
Алгоритм 35
—Гориера 49, 87
—линейного процесса 41
—итераций 152
—нахождения количества отрицательных, положительных и нулевых чисел 52
критического пути 198
максимума и минимума 51
—перестановки 53
—разветвления 43
—суммирования 46
—суммы ряда 47
—умножения матриц 49
—цикла 42
Алгоритмический язык 37
Амперсенд 117
Аппроксимация функции 153
Аппарат обслуживания 200
Арифметика двоичная 9
Арифметико-логическое устройство 17
Арифметические основы 6
Ассемблер 38
Базисное решение 172
Байт 18
Байтмультиплексный 23
Бейсик 90
Бит 18
Блокмультиплексный 23
Вектор 92
Величина 91, 117
—символьная 91
Вероятностей теория 161
Возмущающее воздействие 156
Выражение 92, 119
Вычислительная машина 5
—техника 6
Горнера формула 48, 87
Графопостроитель 21
Данные 5
Дешифратор 15
Дизъюнкция 13
Динамическое программирование 184
Директивы Бейсика 113
Дисплей 21'
Допустимое решение 172
Единая система ЭВМ 21
Единицы измерения информации 18
Естественная форма 10
Запоминающее устройство см. Память
Зацикливание 33
Заявка 200
Идентификатор 118
Инверсия 13, 70
Информационные ресурсы 3
Информация 5
Интенсивность обслуживания 201
Исключающее ИЛИ 68
Исследование операций теория 150»
160
Исходные данные 5, 36
Канал обслуживания 200
Каноническая задача 171
Код 5, 28
Команда 28
——косвенного обращения к памяти 83, 86
перехода 83
Комментарий 105, 124
Компьютер 25
Константа 91, 118
Контрольный пример 36
Конъюнкция 13
Косвенный адрес 83
Косвенный переход 84
Критерий оптимальности 156
Критический путь 194
Курсор 21
Линейный процесс 40
Литерал 137
Логические величины 68, 117, 147
—константы 68
—операции 12, 68
—основы ЭВМ. 12
—переменные 68, 117, 147
Логические элементы и величины 12
И 12, 68
ИЛИ 13, 68
ИЛИ—НЕ 13
——НЕ 13,
Логическое сложение 13f 68
по модулю 68
—умножение 13, 69
Максимум 51
Массового обслуживания теория 161, 200
Математическая модель 35, 150, 160
—статистика 162
—формулировка задачи 35
Ма$о*атический метод 35, 150, 160
Массив 92
Матрица 49, 92
Методы 150
—итераций 151
—Монте-Карло 161
—последовательного улучшения плана 172
—статистических испытаний 161
—численные 150
Микрокалькулятор 56
Мвкр окомпьютер 25
Микропроцессор 18
МикроЭВМ 25
Минимум 51
Модель математическая 35, 150, 160
—сетевая 191
Модификация адреса 83
Миогопрогр аммный режим 22
Мультиплексный канал 23
Наименьших квадратов способ 153
Накопители на магнитных носителях 19
Нормальная форма 10
Обратный код 11
Обращейие матриц 113
Обслуживающий аппарат 200
Ограничения 156
Одноадресная машина 30
Оператор 94
—ввода 104, ПО, 131
—возврата 106
—восстановлена данных 103
—вызова 144
—выборки 101, 109
—вывода 99, НО, 132
—данных 101
—комментариев 105
—конца 98, 131
—матричный 108
—нестандартной функции 105
—обращения матриц 113
—описания типов 146
переменных 146
—останова 98, 131
—паузы 131
—переключателя 97
—перехода 96, 125
к подпрограмме 106
—присваивания 95, 110, 124
—продолжения 130
—процедуры 144
—размерности 108, 140
—транспонирования матриц 113
—умножения матриц 112
—условного перехода 96, 126
—формата 134
—функции 105, 141
—цикла 97, 128
Операторы Бейсика 94
—Фортрана 122
Операционная система 24
Оптимальное управление 156
Отладка программы 78, 36
Отношения 127
Очередь 201
Пакеты прикладных программ 24
Память адресуемая 57
—внешняя 17
—оперативная 14, 17, 19
—магазинная 58
—программная 58
—стековая 58
Переменные 91, 118
—символьные 91
Перестановка элементов 52
—чисел по возрастанию 53
Переход 31, 38
—безусловный 31, 33, 71
—естественный 31, 33
—косвенный 83
—условный 31, 33, 73
Плавающая запятая 10
Плотность потока 201
заявок 201
Подпрограмма 105, 144
Полином 48
Полусумматор 16
Последовательность подготовки задачи 33
Постоянная 91, 117
Поток требований 201
По умолчанию 128, 147
Префиксная клавиша 59
Принцип оптимальности 185
Программа 36
—исходная 96
—машинная 28
—рабочая 36
Программирование 27
—динамическое 184
—линейное 160, 162
—математическое 160
Программное обеспечение 24, 37
Процессор 18
—центральный 22
Работа 191
—фиктивная 192
Разветвляющийся вычислительный процесс 43
Разрешающий элемент 174
Регистр 15
Редактирование 77
Селектор 19
Селекторный канал 23
Сетевая модель 191
Сетевое планирование 162, 191
Сетевой график 194
Символы 90, 117
Символьная величина 91
Снмплекс-метод 171
Система малых ЭВМ 24
Система с отказами 202
—с ожиданием 202
—счисления 6
двоичная 7
двончно-десятичная 9
позиционная 7
шестиадцатернчная 7
Сложение по модулю 68
Случайное число 63
Событие 191
Среднее значение 66
Среднеквадратнческое отклонение 66
Стандартная программа 36
Стандартные функции 92, 121
Статистических испытаний теория 161
Стек 58
Сумматор 15
Суммирование 45
—членов ряда 46
Счетный вход 14
Счетчик 15
Теория вероятностей 161
—игр 162
—надежности 161
—управления запасами 24, 161
Транслятор 37
Транспонирование матриц 113
Транспортная задача 177
Требование 200
Триггер 14
Умножение матриц 49, 112
Управление 156
—запасами 204
Устройство алфавитно-цифровое пе* чатающее 20
—арифметико-логическое 17
—ввода-вывода 17, 20
——запоминающее см. Память
постоянное 57
—управления 17, 19
Файл 114, 132
Факториал 80
Форма записи чисел 10
естественная 10
нормальная 10
Формат 134
Фортран 117
Функция 105, 140
Целевая функция 157
Цикл 42, 33
—в цикле 33, 42
Циклический процесс 41
Численные методы 151
СПИСОК СОКРАЩЕНИИ
ABM — аналоговая вычислительная машина
АЛУ ——арифметико-логическое устройство
АЦПУ — алфавитно-цифровое печатающее устройство
В ЗУ — внешнее запоминающее устройство
ВМ — вычислительная машина
ДВК — диалоговый вычислительный комплекс (мнкроЭВМ)
ДОС — дисковая операционная система
ЕС ЭВМ — Единая система ЭВМ
ЗУ — запоминающее устройство
ИВО — информационно-вычислительное обеспечение
МК — микрокалькулятор
НМБ — накопитель на магнитном барабане
НМД — накопитель на магнитном диске
НМЛ — накопитель на магнитной ленте
ОЗУ — оперативное запоминающее устройство
ОП ——оперативная память
ОС — операционная система
ПЗУ — постоянное запоминающее устройство
ПМК ——программируемый микрокалькулятор
ПО—программное обеспечение
ППП — пакет прикладных программ
СМ ЭВМ — система малых ЭВМ
СП — стандартная программа
УВВ — устройства ввода-вывода
УУ — устройство управления
ЦВМ — цифровая вычислительная машина
ЦП — центральный процессор
ЭВМ — электронная вычислительная машина
СОДЕРЖАНИЕ
Введение
Глава 1. Основы электронных вычислительных машин ....
Арифметические основы
Логические основы
Структура ЭВМ.
Краткие сведения об ЭВМ
Глава 2. Подготовка задач для решения иа вычислительных машинах
Принципы программирования
Последовательность подготовки задач
Алгоритмы типовых задач
Глава 3. Решение задач на программируемых микро калькуляторах .
Общие сведения о микрокалькулятор ах
Вычисления без составления программ
Вычисления по программам
Команды косвенных переходов н обращений ....
Глава 4. Алгоритмический язык Бейсик
Простейшие конструкции языка
Основные операторы присваивания н управления ..
Операторы ввода и вывода
Функции н подпрограммы
Операторы для работы с массивами
Директивы Бейсика
Глава 5. Алгоритмический язык Фортран
Простейшие конструкции языка
Основные операторы присваивания н управления ...
Операторы ввода и вывода
Функции и подпрограммы
Операторы описания типов переменных
Глава 6. Методы решения инженерных задач
Общие сведения о методах решения задач ....
Численные методы решения инженерных задач ...
Аппроксимация функций по способу наименьших квадра
Гл а в а 7. Задачи оптимального управления и методы их решения .
Общие сведения о задачах оптнмнзацнн
Задачи линейного программирования
Транспортные задачи
Динамическое программирование
Сетевое планирование
Задачи массового обслуживания
Управление запасами
Литература
Предметный указатель
Сергованцев В. Т., Бледных В. В.
С32 Вычислительная техника в инженерных и экономических расчетах: Учебник. — 3-е изд., перераб. и доп. — М.: Финансы и статистика, 1988. — 214 с.: ил.
ISBN 5—279—00083—3.
Даны общие принципы построения цифровых вычислительных машин и выполнения ими вычислительных операций, алгоритмы типовых задач. Рассмотрены основы программирования иа языках Бейсик, Фортран. Приведены математические методы решения инженерных н экономических задач сельскохозяйственного производства. В третьем издании (2-е изд. — 1983 г.) учтены новейшие достижения в области программного обеспечения вычислителыюй техники.
Для студентов инженерных факультетов сельскохозяйственных вузов.
С
2405000000—089
010(01)—88
126—88
ББК 32.973.2
Учебное издание
Владимир Трофимович СергованцевВасилий Васильевич Бледных
ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКАВ ИНЖЕНЕРНЫХ И ЭКОНОМИЧЕСКИХ РАСЧЕТАХ
Зав. редакцией И. Г. ДмитриеваРедактор Г. А. Петрова
Мл. редактор Г. 4 СтуденикинаХудож. редактор С. Л. ВиттеТехн, редактор Л. Г. ЧелышеваКорректоры Т. М. Колпакова, Г. В. Рослякова,Е. В. Люминарская, Е. А. ОвешниковаПереплет художника Л. М. Наумова
ИБ № 2222
Сдано в набор 25.12.87. Подписано в печать 28.06.88. А 11225. Формат 60x90%& Бум. кн.-журн. Гарнитура «Литературная». Печать высокая. Усл. п. л. 13,5. Усл. кр.-отт. 13,5. Уч.-нзд, л. 14,26. Тираж 15000 экз. Заказ 48. Цена 80 коп.
Издательство «Финансы и статистика», 101000, Москва,ул. Чернышевского, 7.
Великолукская городская типография управленияиздательств, полиграфии н книжной торговли
Псковского облисполкома, 182100, г. Великие Луки,ул. Полиграфистов, 78/12
В.Т. Сер「ованцев, В.В. ВпеАннх
ВЫЧИСЛИТЕЛЬНАЯ
ТЕХНИКАв инженерныхи экономическихрасчетах
Третье издание,переработанное и дополненное
Допущено Управлением высшегои среднего специального образования「осуАарсг8енно「о агропромышленного комитета СССРв качестве учебника дпя студентов высшихучебных заведенийпо инженерным специальностям сельского хозяйства
Scan Pirat
МОСКВА"ФИНАНСЫ И СТАТИСТИКА01988
ББК 32.973.2
УДК 681.3.004.14(075.8)
Рецензенты: С. П. Прохоров н кафедра автоматизации сельскохозяйственного производства Украинской сельскохозяйственной академии.
СС126—88126—882405000000—089
С
С
126—88
126—88
010(01)—88
ISBN 5—279—00083—3© Издательство «Финансы и статистика», 1983
© Издательство сФииансы и статистика», 1988