Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2009, 18:52   #1
Astis
Новичок
Джуниор
 
Регистрация: 01.05.2009
Сообщений: 1
По умолчанию Составить подпрограмму для получения обратной матрицы

Вообщем проблема такова: прога есть, она работает, но я не знаю как)). Вообщем, пожалуйста, объясните очень подробно что там происходит на каждом этапе или лучше добавьте, пожалуйста, комментарии к строчками программы... сам в паскале не шарю... поэтому прошу помощи.

Код:
uses crt;
const nmax = 20;
type
matr = array[1..nmax,1..nmax] of real;
function Det(size:integer; var m : matr):real;forward;
function AlgDop(size:integer;m:matr;row,col:integer):real;
var temp : matr;
    i,j:integer;
begin
for i:=1 to row-1 do
 begin
  for j:=1 to col-1 do temp[i,j]:=m[i,j];
  for j:=col+1 to size do temp[i,j-1]:=m[i,j];
end;
for i:=row+1 to size do
 begin
  for j:=1 to col-1 do temp[i-1,j]:=m[i,j];
  for j:=col+1 to size do temp[i-1,j-1]:=m[i,j];
end;
if (row+col) mod 2 = 0 then AlgDop := det(size-1,temp)
else AlgDop := -det(size-1,temp);
end;
 
function Det(size:integer; var m : matr):real;
var i:integer;
    r:real;
begin
if size = 1 then Det:=m[1,1]
else
if size = 2 then Det:=(m[1,1]*m[2,2]-m[1,2]*m[2,1])
else
 begin
  r:=0;
  for i:=1 to size do begin
    r := r + m[1,i]*AlgDop(size,m,1,i);
  end;
  Det:=r;
end;
end;
 
procedure ObrMatr(a:matr;var am:matr;n:integer);
var i,j:integer;
    dt:real;
begin
dt:=det(n,a);
if abs(dt)<1e-15 then begin
  writeln('Malenkiy opredelitel!');
  exit;
end;
for i:=1 to n do begin
  for j:=1 to n do am[i,j]:=AlgDop(n,a,j,i)/dt;
end;
end;
 
procedure print_matr(n:integer;var a:matr);
var i,j:integer;
begin
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:7:3);
  writeln;
 end;
end;
 
var a,obr:matr;
    i,j,n:integer;
 
begin
clrscr;
write('Vvedite N: ');
readln(n);
writeln('Введите ',n*n,'elementov matricy:');
for i:=1 to n do
for j:=1 to n do
   begin
    write('a[',i,',',j,']=');
    readln(a[i,j]);
   end;
clrscr;
writeln('Ishodnaya matrica:');
print_matr(n,a);
ObrMatr(a,obr,n);
writeln('Obratnaya matrica:');
print_matr(n,obr);
readln
end.
Astis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(Паскаль) Составить программу, использующую подпрограмму-функцию Викуська_ Помощь студентам 6 21.04.2009 23:32
Поиск обратной матрицы методом Гаусcа BOB.GLAMUR Общие вопросы Delphi 1 26.12.2008 11:30
Вычисление обратной матрицы методом Гаусса Штудент Общие вопросы C/C++ 0 07.12.2008 14:17