program kontr; uses Crt; const n=3; type vec=array [1..n] Of integer; mas=array [1..n] of vec; var v1,v2:mas; s1,s2:integer; procedure input (var v:mas); var i,j:integer; begin for i:=1 to n do for j:=1 to n do begin writeln ('vvesti element massiva'); readln (v[i,j]); end; end; Procedure output (v:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write (' ',v[i,j]); writeln; end; end; function sum (v:mas):integer; var s,i:integer; begin s:=0; For i:=1 To n Do s:=s+v[i, i]; sum:=s; end; begin ClrScr; write ('vvod massiva 1'); readln; input (v1); writeln ('vvod massiva 2'); input (v2); writeln ('massiv 1:'); output (v1); writeln ('massiv 2:'); output (v2); s1:=sum(v1); s2:=sum(v2); writeln (s1,' ',s2); readln; end.
Здравствуйте, подскажите пожалуйста как организовать транспонирование матрицы в моей программе, не понимаю, надо сделать еще одну процедуру либо функцию или транспонирование можно сделать в функции нахождения суммы?
Archon
8.12.2008 21:10
Учитывая, что ты находишь сумму элементов только главной диагонали, то в том же цикле у тебя транспонировать матрицу не выйдет. Вообще, логичнее это сделать в отдельной процедуре. Для транспонирования нужно просмотреть элементы выше главной диагонали и поменять их значения с симметричными им элементами ниже главной диагонали.
temp := v[i, j]; v[i, j] := v[n - i + 1, n - j + 1]; v[n - i + 1, n - j + 1] := temp;
Но это верно только для квадратных матриц.
Lapp
8.12.2008 22:02
Archon, ты, видимо, что-то не так понял. Транспонировать - это поменять местами a[i,j] и a[j,i].
Верно для любых матриц - как квадратных, так и прямоугольных.
Archon
8.12.2008 22:30
Упс, прошу прощения. Lapp верно сказал. Спасибо, что заметил
Mysteo
8.12.2008 22:33
Значит мне надо сделать процедуру транспонирования и в оснвной программе написать что-то вроде
if s1>s2 then trans(v1) else trans (v2);
?
Mysteo
8.12.2008 22:54
program kontr; uses Crt; const n=3; type vec=array [1..n] Of integer; mas=array [1..n] of vec; var v1,v2:mas; s1,s2:integer; procedure input (var v:mas); var i,j:integer; begin for i:=1 to n do for j:=1 to n do begin writeln ('vvesti element massiva'); readln (v[i,j]); end; end; Procedure output (v:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write (' ',v[i,j]); writeln; end; end; function sum (v:mas):integer; var s,i:integer; begin s:=0; For i:=1 To n Do s:=s+v[i, i]; sum:=s; end; procedure trans (var v:mas); var i,j,vsp:integer; begin for i:=1 to j-1 do begin for j:=0 to i do begin vsp:=v[i,j]; v[i,j]:=v[j,i]; v[j,i]:=vsp; end; end; end; begin ClrScr; write ('vvod massiva 1'); readln; input (v1); writeln ('vvod massiva 2'); input (v2); writeln ('massiv 1:'); output (v1); writeln ('massiv 2:'); output (v2); s1:=sum(v1); s2:=sum(v2); writeln (s1,' ',s2); readln; writeln('transponirovanie'); readln; if s1>s2 then begin trans(v1) ;output (v1) ; end else begin trans (v2) ; output (v2); end; readln; end.
Сделал вроде как надо почему не хочет работать, только сумму считает , а дальше зависает
Добавлено через 18 мин.
program kontr; uses Crt; const n=3; type vec=array [1..n] Of integer; mas=array [1..n] of vec; var v1,v2:mas; s1,s2:integer; procedure input (var v:mas); var i,j:integer; begin for i:=1 to n do for j:=1 to n do begin writeln ('vvesti element massiva'); readln (v[i,j]); end; end; Procedure output (v:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write (' ',v[i,j]); writeln; end; end; function sum (v:mas):integer; var s,i:integer; begin s:=0; For i:=1 To n Do s:=s+v[i, i]; sum:=s; end; Procedure trans(var v:mas); var i,j,temp:integer; Begin For i:=1 to (n-1) do For j:=i+1 to n do Begin temp:= v[i,j]; v[i,j]:= v[j,i]; v[j,i]:= temp; end; end;
begin ClrScr; write ('vvod massiva 1'); readln; input (v1); writeln ('vvod massiva 2'); input (v2); writeln ('massiv 1:'); output (v1); writeln ('massiv 2:'); output (v2); s1:=sum(v1); s2:=sum(v2); writeln (s1,' ',s2); readln; writeln('transponirovanie'); readln; if s1>s2 then begin trans (v1);output(v1); end else begin trans(v2);output(v2); end; readln; end.
Ура, оказывается если разобраться то всё просто , я думал я не сделаю сам!!!)) Всем спасибо кто рассмотрел мою задачку)
Lapp
8.12.2008 23:15
Procedure trans(var v:mas); var i,j,temp:integer; Begin For i:=1 to (n-1) do For j:=i+1 to n do Begin temp:= v[i,j]; v[i,j]:= v[j,i]; v[j,i]:= temp; end; end;
Не успел ответить .
Поздравляю, успехов тебе!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.