uses crt; const size = 16; type mx = array[1 .. size, 1 .. size] of real; procedure read_matrix(var f: text; var m: mx; var rows, cols: integer); var i, j: integer; begin i := 0; repeat inc(i); j := 0; while not seekeoln(f) do begin inc(j); read(f, m[i, j]); end; readln(f) until seekeoln(f); rows := i; cols := j; end; procedure delete_zeroes(var m: mx; var rows, cols: integer); const eps = 0.0001; var i, j, k : integer; zero: boolean; begin { checking rows first } i := 1; while i <= rows do begin zero := true; for j := 1 to cols do if abs(m[i, j]) > eps then zero := false; if zero then begin if i <> rows then for j := 1 to cols do for k := i to rows - 1 do m[k, j] := m[k + 1, j]; dec(rows); end else inc(i); end; { now checking cols } j := 1; while j <= cols do begin zero := true; for i := 1 to rows do if abs(m[i, j]) > eps then zero := false; if zero then begin if j <> cols then for i := 1 to rows do for k := j to cols - 1 do m[i, k] := m[i, k + 1]; dec(cols); end else inc(j); end; end; procedure mult_matrix(var res: mx; const a, b: mx; row_a, common, col_b: integer); var i, j, k: integer; begin for i := 1 to row_a do for j := 1 to col_b do begin res[i, j] := 0; for k := 1 to common do res[i, j] := res[i, j] + a[i, k] * b[k, j]; end; end; procedure print_matrix(const m: mx; rows, cols: integer); var i, j: integer; begin for i := 1 to rows do begin for j := 1 to cols do write(m[i, j]:7:2); writeln; end; end; var A, B, res: mx; f: text; rows_a, cols_a: integer; rows_b, cols_b: integer; begin clrscr; assign(f, 'mx.txt'); reset(f); writeln('A:'); read_matrix(f, A, rows_a, cols_a); delete_zeroes(A, rows_a, cols_a); print_matrix(A, rows_a, cols_a); writeln('B:'); read_matrix(f, B, rows_b, cols_b); delete_zeroes(B, rows_b, cols_b); print_matrix(B, rows_b, cols_b); if rows_a = cols_b then begin mult_matrix(res, b, a, rows_b, rows_a, cols_a); writeln('result:'); print_matrix(res, rows_b, cols_a); end else if cols_a = rows_b then begin mult_matrix(res, a, b, rows_a, rows_b, cols_b); writeln('result:'); print_matrix(res, rows_a, cols_b); end else writeln('multiplication impossible'); close(f); end.