Помощь - Поиск - Пользователи - Календарь
Полная версия: Объясните строку из программы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Neon6868
Задание: Путём перестановки элементов квадратной вещественной матрицы добиться того, чтобы её максимальный элемент находился в верхнем левом углу, следующий по величине - в позиции (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 жирный не сделаешь...
напиши эту загадочную строку отдельно.
Malice
Цитата(Neon6868 @ 22.03.2007 18:25) *

Надо объяснить как меняются элементы в выделенном красным цветом месте!

В этом месте просто съэкономили на одной переменной, попробуй произвести эти операции вручную на 2-х числах. Они тоже поменяются..
например:
a=1, b=5;
a=b-a; a=5-1=4;
b=b-a; b=5-4=1;
a=a+b; a=4+1=5;
a=5, b=1.

St@senk@
Или в общем виде, пусть 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, этот метод - не эффективен.
Улучшение кода
Neon6868
Всем спасибо yes2.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.