Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Кудряшов Андрей
Помогите пожалуйста решить задачу.
Дана действительная квадратная матрица порядка n (n не менее 5), все элементы которой различны. Найти наименьший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.

program p_1;
const n=5;
var
a: array[1..n,1..n] of integer;
i, j, min, imin, jmin, buf :integer;
begin
writeln('Enter array');
for i:=1 to n do
begin
for j:=1 to n do
begin
read(a[i,j]);
readln;
end;
end;
min:=a[1,1]; imin:=1; jmin:=n;
for i:=1 to n do
begin
for j:=1 to n do
begin
if i=j then
begin
if min>a[i,j] then
min:=a[i,j]; imin:=i; jmin:=j;
end
else if j=n-i+1 then
begin
if min>a[i,j] then
min:=a[i,j]; imin:=i; jmin:=j;
end;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do
begin
if(i=j) and (j=n-i+1) then
begin
buf:=a[i,j];
a[i,j]:=a[imin,jmin];
a[imin,jmin]:=buf;
end;
write(a[i,j]:6);
writeln;
end;
end;
writeln('min=',min:3);
writeln('imin=',imin:2,' jmin=',jmin:2);
writeln('buf=',buf:2);
readln
end.


У меня не получается поймать индексы минимального элемента и поменять его местами с центральным элементом. Пожалуйста подскажите, что делать.
volvo
  min_i := 0; min_j := 0;
min := maxint;
for i := 1 to n do begin
// primary
if min > a[i, i] then begin
min_i := i; min_j := i; min := a[min_i, min_j];
end;

// secondary
if min > a[i, n - i + 1] then begin
min_i := i; min_j := n - i + 1; min := a[min_i, min_j];
end;
end;

T := a[(n div 2) + 1, (n div 2) + 1];
a[(n div 2) + 1, (n div 2) + 1] := a[min_i, min_j];
a[min_i, min_j] := T;

Можно еще проверить, нечетное ли N, и если нет - то не выполнять вообще ничего, т.к. в этом случае не будет элемента не пересечении диагоналей...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.