Здравствуйте! Учился я учился(нифига не делал тоесть), и вдруг оказалось что через неделю здавать програмирование(типа курсача тока за полгода). Ну это предыстория
Дана квадратная матрица, нужно найти максимальный элемент на главной диагонали, и минимальный на побочной(или как её там). Потом поменять местами сторчи и столбцы на которых они стоят. Найти макс/мин я то вроде могу, а вот поменять как? Подскажите кто может.
ЗЫ: Смеяться не надо.
ЗЫЫ: Если решение где-то есть на сайте, то тоже просьба не пинать, я только зарегился, а сроки ой как поджимают(до пятницы)
Ну это вроде работает...
Program zr4;
const
n = 3;
Var
mas: array[1..n,1..n] of integer;
i,j : integer;
max1, max2 : integer;
Begin
max1 := 0;
max2 := 0;
for i := 1 to n do
for j := 1 to n do
begin
Readln(mas[i,j]);
max1 := mas[1,1];
end;
for i := 1 to n do
begin
if max1 < mas[i,i] then
max1 := mas[i,i];
end;
max2 := mas[1,3];
for i := 1 to n do
if max2 < mas[i,n+1-i] then
max2 := mas[i,n+1-i];
Writeln('max на главной = ', max1, ' max на побочной = ', max2);
end.
ax:=a[1,1];
ix:=1;
for i:=2 to n do if a[i,i]>ax then begin
ax:=a[i,i];
ix:=i
end;
Зачем лишние переменные?
ix := 1;Теперь в ix хранится индекс, а в a[ix, ix] - само значение...
for i := 2 to n do
if a[i, i] > a[ix, ix] then ix := i;
Program zr4;
const
n = 3;
Var
mas: array[1..n,1..n] of integer;
i,j,ix1,ix2,ix3,x,y : integer;
max1, min : integer;
Begin
max1 := 0;
min := 0;
for i := 1 to n do
for j := 1 to n do
begin
Readln(mas[i,j]);
max1 := mas[1,1];
ix1 := 1;
ix2 := 1;
ix3 := 1;
end;
for i := 1 to n do
begin
if max1 < mas[i,i] then
ix1 := i;
max1 := mas[i,i];
end;
min := mas[1,3];
for i := 1 to n do
if min > mas[i,n+1-i] then
ix3 := n+1-i;
ix2 := i;
min := mas[i,n+1-i];
Writeln('max na glavnou= ', max1,'; max glavnoi lejit na koord ', ix1,',',ix1);
Writeln('min na pobochnoi= ', min,'; min na pobochnoi lejit na koord ', ix2,',',ix3);
for i := 1 to n do
begin
x := mas[ix1,i];
mas[ix1,i] := mas[i,ix1];
mas[i,ix1] := x;
y := mas[ix2,i];
mas[ix2,i] := mas[i,ix2];
mas[i,ix2] := y;
end;
for i := 1 to n do
for j := 1 to n do
Writeln(mas[i,j]);
end.
x := mas[ix1,i];
mas[ix1,i] := mas[i,ix1];
mas[i,ix1] := x;
y := mas[ix2,i];
mas[ix2,i] := mas[i,ix2];
mas[i,ix2] := y;
Не надо пытаться сделать все и сразу, разделяй задачу на подзадачи...
Смотри:
const n = 3;
var
mas: array[1..n,1..n] of integer;
i, j, ix_max, ix_min: integer;
x: integer;
Begin
{ Шаг №1 - вводим матрицу (я сделал генерацию случ. числами) }
for i := 1 to n do
for j := 1 to n do
{ Readln(mas[i,j]); }
mas[i, j] := random(10);
{ шаг №2 - распечатываем ее - для проверки правильности }
for i := 1 to n do begin
for j := 1 to n do
Write(mas[i,j]:4);
writeln;
end;
{ теперь устанавливаем индексы экстремумов в 1-цы }
ix_max := 1;
ix_min := 1;
{ А теперь проходим по... }
for i := 1 to n do begin
{ ... главной диагонали в поисках максимума }
if mas[ix_max, ix_max] < mas[i, i] then ix_max := i;
{ ... и побочной - в поисках минимума }
if mas[ix_min, n - ix_min + 1] > mas[i, i] then ix_min := i;
end;
{ полученные результаты распечатываем }
writeln('max na glavnou= ', mas[ix_max, ix_max],
'; max glavnoi lejit na koord ', ix_max,',',ix_max);
writeln('min na pobochnoi= ', mas[ix_min, n - ix_min + 1],
'; min na pobochnoi lejit na koord ', ix_min,',',n - ix_min + 1);
{ меняем местами сначала строки, где находятся минимум и максимум }
for i := 1 to n do begin
x := mas[ix_min, i]; mas[ix_min, i] := mas[ix_max, i]; mas[ix_max, i] := x;
end;
{ потом - столбцы, соответственно }
for i := 1 to n do begin
x := mas[i, n - ix_min + 1]; mas[i, n - ix_min + 1] := mas[i, ix_max]; mas[i, ix_max] := x;
end;
{ Ну, и проверяем }
for i := 1 to n do begin
for j := 1 to n do
Write(mas[i,j]:4);
writeln;
end;
end.
Огромное спасибо! Разобрался, я как оказалось не совсем праильно понял условие задачи к тому же.
{ меняем местами сначала строки, где находятся минимум и максимум }
for i := 1 to n do begin
x := mas[ix_min, i]; mas[ix_min, i] := mas[ix_max, i]; mas[ix_max, i] := x;
end;
{ потом - столбцы, соответственно }
for i := 1 to n do begin
x := mas[i, n - ix_min + 1]; mas[i, n - ix_min + 1] := mas[i, ix_max]; mas[i, ix_max] := x;
end;
{ Ну, и проверяем }
for i := 1 to n do begin
for j := 1 to n do
Write(mas[i,j]:4);
writeln;
end;
for i := 1 to n do begin
x := mas[ix_min, i]; mas[ix_min, i] := mas[ix_max, i]; mas[ix_max, i] := x;
end;
for i := 1 to n do begin
x := mas[ix_min, i]; mas[ix_min, i] := mas[n-i+1,n-ix_min+1]; mas[n-i+1,n-ix_min+1] := x;
end;
for i := 1 to n do begin
for j := 1 to n do
Write(mas[i,j]:4);