1 MAIN PART Gauss.
                ! Программа решения системы линейных
                ! уравнений методом Гаусса-Жордана
                ! Основной раздел
2 BEGIN
3               INDEX k,l.
4               ks : (k=1..n).
5               ls : (l=1..n).
6               kls : (ks; ls).
7               VARIABLE a DEFINED ON kls.
8               VARIABLE b, x DEFINED ON ks.
9               INPUT a(FILE='gauss') ON kls,
10                             b(FILE='gauss') ON ks.
11               DOMAIN PARAMETERS n=4.
12               COMPUTE Calculate(a ON kls, b ON ks RESULT x ON ks).
13               OUTPUT x(FILE='gauss.out',TAB(10),'Решение :',STR(1)) ON ks.
14 END PART.
   
15 PART Calculate.
16               a,b RESULT x
                ! Раздел вычислений
17 BEGIN
18               INDEX i,j
19               so : (ijs: (is: (i=1..n); js: (j=1..n));ts: (t=0..n)).
20               s1o:(ts;is). s:so/ts-LEFT(1). s1:s1o/t=1..n.
21               VARIABLE a DEFINED ON ijs.
22               VARIABLE b, x DEFINED ON is.
23               VARIABLE m DEFINED ON so.
24               VARIABLE r DEFINED ON s1o.
25               DOMAIN PARAMETERS n=4.
26               DISTRIBUTION INDEX i=2..8, j=1.
27               FOR so/t=0 ASSUME m=a.
28               FOR s1o/t=0 ASSUME r=b.
29               sa,sb:s/i=t. sa1,sb1:s1/i=t.
30               MACRO INDEX ti [t-1,i=t].
31               MACRO INDEX tij [ti,j=t].
32               FOR sa ASSUME m = m[ti] / m[tij].
33               FOR sa1 ASSUME r = r[ti] / m[tij].
34               FOR sb ASSUME m = m[t-1] - m[t-1,j=t] * m[i=t].
35               FOR sb1 ASSUME r = r[t-1] - m[t-1,j=t] * r[i=t].
36               FOR is ASSUME x = r[t=n].
37 END PART.

 

Рассмотрим эту программу более подробно (используемые ниже номера совпадают с нумерацией строк программы).

(1) Заголовок главного раздела программы Gauss.

(2) Начало главного раздела.

(3) Описание индексов областей.

(4-6) Определяются одномерные области is, js и многомерная область ijs, на которых определены начальные данные задачи.

(7-8) Описание переменных a, b и x. a - матрица коэффициентов системы, b - столбец свободных членов, х - результат решения системы.

(9-10) Ввод начальных данных из файла gauss.dat, содержащего следующие строки:

a(k=1..4,l=1..4)= 1.1161, 0.1254, 0.1397, 0.1490,
0.1582, 1.1675, 0.1768, 0.1871,
0.1968, 0.2071, 1.2168, 0.2271,
0.2368, 0.2471, 0.2568, 1.2671;
b(k=1..4)= 1.5471, 1.6471, 1.7471, 1.8471;

(11) Задание параметра областей (размерности матрицы коэффициентов системы и столбец свободных членов).

(12) Вызов раздела Calculate, осуществляющего расчет.

(13) Вывод результата в файл gauss.out.

(14) Конец главного раздела.

(15) Заголовок простого раздела Calculate.

(16) Обозначение входных (a, b) и выходных (x) параметров раздела.

(17) Начало простого раздела.

(18) Описание индексов областей.

(19) Определяется многомерная область so, состоящая из областей ts и ijs. Область ijs в свою очередь состоит из is и js.

(20) Определяются безусловная область s1o и области s, s1 с помощью операций модификации области.

(21-22) Описание переменных, являющихся параметрами раздела.

(23-24) Описание переменных m и r, участвующих в расчете.

(25) Задание размерности областей.

(26) Описание индексов распределения.

(27-28) Задание начальных значений m и r.

(29) Описание вспомогательных условных областей sa, sb, sa1, sb1.

(30-31) Описания индексных конструкций.

(32-36) Вычисления для соответствующих расчетных формул.

(37) Конец раздела.