Проверьте код - Pascal ABC (13360)
Формулировка задачи:
Уважаемые эрудиты и сенсеи КиберФорума, можете ли проверить на правильность данный код и, если что, подкорректировать? Заранее спасибо!
Решение задачи: «Проверьте код»
textual
Листинг программы
program kursovaya;
uses crt;
type
int = 0..10;
vec = array [0..10] of real;
matr = array [0..10, 0..10] of real;
var
x, x_1, ax, ax_1, c: vec;
e, a, a_1, b, b_1, br, br_1: matr;
m, n: int;
name: char;
procedure readvec(var x: vec; name: char; n: int);
var
i: int;
begin
writeln(' Ввести вектор ', name, ' размера n=', n);for i := 0 to n - 1 do
begin
write(' ', name, '[', i:2, ']=');readln(x[i])
end;
end;//readvec
procedure writevec(var x: vec; name: char; n: int);
var
i: int;
begin
writeln(' Вывести вектор ', name, ' размера n=', n);for i := 0 to n - 1 do
begin
write(' ', name, '[', i:2, ']=');writeln(x[i]:10:5)
end;
end;//writevec
procedure readmatr(var y: matr; name: char; n, m: int);
var
i, j: int;
begin
writeln(' Ввести матрицу ', name,
' размера : n=', n, ', * m=', m);for i := 0 to n - 1 do
for j := 0 to m - 1 do
begin
write(' ', name, '[', i:2, ' ,', j:2, ']= ');
readln(y[i, j])
end;
end;//readmatr
procedure writematr(var y: matr; name: char; n, m: int);
var
i, j: int;
begin
writeln(' Вывести матрицу ', name,
' размера: n=', n, ', * m=', m);
for i := 0 to n - 1 do
for j := 0 to m - 1 do
begin
write(' ', name, '[', i:2, ' ,', j:2, ']= ');
writeln(y[i, j]:8:4)
end;
end;//writematr
procedure Em(var E: matr; n: int);
var
i, j: int;
begin
for i := 0 to n do
for j := 0 to n do
if i = j then E[i, j] := 1 else E[i, j] := 0;
end;//end //E
procedure Rmatr(var a, b, c: matr; n, m: int);
var
i, j: int;
begin
for i := 0 to n do
for j := 0 to m do
c[i, j] := a[i, j] - b[i, j];
end;//Rmatr
procedure obrmatr(var AIS, AP: matr; n: int);
var
i, j, k, l: integer;
a: matr;
begin
a := AIS;
n := n - 1;
for k := 0 to n do
begin
for j := 0 to n do
if (j <> k) then AP[k, j] := -a[k, j] / a[k, k];
for i := 0 to n do
if (i <> k) then AP[i, k] := a[i, k] / a[k, k];
for i := 0 to n do
for j := 0 to n do
if (i <> k) and (j <> k)
then AP[i, j] := a[i, j] - a[i, k] * a[k, j] / a[k, k];
AP[k, k] := 1 / a[k, k];a := AP;
end;
end;//end obrmatr
procedure matrvec(var b: matr; var c, x: vec; n: int);
var
i, j: int;
begin
for j := 0 to n - 1 do
begin
x[j] := 0;
for i := 0 to n - 1 do
x[j] := x[j] + b[i, j] * c[i]
end;
end;//end matrvec
{ ТЕЛО ПРОГРАММЫ }
begin
clrscr;
readvec(c, 'C', 2);
readmatr(a, 'A', 2, 2);
readmatr(a_1, 'Z', 2, 2);
Em(e, 2);rmatr(e, a, br, 2, 2);rmatr(e, a_1, br_1, 2, 2);obrmatr(br, b, 2);obrmatr(br_1, b_1, 2);matrvec(B, C, x, 2);matrvec(B_1, C, x_1, 2);matrvec(A, x, ax, 2);matrvec(A_1, x_1, ax_1, 2);
if (ax[0] <= c[0]) and (ax[1] <= c[1]) then
writeln(' Экономика матрица A - эффективна') else
writeln(' Экономика матрица A - не эффективна');
if (ax_1[0] <= c[0]) and (ax_1[1] <= c[1]) then
writeln(' Экономика матрица A_1 - эффективна') else
writeln(' Экономика матрица A_1 - не эффективна');
readln;
writematr(B, 'B', 2, 2);
writematr(B_1, 'Z', 2, 2);
writevec(x, 'x', 2);
writevec(x_1, 'y', 2);
readln;
end.