Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива
Генерация двумерных массивов
Принцип генерации двумерных массивов такой же, как и одномерных.
//Описание функции генерации массива
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.
- Двумерные массивы используются для решения прикладных задач.