Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Грушвицкий 22.12.11 пособие исправленное.doc
Скачиваний:
28
Добавлен:
09.02.2015
Размер:
1.01 Mб
Скачать

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(подстановкой в программе), например, как показано ниже.

#definen8

#definem6

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

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

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

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

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

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

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

{

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

printf(“\n”);

}

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

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

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

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