{считаем максимальным 1-й элемент массива, запоминаем строку и столбец в котором находится максимум}
max:=a[1,1]; sk:=1; sb:=1;
for i:=1 to n do
for j:=1 to m do
if a[I,j]>max then begin max:=a[I,j]; sk:=I; sb:=j; end;
2) минимальный элемент в каждой строке
for i:=1 to n do
begin min:=a[I,1];
for i:=2 to n do
if a[I,j]<min then min:=a[I,j];
writeln(min);
end;
? Что изменится, если нужно искать в каждом столбце
Задание. Определить, какую задачу решает приведенный ниже фрагмент и что будет выведено на экран, если матрица содержит следующие значения:
-3
-4
-5
for i:=1 to n do
begin s:=0;
for j:=1 to m do
if a[I,j]=0 then s:=s+1;
writeln(s);
end;
Ответ: кол-во =0 в каждой строке
0 1 1
for j:=1 to m do
begin k:=1;
for i:=2 to n do
if a[I,j]>a[k,j] then k:=I;
writeln(a[k,j]);
end;
Ответ: поиск максимального в каждом столбце
12 2 0
S:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
s:=s+a[I,j];
Ответ: сумма элементов выше гл.диагонали -1
k:=0;
for j:=1 to n-1 do
for i:=j+1 to n do
if (a[I,j] >0) and (a[I,j] <10) then k:=k+1;
Ответ: кол-во элементов в диапазоне (0, 10) в нижнем треугольнике 1
Алгоритм удаления
? Алгоритм удаления элемента в линейном массиве
Удаление столбца с номером k
for I:=1 to m do
for j:=k to n-1 do
a[I,j]:=a[I,j+1];
Удаление строки с номером k. (самостоятельно)
3. удалить из каждого столбца максимальный элемент
? Что будет удалятся строка или столбец (строка)
for j:=1 to n do
begin
k:=1;{поиск максимального}
for I:=2 to m do
if a[I,j]>a[k,j] then k:=I;
{удаление найденного элемента}
for I:=k to m-1 do
a[I,j]:=a[I+1,j];
end;
Алгоритм вставки
? Алгоритм вставки элемента в линейном массиве
? Размер массива (должен быть на 1 элемент больше)
1. Включение элемента в строку.
{в каждой строке продублировать диагональный элемент}
for I:=1 to m do
begin
for j:=n+1 downto I+2 do
a[I,j]:=a[I,j-1];
a[I,I+1]:=a[I,I];
end;
2. Включение элемента в столбец – самостоятельно.
{в каждом столбце продублировать диагональный элемент}
for j:=1 to n1 do
begin
for I:=m1+1 downto j+2 do
a[I,j]:=a[I-1,j];
a[j+1,j]:=a[j,j]
end;
Задача. Дана таблица чисел размером M*N. Найти строку, имеющую максимальное произведение положительных элементов, и столбец, имеющий минимальное количество отрицательных элементов. Найденные строку и столбец удалить.
? Какие алгоритмы нужны (произведение положительных элементов в каждой строке, кол-во отрицательных элементов в каждом столбце, удаление)
{формирование массива}
{произведение в первой строке}
p:=1;
for j:=1 to n do
if a[1,j]>0 then p:=p*a[1,j];
max:=p; nom:=1;
for i:=2 to m do
begin p:=1;{находим произведение}
for j:=1 to n do
if a[I,j]>0 then p:=p*a[I,j];
{сравниваем с максимальным}
if max<p then begin max:=p; nom:=I; end;
end;
{количество в первом столбце}
k:=0;
for i:=1 to m do
if a[i,1]<0 then k:=k+1;
min:=k; nom1:=1;
for j:=2 to n do
begin k:=0;{находим количество}
for i:=1 to m do
if a[I,j]<0 then k:=k+1;
{сравниваем с минимальным}
if min>k then begin min:=k; nom1:=j; end;
end;
{удаляем строку с номером nom и столбец с номером nom1}