Лабораторна робота № 8
Використання кольорового графічного режиму побудови графіків
1. Порядок виконання роботи
1.1. Скласти алгоритмічною мовою Фортран програму чисельного диференціювання табличної функції та використати для зображення функції і її похідних на моніторі кольоровий графічний режим.
1.2. Відлагодити на комп’ютері складену програму.
1.3. Ввести числові дані та отримати результат.
1.4. Скласти звіт про роботу й захистити його.
2. Вказівки до виконання роботи
2.1. Чисельне диференціювання табличної функцій
При розв’язуванні ряду інженерних задач виникає необхідність диференціювання функцій, заданих у вигляді таблиці (табличних функцій):
№ вузла
1
2

n

N

x
















У цих випадках виконують чисельне диференціювання, яке полягає у наближеному знаходженні похідної у вузлах за спеціальними формулами.
Найпростішою є формула для обчислення похідної функції як відношення скінченого приросту функції до відповідного приросту аргументу. Так, похідну у n-му вузлі таблиці, якою задана функція, наближено можна обчислити за формулою

де – крок аргументу. Вона отримана за рахунок заміни функції в околі точки n інтерполяційним поліномом першого степеня. Очевидно, що чим менша величина кроку, тим вища точність обчислення похідної.
Точніші формули для обчислення похідної при заданому h (тут і далі будемо вважати, що вузли рівновіддалені, тобто h = const) отримують, замінивши функцію інтерполяційним поліномом степеня, більшого від першого. Так, на відміну від наведеної вище двоточкової формули чисельного диференціювання отримують три-, чотири-, п’ятиточкові і т.д. формули. У цьому випадку для обчислення похідної необхідно у відповідний вираз підставляти значення функції не у двох, а у трьох, чотирьох, п’яти і т.д. сусідніх вузлах. Такі формули відповідно називають три-, чотири- і п’ятиточковими.
В інженерних задачах найчастіше використовують триточкові формули:

Очевидно, що при необхідності чисельного диференціювання функції, заданої аналітично, потрібно спочатку протабулювати функцію (як це робилося в лабораторній роботі № 2), а потім, використовуючи формули чисельного диференціювання, обчислити значення похідної в усіх її вузлах.
Приклад. Для заданої функції

скласти програму її чисельного диференціювання в діапазоні від a до b при заданій у цьому діапазоні кількості N рівновіддалених вузлів. Порівняти наближені значення похідної з їх точними значеннями. Результати обчислень вивести до файла у вигляді таблиці, яка би містила порядковий номер вузла, значення аргументу х, значення функції у, наближене значення похідної та її точне значення. Вивести на екран монітора кольорове графічне зображення функції та точне і наближене значення її похідної.
Задана функція диференціюється аналітично. Формула, за якою обчислюється точне значення похідної, має вигляд:

Один із можливих варіантів програми наведений далі. Він передбачає виведення на екран монітора у кольоровому графічному режимі протабульованої функції y(x) та наближеного і точного значень її похідної Для використання цієї можливості в основну програму слід вставити два оператори (у тексті програми ці оператори виділені жирним шрифтом). Перший з них
INCLUDE ‘FGRAPH.FI’
підключає графічну бібліотеку, а другий
CALL GRAF(X, Y, Y1, Y1T, N)
– це звернення до підпрограми GRAF побудови графіків функції та наближеного і точного значень її похідної у вузлах. У процесі роботи підпрограми GRAF використовуються ще три інших підпрограми: підпрограма VID обчислення максимальних за модулем значення функції й значення похідних функції у вузлах та формування значень функції й значень похідних функції “у відносних одиницях”, підпрограма PRMM визначення максимального
і мінімального значень функції чи похідних у вузлах та підпрограма CR_REAL перетворення дійсного числа в ASCII код.
Для виконання поставленого завдання студентові необхідно скласти лише основну програму. Підпрограми GRAF, VID, PRMM і CR_REAL складені викладачами кафедри “Електричні машини та апарати” НУ “Львівська політехніка” і містяться у програмному забезпеченні даної дисципліни.
Для використання кольорового графічного режиму в оболонці Microsoft Developer Studio слід створити спеціальний проект.
Послідовність створення проекту та запуску програми є такою:
1. У верхньому меню знаходимо опцію File, а далі підопцію New, у якій вибираємо зі списку графу Project Workspace, як показано на рис. 14, та натискаємо ОК.


Рис. 14. Оболонка Microsoft Developer Studio
2. Послідовно вказуємо назву, місце розташування та тип проекту, як показано на рис. 15.

Рис. 15. Послідовність створення та вибір типу проекту
ПАМ'ЯТАЙТЕ!!! Попередньо у робочій папці (у прикладі це папка Lab8, що записана за адресою D:\Students\EM-11\ ) слід записати набрану основну програму (LAB8.FOR) та файл GRAF.FOR з програмного забезпечення даної дисципліни, де містяться підпрограми GRAF, VID, PRMM і CR_REAL.
3. У верхньому меню знаходимо опцію Insert та підопцію Files into Project. У вікні, яке появиться, слід вибрати файли, що ввійдуть до проекту (відповідно до прикладу це LAB8.FOR та GRAF. FOR) та натиснути ОК або Add. У результаті цієї операції зліва з’явиться віконце з деревом проекту, як показано на рис. 16.
4. Компілюємо файли LAB8.FOR та GRAF. FOR. У результаті виконання такої операції у робочій папці автоматично створиться папка DEBUG, у якій будуть знаходитися файли з розширенням *.obj.
5. Будуємо проект та створюємо файл lab8.ехе.
6. Закриваємо Microsoft Developer Studio.
7. Налаштовуємо відеорежим. Оскільки графічна бібліотека Microsoft Developer Studio використовує 256 кольорів, то для налаштування переключення біжучого відеорежиму у режим 256 кольорів слід виконати наступні операції:
знайти файл з іменем проекту і розширенням *.ехе (відповідно до прикладу, файл міститься за адресою: D:\Students\EM-11\lab8\debug);
навести мишку на файл, натиснути її праву кнопку та вибрати опцію меню Властивості (англ. Properties);
у віконечку знайти закладку Сумісність та вибрати параметри екрану (поставити значок ( навпроти тексту „256 кольорів”), як показано на рис. 17;
натиснути ОК.
8. Запускаємо програму (файл lab8.exe) на виконання.

Рис. 16. Вигляд вікна з деревом проекту та файлами, що складають проект

Рис. 17. Вибір параметрів екрану
С
С
С
С
С
C
Лабораторна робота № 8
Чисельне диференціювання таблично заданої функції
Виконав ст. гр. ЕМ–11 Вдалий Б.
Підключення графічної бібліотеки



INCLUDE ‘FGRAPH.FI’

C
Оголошення розміру масивів.

С
C
C
C
Тут:
X
Y
Y1
Y1T
– масив значень аргументу функції у вузлах;
– масив значень функції у вузлах;
– масив наближених значень похідної функції у вузлах;
– масив точних значень похідної функції у вузлах.

C
C
Кількість вузлів таблично заданої функції не може перевищувати 100,
в іншому випадку розміри масивів слід змінити!



DIMENSION X(100), Y(100), Y1(100), Y1T(100)

C
Введення вхідних даних у діалоговому режимі. Границі інтервалу



1
2
WRITE (*, 1)
FORMAT (2X, ‘A=’,$)
READ (*, *) A
WRITE (*, 2)
FORMAT (2X, ‘B=’,$)
READ (*, *) B

C
Кількість вузлів



3
WRITE (*, 3)
FORMAT (2X, ‘N=’,$)
READ (*, *) N

C
Обчислення величини кроку



H = (B–A)/(N–1)

C
C
Обчислення значень аргументу та відповідних їм значень функції у вузлах
(табулювання функції)



4
DO 4 I = 1, N
X(I) = A + H*(I–1)
Y(I) = EXP(–X(I))*SIN(X(I))

C
C
Чисельне диференціювання функції у вузлах.
Обчислення наближеного значення похідної функції у 1-му вузлі



Y1(1) = (–3.*Y(1) + 4.*Y(2) – Y(3))/(2.*H)

C
Обчислення наближених значень похідної функції у вузлах від 2-го до (N–1)-го



5
DO 5 I = 2, N–1
Y1(I) = (Y(I + 1) – Y(I – 1))/( 2.*H)

C
Обчислення наближеного значення похідної функції у N-му вузлі



Y1(N) = (Y(N – 2) – 4.*Y(N – 1) + 3.*Y(N))/(2.*H)

C
Обчислення точних значень похідної функції у всіх вузлах



6
DO 6 I = 1, N
Y1T(I) = EXP(–X(I))*(COS(X(I)) – SIN(X(I)))

C
Відкривання файла вихідної інформації



OPEN (1, FILE = ‘REZ.DAT’, STATUS = ‘UNKNOWN’)

C
Друкування заголовку таблиці



7

*
*
*
WRITE (1, 7)
FORMAT (2X, 61(‘–’)/
2X, ‘| n | Аргумент х | Функція y |’,
‘Похідна (наб.)|Похідна (точ.)|’/
2X, 61(‘–’))

С
C
C
Друкування номеру вузла, значення аргументу, значення функції,
наближеного значення похідної та її точного значення
у файл вихідної інформації



8

*
WRITE (1, 8) (I, X(I), Y(I), Y1(I), Y1T(I), I = 1, N)
FORMAT ( 2X, ‘|’, I3, ‘ | ’, E10.3, ‘ | ’, E10.3, ‘ | ’,
E12.5, ‘ | ’, E12.5 ,‘ |’)

C
Друкування закінчення таблиці



9
WRITE (1, 9)
FORMAT (2X, 61(‘-’))

С
Закривання файла вихідної інформації



CLOSE (1)

С
C
Звернення до підпрограми побудови графіків функції та
наближеного і точного значень її похідної у вузлах



CALL GRAF(X, Y, Y1, Y1T, N)

C
Закінчення роботи програми



STOP
END


Текст підпрограм GRAF, VID, PRMM і CR_REAL:
С
С
С
C
Підпрограма GRAF
побудови графіків функції та наближеного
і точного значень її похідної у вузлах
**********************************************************

C

Опис формальних параметрів.

C
Вхідні величини:

C
C
C
C
C

X
Y
Y1
Y1T
N
– масив значень аргументу функції у вузлах;
– масив значень функції у вузлах;
– масив наближених значень похідної функції у вузлах;
– масив точних значень похідної функції у вузлах;
– кількість рівновіддалених вузлів на інтервалі диференціювання.

C
Вихідні величини:

C

немає.

C
**********************************************************



SUBROUTINE GRAF(X, Y, Y1, Y1T, N)

C
Підключення графічної бібліотеки



INCLUDE ‘FGRAPH.FD’

C
Оголошення розміру масивів



CHARACTER S(11)*1, SS*11
DIMENSION X(N), Y(N), Y1(N), Y1T(N)

C
Оголошення використовуваних структурних змiнних



RECORD /VIDEOCONFIG/ VC
RECORD /WXYCOORD/ WXY
REAL*8 NL, ARG, XR, YR, YMAX, YMIN, DY, XMAX, XMIN, X1, XN
DATA NL /0.0/

C
C
C
C
C
Звернення до підпрограми VID
обчислення максимальних за модулем
значення YM функції й значення YM1 похідних функції у вузлах
та формування значень Y функції й значень Y1, Y1T похідних функції
"у відносних одиницях"



CALL VID(Y, Y1, Y1T, N, YM, YM1)

C
C
C
Звернення до підпрограми PRMM
визначення максимального YMAX
і мінімального YMIN значень функції чи похідних у вузлах



CALL PRMM(Y, Y1, Y1T, N, YMAX, YMIN)

C
C
Установлення графiчного вiдеорежиму
та перевiряння правильностi виконання цiєї функцiї



*
IF(SETVIDEOMODE($XRES256COLOR) .EQ. 0)
STOP ‘ Помилка встановлення графiчного режиму !’

C
Зчитування встановленої (бiжучої) вiдеоконфiгурацiї



CALL GETVIDEOCONFIG(VC)

C
Визначення максимальних значень координат для бiжучого вiдеорежиму



MAXX = VC.NUMXPIXELS – 1
MAXY = VC.NUMYPIXELS – 1

C
Змiна кольору



STAT = SETCOLOR(11)

C
Рисування прямокутника, який обмежує поле графiчного виведення



STAT = RECTANGLE($GBORDER, 0, MAXY, MAXX, 0)

C
Установка координат “порта перегляду”



CALL SETVIEWPORT(0, MAXY, MAXX, 0)

C
Визначення діапазону зміни аргументу




X1 = X(1)
XN = X(N)
IF (X1 .GT. 0.0) GOTO 1
IF (XN .LT. 0.0) GOTO 2



1
2

XMIN = X1
XMAX = XN
GOTO 3
XMIN = 0.0
XMAX = XN
GOTO 3
XMIN = X1
XMAX = 0.0


3

ARG = XMAX – XMIN

С
Визначення діапазону зміни функції




DY = YMAX – YMIN
IF (YMIN .GT. 0.0) DY = YMAX
IF (YMAX .LT. 0.0) DY = –YMIN

C
C
C
C
Установлення "вiконних" координат. Використовуються попередньо
визначенi максимальне й мiнiмальне значення функцiї, дiапазон змiни
аргументу. Врахований запас (приблизно 10-20%) для пiдписiв графiка
та координатних осей



*
STAT=SETWINDOW(.TRUE.,DFLOAT(XMIN-0.2*ARG),YMAX+0.25*DY,
DFLOAT(XMAX+0.05*ARG),YMIN-0.05*DY)

С
Змiна кольору



STAT = SETCOLOR(15)

С
Рисування координатних осей



CALL MOVETO_W(XMIN, NL, WXY)
STAT = LINETO_W(XMAX, NL)
CALL MOVETO_W(NL, YMIN, WXY)
STAT = LINETO_W(NL, YMAX)
CALL MOVETO_W(XMIN-0.1*ARG, YMIN, WXY)
STAT = LINETO_W(XMIN-0.1*ARG, YMAX)

С
Рисування рисочок на координатних осях



CALL MOVETO_W(XMIN–0.105*ARG, YMAX, WXY)
STAT = LINETO_W(XMIN–0.095*ARG, YMAX)
CALL MOVETO_W(XMIN–0.105*ARG, NL, WXY)
STAT = LINETO_W(XMIN–0.095*ARG, NL)
CALL MOVETO_W(XMIN–0.105*ARG, YMIN, WXY)
STAT = LINETO_W(XMIN–0.095*ARG, YMIN)
CALL MOVETO_W(–0.005*ARG, YMAX, WXY)
STAT = LINETO_W(0.005*ARG, YMAX)
CALL MOVETO_W(–0.005*ARG, NL, WXY)
STAT = LINETO_W(0.000*ARG, NL)
CALL MOVETO_W(–0.005*ARG, YMIN, WXY)
STAT = LINETO_W(0.005*ARG, YMIN)
CALL MOVETO_W(X1, –0.01*DY, WXY)
STAT = LINETO_W(X1, 0.01*DY)
CALL MOVETO_W(XN, –0.01*DY, WXY)
STAT = LINETO_W(XN, 0.01*DY)

С
Змiна кольору



STAT = SETCOLOR(11)

С
Рисування графiка функцiї Y



XR = X1
YR = Y(1)
CALL MOVETO_W(XR, YR, WXY)
DO I = 2, N
STAT = LINETO_W(X(I), Y(I))
END DO

С
Змiна кольору



STAT = SETCOLOR(12)

С
Рисування графiка функцiї Y1



XR = X1
YR = Y1(1)
CALL MOVETO_W(XR, YR, WXY)
DO I = 2, N
STAT=LINETO_W(X(I), Y1(I))
END DO

С
Змiна кольору



STAT = SETCOLOR(10)

С
Змiна типу лiнiї на пунктирну



CALL SETLINESTYLE(#1111)

С
Рисування графiка функцiї Y1T



XR = X1
YR = Y1T(1)
CALL MOVETO_W(XR, YR, WXY)
DO I = 2, N
STAT=LINETO_W(X(I), Y1T(I))
END DO

С
Змiна типу лiнiї на суцiльну



CALL SETLINESTYLE(–1)

С
Реєстрацiя шрифта



numfonts = INITIALIZEFONTS ( )

С
Змiна кольору



STAT = SETCOLOR(7)

С
Вибiр бiжучого шрифта та його характеристик



fontnum = SETFONT (‘t’‘Arial Cyr’‘h24w10i’)

С
Друкування тексту



CALL MOVETO_W(DFLOAT(XMIN), YMAX+0.25*DY, WXY)
CALL OUTGTEXT(‘Чисельне диференціювання табличної функції’)

С
Вибiр бiжучого шрифта та його характеристик



fontnum = SETFONT (‘t’‘Arial Cyr’‘h18w9i’)

С
Змiна кольору



STAT = SETCOLOR(11)

С
Друкування тексту



CALL MOVETO_W(DFLOAT(XMIN–0.07*ARG), YMAX+0.21*DY, WXY)
CALL OUTGTEXT(‘Синій колір – значення функції;’)

С
Змiна кольору



STAT = SETCOLOR(12)

С
Друкування тексту



*
CALL MOVETO_W(DFLOAT(XMIN–0.07*ARG), YMAX+0.18*DY, WXY)
CALL OUTGTEXT
(‘червоний колір – наближене значення похідної функції;’)

С
Змiна кольору



STAT = SETCOLOR(10)

С
Друкування тексту



*
CALL MOVETO_W(DFLOAT(XMIN–0.07*ARG), YMAX+0.15*DY, WXY)
CALL OUTGTEXT
*(‘зелений колір (пунктирна) – точне значення похідної функції.’)

С
Вибiр бiжучого шрифта та його характеристик



fontnum = SETFONT (‘t’‘Arial Cyr’‘h16w7i’)

С
C
Друкування тексту
Змiна кольору



STAT = SETCOLOR(11)
CALL MOVETO_W(0.01*ARG, YMAX+0.02*DY, WXY)
CALL OUTGTEXT(‘Y=F(X)’)

С
Змiна кольору



STAT = SETCOLOR(12)
CALL MOVETO_W(XMIN–0.09*ARG, YMAX+0.04*DY, WXY)
CALL OUTGTEXT(‘Y1(X)’)

С
Змiна кольору



STAT = SETCOLOR(10)
CALL MOVETO_W(XMIN–0.09*ARG, YMAX+0.01*DY, WXY)
CALL OUTGTEXT(‘Y1T(X)’)

С
Змiна кольору



STAT = SETCOLOR(7)
CALL MOVETO_W(XN+0.005*ARG, 0.03*DY, WXY)
CALL OUTGTEXT(‘X’)

С
Друкування підписів до осей



KZ = 1

С
До осі ордират для функції



CN = YMAX*YM
CALL CR_REAL(CN, S, KZ)

С
Друкування числа за форматом F11.1

C

SS = S(1)//S(2)//S(3)//S(4)//S(5)//S(6)//S(7)//S(8)//S(9)//

C
*
S(10)//S(11)

С
Друкування числа за форматом F4.1



SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(–0.045*ARG, YMAX+0.02*DY, WXY)
CALL OUTGTEXT(SS)
CALL MOVETO_W(–0.035*ARG, 0.03*DY, WXY)
CALL OUTGTEXT(‘0.0’)
CN = YMIN*YM
CALL CR_REAL(CN, S, KZ)
SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(–0.045*ARG, YMIN+0.02*DY, WXY)
CALL OUTGTEXT(SS)

С
До осі ордират для похідних функції



CN = YMAX*YM1
CALL CR_REAL(CN, S, KZ)
SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(XMIN–0.145*ARG, YMAX+0.02*DY, WXY)
CALL OUTGTEXT(SS)
CALL MOVETO_W(XMIN–0.135*ARG, 0.015*DY, WXY)
CALL OUTGTEXT(‘0.0’)
CN = YMIN*YM1
CALL CR_REAL(CN, S, KZ)
SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(XMIN–0.145*ARG, YMIN+0.02*DY, WXY)
CALL OUTGTEXT(SS)

С
До осі абсцис



CN = X1
CALL CR_REAL(CN, S, KZ)
SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(X1–0.025*ARG, –0.02*DY, WXY)
CALL OUTGTEXT(SS)
CN = XN
CALL CR_REAL(CN, S, KZ)
SS = S(7)//S(8)//S(9)//S(10)//S(11)
CALL MOVETO_W(XN–0.025*ARG, –0.02*DY, WXY)
CALL OUTGTEXT(SS)

С
Затримка зображення на екранi



READ (*, *)

С
Вiдновлення попереднього вiдеорежиму



STAT = SETVIDEOMODE($DEFAULTMODE)

C
Закінчення роботи підпрограми



RETURN
END




С
C
C
C
C
Підпрограма VID
обчислення максимальних за модулем
значення YM функції й значення YM1 похідних функції у вузлах
та формування значень Y функції й значень Y1, Y1T похідних функції
“у відносних одиницях”



SUBROUTINE VID(Y, Y1, Y1T, N, YM, YM1)

С
**********************************************************

C

Опис формальних параметрів.

С
Вхідні величини:

C
C
C
C

Y
Y1
Y1T
N
– масив значень функції у вузлах;
– масив наближених значень похідної функції у вузлах;
– масив точних значень похідної функції у вузлах;
– кількість рівновіддалених вузлів на інтервалі диференціювання.

С
Вихідні величини:

C
C
C
C
C

Y
Y1
Y1T
YM
YM1
– масив значень функції у вузлах “у відносних одиницях”;
– масив наближених значень похідної функції у вузлах “у відносних одиницях”;
– Y1T - масив точних значень похідної функції у вузлах “у відносних одиницях”;
– максимальне за модулем значення функції у вузлах;
– максимальне за модулем значення похідних функцій у вузлах.

С
C
**********************************************************
Оголошення розміру масивів



DIMENSION Y(N), Y1(N), Y1T(N)

С
Обчислення максимального за модулем значення функції у вузлах



1
YM = ABS(Y(1))
DO 1 I=2, N
IF (YM .LT. ABS(Y(I))) YM = ABS(Y(I))
CONTINUE

С
Обчислення максимального за модулем значення похідних функцій у вузлах



2
3
YM1 = ABS(Y1(1))
DO 2 I=2, N
IF (YM1 .LT. ABS(Y1(I))) YM1 = ABS(Y1(I))
CONTINUE
DO 3 I=1, N
IF (YM1 .LT. ABS(Y1T(I))) YM1 = ABS(Y1T(I))
CONTINUE

С
Формування значень функції “у відносних одиницях”



4
DO 4 I=1, N
Y(I) = Y(I)/YM

С
Формування наближених значень похідних функції “у відносних одиницях”



5
DO 5 I=1, N
Y1(I) = Y1(I)/YM1

С
Формування точних значень похідних функції “у відносних одиницях”



6
DO 6 I=1, N
Y1T(I) = Y1T(I)/YM1

C
Закінчення роботи підпрограми



RETURN
END




C
C
C
Підпрограма PRMM
визначення максимального YMAX
і мінімального YMIN значень функції чи похідних у вузлах



SUBROUTINE PRMM(Y, Y1, Y1T, N, YMAX, YMIN)

C
**********************************************************

C
Вхідні величини:

C
C
C
C

Y
Y1
Y1T
N
– масив значень функції у вузлах;
– масив наближених значень похідної функції у вузлах;
– масив точних значень похідної функції у вузлах;
– кількість рівновіддалених вузлів на інтервалі диференціювання.

C
Вихідні величини:



YMAX
YMIN
– максимальне значення функції чи похідних у вузлах;
– мінімальне значення функції чи похідних у вузлах.

C
**********************************************************
Оголошення розміру масивів



DIMENSION Y(N), Y1(N), Y1T(N)
REAL*8 Y1MAX, Y1MIN, YMAX, YMIN

C
C
Припускаємо, що перший елемент масиву Y1 є максимальним
і перший елемент масиву Y1 є мінімальним



Y1MAX = Y1(1)
Y1MIN = Y1(1)

C
Початок циклу для Y1



DO 1 I = 2, N

C
Перевіряння умови Y1MAX > Y1(i)



IF (Y1MAX .GT. Y1(I)) GOTO 2
Y1MAX = Y1(I)

C
Перевіряння умови Y1MIN < Y1(i)


2
IF (Y1MIN .LT. Y1(I)) GOTO 1
Y1MIN = Y1(I)

C
Закінчення циклу


1
CONTINUE

C
Початок циклу для Y1T



DO 3 I = 1, N

C
Перевіряння умови Y1MAX > Y1T(i)



IF (Y1MAX .GT. Y1T(I)) GOTO 4
Y1MAX = Y1T(I)

C
Перевіряння умови Y1MIN < Y1T(i)


4
IF (Y1MIN .LT. Y1T(I)) GOTO 3
Y1MIN = Y1T(I)

C
Закінчення циклу


3
CONTINUE

C
C
Припускаємо, що перший елемент масиву Y є максимальним
і перший елемент масиву Y є мінімальним



YMAX = Y(1)
YMIN = Y(1)

C
Початок циклу для Y



DO 5 I = 2, N

C
Перевіряння умови YMAX > Y(i)



IF (YMAX .GT. Y(I)) GOTO 6
YMAX = Y(I)

C
Перевіряння умови YMIN < Y(i)


6
IF (YMIN .LT. Y(I)) GOTO 5
YMIN = Y(I)

C
Закінчення циклу


5
CONTINUE

C
Обчислення максимального значення



IF (Y1MAX . GT. YMAX) YMAX = Y1MAX

C
Обчислення мінімального значення



IF (Y1MIN . LT. YMIN) YMIN = Y1MIN

C
Закінчення роботи підпрограми



RETURN
END




C
C
Підпрограма CR_REAL
перетворення дійсного числа в ASCII код. Тип даних: REAL



SUBROUTINE CR_REAL(CN, S, KZ)

C
**********************************************************

C
Вхідні величини:

C
C

CN
KZ
– число, яке перетворюється;
– керуюча змінна (0 – E11.4, 1 – F9.1).

C
Вихідні величини:



S
– масив типу CHARACTER*1 S(11), IR=8.

C
**********************************************************



10
15
20
30
40
50
70
80
60
CHARACTER S(11)*1,SI(8)*1
A = ABS(CN)
IF (A .EQ. 0.) GOTO 15
DO 10 I = 0, 1000
TEN = 10**I
IF (A .LT. 1.) THEN
LL = 1
B = A*TEN
ELSE IF (A. GE. 1.) THEN
LL = –1
B = A/TEN
END IF
IF (B .LE. 1.0 .AND. B .GE. 0.1) GOTO 20
CONTINUE
WRITE (*, *) ‘ ПОМИЛКА’
B = 0.
LL = 0
I = 0
MM = B*10000000
IF (KZ .EQ. 0) THEN
IOS = MOD(MM, 100)
IF (IOS .GT. 50) MM = MM+100
CALL CR_INT(MM, SI)
S(1) = ‘ ’
S(3) = ‘.’
S(8) = ‘E’
S(9) = ‘+’
IF (A .LT. 1.0) S(9) = ‘–’
IF (CN .LT. 0.0) S(1) = ‘–’
DO 30 J=1,8
IF (SI(J) .EQ. ‘ ’) GOTO 30
S(2) = SI(J)
GOTO 40
CONTINUE
CONTINUE
DO 50 J1 = 1, 4
IF (J+J1 .GT. 8) THEN
S(J1+3) = ‘0’
GOTO 50
END IF
S(J1+3) = SI(J+J1)
CONTINUE
CALL CR_INT(I+LL, SI)
S(10) = SI(7)
IF (SI(7) .EQ. ‘ ’) S(10) = ‘0’
S(11) = SI(8)
ELSE IF(KZ .EQ. 1) THEN
S(9) = ‘*’
S(10) = ‘.’
S(11) = ‘*’
DO 70 J = 1, 8
S(J) = ‘ ’
CONTINUE
IF (A .GT. 999999.9) GOTO 60
AA = MM/(10.**(6+LL*I))+0.5
MM = AA
IF (CN .LT. 0.0) MM = –MM
CALL CR_INT(MM, SI)
S(11) = SI(8)
DO 80 J = 1, 7
S(2+J) = SI(J)
CONTINUE
CONTINUE
END IF

C
Закінчення роботи підпрограми



RETURN
END


Якщо за наведеною програмою чисельного диференціювання виконати обчислення в діапазоні від a = –1,0 до b = 2,0 при заданій кількості N = 21 рівновіддалених вузлів, то одержимо файл вихідної інформації REZ.DAT, у якому буде записана таблиця:
-----------------------------------------------------------------------------
| n | Аргумент х | Функція y |Похідна (наб.)|Похідна (точ.)|
-----------------------------------------------------------------------------
| 1| –.100E+01 | –.229E+01 | .37615E+01 | .37560E+01 |
| 2| –.850E+00 | –.176E+01 | .33002E+01 | .33019E+01 |
| 3| –.700E+00 | –.130E+01 | .28393E+01 | .28375E+01 |
| 4| –.550E+00 | –.906E+00 | .23878E+01 | .23836E+01 |
| 5| –.400E+00 | –.581E+00 | .19609E+01 | .19550E+01 |
| 6| –.250E+00 | –.318E+00 | .15687E+01 | .15618E+01 |
| 7| –.100E+00 | –.110E+00 | .12174E+01 | .12100E+01 |
| 8| .500E–01 | .475E–01 | .90997E+00 | .90250E+00 |
| 9| .200E+00 | .163E+00 | .64698E+00 | .63975E+00 |
| 10| .350E+00 | .242E+00 | .42710E+00 | .42033E+00 |
| 11| .500E+00 | .291E+00 | .24766E+00 | .24149E+00 |
| 12| .650E+00 | .316E+00 | .10514E+00 | .99657E–01 |
| 13| .800E+00 | .322E+00 | –.45130E–02 | –.92784E–02 |
| 14| .950E+00 | .315E+00 | –.85572E–01 | –.89620E–01 |
| 15| .110E+01 | .297E+00 | –.14231E+00 | –.14567E+00 |
| 16| .125E+01 | .272E+00 | –.17883E+00 | –.18155E+00 |
| 17| .140E+01 | .243E+00 | –.19896E+00 | –.20110E+00 |
| 18| .155E+01 | .212E+00 | –.20616E+00 | –.20779E+00 |
| 19| .170E+01 | .181E+00 | –.20351E+00 | –.20470E+00 |
| 20| .185E+01 | .151E+00 | –.19367E+00 | –.19448E+00 |
| 21| .200E+01 | .123E+00 | –.18084E+00 | –.17938E+00 |
-----------------------------------------------------------------------------
На екран монітора виведеться кольорове графічне зображення функції та її похідних у вигляді, наведеному на рис. 14 (на цьому рисунку графічне зображення подано чорно-білим). З рис. 18 видно, що наближене значення похідної функції (суцільна лінія) і точне значення її похідної (пунктирна лінія) практично збігаються.

Рис. 18. Графічне зображення функції та наближене і точне значення її похідної
2.2. Завдання
Скласти програму чисельного диференціювання функції. Результати обчислень записати до файла. Вивести на екран монітора графічне зображення функції та наближене і точне значення її похідної, порівняти наближені значення похідної з точними. Дані для розрахунку наведені в табл. 9.
Таблиця 9
Дані для чисельного диференціювання
№ варіанту

Функція для диференціювання

a

b

N

1
2
3
4
5

1

0,0
2,0
21

2

1,0
3,6
35

3

0,5
5,0
37

4

0,1
1,3
25

5

1,6
4,8
33

1
2
3
4
5

6

5,5
15,5
21

7

3,5
6,5
31

8

1,0
3,0
41

9

0,0
3,5
36

10

1,5
5,5
41

11

2,6
6,3
38

12

1,5
4,5
31

13

4,5
8,5
41

14

0,4
1,2
41

15

3,5
6,5
31

16

2,4
5,1
28

17

0,3
2,2
20

18

1,2
4,1
30

19

4,6
7,6
31

20

0,0
2,0
21

21

0,4
5,3
50

22

–0,5
2,5
31

23

–1,5
1,4
30

24

2,6
5,5
30

25

1,5
4,5
31

26

–0,4
1,6
21

27

3,4
7,2
39

28

–0,6
2,0
27

29

0,1
2,6
26

30

–1,5
1,5
31