- •«Информатика»
- •21. Оператор format
- •Спецификация X
- •Спецификация I
- •Правило:
- •Разделители
- •Спецификация f
- •Особенности набора числовых данных при вводе информации
- •Использование повторителей в операторе format
- •Примечание
- •Вывод по спецификации Fw.D
- •Ввод по спецификации Ew.D
- •Вывод информации по спецификации Еw.D
- •Примечание: При бесформатном выводе данные автоматически выводятся по спецификации е15.7. Ввод и вывод информации по спецификации Gw.D
- •22. Подпрограммы
- •23. Оператор-функция
- •24. Подпрограмма function
- •Правило:
- •Правило:
- •Мини задача 1:
- •If(y1(1).Gt.Y1(2)) write(*,*)'Максимум на левой границе
- •If(y1(100).Gt.Y1(99)) write(*,*)'Максимум на правой границе
- •25. Подпрограмма subroutine.
- •Примечания:
- •26. Способы передачи данных в подпрограмму.
- •If (логическое выражение 1) return 1
- •If (логическое выражение 2) return 2
- •Примечание:
- •27. Передача данных посредством оператора common
- •Правило:
- •28. Использование библиотек стандартных программ (бсп)
- •If(ier.Eq.1) write (6,*)’Нет решения. Проверьте исходные данные’
- •If(ier.Eq.2) write (6,*)’Неверное количество уравнений’
- •29. Графическое моделирование функции
28. Использование библиотек стандартных программ (бсп)
Библиотеки стандартных программ позволяют программисту использовать уже готовые подпрограммы (стандартные или составленные им самим), в любой своей программе. Это избавляет от необходимости повторения в каждой программе каких-либо вычислений, выполнявшихся ранее в других программах. Для этого надо составить одну подпрограмму, произвести её отладку, тестирование и занести в библиотеку. К стандартным программам из БСП относится вычисление специальных функций, интегралов и другие. Благодаря этому не приходится каждый раз составлять алгоритм вычисления , например, интеграла. Мы просто обращаемся к стандартной программе из БСП, засылаем в неё значения фактических параметров, обратно получаем результат. Библиотеки программ подключаются при их вызове. При этом указывается список фактических параметров.
Основные термины, которые используются при работе с БСП:
вектор-столбец– одномерный массив;
матрица– двухмерный массив;
код ошибки(чаще всего этоIER) – это может быть переменная целого типа с любым именем, которая показывает или обозначает, в каком состоянии стандартная программа (СП) завершила свою работу. Код ошибки всегда нужно анализировать после выполнения стандартных программ. Этот анализ осуществляется при помощи оператораIF.
Пример:
IF(IER.EQ.1) …
Обращение к БСП осуществляется при помощи оператора CALL:
CALL имя (список фактических параметров)
Задача:
Решить систему линейных алгебраических уравнений:

В БСП уже есть программа для решения системы линейных уравнений. Поэтому воспользуемся ей, чтобы не тратить время на составление своей программы.
В описании к БСП находим подходящую стандартную программу:
программа для решения системы линейных алгебраических уравнений SIMQ(A,B,N,IER)
где А– матрица коэффициентов при неизвестных, расположенных по столбцам;
В– вектор-столбец свободных
членов. Заполняется значениями свободных
членов системы линейных алгебраических
уравнений (5, 4, 6). В результате работы
подпрограммы вычисляются значения
неизвестных
и
эти неизвестные записываются в массив
В, а предыдущие значения членов
уничтожаются;
N– размерность массивов;
IER– код ошибки, еслиIER=0, то решение получено, еслиIER=1, то решение не может быть получено, так как дискриминант равен нулю, еслиIER=2 – количество уравнений меньше трех.
С Головная программа
DIMENSION A(3,3),C(3)
WRITE (6,*)’Введите коэффициенты при Х по строкам’
READ (5,*) ((A(I,J),J=1,3),I=1,3)
Введём: 2. 3. 4. -1. -2. 3. 1. -3. 0.
WRITE (6,*)’Введите массив свободных членов’
READ (5,*) C
Введём: 5. 4. 6.
CALL SIMQ(A,C,3,IER)
Идет обращение к стандартной программе SIMQ. В этой СП будет получено решение, а результат этого решения будет находиться в массиве С.
С Анализ кода ошибки
IF(IER.EQ.0) WRITE (6,*)’Решение: X1, X2, X3=’, (C(I),I=1,3)
If(ier.Eq.1) write (6,*)’Нет решения. Проверьте исходные данные’
If(ier.Eq.2) write (6,*)’Неверное количество уравнений’
PAUSE
STOP
END
Задача:
Вычислить значение определенного интеграла:
![]()
Воспользоваться программой из БСП: QG5(XL,XU,FCT,Y)
где XL– левый предел интеграла;
XU– правый предел интеграла;
FCT– внешняя
подпрограмма-функция, которая описывает
решаемое уравнение
;
Y– результат.
Эта программа с автоматическим выбором
шага и для своей работы требует
использование подпрограммы-функции, в
которой описывается решаемое уравнение
.
Начинаем с написания подпрограммы –
функции.
С Подпрограмма-функция
FUNCTION FUN(X)
В качестве подпрограммы-функции может быть любая функция с любым именем.
FUN=SIN(X)**2–COS(X)**2
RETURN
END
С Головная программа
EXTERNAL FUN
WRITE (6,*)’Введите Хнач , Хкон’
READ (5,*) A,B
Обращаемся к стандартной подпрограмме вычисления определенного интеграла. Фактические параметры А и В, имя функции FUN. Результат вычисления интеграла будет помещен в переменную с именем Y.
CALL QG5(A,B,FUN,Y)
WRITE (6,*)’Вычисленное значение интеграла =’,Y
PAUSE
STOP
END
Поскольку имя подпрограммы-функции FUNнаходится в списке фактических параметров при обращении к стандартной программеQG5, то имя этой функции должно быть описано в оператореEXTERNALв самом начале программы. Для компилятора это является признаком, чтоFUNне простая переменная, а функция с именемFUN.
Задача:
Решить дифференциальное уравнение и построить график для:
на отрезке
с шагомdx при
.
Использовать стандартную программу RK2(FUN,H,X1,Y1,K,N,VEC)
где FUN–
подпрограмма-функция, которая описывает
значение функции
;
Н– шаг интегрирования;
X1, Y1– начальные значения;
K– количество шагов между двумя сохраняемыми значениями;
N – количество значений;
VEC– результирующий вектор-столбец длинныN, в котом сохраняются вычисленные значения.
Величина Kзадаёт точность решения (количество промежуточных вычисленных точек, которые не запоминаются).
![]()
С Подпрограмма-функция
FUNCTION FUNC(X,Y)
FUNC=2*SIN(X)+COS(Y)
RETURN
END
C Головная программа
DIMENSION VEC(1000) Описываем массив, в который будут записываться результаты расчета. Размерность его задается с запасом.
EXTERNAL FUNC Описываем имя подпрограммы-функции как внешней, т.к. ее имя находится в списке фактических параметров при обращении к RK2
READ (5,*) XN,XK,X0,Y0,DX,K
N=(XK–XN)/DX/K
CALL RK2(FUNC,DX,X0,Y0,K,N,VEC)
Результат вычислений будет помещён в массив VEC размерностью N элементов.
CALL GRAF(VEC,N)
Здесь идёт обращение к программе GRAF, которая выведет график вычисленных значений массива VEC. Описание этой программы см. в разделе "работа с текстом".
DO 2 I=1,N
Распечатаем значения массива в столбец:
WRITE(6,*)'При Х=',XN,'Y=',VEC(I)
XN=XN+DX*K
2 CONTINUE
STOP
END
