Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
19
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения

Матрица объявляется, например, следующим образом:

const n=3, m=5; int A[n][m],

где n — количество строк (первая, левая размерность), mколичество столбцов или количество элементов в строке (вторая, правая размерность). Матрица располагается в оперативной памяти по строкам и занимает непрерывный участок, объём которой равен n*m*sizeof(int), где int тип элементов матрицы.

Тот или иной способ определения матрицы применяется в зависимости от специфики конкретной задачи.

Матрицу можно инициализировать при объявлении:

int A[n][m]= {{1, -2, 3, -4, 5},

{ 10, 20, 33, -40},

{-11, 22, 300, 400, 500}};

Если в строке указано меньше элементов, чем требуется, то остальные инициализируются нулями. У нас во второй строке с номером 1 (нумерация и строк, и столбцов начинается с нуля) последний элемент будет нулевым.

Ввод матрицы используется, если для тестирования программы принципиально важно, какие значения элементов матрицы введены, а другие способы её задания неприемлемы. Например, некоторые строки (но не все) не должны содержать нулей. Очевидным недостатком этого способа является трудоёмкость ввода и необходимость его повторения при отладке программы. Простейший ввод можно выполнить следующим образом:

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

for ( j=0; j<m; j++)

cin>>A[i][j];

Но в этом варианте в каждой строке набираем одно число, и не видно, элемент с каким номером вводим. Желательно, чтобы вводимые элементы матрицы на экране располагались так, как в математической записи, то есть элементы строки матрицы должны вводиться из одной строки экрана. Это можно выполнить, например, следующим образом:

for ( y=wherey(), i=0; i<n; i++, y++)

{ gotoxy(1, y); cout<<"i="<<i;

for (x=5, j=0; j<m; j++, x+=5)

{ gotoxy(x,y);

cin>>A[i][j];

} }

Для экономии времени, затрачиваемого на ввод матрицы, для некоторых задач её элементы можно определить с помощью датчика случайных чисел (см. 6.2 гл. 1):

Randomize();

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

for ( j=0; j<m; j++)

A[i][j]=random(100);

Если по условию задачи требуется, чтобы числа матрицы принадлежали интервалу [r1, r2), где r2>r1, то в цикле следует записать A[i][j]=random(r2-r1)+r1; Этот метод можно использовать при отладке программы, если на элементы матрицы нет ограничений.

Элементы матрицы можно задать также по некоторому специальному правилу, например:

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

for ( j=0; j<m; j++)

A[i][j]=(i+1)*(j+1);

Сформированную так матрицу для некоторых задач легче анализировать.

Преимущество последних двух способов в том, что во время отладки программмы не нужно тратить время на неоднократный ввод элементов матрицы или записывать их в тексте программы при объявлении. При этом матрицу надо обязательно выводить на экран, чтобы можно было проверить полученный результат.