Вот такой вопрос появтлся.
Нужно вводить например 2 (или больше) двумерных массива.
Ну, она и так будет читать столько матриц, сколько нужно:
procedure readmatrix(var a: matrix; var n, m :integer);
begin
...
end;
var
m1, m2, m3: matrix;
begin
readmatrix(m1, n, m);
readmatrix(m2, n, m);
readmatrix(m3, n, m);
end.
В том что в дальнейшем эти матрицы надо перемножить.
А не получается.
Мож я чтото не то делаю.
Вроде уже всё что можно туда сунула
UZD4.PAS ( 1.47 килобайт )
Кол-во скачиваний: 458
Исходные матрицы какие?
Вводятся с клавы первые две типа pirma и otra (ну массивы такие).
Нельзя напрямую сделать так, чтобы одна и та же процедура заполняла два массива разных типов. Нужен трюк:
{Programma sareizina divas matricas}
uses crt;
const
rinda = 3;
kopa = 2;
kolonna = 5;
type
{ Будет использоваться ниже }
vector = array[1 .. pred(maxint) div sizeof(integer)] of integer;
pirma = array[1..rinda, 1..kopa] of integer;
otra = array[1..kopa, 1..kolonna] of integer;
rezultats = array[1..rinda, 1..kolonna] of integer;
var
row,col: integer;
a1: pirma; a2: otra;
ar: rezultats;
procedure matrixmult(var res:resultats; var a:pirma; b:otra);
var i,j,k: integer;
begin
for i:=1 to rinda do
for j:=1 to kolonna do
begin
res[i,j]:=0;
for k:=1 to kopa do
res[i,j]:=res[i,j]+ a[i,k]* b[k,j];
end
end;
{ Передаешь бестиповый параметр }
procedure readmatrix(var a; n, m :integer);
var
i,j : integer;
mx: vector absolute a;
begin
{
Я закомментировал, ибо ты НЕ должна вводить здесь размерность.
Вводи ДО этого в программе, и передавай сюда через N, M
}
(*
repeat write('Ievadi rindu skaitu: ');readln(n)
until (n>0) and (n<=rinda);
repeat write('Ievadi kolonnu skaitu: ');readln(m)
until (m>0) and (m<=kolonna);
*)
for i:=1 to n do begin
for j:=1 to m do begin
writeln('A[',i,j,']= '); readln(mx[pred(i)*n + j]);
end end
end;
procedure printmatrix(var a; n,m: integer);
var
i,j,k: integer;
mx: vector absolute a;
begin for i:=1 to n do begin
for j:=1 to m do write(mx[pred(i)*n + j]:6);
writeln;
end
end;
begin
clrscr;
writeln('Ievadi 1. matricu'); readmatrix(a1,rinda, kopa);
writeln('Ievadi 2. matricu'); readmatrix(a2,kopa, kolonna);
matrixMult(ar,a1,a2);
clrscr;
writeln('Pirma matrica: ');printmatrix(a1,rinda, kopa); writeln;
writeln('Otra matrica: ');printmatrix(a2,kopa, kolonna);
readkey;
end.
Хе хе...Так и думала что тут какая то фишка должна быть!!!
Попробую..
Тока сначала с другими разберусь
Гмм компилирует даже
а вот такой прикол
если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле..
А Паскаль говорит что (19 22 43 50) непорядок
Что я неправильно делаю?
|1 2| |5 6| |1*5+2*7 1*6+2*8| |19 22|
| | * | | = | | = | |
|3 4| |7 8| |3*5+4*7 3*6+4*8| |43 50|
Вы правильно посчитали..
А я не знаю зачем какимто методом считаю..
Бррр
Спасибо