Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
-
dasha131
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
ПОмогите пожалуйста составить программу для вычисения произведения матриц A,B,C каждая из которых имеет размерность nxn
ВОт составленная мною часть проги, где вводятся сами матрицы, проверьте пожалуйста
program ABC;
var
matrA: array[1..500,1..500] of integer;
matrB: array[1..500,1..500] of integer;
matrC: array[1..500,1..500] of integer;
i: integer;
j: integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
read matrA[i,j];
end;
begin
read matrB[i,j];
end;
begin
read matrC[i,j];
end;
ВОт составленная мною часть проги, где вводятся сами матрицы, проверьте пожалуйста
program ABC;
var
matrA: array[1..500,1..500] of integer;
matrB: array[1..500,1..500] of integer;
matrC: array[1..500,1..500] of integer;
i: integer;
j: integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
read matrA[i,j];
end;
begin
read matrB[i,j];
end;
begin
read matrC[i,j];
end;
-
Hector
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
в принципе правильно, вот только нет ввода n и вместо оператора read лучше использовать readln imho, неплохо бы было выводить приглашение на ввод данных. размерность матриц лучше задавать через константу
Код:
ввод матриц я бы организовал процедурой
p. s. используйте тег CODE
Код:
Код: Выделить всё
const
R=500;
var
matrA: array[1..R,1..R] of integer;ввод матриц я бы организовал процедурой
p. s. используйте тег CODE
-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Вот готово, замечания будут?
Код:
Код:
Код: Выделить всё
program ABC;
const NMax = 10;
type Matrix = array [1..NMax, 1..NMax] of Real;
procedure 1MulMatrix(var a, b, c: Matrix; n: Integer);
var i, j, k: Integer;
s: Real;
begin
for i := 1 to n do
for j := 1 to n do
begin
s := 0;
for k := 1 to n do
s := s + a[i, k]*b[k, j];
c[i, j] := s
end
end;
procedure 2MulMatrix(var c, d, e: Matrix; n: Integer);
var i, j, k: Integer;
s: Real;
begin
for i := 1 to n do
for j := 1 to n do
begin
s := 0;
for k := 1 to n do
s := s + c[i, k]*d[k, j];
e[i, j] := s
end
end;
var a, b, c,d,e: Matrix;
i, j, n: Integer;
begin
WriteLn('vvedite poradok matrix');
Write('n = '); ReadLn(n);
WriteLn('vvedite pervyu');
for i := 1 to n do
for j := 1 to n do
Read(a[i, j]);
WriteLn('vvedite vtoryu');
for i := 1 to n do
for j := 1 to n do
Read(b[i, j]);
WriteLn('vvedite tretu');
for i := 1 to n do
for j := 1 to n do
Read(d[i, j]);
MulMatrix(a, b, c, n);
MulMatrix(c, d, e, n);
for i := 1 to n do
begin
for j := 1 to n do
Write(e[i, j]:0:6, ' ');
WriteLn
end;
ReadLn
end.-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Ну все, причина найдена
MulMatrix(a, b, d, n); d:=MulMatrix(a,b,d,n);
MulMatrix(d, c, e, n); e:=MulMatrix(c,d,e,n);
у нас он вы чиcлял как C*AB , а в планах было AB*C
хоты разницы особой нет, по свойству матриц A*B=B*A но все же лучше будет записать
MulMatrix(a, b, d, n);
MulMatrix(d, c, e, n);
Все правильно?
MulMatrix(a, b, d, n); d:=MulMatrix(a,b,d,n);
MulMatrix(d, c, e, n); e:=MulMatrix(c,d,e,n);
у нас он вы чиcлял как C*AB , а в планах было AB*C
хоты разницы особой нет, по свойству матриц A*B=B*A но все же лучше будет записать
MulMatrix(a, b, d, n);
MulMatrix(d, c, e, n);
Все правильно?

-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Цитата dasha131:
D[i,j] := D[i,j] + (A[i,j]*B[j,i])*C[j,i];
Вот формула
судя по формуле это не перемножение матриц, а просто алгоритм вычисления значения элемента матрицы D на основании соответствующих элементов предыдущих 3 матриц, тогда просто это надо выполнить в цикле
D[i,j] := D[i,j] + (A[i,j]*B[j,i])*C[j,i];
Вот формула
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
судя по формуле это не перемножение матриц, а просто алгоритм вычисления значения элемента матрицы D на основании соответствующих элементов предыдущих 3 матриц, тогда просто это надо выполнить в цикле
-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Сами матрицы точно правильно введутся?!
-
Hector
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Цитата dasha131:
блок const не надо смешивать с блоком var.
Код:
Решение простое, "в лоб" можно конечно улучшить, но работать будет без проблем.
Цитата dasha131:
Может поможете дальше с программой?
Посмотри
И вид общей формулы
Результирующую матрицу получать в 2 этапа. Сначала 1*2, затем получившее*3;
Процедуры и функции проходили? Они бы сейчас очень пригодились.
блок const не надо смешивать с блоком var.
Код:
Код: Выделить всё
program ABC;
const
R=500;
var
matr1,matr2,matr3,matr4: array[1..R,1..R] of real;
i,j,m,n,p,s,g: integer;
S:real;
Begin
read (g) {размерность матрицы gxg}
for i:=1 to g do
for j:=1 to g do
begin
read(matr1[i,j]);
end;
for m:=1 to g do
for n:=1 to g do
begin
read(matr2[m,n]);
end;
for p:=1 to g do
for s:=1 to g do
begin
read(matr3[p,s]);
end;Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Решение простое, "в лоб" можно конечно улучшить, но работать будет без проблем.
Цитата dasha131:
Может поможете дальше с программой?
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Посмотри
здесь
И вид общей формулы
тут
Результирующую матрицу получать в 2 этапа. Сначала 1*2, затем получившее*3;
Процедуры и функции проходили? Они бы сейчас очень пригодились.
-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Это не данная формула)) Значит моя ошибка(
МОжет поможете дальше с программой?
МОжет поможете дальше с программой?
-
lxa85
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Цитата dasha131:
Почему так записали 31-33ю строчки, почему begin между?
это вывод матрицы, внешний цикл выбирает номер строки, а в его теле внутренний выводит значение элементов, а пустой writeln переводит каретку (чтоб красиво было
)
Цитата dasha131:
И еще непонятно значение строчек 35,37
37 строка просто задержка, чтобы программа после выполнения сразу не закрывалась
Цитата dasha131:
почему вконце 14 и 15й строчек не ставится ";" ?
код тестировали? imho просто ошибка, забыли поставить
Цитата dasha131:
разобрать цикл с 4-15строчки
это реализация математического метода умножения матриц
Почему так записали 31-33ю строчки, почему begin между?
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
это вывод матрицы, внешний цикл выбирает номер строки, а в его теле внутренний выводит значение элементов, а пустой writeln переводит каретку (чтоб красиво было
)Цитата dasha131:
И еще непонятно значение строчек 35,37
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
37 строка просто задержка, чтобы программа после выполнения сразу не закрывалась
Цитата dasha131:
почему вконце 14 и 15й строчек не ставится ";" ?
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
код тестировали? imho просто ошибка, забыли поставить
Цитата dasha131:
разобрать цикл с 4-15строчки
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
это реализация математического метода умножения матриц
-
dasha131
Re: Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
Цитата Hector:
код тестировали? imho просто ошибка, забыли поставить
ВОт это то самое и интересное, все тестировалось, и работало прекрасно без ";" ну и как это объяснить?
А чтобы перемножать три матрицы, нужно новый цикл писать "MulMatrix(var c, d, e: Matrix; n: Integer)" ??
код тестировали? imho просто ошибка, забыли поставить
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)
ВОт это то самое и интересное, все тестировалось, и работало прекрасно без ";" ну и как это объяснить?
А чтобы перемножать три матрицы, нужно новый цикл писать "MulMatrix(var c, d, e: Matrix; n: Integer)" ??