Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 1
Регистрация: 05.01.2012
Сообщений: 29
1

Обратная матрица

13.04.2014, 15:52. Показов 2550. Ответов 4
Метки нет (Все метки)

Ребята есть программа нахождения обратной матрицы, как сделать чтобы мы задавали 2 матрицы а не одну и чтобы высчитывало 2 матрицы и выводило в конце рядом

вот код для 1 матрицы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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.
Добавлено через 28 минут
это надо для каждой матрицы создавать те же самые функции и процедуры с другими параметрами или можно с этими ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2014, 15:52
Ответы с готовыми решениями:

Обратная матрица
Всем привет! Помогите решить задачку в паскале, пожалуйста! Дана матрица А, 4x4. Найти обратную...

Обратная матрица
Знайти обернену матрицю та зробити до неї перевірку(одиничну матрицю). Без процедур!!!

Написаь программу, чтобы в ней находилась обратная матрица, определитель и СЛАУ
Написаь программу, чтобы в ней находилась обратная матрица, определитель и СЛАУ (метод Гаусса),...

Обратная польская запись
Требуется преобразовать выражение в обратную польскую запись и посчитать. Программа вроде как...

4
Почетный модератор
64065 / 47477 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
13.04.2014, 16:40 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
uses crt;
const n = 4;
type
matr = array[1..n,1..n] 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 f:boolean);
{нахождение обратной матрицы, добавил флаг определитель маленький или нет}
var i,j:integer;
    dt:real;
begin
dt:=det(n,a);
f:=true;
if abs(dt)<1e-15 then
 begin
  f:=false;
  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 vvod(var a:matr;c:char);
var i,j:integer;
begin
writeln('введите ',n*n,'elementov matricy ',c,':');
for i:=1 to n do
for j:=1 to n do
 begin
  write('el[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
end;
procedure print_matr(n,x,y,k:integer;var a:matr;f:boolean;s:string);
{процедура вывода элементов матрицы, добавил координаты места вывода,
номер матрицы k, и флааг определителя}
var i,j:integer;
begin
gotoXY(x,y);
write(s);
if (k=2)and not f then
 begin
  gotoXY(x,y+2);
  write('Malenkiy opredelitel!');
 end
else
 begin
  for i:=1 to n do
   begin
    gotoXY(x,y+i);
    for j:=1 to n do
    write(a[i,j]:7:3);
   end;
 end;
end;
 
var a,b,obra,obrb:matr;
    i,j:integer;
    f:boolean;
begin
clrscr;
vvod(a,'A');
vvod(b,'B');
print_matr(n,1,1,1,a,f,'Ishodnaya matrica A:');
ObrMatr(a,obra,n,f);
print_matr(n,1,6,2,obra,f,'Obratnaya matrica A:');
print_matr(n,50,1,1,b,f,'Ishodnaya matrica B:');
ObrMatr(b,obrb,n,f);
print_matr(n,50,6,2,obrb,f,'Obratnaya matrica B:');
readln;
end.
1
2 / 2 / 1
Регистрация: 05.01.2012
Сообщений: 29
13.04.2014, 17:25  [ТС] 3
слушайте а как поменять чтобы размерность в общем виде была? это надо в этой процедуре менять ?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure vvod(var a:matr;c:char);
var i,j:integer;
begin
writeln('введите ',n*n,'elementov matricy ',c,':');
for i:=1 to n do
for j:=1 to n do
 begin
  write('el[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
end;
или так не получится ?
0
Почетный модератор
64065 / 47477 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
13.04.2014, 17:32 4
Изменишь здесь
Pascal
1
2
3
4
uses crt;
var n:integer;
type
matr = array[1..10,1..10] of real;
и вставишь это
Pascal
1
2
3
4
5
6
begin
clrscr;
repeat
write('Razmer matric ot 2 do 10 n=');
readln(n);
until n in [2..10];
1
2 / 2 / 1
Регистрация: 05.01.2012
Сообщений: 29
13.04.2014, 17:37  [ТС] 5
спасибо большое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2014, 17:37

обратная матрица
подскажите пожалуйста алгоритм определения обратной матрицы

Цифры, обратная матрица.
1)Дано число. Опеределить сколько в нем цифр. Исключить из него 0 и 5. 2)Дана матрица А(n n)....

Обратная матрица 3-ого порядка
Дана матрица 3-ого порядка, если для этой матрицы существует обратная, то найти её, если не...

Обратная матрица методом Гаусса
Добрый день! Требуется реализовать поиск обратной матрицы путем элементарных преобразований в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.