Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_ОписаниеЛаб_1курс_1семестр.doc
Скачиваний:
63
Добавлен:
03.05.2015
Размер:
1.57 Mб
Скачать

Лабораторная работа № 6

ДВУМЕРНЫЕ МАССИВЫ (МАССИВЫ УКАЗАТЕЛЕЙ НА МАССИВЫ)

В ЯЗЫКЕ С++, РАЗРАБОТКА СТРУКТУРИРОВАННЫХ ПРОГРАММ

Цель работы: Составление алгоритмов и написание многомодульных программ циклической структуры с использованием массивов указателей на массив в среде С++ (обработка двумерных массивов данных). Статическое и динамическое распределение памяти.

Общие указания к заданиям лабораторной работы.

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

Для решения задачи разработайте следующие функции:

- функцию ввода m*n элементов числовой матрицы; при разработке этой функции используйте ранее разработанную вами функцию ввода одномерного массива данных;

- функцию обработки числовой матрицы (матриц) по правилу, определяемому в задаче вашего варианта;

При необходимости алгоритм обработки матрицы вашего варианта разбейте на процедуры, каждая из которых может реализовать отдельную независимую функцию, из которых можно составить конечный алгоритм обработки матрицы как одну функцию;

- функцию вывода числовой матрицы на экран в виде матрицы;

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

Программу разработайте в двух вариантах:

- используя статическое распределение памяти для хранения числовой матрицы (задайте некоторое максимально возможное количество обрабатываемых элементов в матрице);

- используя динамическое распределение памяти для матрицы.

Тексты функций сгруппируйте в файлы в вариантах статики и динамики:

  • файл с функциями ввода и вывода;

  • файл с функцией (функциями) обработки матриц;

  • файл с функцией main.

В одном решении (solution) создать два проекта, каждый из которых реализует Вашу задачу в одном из двух вариантов распределения памяти под массивы (статики и динамики). Откомпилировать и выполнить проекты. Контроль правильности работы ваших проектов осуществить, используя исходные данные, подготовленные вами для отладки программы. Оба варианта программы на одних и тех же отладочных данных должны давать одинаковые результаты.

Тексты индивидуальных задач, выполняемых в лабораторной работе

Задача 6.01

Составить программу, которая получает матрицу А размером m*n. Если в матрице нет строк, содержащих только отрицательные элементы, то формируется новая матрица, в которую на место отрицательных элементов исходной матрицы записываются нули, а на место положительных единицы.

Задача 6.02

Составить программу, которая получает матрицу Х размером m*n и находит минимальный и максимальный элементы матрицы. Если эти элементы находятся под главной диагональю, то формируется новая матрица, из которой удалены строки и столбцы, на пересечении которых они находятся.

Задача 6.03

Составить программу, которая получает матрицу Х размером m*n и матрицу Y размером m*n. Программа формирует матрицу Z размером m*n, где элемент (i,j) матрицы Z равен сумме элементов i-й строки матрицы X, которые отсутствуют в j–м столбце матрицы Y.

Задача 6.04

Составить программу, которая получает матрицу В размером m *n и два числа i<m и j<m. Если матрица в каждой четной строке имеет положительную сумму элементов, то программа формирует новую матрицу, меняя местами элементы строки с номером i на элементы строки с номером j исходной матрицы В.

Задача 6.05

Составить программу, которая получает матрицу А размером m*n. Если в исходной матрице есть, по крайней мере, одна строка, сумма элементов которой отрицательна, то формируется новая матрица из исходной так, что строки в ней расположены в порядке возрастания сумм элементов этих строк.

Задача 6.06

Составить программу, которая получает матрицу Х размером n*n. Если в матрице есть по одному положительному, отрицательному и нулевому элементу, то определяется количество этих положительных, нулевых и отрицательных элементов в каждом столбце матрицы X. Из этих чисел формируется новая матрица, размером 3*n (строка информации о количестве нулей, строка о количестве отрицательных элементов, строка информации о количестве положительных элементов).

Задача 6.07

Составить программу, которая получает матрицу А размером m *n и два числа a и b, таких, что a<b. Если сумма элементов матрицы, находящихся под ее главной диагональю меньше суммы ее элементов, находящихся над ней, то программа формирует новую матрицу, путем удаления из исходной матрицы тех строк, которые не содержат элементов, отвечающих условию

Задача 6.08

Составить программу, которая получает матрицу Х размером m *n и, если в исходной матрице оказались равные между собой строки или столбцы, то программа формирует новую матрицу, удалив из исходной матрицы те строки или столбцы, которые оказались равными между собой.

Задача 6.09

Составить программу, которая получает матрицу Х размером m*n и если сумма элементов матрицы оказалась отрицательным числом, то программа формирует новую матрицу, получив ее из исходной перестановкой строк: первой с последней, второй с предпоследней и т.д.

Задача 6.10

Составить программу, которая получает матрицу А размером m*n и, если среднеарифметическое число всех положительных элементов матрицы по модулю меньше среднеарифметического числа ее отрицательных элементов, то программа формирует новую матрицу, все строки которой упорядочены по возрастанию.

Задача 6.11

Составить программу, которая получает матрицу C размером m *n. Программа находит наибольший элемент матрицы С в секторе над главной диагональю и наибольший элемент под ее главной диагональю. Если два найденных числа оказываются равны , то программа формирует новую матрицу, разделив все элементы исходной матрицы (кроме найденных наибольших) на найденное значение максимального .

Задача 6.12

Составить программу, которая получает матрицу целых чисел Х размером n *n и массив целых, размером n. Если в матрице нет строк, равных массиву целых чисел, то программа формирует новую матрицу, заменив диагональ исходной на массив целых.

Задача 6.13

Составить программу, которая получает матрицу А размером m *n и формирует из нее матрицу В, поменяв местами строки и столбцы.

Для каждой из матриц А и В программа вычисляет числа

, где количество m строк, количество n столбцов

и выдает сообщение об их равенстве или неравенстве.

Задача 6. 14

Составить программу, которая получает матрицу Х размером m*n и вектор A, размером к. Если сумма элементов вектора А больше суммы элементов главной диагонали матрицы, то программа формирует новую матрицу, в которую включены только те строки, которые содержат хотя бы одно число из вектора А.

Задача 6.15

Составить программу, которая получает матрицу Х размером m*n и вектор А, размером m. Каждому элементу вектора поставлена в соответствие строка с тем же номером. Если вектор А не упорядочен в порядке возрастания его элементов, то программа сортирует вектор А в порядке возрастания его элементов и формирует новую матрицу, расположив строки исходной матрицы в том же порядке, что и элементы вектора после сортировки.

Задача 6.16

Составить программу, которая получает матрицу В размером m*n и, если на ее диагонали стоят только положительные числа, то программа формирует новую матрицу, включив в нее только те строки, элементы которых не образуют арифметической прогрессии. Если таких строк не найдено, то новая матрица не формируется.

Задача 6.17

Составить программу, которая получает матрицу А размером m*n. Если в матрице есть хотя бы одна строка, элементы которой все отрицательны, то программа формирует новую матрицу по следующему правилу. Программа ищет в каждой строке максимальный элемент и в новой матрице ставит его в начало строки, а минимальный элемент ставит в конце строки, все остальные элементы исходной строки переписывает в строку новой матрицы в обратном порядке.

Задача 6.18

Составить программу, которая получает матрицу В размером m*n. Если наибольший по модулю элемент находится над главной диагональю матрицы, то программа формирует новую матрицу, удалив из исходной столбец и строку, на пересечении которых находится наибольший по модулю элемент.

Задача 6.19

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

где В- исходная матрица, Т означает транспонирование, то программа создает новую матрицу, заменив в секторе над главной диагональю все элементы исходной матрицы на частное от деления суммы индексов элементов на значение самого элемента.

Задача 6.20

Составить программу, которая получает матрицу А размером m *n. Если среднеарифметическое элементов матрицы А меньше 0, то программа формирует матрицу В, получаемую из исходной А перестановкой в каждой строке наименьшего по абсолютной величине элемента с ее диагональным.

Задача 6.21

Составить программу, которая получает матрицу А размером m*n . Если элементы в каждой строке матрицы расположены в порядке не убывания, то программа создает новую матрицу, удалив из каждого столбца матрицы А его минимальный и максимальные элементы.

Задача 6.22

Составить программу, которая, получив матрицу, размером m*n. Если в матрице все элементы имеют только значения 0 и 1, то программа создает новую матрицу из исходной матрицы, в которой строки, в которых чередуются 0 и 1, переставляют в верхнюю часть матрицы, а порядок остальных строк не изменяется.

Задача 6.23

Составить программу, которая получает матрицу Х размером m*n и вектор A, размером m. Если в векторе А есть как положительные, так и отрицательные элементы, то программа создает новую матрицу. Строку с номером i назовем отмеченной, если соответствующий i элемент вектора A больше 0, и неотмеченной – в противном случае. Программа формирует новую матрицу по следующему правилу: все отрицательные элементы в отмеченных строках исходной матрицы в формируемой матрице программа заменяет отрицательной единицей, положительные заменяет положительной единицей, а нулевые остаются без изменений. Не отмеченные строки исходной матрицы копируются в новую матрицу в обратном порядке.

Задача 6.24

Составить программу, которая получает матрицу Х размером m*n и вектор А, размером k. Если все элементы вектора А положительны, то программа формирует новую матрицу, в которой элементы исходной матрицы, которые совпали с одним из элементов вектора А, заменяются 0. В новой матрице подсчитывается количество строк и столбцов, все элементы которых оказались равны 0.

Задача 6.25

Составить программу, которая получает матрицу Х размером mx*nx и матрицу Y размером my*ny. Если обе матрицы квадратные и одного размера, то программа из двух исходных квадратных матриц Х и Y формирует результирующую матрицу Z путем суммирования каждого элемента каждого столбца матрицы А с произведением соответствующей строки матрицы В.

Задача 6.26

Составить программу, которая получает матрицу Х размером m*n и целое число К. Если в матрице есть одна единичная строка, то программа формирует новую матрицу, осуществив циклический сдвиг всех строк исходной матрицы вверх К раз относительно этой единичной строки.

Задача 6.27

Составить программу, которая получает матрицу целых чисел А, размером m*n. Если в исходной матрице все минимальные элементы нечетных строк сами нечетные, то программа создает новую матрицу. В новой матрице наибольший элемент каждой строки меняется местами с наименьшим элементом этой же строки.

Задача 6.28

Составить программу, которая получает матрицу, размером m*n. Если в матрице все элементы имеют целое значение, то программа создает новую матрицу размером 2*2 из строки с наибольшей суммой элементов и наименьшей суммой, и строки с наибольшим произведением элементов и наименьшим.

Задача 6.29

Составить программу, которая получает матрицу А размером m*n. Если в матрице есть как положительные, так и отрицательные элементы, то из положительных элементов матрицы A программа формирует матрицу B, размером m*r. Количество элементов r в строке матрицы B определяется как максимальное число положительных элементов среди всех строк матрицы A. В каждой строке матрицы B расположены подряд положительные элементы соответствующей строки матрицы A. На место недостающих положительных значений в матрице В программа дописывает нули.

Задача 6.30

Составить программу, которая получает матрицу А размером m*n. Если в матрице есть хотя бы один единичный столбец, то программа формирует новую матрицу, транспонированную относительно исходной матрицы (меняет местами строки и столбцы).

Задача 6.31

Составить программу, которая получает матрицу Х размером m*n и число К. Если программа находит число К среди элементов исходной матрицы, то она удаляет из исходной матрицы столбцы с элементом, равным К, в противном случае программа формирует новую матрицу, записав в нее только четные строки.

Задача 6.32

Составить программу, которая получает матрицу Х размером m*n и если в исходной матрице есть строка и столбец, все элементы которых равны 0, то программа уплотняет исходную матрицу влево и вверх и формирует на ее основе новую матрицу, поменяв местами строки и столбцы.

Задача 6.33

Составить программу, которая получает матрицу А размером m*n. Если в матрице есть строки, которые образуют монотонную последовательность чисел, то программа формирует из этих строк новую матрицу.