Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
9 - Матрицы.docx
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
107.67 Кб
Скачать

Тема 9. Матрицы Понятие матрицы

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

Понятие матрицы можно давать по-разному в зависимости от того, где эта матрица используется. Наиболее просто матрицу M на N можно определить как таблицу, состоящую из M строк и N столбцов, причём все элементы матрицы имеют один и тот же тип. Для обращения к определённому элементу матрицы указывается название матрицы, а также номера строки и столбца. Например, запись Aij означает элемент матрицы A, расположенный в i-ой строке и j-ом столбце.

Матрицы в программировании

С точки зрения программирования матрица представляет собой двумерный массив M на N. Для объявления матрицы используется следующая запись:

int matrix[100][200];

float coefficients[10][100];

char strings[100][20];

bool flags[50][50];

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

int m=10, n=20;

//Ошибка!

int matrix[m][n];

В то же время следующий фрагмент верен:

const int m=10, n=20;

int matrix[m][n];

Теперь рассмотрим, как работать с матрицами: заполнять матрицу, выводить её на экран, обращаться к её элементам.

Инициализация матрицы

Во-первых, присвоить значение матрицы можно в момент объявления, другими словами, произвести её инициализацию:

const int m = 4, n = 5;

int matrix[m][n] = {

{1, 2, 5, 4, 3},

{5, 6, 7, 4, 6},

{1, 2, 5, 4, 3},

{9, 8, 7, 6, 0},

};

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

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

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

<Вывести первую строку>

cout << endl;

<Вывести вторую строку>

cout << endl;

<Вывести третью строку>

cout << endl;

<Вывести четвёртую строку>

cout << endl;

Вспомним, что индексы массива нумеруются с нуля, поэтому строки и столбцы матрицы также нумеруются с нуля. Значит, вывод матрицы можно произвести так:

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

cout << matrix[0][j] << " ";

}

cout << endl;

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

cout << matrix[1][j] << " ";

}

cout << endl;

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

cout << matrix[2][j] << " ";

}

cout << endl;

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

cout << matrix[3][j] << " ";

}

cout << endl;

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

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

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

cout << matrix[i][j] << " ";

}

cout << endl;

}

Результат работы этой программы выглядит так:

Обратите особое внимание на то, что пробел выводится во внутреннем цикле, а перенос на новую строку – во внешнем. Для лучшего понимания данного вопроса поэкспериментируйте с этими разделителями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]