Опубликован: 21.03.2012 | Доступ: свободный | Студентов: 2804 / 169 | Оценка: 4.44 / 4.19 | Длительность: 06:43:00
Специальности: Программист
Лекция 6:

Типовые алгоритмы обработки двумерных массивов

< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Аннотация: В лекции рассматриваются типовые алгоритмы обработки двумерных массивов. рассмотрены некоторые олимпиадные задачи, которые решаются с использованием этих алгоритмов. Цель лекции: научиться применять изученные типовые алгоритмы при решении классических задач.

Обработку двумерного массива можно условно разделить на три группы:

  • Обработка всего массива;
  • Обработка отдельно по строкам и столбцам;
  • Обработка относительно диагоналей.

Рассмотрим типовые алгоритмы обработки двумерных массивов каждой группы в отдельности.

Обработка всего массива

Таблица 5.1.
Типовой алгоритм Программная реализация (Бейсик) Программная реализация (Паскаль)
Заполнение (порядок обхода элементов двумерного массива - построчно слева направо)
…
for i=1 to n
for j=1 to m
input x(i,j)
next j
next i
…
…
for i:=1 to n do
for j:=1 to m do 
readln (x[i,j]);
…
Вывод
…
for i=1 to n
for j=1 to m
print x(i,j);" ";
next j
print 
next i
…
for i:=1 to n do
begin
for j:=1 to m do
write (x[i,j], ' ');
writeln;
end;
…
Сумма, произведение
…
p=1
for i=1 to n
for j=1 to m
s=s+x(i,j)
p=p*x(i,j)
next j
next i
…
…
s:=0; p:=1;
for i:=1 to n do
for j:=1 to m do
begin
s:=s+x[i,j];
p:=p*x[i,j];
end 
…
Максимальный (минимальный) элемент
…
max=x(1,1)
min=x(1,1)
for i=1 to n
for j=1 to m
if x(i,j)>max then max=x(i,j)
if x(i,j)<min then min=x(i,j)
next j,i
…
max:=x[1,1];
min:=x[1,1];
for i:=1 to n do
for j:=1 to m do
begin
if x[i,j]>max then max:=x[i,j];
if x[i,j]<min then min:=x[i,j];
end 
…
Выбор по условию
…
for i=1 to n
for j=1 to m
if {условие} then {действие}
next j
next i
…
…
for i:=1 to n do
for j:=1 to m do
if {условие} then {действие}
…

Типовые алгоритмы обработки двумерного массива отдельно по строкам:

Таблица 5.2.
Типовой алгоритм Программная реализация (Бейсик) Программная реализация (Паскаль)
Сумма элементов каждой строки
…
for i=1 to n
for j=1 to m
s(i)=s(i)+x(i,j)
next j
next i
rem-----------------------------------
for i=1 to n
print s(i);" ";
next
…
for i:=1 to n do
s[i]:=0;
for i:=1 to n do
for j:=1 to m do
s[i]:=s[i]+x[i,j];
for i:=1 to n do
write (s[i]);
…
Произведение элементов каждой строки
…
for i=1 to n
p(i)=1
next
rem-----------------------------------
for i=1 to n
for j=1 to m
p(i)=p(i)*x(i,j)
next j
next i
rem-----------------------------------
for i=1 to n
print p(i);" ";
next
…
for i:=1 to n do
p[i]:=1;
for i:=1 to n do
for j:=1 to m do
p[i]:=p[i]*x[i,j];
for i:=1 to n do
write (p[i]);
Максимальный (минимальный) элемент каждой строки
…
for i= 1 to n
max(i)=x(i,1)
min(i)=x(i,1)
next
rem-----------------------------------
for i=1 to n
for j=1 to m
if x(i,j)>max(i) then max(i)=x(i,j)
if x(i,j)<min(i) then min(i)=x(i,j)
next j,i
rem-----------------------------------
for i=1 to n
print max(i);" ";;
next
print 
for i=1 to n
print min(i);" ";;
next
…
…
for i:= 1 to n do
begin
max[i]:=x[i,1];
min[i]:=x[i,1];
end;
for i:=1 to n do
for j:=1 to m do
begin
if x[i,j]>max[i] then max[i]:=x[i,j];
if x[i,j]<min[i] then min[i]:=x[i,j];
end;
for i:=1 to n do
write (max[i]);
writeln;
for i:=1 to n do
write (min[i]);
…
Выбор по условию (в каждой строке)
…
for i=1 to n
for j=1 to m
if {условие} then {rez(i)=…}
next j
next i
rem-----------------------------------
for i=1 to n
print rez(i);" ";
next
…
for i:= 1 to n do
begin
rez[i]:=0;
end;
for i:=1 to n do
for j:=1 to m do
if {условие} then {rez[i]:=…};
for i:=1 to n do
write (rez[i]);
…

Типовые алгоритмы обработки двумерного массива отдельно по столбцам:

Таблица 5.3.
Типовой алгоритм Программная реализация (Бейсик) Программная реализация (Паскаль)
Сумма элементов в каждом столбце
…
for j=1 to m
for i=1 to n
s(j)=s(j)+x(i,j)
next i
next j
rem----------------------------------
for j=1 to m
print s(j)
next
…
for j:=1 to m do 
s[j]:=0;
for j:=1 to m do
for i:=1 to n do
s[j]:=s[j]+x[i,j];
for j:=1 to m do 
write (s[j]);
…
Произведение элементов в каждом столбце
…
for j=1 to m
p(j)=1
next
rem-----------------------------------
for j=1 to m
for i=1 to n
p(j)=p(j)*x(i,j)
next i
next j
rem-----------------------------------
for j=1 to m
print p(j)
next
…
for j:=1 to m do 
p[j]:=1;
for j:=1 to m do
for i:=1 to n do
p[j]:=p[j]*x[i,j];
for j:=1 to m do 
write (p[j]);
…
Максимальный (минимальный) элемент в каждом столбце
…
for j= 1 to m
max(j)=x(i,1)
next
rem------------------------------------
for j=1 to m
for i=1 to n
if x(i,j)>max(j) then max(j)=x(i,j)
next i,j
rem------------------------------------
for j=1 to m
print max(j);" ";
next 
print
for j=1 to m
print min(j);" ";
next
…
for j:= 1 to m do
begin
max[j]:=x[i,1];
min[j]:=x[i,1];
end;
for j:=1 to m do
for i:=1 to n do
begin
if x[i,j]>max[j] then max[j]:=x[i,j]
if x[i,j]<min[j] then min[j]:=x[i,j]
end;
for j:=1 to m do
write (max[j]);
writeln;
for j:=1 to m do
write (min[j]);
…
Выбор по условию (в каждом столбце)
…
for j=1 to m
for i=1 to n
if {усл.} then {rez(i)=…}
next i
next j
rem------------------------------------
for j=1 to m
print rez(j);" ";
next
…
for j:= 1 to m do
rez[j]:=0;
for j:=1 to m do
for i:=1 to n do
if {усл.} then {rez[i]:=…};
for j:=1 to m do
write  (rez[j]);
…
< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Александр Шнайдман
Александр Шнайдман
Израиль, Тель Авив