1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Нужно вводить например 2 (или больше) двумерных массива.
Код
procedure readmatrix( var a: matrix; var n, m :integer); var i,j : integer; begin repeat write('Ievadi rindu skaitu: ');readln(n) until (n>0) and (n<=nn); repeat write('Ievadi kolonnu skaitu: ');readln(m) until (m>0) and (m<=mm); for i:=1 to n do begin for j:=1 to m do begin writeln('A[',i,j,']= '); readln(a[i,j]) end end end;
procedure printmatrix(a :matrix; n,m: integer); var i,j,k: integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j]:6); writeln; end end;
можно ли эти 2 процедуры сделать так, чтоб поменяв чтото при их вызове типа readmatrix(a,n,m), например а, она ещё и выполняла чтение другой матрицы? Брр так сложно написано
Ну то есть в разделе описания будет одна процедура, а при вызове 2 раза, прочитает 2 матрицы
В том что в дальнейшем эти матрицы надо перемножить. А не получается. Мож я чтото не то делаю. Вроде уже всё что можно туда сунула UZD4.PAS ( 1.47 килобайт )
Кол-во скачиваний: 479
Нельзя напрямую сделать так, чтобы одна и та же процедура заполняла два массива разных типов. Нужен трюк:
{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;
А если еще точнее, чем написано в комментарии - то ты вообще не должна вводить размерность матриц, потому что не каждые 2 матрицы можно перемножить (только сцепленные), а ты при перемножении нигде не проверяешь, являются ли матрицы сцепленными ...
Гмм компилирует даже а вот такой прикол если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле.. А Паскаль говорит что (19 22 43 50) непорядок
если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле.. А Паскаль говорит что (19 22 43 50) непорядок
он же того... умер. давно. в 1662 году. а программулина правильно насчитала. во всяком случае, мне кажется, что 3*5+4*7=15+28=43 3*6+4*8=18+32=50 могу ошибаться.
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!