Двумерный массив - структурированный тип данных, где каждый элемент представляет собой массив из элементов простого типа.
Формат объявления многомерного массива:
Тип идентификатор [размер1] [размер2] … [размер №];
Где размер1…№ - это целое положительное число или выражение, определяющее максимальное значение индекса массива. Количество элементов двумерного (многомерного) массива определяется произведением максимальных значений индексов. Например:
int mas [3][4]; объявляет массив из трех элементов, каждый из которых является массивом из четырех элементов целого типа. Размер массива равен 12 элементов, каждый из которых по 4 байта.
Обращение к элементу многомерного массива производится точно так же, как и к элементу одномерного массива, с помощью индексации.В двумерном массиве первый индекс определяет номер строки, а второй индекс – номер столбца. Все индексы первого элемента равны нулю, т.е. а1[0][0] – ‘элемент находится на пересечении нулевой строки и нулевого столбца и называется нулевым элементом матрицы.
Пример: int a1[4][4];
a1[0][0] a1[0][1] a1[0][2] a1[0][3]
a1[1][0] a1[1][1] a1[1][2] a1[1][3]
a1[2][0] a1[2][1] a1[2][2] a1[2][3]
a1[3][0] a1[3][1] a1[3][2] a1[3][3]
ü Элементы, у которых номер строки равен номеру столбца - расположены на главной диагонали. Обращение к нему – а1[i][i].
ü Элемент, у которого номер строки больше чем номер столбца, находится под главной диагональю.
Пример заполнения матрицы ниже главной диагонали:
for ( int i = 1; i < fkstrok ; i++) //цикл по строкам
for ( int j = 0; j < i+1 ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
ü Элемент, у которого номер строки меньше чем номер столбца, находится над главной диагональю.
Пример заполнения матрицы выше главной диагонали:
for ( int i = 0; i < fkstrok-1 ; i++) //цикл по строкам
for ( int j = i+1; j < fkstolb ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
Матрица – это двумерный массив, поэтому для последовательной обработки каждого элемента по строкам, необходимо организовать два цикла (вложенные), внешний цикл формирует номер строки, а внутренний номер столбца. Т.к. на каждый шаг внешнего цикла, внутренний отрабатывает нужное число раз, мы переберем все элементы в нулевой строке, затем в первой строке и так до тех пор, пока строки не закончатся. Если необходимо перебрать элементы матрицы по столбцам, то внешний цикл формирует номер столбца, а внутренний – номер строки.
Пример обработка матрицы по строкам:
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
Пример обработка матрицы по столбцам:
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
cin>>a1[i][j]);
Пример 3:
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
{
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
{
a1[i][j] = rand(); //присваиваем случайное число
cout<<a1[i][j]<<’\t’;
}
cout<<endl; //переходим на новую строку
}
Для генерации последовательности псевдослучайных чисел используются функции rand(), srand(), time().
ü Функция time() возвращает текущее календарное время, установленное операционной системой. Если системное время не установлено, функция возвращает число -1.
ü Функция srand() используется для вычисления стартовой точки при генерации при генерации последовательности псевдослучайных чисел, возвращаемых функцией rand().
ü Функция rand() возвращает целое число из диапазона от нуля до 0х7fff (величина RAND_MAX).
ü Применение данных функций требует включения заголовочного файла <cstdlib> , где определены rand() и srand() , а также файла <ctime> ,в котором определена функция time(). Заголовочные файлы включаются в программу с помощью директивы препроцессора #include .
Пример:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespase std
void main ()
{
const int s = 5;
int ar [s][s]; //массив из 5 строк и 5 столбцов
srand((unsigned) time(NULL)); //вычисление стартовой точки при генерации случайных чисел, возвращаемые функцией rand().
for ( int i=0; I < s; i++) // цикл по строкам
{
For ( int j=0; j < s; j++) //цикл по столбцам
{
ar[i][j] = rand()%7+2; //присвоение случайного числа от 2 до 8
cout << ar[i][j]<<’\t’; //распечатка строки матрицы по столбцам
}
cout << endl; //переход на распечатку новой строки