Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++.doc
Скачиваний:
27
Добавлен:
20.08.2019
Размер:
2.26 Mб
Скачать

Обработка двумерного массива

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

Формат объявления многомерного массива:

Тип идентификатор [размер1] [размер2] … [размер №];

Где размер1…№ - это целое положительное число или выражение, определяющее максимальное значение индекса массива. Количество элементов двумерного (многомерного) массива определяется произведением максимальных значений индексов. Например:

int mas [3][4]; объявляет массив из трех элементов, каждый из которых является массивом из четырех элементов целого типа. Размер массива равен 12 элементов, каждый из которых по 4 байта.

Количество элементов вычисляется по формуле:

число_элементов = sizeof (идентификатор) / sizeof (идентификатор[0]);

Пример: int a1[5][5];

int к = sizeof(a1) / sizeof(a1[0]);

Для определения количества байтов, которое занимает массив в оперативной памяти, принимается формула:

число_байтов = sizeof(тип_элемента_массива) * число_элементов ;

Обращение к элементу многомерного массива производится точно так же, как и к элементу одномерного массива, с помощью индексации. В двумерном массиве первый индекс определяет номер строки, а второй индекс – номер столбца. Все индексы первого элемента равны нулю, т.е. а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; //переход на распечатку новой строки

}

}