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

      Комментарии к записи Разработка алгоритма решения. отключены

Практическая работа №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=LRR2=S-L, а в нижней — R1=S-L-1RR2=L. Следовательно, алгоритм может состоять из перебора матрицы строка за строкой с определением для каждого элемента, удовлетворяют ли его индексы вышеприведенным условиям. Если да — элементу присваивается следующее значение из ЛП, если нет — 0.

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

Вместе с описанными выше переменными 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. Когда выполняется условие R1R2 (блок 10) присваиваем dd значение -1, далее модификация границ будет соответствовать правилам для нижней части матрицы.

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

Статьи к прочтению:

Линейные программы. Решение задач. Ч.1.


Похожие статьи: