Текст головной программы
program lr8_1_2; {Нахождение произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl. Использование внешнего файла} {$APPTYPE CONSOLE}
Uses SysUtils;
Type matr = array [1..10, 1..10] of real; stroka =string[30];
Var a, b, c: matr; {исходные матрицы и матрица результата} l, m, n: integer; namefilein, namefileout: stroka; {$I Unit1.pas} //Подключение внешнего файла Begin write('Vvedite imja vchodnogo fayla '); readln(namefilein); write('Vvedite imja vichodnogo fayla '); readln(namefileout); vvodmatr(a, namefilein, m, n, true, false); vvodmatr(b, namefilein, n, l, false, true); vivodmatr(namefileout, a, m, n, 'Matrica A', true); vivodmatr(namefileout, b, n, l, 'Matrica B', false); multmatr(a, b, c, m, n, l); vivodmatr(namefileout, c, m, l, 'Matrica C=A*B', false); end.
Содержимое файла Unit1.pas
{Процедуры ввода, вывода матриц, нахождения произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl}
procedure vvodmatr(var a: matr; namefile: stroka; var m, n: integer; flag1, flag2: boolean); {Ввод матрицы} Var i, j: integer; fin: text; Begin if flag1 then {Открывать файл? } Begin assign(fin, namefile); reset(fin); end; readln(fin, m, n); for i: =1 to m do for j: =1 to n do read(fin, a[i, j]); if flag2 then {Закрывать файл? } close(fin); end;
procedure vivodmatr(namefile: stroka; a: matr; m, n: integer; zag: stroka; flag: boolean); {Вывод матрицы} Var i, j: integer; fout: text; Begin assign(fout, namefile); If flag then rewrite(fout) Else append(fout); writeln(fout, zag); for i: =1 to m do Begin for j: =1 to n do write(fout, a[i, j]: 8: 2); writeln(fout); end; close(fout); end;
procedure multmatr(a, b: matr; var c: matr; m, n, l: integer); {Нахождение произведения матрицы} Var i, j, k: integer; s: real; Begin for i: =1 to m do for j: =1 to l do Begin s: =0; for k: =1 to n do s: =s+a[i, k]*b[k, j]; c[i, j]: =s; end; end;
Вместо Unit-а воспользуемся динамически подключаемой библиотекой (DLL).
Текст головной программы
program Project1; //Перемножение матриц //Использование библиотеки DLL {$APPTYPE CONSOLE}
Uses SysUtils; Type matr = array [1..10, 1..10] of real; stroka =string[30]; {Ввод матрицы} procedure vvodmatr(var a: matr; namefile: stroka; var m, n: integer; flag1, flag2: boolean); external 'project2.dll'; {Вывод матрицы} procedure vivodmatr(namefile: stroka; a: matr; m, n: integer; zag: stroka; flag: boolean); external 'project2.dll'; {Нахождение произведения матрицы} procedure multmatr(a, b: matr; var c: matr; m, n, l: integer); external 'project2.dll';
Var a, b, c: matr; {исходные матрицы и матрица результата} l, m, n: integer; namefilein, namefileout: stroka; Begin write('Vvedite imja vchodnogo fayla '); readln(namefilein); write('Vvedite imja vichodnogo fayla '); readln(namefileout); vvodmatr(a, namefilein, m, n, true, false); vvodmatr(b, namefilein, n, l, false, true); vivodmatr(namefileout, a, m, n, 'Matrica A', true); vivodmatr(namefileout, b, n, l, 'Matrica B', false); multmatr(a, b, c, m, n, l); vivodmatr(namefileout, c, m, l, 'Matrica C=A*B', false); end.
|