Разработка алгоритма решения.

Практическая работа №5

Тема: «Решение задач обработки двумерных массивов»

Цель задания:

1. Получение практических навыков при работе с массивами, их ввода, вывода.

2. Закрепление навыков по организации программ циклической структуры.

3. Овладение навыками по организации программ вложенной циклической структуры.

Содержание отчета:

1. Постановка задачи для конкретного варианта.

2. Текст программы.

3. Блок-схема алгоритма решения задачи.

4. Результаты тестов.

5. Распечатка результатов работы программы.

Варианты заданий

Задание №1

1. Составить программу для подсчёта суммы чётных элементов двумерной таблицы А размером m×n.

2. Составить программу для подсчёта произведения элементов, удовлетворяющих условию , в двумерной целочисленной таблице А размерности m×n.

3. Составить программу для подсчёта произведения нечётных элементов двумерной матрицы В размерности m×n.

4. Составить программу для подсчёта суммы элементов, удовлетворяющих условию , в прямоугольной таблице С, состоящей из m×n целых чисел,

5. Составить программу для подсчёта среднего арифметического положительных элементов прямоугольной таблицы В, состоящей из M×N целых чисел.

6. Составить программу для подсчёта среднего арифметического ненулевых элементов, лежащих в диапазоне [-4;4], в прямоугольной таблице Х, состоящей из M×N целых чисел.

7. Составить программу для подсчёта количества положительных элементов квадратной таблицы В, состоящей из N×N целых чисел, расположенных выше главной диагонали.

8. Составить программу для подсчёта суммы отрицательных элементов квадратного массива Х, состоящего из N×N целых чисел, расположенных ниже главной диагонали.

9. Составить программу для подсчёта произведения элементов двумерной целочисленной таблицы В, состоящей из 5 строк и 4 столбцов, имеющих значения, кратные 3.

10. Составить программу для подсчёта произведения элементов целочисленной прямоугольной таблицы Y, состоящей из M строк и N столбцов, сумма двух индексов которых есть число чётное.

11. Составить программу для подсчёта суммы элементов прямоугольной целочисленной таблицы X, состоящей из M строк и N столбцов, сумма двух индексов которых есть число нечётное.

12. Составить программу для подсчёта суммы положительных элементов квадратной таблицы В, состоящей из N×N целых чисел, расположенных на побочной диагонали.

13. Составить программу для подсчёта среднего арифметического элементов, расположенных на главной и побочной диагоналях в квадратной целочисленной матрице X размером N×N.

Задание №2

  1. Дана квадратная матрица порядка N. Составить программу, транспонирующую эту матрицу. (Транспонированной называется матрица, в которой, в отличие от исходной матрицы, столбцы и строки поменяны местами).
  1. Составить программу, которая находит максимальные элементы каждой строки двумерной матрицы А, состоящей из m строк и n столбцов.
  1. Дан двумерный массив А, состоящий из m строк и n столбцов Составить программу, которая вычисляет произведение элементов каждой строки и находит среди них наименьшее.
  1. Дана прямоугольная матрица размера m×n. Составить программу, которая находит строки с наибольшей и наименьшей суммой элементов. Вывести найденные строки и суммы их элементов.
  1. Составить программу, которая в двумерной В, состоящей из m строк и n столбцов, подсчитывает суммы столбцов и столбец с наименьшей суммой элементов обнуляет.
  1. Дана квадратная матрица А порядка n. Составить программу, которая находит максимальный элемент и все элементы, расположенные в одной строке и в одном столбце с максимальным заменяет на нули. Учесть, что значения в массиве не повторяются.
  1. Дана квадратная матрица А порядка n. Составить программу, которая находит минимальный элемент и все элементы, расположенные в одной строке и в одном столбце с минимальным заменяет на минимальное значение. Учесть, что значения в массиве не повторяются.
  1. Дана квадратная матрица А порядка n. Составить программу, которая находит минимальный элемент каждого столбца.
  1. Дана прямоугольная матрица размером N×M. Составить программу, которая преобразует матрицу следующим образом: поэлементно вычитает последнюю строку из всех строк, кроме последней.
  1. Дана прямоугольная матрица В размером N×M. Составить программу, которая преобразует матрицу следующим образом: поэлементно вычитает первый столбец из всех столбцов, кроме первого.
  1. Дана прямоугольная матрица размера m×n. Составить программу, которая находит столбцы с наибольшей и наименьшей суммой элементов. Вывести найденные столбцы и суммы их элементов.
  1. Дана целочисленная прямоугольная матрица размера m×n. Составить программу, которая находит номер столбца, в котором находится самая длинная серия одинаковых элементов.
  1. Дана прямоугольная матрица размера m×n. Составить программу, которая находит количество строк, среднее арифметическое элементов которых меньше заданной величины.

Задание №3

1. Дана вещественная матрица размером n×m. Переставляя её строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу.

2. Задана матрица размером m×n. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечении k-ой строки и k-го столбца.

3. Задана квадратная матрица. Переставить строку с максимальным элементом со строкой с заданным номером m.

4. Дана целочисленная матрица размером n×m. Переставляя её строки и столбцы, добиться того, чтобы наименьший элемент (или один из них) оказался в верхнем правом углу.

5. Дана квадратная матрица размером n×n. Переставляя её строки и столбцы, добиться того, чтобы наименьший элемент (или один из них) оказался на главной диагонали.

6. Дана вещественная матрица размером n×m. Переставляя её строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в нижнем левом углу.

7. Дана целочисленная квадратная матрица порядка N, определить максимум среди сумм элементов диагоналей, параллельных главной диагонали.матрицы.

8. В данной целочисленной квадратной матрице порядка n содержится один нулевой элемент. Получить квадратную матрицу порядка n-1 путём отбрасывания из исходной матрицы строки и столбца, на пересечении которых расположен этот элемент.

9. Дана действительная квадратная матрица порядка n. Преобразовать матрицу по правилу: строку с номером n сделать столбцом с номером n, а столбец с номером n- строкой с номером n.

10. Дана целочисленная квадратная матрица порядка N, определить минимум среди сумм элементов диагоналей, параллельных главной диагонали.матрицы.

11. Дана квадратная матрица размером n×n. Переставляя её строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался на главной диагонали.

12. Уплотнить заданную матрицу, удаляя из неё строки и столбцы, заполненные нулями.

13. Задана квадратная матрица. Переставить столбец с минимальным элементом со столбцом с заданным номером m.

Задание №4

Создать квадратную матрицу целых чисел размером 9х9. В индивидуальных заданиях указано, какую обработку матрицы требуется выполнить.

Если по условию задания матрицу следует заполнить случайными числами, рекомендуем выбирать эти числа из диапазона 0 - 99. Если по условию задания в матрицу следует записать ЛП - линейную последовательность чисел, имеется в виду последовательность: 1, 2, 3, ...

Варианты индивидуальных заданий

  № варианта Содержание задания Иллюстрация
Заполнить матрицу ЛП, от левого верхнего угла по диагонали: влево - вниз.
  Заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей, ЛП, от левого верхнего угла вниз - вправо. Остаток матрицы заполнить нулями.
  Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно побочной диагонали
         

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

Заполнить матрицу случайными числами. Отобразить симметрично относительно горизонтальной оси секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей.
Заполнить матрицу случайными числами. Развернуть матрицу на 180o.
  Заполнить матрицу ЛП, от левого нижнего угла по диагонали: влево - вверх.
  Заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей ЛП, от левого верхнего угла вправо - вниз. Остаток матрицы заполнить нулями.
  Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо - вверх.
Заполнить матрицу случайными числами. Отобразить главную и побочную диагонали симметрично относительно горизонтальной оси.
         

Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз.
  Заполнить матрицу случайными числами. Развернуть матрицу на 90o против часовой стрелки.
  Заполнить матрицу случайными числами. На побочной диагонали разместить суммы элементов, которые лежат на той же строке и столбце.
  Заполнить матрицу случайными числами. На главной диагонали разместить суммы элементов, которые лежат на той же строке и том же столбце.
  Заполнить матрицу случайными числами. Отобразить правую половину матрицы на левую зеркально симметрично относительно вертикальной оси.
  Заполнить матрицу ЛП, от левого верхнего угла по спирали: вниз - вправо - вверх - влево.
         

Заполнить матрицу случайными числами. Отобразить левую половину матрицы на правую зеркально симметрично относительно вертикальной оси.
  Заполнить матрицу ЛП, от центра по спирали: вниз - влево - вверх - вправо.
  Заполнить матрицу случайными числами. Развернуть матрицу на 90o по часовой стрелке.
  Заполнить матрицу ЛП, от центра по спирали: влево - вниз - вправо - вверх.
  Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поместить сумму остальных элементов квадрата.
  Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно главной диагонали
         

  Заполнить матрицу ЛП, от левого верхнего угла по спирали: вправо - вниз - влево - вверх.
Заполнить матрицу случайными числами. Отобразить нижнюю половину матрицы на верхнюю зеркально симметрично относительно горизонтальной оси.
Заполнить матрицу случайными числами. Разместить на побочной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к побочной.
         

Пример решения задачи

Заполнить секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей, ЛП, от левого верхнего угла вниз - вправо. Остаток матрицы заполнить нулями.

Разработка алгоритма решения.

Если обозначим размерность матрицы как S, номер строки как L, а номер столбца как R, и (имея в виду, что реализация алгоритма будет выполнена на языке С) договоримся, что нумерация строк и столбцов будет начинаться с 0, то можно определить, что в строке с номером L ненулевые элементы в верхней части матрицы лежат на столбцах с номерами R1=L < R < R2=S-L, а в нижней - R1=S-L-1 < R < R2=L. Следовательно, алгоритм может состоять из перебора матрицы строка за строкой с определением для каждого элемента, удовлетворяют ли его индексы вышеприведенным условиям. Если да - элементу присваивается следующее значение из ЛП, если нет - 0.

Но можно несколько упростить алгоритм, обойдя вычисления граничных значений для каждого элемента и необходимости определения, в верхнюю или нижнюю часть матрицы ми попадаем. Обратим внимание на то, что для первой строки (L=0) R1=1, R2=S-2. Для каждой следующей строки R1 увеличивается на 1, а R2 уменьшается на 1. Когда пересекаем середину матрицы, то направление модификации изменяется на противоположное: теперь для каждой следующей строки R1 уменьшается на 1, а R2 увеличивается на 1. Признаком пересечения середины может быть условие R1 > R2, оно выполняется в момент пересечения. Схема алгоритма показана на рисунке.

Вместе с описанными выше переменными R1 и R2, которые получают начальные значения для первой строки матрицы, ми вводим переменную dd с начальным значением 1 - это то значение, которое будет модифицировать R1 и R2 для каждой следующей строки, и переменную k - в которой будет значение текущего члена ЛП, начальное значение - 1 (блок 2). Далее организуются вложенные циклы. Во внешнем цикле перебираются строки (блок 3), а во внутреннем - столбцы матрицы (блок 4). В каждой итерации внутреннего цикла номер столбца R сравнивается с граничными значениями R1, R2 (блоки 5,6). Если он лежит в пределах от R1 до R2, то текущему члену матрицы присваивается значение k - текущего члена ЛП, а затем k увеличивается на 1 (блок 7). Если нет, текущему члену присваивается значение 0 (блок 8). После выхода из внутреннего цикла модифицируются граничные значения: R1 увеличивается на dd, а R2 уменьшается на dd (блок 9). Напомним, что начальное значение dd=1. Когда выполняется условие R1 > R2 (блок 10) присваиваем dd значение -1, далее модификация границ будет соответствовать правилам для нижней части матрицы.

После выхода из внешнего цикла, который начался в блоке 3, вновь организуются вложенные циклы перебора строк (блок 12) и столбцов (блок 13). В каждой итерации внутреннего цикла выводится значение одного элемента матрицы (блок 14), после выхода из внутреннего цикла начинается новая строка вывода (блок 15).

Наши рекомендации