zadach178.PAS

{* Задача 178 *}

Unit ZADACH178;
Interface
Implementation
Begin
 writeln('Решение системы линейных уравнений матричным методом. ');
End.

Program Matrix_has_you;

Uses zadach178.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Const {* Постоянные значения *}
  n = 4;
Type {* Типы переменных *}
  matr = Array[1..n, 1..n] Of real;
  mas = Array[1..n] Of real;
Const {* Постоянные значения *}
  a1 : matr =  (( * , * , * , * ),( * , * , * , * ),  ( * , * , * , * ),( * , * , * , * )); {тут вбиваешь массив по строкам}
  a2 : mas = ( * , * , * , * ); {тут вбиваешь элементы столбца из правой части системы}
Var {* Необходимые переменные *}
  a                  : matr;
  b                  : matr;
  c                  : matr;
  x                  : matr;
  a3                 : matr;
  m3                 : mas;
  i                  : integer;
  j                  : integer;
  dt                 : real;
Procedure output(m : matr;
n                  : integer);
Var {* В работе нам потребуются переменные: *}
  i               : integer;
  j               : integer;
  Begin
For i := 1 To n Do{* Увеличиваем i от 1 до n с шагом 1 *}
Procedure del(a : matr;
Var {* Необходимые переменные *}
  b : matr;
  m : integer);
  i : integer);
  j : integer);
Var {* Необходимые переменные *}
  ki                     : integer;
  kj                     : integer;
  di                     : integer;
  dj                     : integer;
  Begin
  di := 0;
For ki := 1 To m - 1 Do{* Цикл для ki => [1 .. m] *}
  dj := 0;
For kj := 1 To m - 1 Do{* Увеличиваем kj от 1 до m с шагом 1 *}
  b[ki := a[ki + di, kj + dj];
kj] := a[ki + di, kj + dj];
Function Determinant(n : integer;
a                      : matr);
Var {* Объявление переменных *}
  i                      : integer;
  j                      : integer;
  k                      : integer;
  sum                    : real;
  b                      : matr;
  Begin
  sum := 0;
  k := 1;
If n = 2 Then
  sum := a[1, 1] * a[2, 2] - a[2, 1] * a[1, 2]
Else For i;
  If odd(i) Then
    sum := sum + k * a[i, 1] * Determinant(n - 1, b)
  Else sum;
    Determinant := sum;
Procedure obmatrix(n   : integer;
a                      : matr);
Var {* В работе нам потребуются переменные: *}
  det                            : real;
  Begin
  det := determinant(n, a);
For i := 1 To n Do{* Переменная i увеличивается с 1 до n *}
  If Not odd(i + j) Then
    x[i := determinant(n - 1, b)
  Else x[i, j];
    j] := determinant(n - 1, b)
  Else x[i, j];
Procedure transpon(a           : matr);
Begin
For i := 1 To n Do{* Увеличиваем i от 1 до n с шагом 1 *}
Procedure AxB(m1               : matr;
m2                             : mas;
n                              : byte);
Var {* Необходимые переменные *}
  a           : real;
  b           : real;
  buf         : real;
  i           : byte;
  j           : byte;
  k           : byte;
  l           : byte;
  Begin
  buf := 0;
For i := 1 To n Do{
  For l := 1 To n Do {* Цикл для l => [1 .. n] *}

    {* Увеличиваем l от 1 до n с шагом 1 *}
{* Цикл для l => [1 .. n] *}
}
For j := i To i Do{* Цикл для j => [i .. i] *}
  For k := 1 To n Do{* Переменная k увеличивается с 1 до n *}
    m3[i] := buf;
Procedure AxConst(a : matr;
ch : real);
Begin
For i := 1 To n Do {* Переменная i увеличивается с 1 до n *}
  For j := 1 To n Do {* Переменная j увеличивается с 1 до n *}
    c[i, j] := a[i, j] * ch;
End;
Begin
clrscr; {* Очистка экрана *}
writeln('-------Source---------');
output(a1, n);
writeln; {* Пустая строка *}
dt := Determinant(n, a1);
writeln('Determinant=', dt : 2 : 2);
writeln('-------inverse--------');
transpon(a1);
obmatrix(n, a3);
AxConst(x,(1 / dt));
output(c, n);
writeln('-------Result---------');
AxB(c, a2, n);
For i := 1 To n Do {* Переменная i увеличивается с 1 до n *}
  writeln('x', i, '=', m3[i]);
readln; {* Приостановка программы. Ожидание Enter *}
End....