Cтраница 3
В программе 6.1 F одношаговый интегратор системы ОДУ оформлен в виде подпрограммы с именем EUL со следующими параметрами: N - число уравнений в системе; X - начальная точка; Н - шаг интегрирования; Y - массив размерности N для начальных условий и результатов; RP - имя подпрограммы для вычисления правых частей решаемой системы ОДУ. Последний формальный параметр позволяет из одной программы обращаться к решению разных систем ОДУ. Параметры системы ОДУ передаются в подпрограмму вычисления правых частей через COMMON-блок, чтобы не нарушать общности подпрограммы интегратора. [31]
В листинге программы 7.3 F не приведены подпрограммы метода секущих SECANT и интегратора Рунге-Кутты RK21, взятые без изменения из программ 1.6 F и 6.2 F. Названные подпрограммы записаны в отдельном файле, который подсоединяется к программе 7.3 F на этапе компиляции и редактирования. Предлагаемый способ передачи параметров не нарушает общности подпрограммы SECANT и RK21 и позволяет использовать их без изменения. Синтаксис языка Фортран запрещает включать формальные параметры подпрограмм и функций в COMMON-блоки. [32]
В программе 5.1 F метод средних прямоугольников оформлен в виде подпрограммы RECT, имеющей входные параметры: А, В - пределы интегрирования; N - число разбиений интервала интегрирования; F - имя подпрограммы для вычисления подынтегральной функции и выходной параметр; S - приближенное значение интеграла. Введение имени F в число формальных параметров позволяет составлять программы, включающие вычисление интегралов от нескольких различных функций. В вызывающей программе имена подпрограмм всех подынтегральных функций должны быть включены в оператор EXTERNAL. Порядок Р и аргумент функции Бесселя Z передаются в подпрограмму-функцию F ( X) через неименованный COMMON-блок. [33]
О динамической загрузке программ следует сказать особо. С другой стороны, счетные модули, впервые реализованные на БЭСМ-6, широко используют эти средства. Основной принцип динамической загрузки состоит в том, что каждый очередной оверлей формируется с учетом ранее загруженных программ. Если какая-либо подпрограмма или COMMON-блок в момент обращения к динамической загрузке уже находятся в памяти, они не включаются в загружаемый оверлей, тем самым каждая подпрограмма или COMMON-блок присутствуют в памяти в единственном экземпляре. [34]
Если информация, содержащаяся в COMMON-блоке, не нужна, то в программе можно не описывать соответствующий COMMON-блок. Поэтому при составлении подпрограммы обычно придерживаются такого принципа. Информация, необходимая для работы подпрограммы, а также основные результаты оформляются в виде формальных параметров. Иногда представляют интерес и промежуточные значения каких-либо переменных подпрограммы. Такие результаты выдаются через COMMON-блоки. [35]
Эта подпрограмма по содержимому своего аргумента - четырехкомпонентного вектора атрибутов - генерирует четыре элемента списка данных. Нулевое значение какой-либо компоненты вектора атрибутов IAV включает режим умолчания - используется некоторое стандартное для данного случая значение атрибута. Если программа L4STATS вызывается из процедуры, генерирующей элемент, то в режиме умолчания используется значение соответствующего атрибута сегмента, к которому принадлежит элемент. Если эта подпрограмма вызывается при инициализации сегмента, то нулевые компоненты вектора атрибутов заменяются значениями, определенными при создании пакета. Атрибуты сегмента помещаются в помеченный COMMON-блок, и поэтому они легко доступны при генерации элементов. [36]
О динамической загрузке программ следует сказать особо. С другой стороны, счетные модули, впервые реализованные на БЭСМ-6, широко используют эти средства. Основной принцип динамической загрузки состоит в том, что каждый очередной оверлей формируется с учетом ранее загруженных программ. Если какая-либо подпрограмма или COMMON-блок в момент обращения к динамической загрузке уже находятся в памяти, они не включаются в загружаемый оверлей, тем самым каждая подпрограмма или COMMON-блок присутствуют в памяти в единственном экземпляре. [37]