Матрица a(3,4) матрица b(3,3)
5.0 -4.1 9.2 -1.0 -9.0 3.0 4.5
7.3 3.6 8.0 2.2 5.2 -3.8 2.0
-4.7 7.0 6.3 5.2 -4.1 6.0 7.8
Результаты
Массив Z
z[1]= -4.1
z[2]= -1.0
z[3]= -4.7
z[4]= -9.0
z[5]= -3.8
z[6]= -4.1
Модули в языке Pascal
Недостатком рассмотренных ранее процедур и функций является необходимость включения их в текст программы.
Для часто используемых численных методов разрабатываются подпрограммы (процедуры и функции), которые хранятся в библиотеках, называемых в языке Pascalмодулями [Л1, стр. 65-70].
Каждый модуль должен иметь уникальное имя, используя которое в программе пользователя можно обращаться к библиотеке (модулю).
Заголовок в программной единице, называемой модулем, имеет вид:
unit имя-модуля;
Например, unit unitmatr;
Следует помнить, что имя файла, в котором записан модуль на языке Pascal, должно совпадать с именем модуля, указанного в заголовке модуля, т.е. для данного примера оно должно иметь вид unitmatr.pas.
После компиляции такой модуль получает имя unitmatr.tpuихранится на диске.
Для подключения модуля к программе пользователя после заголовка программы нужно записать фразу:
uses имя-модуля1, имя-модуля2, …, имя-модуляN;
Пример 25. Пусть имеется модуль с именемUnitmatr, содержащий процедурыввода матрицы, вывода матрицы, вычисления суммы двух матриц, транспонирования матрицы.
Рассмотрим пример рабочей программы, использующей процедуры этого модуля и стандартного модуля Crt.
Пример модуля (библиотеки) с именем Unitmatr
unit unitmatr;
interface
const n=10;
type tmtr=array[1..n,1..n] of real;
procedure inmtr(var x: tmtr; k: integer);
procedure outmtr(x: tmtr; k: integer);
procedure summtr(x1,x2: tmtr; var x3: tmtr; k: integer);
procedure trmtr(x1: tmtr; var x2: tmtr; k : integer);
implementation
var i, j : integer;
procedure inmtr(var x: tmtr; k: integer); {Процедура ввода матрицы}
begin
writeln(k,'x',k);
for i:=1 to k do
for j:=1 to k do read(x[i,j]);
end;
procedure outmtr(x: tmtr; k: integer); {Процедура вывода матрицы}
begin
writeln('Матрица');
for i:=1 to k do
begin
for j:=1 to k do
write(x[i,j]:5:1,' ');
writeln;
end;
end;
procedure summtr(x1,x2: tmtr; var x3: tmtr; k: integer); { Процедура, вычисляющая сумму двух матриц}
begin
for i:=1 to k do
begin
for j:=1 to k do
x3[i,j]:=x1[i,j]+x2[i,j];
end;
end;
procedure trmtr(x1:tmtr;var x2:tmtr;k:integer); { Процедура, выполняющая транспонирование матрицы }
begin
for i:=1 to k do
for j:=1 to k do
x2[i,j]:=x1[j,i];
end;
end.
Пример рабочей программы (программы пользователя)
program usmatr;
uses unitmatr, crt; {Обращение к библиотекам (модулям)}
var d, a, b, c : tmtr;
m : integer;
begin
clrscr; { Обращение к процедуре очистки экрана, содержащейся в
модуле crt}
writeln(‘Ввести размерность матрицы m’);
readln(m);
inmtr(a,m); {Обращение к процедуре ввода матрицы а(m,m)}
inmtr(b,m); {Обращение к процедуре ввода матрицы b(m,m)}
trmtr(b,c,m); { Обращение к процедуре транспонирования матрицы
b(m,m) и записи результата в матрицуc(m,m)}
outmtr(c,m); { Обращение к процедуре вывода матрицы c(m,m)}
summtr(a,b,d,m); { Обращение к процедуре вычисления суммы двух матриц
a(m,m) и b(m,m)и записи результата в матрицу d(m,m)}
outmtr(d,m); { Обращение к процедуре вывода матрицы d(m,m)}
readln;
end.
Исходные данные Результаты
m=4
Литература