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

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

< Лекция 5 || Лекция 6: 12 || Лекция 7 >

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

Если количество строк и столбцов в двумерном массиве одинаково, то такой массив называется квадратным. Типовые алгоритмы для квадратных массивов позволяют обрабатывать массив относительно его диагональных элементов. Зависимость индексов элементов, расположенных на побочной диагонали легко определяется при после повторения Лекции 1 (номер строки элемента растет, номер столбца убывает).


Рис. 5.1.

Главная диагональ. В таблице приведены типовые алгоритмы обработка элементов двумерного массива, расположенных НА, ВЫШЕ и НИЖЕ главной диагонали.

Таблица 5.4.
Типовой алгоритм Программная реализация (Бейсик) Программная реализация (Паскаль)
Сумма элементов, расположенных НА главной диагонали
…
for i=1 to n
s=s+x(i,i)
next i
…
…
s:=0;
for i:=1 to n do
s:=s+x[i,i];
…
Сумма элементов, расположенных ВЫШЕ главной диагонали
…
for i=1 to n
for j=1 to n
if i<j then s=s+x(i,j)
next j, i
…
…
s:=0;
for i:=1 to n do
for j:=1 to n do
if i<j then s:=s+x[i,j];
…
Сумма элементов, расположенных НИЖЕ главной диагонали
…
for i=1 to n
for j=1 to n
if i>j then s=s+x(i,j)
next j i
…
…
s:=0;
for i:=1 to n do
for j:=1 to n do
if i>j then s:=s+x[i,j];
…

Побочная диагональ. В таблице приведены типовые алгоритмы обработка элементов двумерного массива, расположенных НА, ВЫШЕ и НИЖЕ побочной диагонали.

Таблица 5.5.
Типовой алгоритм Программная реализация (Бейсик) Программная реализация (Паскаль)
Сумма элементов, расположенных НА побочной диагонали
…
for i=1 to n
s=s+x(i, n-i+1)
next i
…
…
s:=0;
for i:=1 to n do
s:=s+x[i, n-i+1];
…
Сумма элементов, расположенных ВЫШЕ побочной диагонали
…
for i=1 to n
for j=1 to n
if (i<n-j+1) then s=s+x(i,j)
next j, i
…
…
s:=0;
for i:=1 to n do
for j:=1 to n do
if (i<n-j+1) then 
s:=s+x[i,j];
…
Сумма элементов, расположенных НИЖЕ побочной диагонали
…
for i=1 to n
for j=1 to n
if (i>n-j+1) then s=s+x(i,j)
next j, i
…
…
s:=0;
for i:=1 to n do
for j:=1 to n do
if (i>n-j+1) then 
s:=s+x[i,j];
…

Обработка квадратной матрицы относительно диагоналей (рациональный обход)

Предложенные выше типовые алгоритмы обработки квадратного массива относительно диагоналей нерациональны, т.к. перебираются все элементы массива. Более рационально ограничить перебор элементов. Решит проблему введение зависимости начального или конечного значений управляющей переменной внутреннего цикла от значения счетчика внешнего цикла.

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

Задача: заполнить элементы квадратного массива "1" так, как показано на рисунке:

Таблица 5.6.
Ниже и на главной диагонали Выше и на главной диагонали Выше и на побочной диагонали Ниже и на побочной диагонали

100000000

110000000

111000000

111100000

111110000

111111000

111111100

111111110

111111111

111111111

011111111

001111111

000111111

000011111

000001111

000000111

000000011

000000001

111111111

111111110

111111100

111111000

111110000

111100000

111000000

110000000

100000000

000000001

000000011

000000111

000001111

000011111

000111111

001111111

011111111

111111111

Программная реализация на Бейсике:

…
for i=1 to n
for j=1 to i
x(i,j)=1
next j, i
…

Программная реализация на Паскале:

…
for i:=1 to n do
for j:=1 to i do
x[i,j]:=1;
…

Программная реализация на Бейсике:

…
for i=1 to n
for j=i to n
x(i,j)=1
next j, i
…

Программная реализация на Паскале:

…
for i:=1 to n do
for j:=i to n do
x[i,j]:=1;
…

Программная реализация на Бейсике:

…
for i=1 to n
for j=1 to (n-i+1)
x(i,j)=1
next j, i 
…

Программная реализация на Паскале:

…
for i:=1 to n do
for j:=1 to (n-i+1) do
x[i,j]:=1;
…

Программная реализация на Бейсике:

…
for i=1 to n
for j=(n-i+1) to n
x(i,j)=1
next j, i
…

Программная реализация на Паскале:

…
for i:=1 to n do
for j:=(n-i+1) to n do
x[i,j]:=1;
…

Ключевые термины

  • Двумерный массив -именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. Массивы с одним индексом называют одномерными, с двумя - двумерными.
  • Квадратный массив - двумерный массив, количество строк и столбцов в котором одинаково.

Краткие итоги

Для решения задач с использованием двумерных массивов необходимо воспользоваться типовыми алгоритмами обработки, такими как:

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

    • Заполнение, вывод
    • Сумма, произведение
    • Максимальный (минимальный) элемент
    • Выбор по условию
  • Обработка отдельно по строкам и столбцам:

    • Заполнение, вывод
    • Сумма, произведение
    • Максимальный (минимальный) элемент
    • Выбор по условию
  • Обработка относительно диагоналей:

    • Заполнение, вывод
    • Сумма, произведение
    • Максимальный (минимальный) элемент
    • Выбор по условию

При обработке квадратного массива относительно его диагоналей необходимо воспользоваться рациональным способом, исключающим обход всех элементов массива.

Набор для практики

Вопросы.

  • Что произойдет если поменять местами счетчики внешнего и внутреннего цикла i и j в заголовках циклов (в типовом алгоритме обработки двумерного массива)?
  • Какова зависимость индексов элементов, расположенных на главной диагонали квадратного массива? Побочной?

Упражнения.

  • Найдите максимальный элемент из минимальных элементов каждой строки двумерного массива и минимальный элемент из максимальных элементов каждого столбца двумерного массива размерностью NxM.
  • Заполните квадратные массивы, как предложено на рис. 5.2:

    Рис. 5.2.
< Лекция 5 || Лекция 6: 12 || Лекция 7 >