Текст программы. {Нахождение произведения матрицы Amxn на матрицу
program lr7_1_1; {Нахождение произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl} {$APPTYPE CONSOLE}
Uses SysUtils;
Type matr = array [1..10, 1..10] of real; stroka =string[30]; Var a, b, c: matr; {исходные матрицы и матрица результата} i, j, k, l, m, n: integer; flag: boolean;
procedure vvodmatr(var a: matr; const namefile: stroka; var m, n: integer; fl1, fl2: boolean); {Ввод матрицы} Var i, j: integer; fin: text; Begin If fl1 then Begin assign(fin, namefile); reset(fin); end; readln(fin, m, n); for i: =1 to m do Begin for j: =1 to n do read(fin, a[i, j]); readln(fin); end; If fl2 then close(fin); end; procedure vivodmatr(namefile: stroka; const a: matr; const m, n: integer; zag: stroka; Const 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; if namefile='con' then {если вывод на экран} readln Else close(fout); end;
procedure multmatr(const a, b: matr; var c: matr; const 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; Begin vvodmatr(a, 'matra.txt', m, n, True, false); vvodmatr(b, 'matra.txt', n, l, False, true); flag: =true; vivodmatr('matrc.txt', a, m, n, 'Матрица A', flag); flag: =false; vivodmatr('matrc.txt', b, n, l, 'Матрица B', flag); multmatr(a, b, c, m, n, l); flag: =false; vivodmatr('matrc.txt', c, m, l, 'Матрица C=A*B', flag); end.
Решим данную задачу, используя компоненты Delphi. Упростим задачу, полагая, что матрицы будут квадратными и целочисленными. Но кроме произведения матриц найдем сумму и разность матриц. Поскольку приложение будет иметь достаточно много функций, создадим меню с помощью компонента MainMenu. Для выбора файла для ввода данных воспользуемся компонентом OpenDialog, а для сохранения исходных матриц компонентом Savedialog страницы Dialogs. Для задания размерности матриц воспользуемся компонентом SpinEdit страницы Samples. Если исходные данные вводятся с клавиатуры, то сначала необходимо задать параметры соответствующих компонентов StringGrid. При вводе из файла эти параметры устанавливаются автоматически. Пока матрицы не определены, операции над ними выполнять нельзя, поэтому соответствующие функции не доступны. Исходная форма имеет вид (рис. 7.10):
Рис.7.10 Форма приложения примера 7_1_2
|