Задание: Путём перестановки элементов квадратной вещественной матрицы добиться того, чтобы её максимальный элемент находился в верхнем левом углу, следующий по величине - в позиции (2,2), следующий по величине - в позиции (3,3) и т. д.,заполнив таким образом всю главную диагональ( оформить в виде процедуры).
Надо объяснить как меняются элементы в выделенном красным цветом месте!
Вот программа:
program sortirovka;
const
n=5;
type
mas=array[ L n, L .n] of integer;
var
ij: integer;
a:mas;
procedure sort(var a:mas);
var
k,l,m,z,x, i,j : integer;
begin
m:=1;
while m<=n do begin
k:=m;
L=m;
for i:=1 to n do
for j:=1 to n do
if ((i<>j) or ((i=j) and (i>m))) and (a[i,j]>a[k,l]) then begin
k:=i;
l:=j
end;
if not ((k=m) and (l=m)) then begin
a[m,m]:=a[k,l]-a[m,m];
a[k,l]:=a[k,l]-a[m,m];
a[m,m]:=a[k,l]+a[m,m]
end;
inc(m);
end;
end;
begin
randomize:
for i:=1 ton do
for j:=1 to n do a[i,j]:=random(10);
for i:=1 to n do begin
for j:=1 to n do write(a[ij],' ');
writeln;
end;
writeln;
sort(a);
for i:=1 to n do begin
for j:= 1 to n do
write(a[i,j],' ');
writeln;
end;
end.
внутри тегов code жирный не сделаешь...
напиши эту загадочную строку отдельно.
Или в общем виде, пусть A,B - переменные, а a и b их значения вначале соответственно.
A=B-A=b-a;
B=B-A=b-(b-a)=b-b+a=a;
A=A+B=(b-a)+a=b
врезультате значения переменных а и b поменялись местами
Но как говорил Volvo, этот метод - не эффективен.
http://forum.pascal.net.ru/index.php?s=&showtopic=1741&view=findpost&p=34169
Всем спасибо