Вечер добрый. Необходимо срочно решить 2 задачи. . Завтра зачет, не допустит препод, если не будет их..
Ссылочный тип данных: 1. Составить программу, которая переворачивает список, т.е. изменяет ссылки так, чтобы его элементы оказались расположены в обратном порядке.
Модули: 2. В модуль включить подпрограмму нахождения произведения квадратных матриц А и В третьего порядка. В основной программе для трех квадратных матриц А, В и С 3-го порядка, вычислить Т=А*В*С.
В первой не знаю с чего начать. Во второй, теоретически догадываюсь.
const n=3; var mat1,mat2,mat3,resmat1,resmat2:array[1..n, 1..n] of integer; i,x,y,r,t:integer;
begin
writeln('Enter 1st matrix: '); for y:=1 to n do for x:=1 to n do begin write('a[',x,',',y,']: '); readln(mat1[x,y]); end;
Writeln('Enter 2nd matrix: '); for y:=1 to n do for x:=1 to n do begin write('b[',x,',',y,']: '); readln(mat2[x, y]); end;
{подсчет матрицы AxB}
for y:=1 to n do for x:=1 to n do begin r:=0; {обнуляем сумму произведений} for i:=1 to n do {идем под горизонтали Mat1 и по вертикали} r:=r+mat1[i,y]*mat2[x,i]; {Mat2; умножаем и добавляем в R} resmat1[x,y]:=r; {Resmat1[x, y] = результат = R} end;
writeln; writeln('AxB=');
for y:=1 to n do begin for x:=1 to n do write(resmat1[x,y]:4,' '); writeln; end;
readln;
Writeln('Enter 3rd matrix: '); for y:=1 to n do for x:=1 to n do begin write('b[',x,',',y,']: '); readln(mat3[x, y]); end;
for y:=1 to n do for x:=1 to n do begin r:=0; for i:=1 to n do r:=r+resmat1[i,y]*mat3[x,i]; resmat2[x,y]:=r; end;
writeln; writeln('AxBxC=');
for y:=1 to n do begin for x:=1 to n do write(resmat2[x,y]:4,' '); writeln; end;
readln;
end.
вот. все работает. немогу подогнать под условие задачи..
volvo
12.12.2005 21:15
Const n = 3; Type mxType = array[1 .. n, 1 .. n] Of Integer;
Procedure multMatrix(Var res: mxType; A, B: mxType); Var x, y, r: Integer; Begin for y:=1 to n do for x:=1 to n do begin r:=0; for i:=1 to n do r:=r+A[i,y]*B[x,i]; res[x,y]:=r; end; End;
и в основной программе:
Writeln('Enter 1st matrix: '); { Здесь - ввод 1 матрицы ( A ) ... }
Writeln('Enter 2nd matrix: '); { Здесь - ввод 2 матрицы ( B ) ... }
procedure vvod(var mat: matr; ch: char); var x,y: integer; begin writeln('Enter matrix: ',ch); for x:=1 to n do for y:=1 to n do begin write(ch, '[',x,',',y,']: '); readln(mat1[x,y]); end; end;
procedure schet(mat1,mat2: matr; var resmat: matr); var x,y,i,r: integer; {подсчет матрицы AxB} begin for x:=1 to n do for y:=1 to n do begin r:=0; {обнуляем сумму произведений} for i:=1 to n do {идем под горизонтали Mat1 и по вертикали} r:=r+mat1[x,i]*mat2[i,y]; {Mat2; умножаем и добавляем в R} resmat[x,y]:=r; {Resmat1[x, y] = результат = R} end; end;
procedure vyvod(mat: matr); var x,y: integer; begin for x:=1 to n do begin for y:=1 to n do write(mat[x,y]:4,' '); writeln; end; end;
end.
но чет не пашет..
все работает. исправил.
с чего посоветуете начать первую задачу?
volvo
12.12.2005 21:59
Исправь синтаксические ошибки:
procedure vvod(var mat: matr; ch: char); begin ... readln(mat[x,y]); { "mat" <--- Здесь !!! } ... end;
и
vvod(mat3,'c'); { <--- ";" Здесь !!! }
schet(resmat1,mat3,resmat2);
Для чего тебе компилятор? Он же все это тебе говорит...
Цитата
с чего посоветуете начать первую задачу?
Ну, во-первых, список одно- или двухсвязный? Процедура нужна обычная или рекурсивная?
Сам список ты уже реализовал?
b0b
12.12.2005 22:02
Цитата
Ну, во-первых, список одно- или двухсвязный? Процедура нужна обычная или рекурсивная? ?
односвязный. обычная.
Цитата
Сам список ты уже реализовал?
сейчас думаю начать. поэтому и спросил, с чего начать.