Двумерные массивы - матрицы

Многомерные массивы

Рассмотренные нами массивы являются одномерными, другими словами, каждый элемент в таких массивах определяется одним индексом. По аналогии можно вспомнить, что точка на прямой задается одной координатой. Прямая – это одномерное пространство. Существует также плоскость – двумерное пространство или даже трехмерное пространство. В математике вообще существуют пространства любой размерности. Аналогична ситуация и с массивами – они могут быть двумерными, трехмерными и так далее. Элементами одномерного массива являются элементы базовых типов, элементами двумерных массивов являются одномерные массивы, элементами трехмерных - двумерные и т.д. Следовательно, двумерный массив может рассматриваться как массив, элементы которого определяются двумя индексами, трехмерный – тремя и т.д. При объявлении многомерного массива нужно указать все его размеры, которые не обязательно должны быть одинаковыми:

 

int array_1d[100];

float array_2d[100][200];

char array_3d[100][200][50];

double array_4d[100][200][50][10];

unsigned short array_5d[100][200][50][10][30];

 

Обращение к элементам происходит так:

 

printf("%d", array_1d[i]);

printf("%f", array_2d[i][j]);

printf("%c", array_3d[i][j][k]);

printf("%e", array_4d[i][j][k][l]);

printf("%d", array_5d[i][j][k][l][m]);

 

Среди многомерных массивов наиболее часто используемым является двумерный массив, называемый по-другому матрицей. Матрицы широко используются в линейной алгебре, теории графов, вычислительных методах, математической статистике, физике, механике, а также во многих других фундаментальных и прикладных науках. Рассмотрим несколько задач, связанных с матрицами. Итак, первая задача – это объявление такого массива и заполнение его некоторыми значениями. В реальных задачах значения берутся реальные, которые, например, вводят операторы. У нас на это может не быть времени, поэтому самый быстрый и простой способ заполнения двумерного (да, и не только двумерного) массива – это заполнение случайными числами.

 

//Объявление массива

int matrix[100][100]

 

//Задание размера массива

int n;

printf("Введите размер массива:\n");

scanf("%d", &n);

 

//Заполнение массива случайными целыми числами

for (int i=0; i<n; i++) {

for (int j=0; j<n; j++) {

matrix[i][j] = rand()%1000;

}

}

 

Если нужно заполнить массив случайными вещественными числами, то можно использовать следующий прием:

  • получить случайное число с помощью функции rand();
  • взять его по модулю 10000, т.е. rand()%10000;
  • получится целое число из диапазона от 0 до 9999;
  • поделить это число на 100;
  • получится число из диапазона от 0 до 99.99.

 

//Заполнение массива

//случайными вещественными числами

for (int i=0; i<n; i++) {

for (int j=0; j<n; j++) {

matrix[i][j] = (float) (rand()%10000)/100;

}

}

 

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

 

//Вывод матрицы на экран

for (int i=0; i<n; i++) {

for (int j=0; j<n; j++) {

printf("%5d", numbers[i][j]);

}

printf("\n");

}