Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие.doc
Скачиваний:
4
Добавлен:
23.04.2019
Размер:
964.1 Кб
Скачать

3.5 Лабораторная работа №5. Обработка массивов Задание

Разработать программу, обрабатывающую элементы двумерного массива размером n*m в соответствии с вариантом и прилагаемым рисунком. Размерность массива n и его элементы должны вводиться пользователем с клавиатуры. Исходный и преобразованный массивы должны быть выведены на экран после обработки.

В арианты:

  1. Обнулить элементы, рис. 3.a;

  2. Изменить знак на противоположный, рис. 3.б;

  3. Сложить с заданным числом, рис. 3.в;

  4. Вычесть заданное число, рис. 3.г;

  5. Умножить на заданное число, рис. 3.д;

  6. Обнулить элементы, рис. 3.е;

  7. Изменить знак на противоположный, рис. 3.а;

  8. Сложить с заданным числом, рис. 3.б;

  9. Вычесть заданное число, рис. 3.в;

  10. Умножить на заданное число, рис. 3.г.

  11. Обнулить элементы, рис. 3.д;

  12. Изменить знак на противоположный, рис. 3.е;

Методические указания

Исходно программа должна строиться для заранее не определенных значений размерности массива n и m. По правилам построения простых программ на языке Си размерность массива должна определяться сразу. Обычно размерности массива задается определенной величины (например, 10 на 10). Однако, реальные значения n и m (но не более заданной ранее величины – у нас 10) вводятся в качестве исходных данных. Чтобы можно было работать с заранее неопределенными размерностями, будем пользоваться переменными, определяемыми директивой define (подстановкой в программе), например, как показано ниже.

#define n 8

#define m 6

Подстановка позволяет не устанавливать в тексте программы фиксированные (числовые) границы обрабатываемых данных.

Для упрощения проектирования на первом этапе массив для тестирования можно взять, например, размером 4*4 элемента. Подобный подход позволит отладить основные функции программы и не усложнит дальнейшее усовершенствование.

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

int A [10][10] = {{11, 12, 13, 14},{21, 22, 23, 24},{31, 32, 33, 34},{41, 42, 43, 44}};

В приведенном примере в массиве А с размерностью 10 на 10 заполнены фиксированными данными только четыре первых столбца первых четырех строках. Поэтому, если задаться величинами m и n равными 4, то обработке может подвергаться матрица с заранее предопределенными и фиксированными значениями (значение каждого элемента есть номер строки и номер столбца).

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

printf(“вывод массива \n”);

for (i = 1; i < n; i++)

{

for (j= 1; j < m; j++) printf(“%d “, A[i][j]);

printf(“\n”);

}

Алгоритм решения задач данной работы можно представить в виде приведенном ниже.

Рис. 3. Алгоритм обработки массива.

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

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