Полная версия

Главная arrow Информатика arrow Базовые средства программирования на Visual Basic в среде VisualStudio. Net

  • Увеличить шрифт
  • Уменьшить шрифт


<<   СОДЕРЖАНИЕ ПОСМОТРЕТЬ ОРИГИНАЛ   >>

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

Для работы с массивами, как правило, используются алгоритмы регулярной циклической структуры.

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

  • • Нахождение количества элементов матрицы при заданном условии (Пример 8.2-1).
  • • Нахождение суммы значений элементов матрицы при заданном условии (Пример 8.2-2).
  • • Нахождение произведения значений элементов матрицы при заданном условии (Пример 8.2-3).
  • • Поиск экстремальных значений элементов матрицы (Примеры 8.2-4 - 8.2-5).
  • • Формирование матрицы в соответствии с определенными правилами (Примеры 8.2-6 - 8.2-7).
  • • Формирование одномерного массива из двумерного в соответствии с некоторым условием (Пример 8.2-8).
  • • Транспонирование матриц (Пример 8.2-10).
  • • Алгебраическое произведение двух матриц (Пример 8.2-11).

Пример 8.2-1. Написать процедуру, которая определяет количество элементов матрицы а(,) при условии a(i,j)>0.

Программный код процедуры Рг821() Пример 8.2-1

Рис. 8.2-1. Программный код процедуры Рг821() Пример 8.2-1

Пример 8.2-2. Написать процедуру, которая вычисляет сумму значений элементов матрицы Ь(,) при b(i,j)> 0.

Программный код процедуры Рг822() Пример 8.2-2

Рис. 8.2-2. Программный код процедуры Рг822() Пример 8.2-2

Пример 8.2-З.Написать процедуру, которая вычисляет произведение значений элементов матрицы при x(i,j) < 0.

Программный код процедуры Рг823( ) Пример 8.2-3

Рис. 8.2-3. Программный код процедуры Рг823( ) Пример 8.2-3

Пример 8.2-4. Написать процедуру, которая определяет максимальный элемент среди элементов, лежащих ниже главной диагонали массива.

В переменной хтах в цикле фиксируется максимальный элемент массива, в переменной imax, jmax - номер строки и номер столбца, вначале это 1-й элемент выше диагонали.

Программный код процедуры Рг824( ) Пример 8.2-4

Рис. 8.2-4. Программный код процедуры Рг824( ) Пример 8.2-4

Пример 8.2-5. Написать процедуру, которая определяет минимальный элемент среди элементов, лежащих выше главной диагонали массива.

Алгоритм и программный код процедуры представлен на рис. 8.2-5.

Программный код процедуры Рг825() Пример 8.2-5

Рис. 8.2-5. Программный код процедуры Рг825() Пример 8.2-5

Пример 8.2-6.Написать процедуру, которая заполняет элементы массива f (5,2) целыми числами:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

а затем переставляет элементы первого и последнего столбцов.

Алгоритм и код программы данной задачи приведены на рис. 8.2-6.

Данный пример демонстрирует заполнение массива целых чисел f ( , ) и перестановку элементов первого и последнего столбцов. Исходные данные для инициализации массива f записываются в фигурных скобках при описании массива. Вложенные циклы обеспечивают перебор элементов двумерного массива по столбцам: внутренний цикл по первому индексу, а внешний -

Программный код процедуры Рг826( ) Пример 8.2-6

Рис. 8.2-6. Программный код процедуры Рг826( ) Пример 8.2-6

по второму. Перестановка элементов первого и последнего столбцов в программе выполняется в цикле, изменяющем номер строки i, в котором выполняется обмен значениями элементов f(ij0) и f ( i * 2 ).

После этого массив выводится на экран в следующем виде:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Пример 8.2-7. Написать процедуру, которая формирует двумерный массив х по правилу: x(i ,j ) = 2*(i - 2) 2 - (j - 2)2).

Алгоритм и процедура данной задачи приведены на рис. 8.2-7.

Пример 8.2-8. Написать процедуру, которая формирует одномерный массив, каждый элемент которого представляет собой количество положительных элементов соответствующего столбца массива Ь(,).

Предполагается, что выделение памяти и ввод массива Ь(,) осуществляются в процедуре, которая вызывает процедуру Рг828( ).

Программный код процедуры Рг827() Пример 8.2-7

Рис. 8.2-7. Программный код процедуры Рг827() Пример 8.2-7

Алгоритм и код программы представлены на рис. 8.2-8.

Для перебора всех элементов исходной таблицы ЬЫ также использованы вложенные циклы, в данном случае во внешнем цикле меняется номер столбца, а во внутреннем - номер строки. Такой порядок перебора элементов двумерного массива диктуется условиями задачи. В каждом столбце производится подсчет положительных элементов, и по окончании цикла результат записывается в соответствующий элемент одномерного массива а ( ), номер которого совпадает с номером столбца матрицы Ь(,).

Программный код процедуры Рг828() Пример 8.2-8

Рис. 8.2-8. Программный код процедуры Рг828() Пример 8.2-8

Пример 8.2-9. Написать процедуру, которая из матрицы x(n,m), являющейся входным параметром, получает транспонированную к ней матрицу у(ш, п).

Алгоритм и процедура решения данной задачи приведены на рис. 8.2-9. Для решения поставленной задачи в алгоритме необходимо реализовать вложенные циклы перебора всех элементов исходной матрицы X (3 ). Транспонирование матрицы осуществляется путем перестановки (обмена) индексов транспонированной матрицы по отношению к исходной.

Программный код процедуры Рг829() Пример 8.2-9

Рис. 8.2-9. Программный код процедуры Рг829() Пример 8.2-9

Пример 8.2-10.Написать процедуру, которая вычисляет алгебраическое произведение матрицы х(п ,ш ) на матрицу y(m,n).

Алгоритм и процедура решения задачи представлены на рис. 8.2-10.

Произведением матрицы х ( n у т) на матрицу y(m,k) называется матрица p(nijk), в которой элемент, стоящий на пересечении i-й строки и j-ro столбца, равен произведению i-ro вектора-строки матрицы x(n,m) на j-й вектор-столбец матрицы у ( m 3 к ).

Произведением вектора-строки а(п) на вектор-столбец Ь с одинаковым числом элементов п называется сумма произведений соответствующих элементов этих векторов. Таким образом, произведение двух матриц можно записать следующим образом:

Рис. 8.2-10. Программный код процедуры Рг8210() Пример 8.2-10

Для формирования такой матрицы необходимо организовать вложенные циклы: внешний цикл, изменяющий номер строки от 0 до ГЛ, и внутренний цикл, изменяющий номер столбца от 0 до к. Для вычисления произведения текущей строки матрицы x(i,t) на текущий столбец матрицы y(t, j) в теле внутреннего цикла требуется организовать еще один цикл, параметр которого меняется от 0 до п.

На рис. 8.2-10 представлен общий алгоритм вычисления алгебраического произведения двух матриц размерами (шх* пх) и (nx* ку). В программу добавлена проверка на соответствие количества столбцов первой матрицы количеству строк второй матрицы, причем в схеме алгоритма она отсутствует.

Пример 8.2-11. Создать проект, в котором формируется двумерный массив х, состоящий из четырех строк и четырех столбцов, по правилу: x(i,j) = 2*(i - 2)2 - (j - 2) 2, а затем определяется максимальный элемент среди элементов, лежащих ниже главной диагонали, а также минимальный элемент, расположенный выше главной диагонали. Найденные максимальный и минимальный элементы необходимо поменять местами.

Формирование значений элементов двумерного массива х(, ) по заданной формуле и их вывод в виде матрицы производятся с помощью вложенных циклов. В переменных xmin и хтах в цикле фиксируются минимальный и максимальный элементы массива, в переменных imin, jmin и imax, jmax - их координаты (номер строки и номер столбца).

Решения данной задачи представлено на рис. 8.2-11.

Программный код проекта Пример 8.2-11

Рис. 8.2-11. Программный код проекта Пример 8.2-11

 
<<   СОДЕРЖАНИЕ ПОСМОТРЕТЬ ОРИГИНАЛ   >>