Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива
Генерация двумерных массивов
Принцип генерации двумерных массивов такой же, как и одномерных.
//Описание функции генерации массива void gen(int str,int slb, int a, int b, int m[max_x][max_y]){ int i,j; srand(time(NULL)*1000); //устанавливает начальную точку генерации случайных чисел for (i=0;i<str;i++) for (j=0;j<slb;j++) m[i][j]=rand()%(b-a)+a); //функция генерации случайных чисел на [a,b) }
Вывод двумерных массивов
Двумерные массивы выводятся на экран так же, как и одномерные. Для наглядности вывода целесообразно разделять элементы массива на строки и столбцы.
//Описание функции вывода массива void out (int str,int slb, int m[max_x][max_y]){ int i,j; for (i=0;i<str;i++) { for (j=0;j<slb;j++) printf("%4d",m[i][j]); printf("\n"); } }
Задачи поиска, замены и суммирования элементов двумерного массива
В программировании двумерные массивы называют также матрицами. В задачах на обработку двумерных массивов следует определить способ просмотра массива (по строкам, по столбцам, вдоль диагоналей и т.д.). При этом, как правило, используют кратные циклы, в которых один изменяющийся параметр соответствует пробегу по индексам строк, другой – колонок. При выборе пути обхода матрицы следует учитывать, что параметр внешнего цикла меняется медленнее, чем параметры вложенных в него циклов.
Пример 4. Найдем максимальный элемент главной диагонали двумерного целочисленного массива размерностью nxn, заданного случайными числами на промежутке [-100; 100).
/*Описание функции поиска максимального элемента главной диагонали*/ int maxi(int str,int slb, int m[max_x][max_y]){ int i,j,e_max=m[0][0]; for(i=0;i<str;i++) for(j=0;j<slb;j++) if((i==j)&&(m[i][j]>e_max)) e_max=m[i][j]; return e_max; }
Пример 5. Найдите сумму элементов столбца двумерного массива, номер которого задается с клавиатуры.
/*Описание функции суммирования элементов заданного номера столбца матрицы*/ int summa(int str, int slb, int nom,int m[max_x][max_y]){ int i,j,sum=0; for(i=0;i<str;i++) for(j=0;j<slb;j++) if(j==nom-1) sum+=m[i][j]; return sum; }
Пример 6. Дан двумерный вещественный массив размерностью nxn, заданный случайными числами на промежутке [-100; 100). Замените все элементы выше главной диагонали на 1.1 и ниже ее на 0.0.
//Описание функции замены void zamena (int str,int slb, double m[max_x][max_y]) { int i,j; for (i=0;i<str;i++) for (j=0;j<slb;j++) { if (i>j) m[i][j]=0.0; if (i<j) m[i][j]=1.1; } }
Ключевые термины
Генерация массива – это автоматическое формирование значений его элементов.
Двумерный массив – это массив, измерение которого равно двум.
Инициализация массива – это формирование значений его элементов.
Матрица – это представление однотипных данных в виде прямоугольной таблицы.
Указатель на двумерный массив – это адрес области памяти, выделенной под массив указателей на одномерные массивы.
Краткие итоги
- Двумерный массив является представителем структурированного типа данных в языке С++.
- В языке С++ определены только одномерные массивы, поэтому двумерный массив рассматривается как одномерный массив, элементами которого являются массивы.
- Элементы двумерного массива имеют одинаковые имя, тип и располагаются в памяти последовательно.
- Каждый элемент двумерного массива характеризуются двумя индексами, значениями и адресуемой памятью.
- Существует две основные формы объявления массивов: с указанием и без указания размера. Безразмерный массив объявляется, если: он инициализируется при объявлении, является формальным параметром функции, объявлен как ссылка на массив.
- Инициализация массива заключается в присваивании начальных значений его элементам. Методы генерации двумерных и одномерных массивов аналогичны.
- Для двумерных массивов нельзя выполнить операцию прямого присваивания.
- Адресация элементов массива осуществляется с помощью индексированного имени. Обращаться к элементам массива можно также посредством механизма указателей.
- Размер памяти, занимаемой массивом, зависит от реализации и вычисляется с помощью операции sizeof.
- Двумерные массивы используются для решения прикладных задач.