Матрицы в Си
Матрица это набор объектов, которые хранятся в виде таблицы. У каждой матрицы есть имя, единый тип всех ее объектов.
Обявление матрицы в Си
Также как и переменные матрицу в Си необходимо объявить перед тем как с ней работать, необходимо указать ее тип, ее имя , количество строк -1 и количество столбцов -1. Нумерация столбцов и строк идет с 0.
Тип матрицы Имя [количество строк-1][количество столбцов-1];
int A[8][9] ; / /объявляет целочисленную матрицу с именем A , у которой 9 строк и 10 столбцов
После объявления матрицы, с ее элементами можно работать. Чтобы обратитсья к элементу матрицы нужно указать имя матрицы в первых квадратных скобках указать номер строки, во вторых квадратных скобках указать номер столбца.
A[0][1]=10; // элементу матрицы с номер строки 0 и столбца 1 присваивается значение 10
printf(“%d”, A[0][1]);// выводит на экран элемент матрицы с номер строки 0 и столбца 1
Задание матрицы в Си
Чтобы работать с матрицей в Си, необходимо присвоить начальные значения всех ее элементов.
Для работы со всеми элементами матрицы используется вложенные циклы for
В главном цикле “пробегаем” по всем строкам, а во вложенном “пробегаем” по всем столбцам для каждой строки.
// “пробегаемся” по всем строкам. Нумерация строк с 0.
for (i=0; i < количество строк; i++)
// вложенный цикл, “пробегаемся” по всем столбцам для Нумерация столбцов с 0.
for (j=0; j < количество столбцов; j++)
…Имя матрицы [i][j]…// работаем с элементом матрицы с номером строки i и номером столбца j
Пример программы 22. Программа задаёт целочисленную матрицу размером 10 на 10 и заполняет ее случайными числами в диапазоне, который укажет пользователь и выводит ее на экран.
int a[9][9]; // объявление матрицы 10 на 10
int i,j; // счетчики циклов
int range;// диапазон в котором присваиваются значения элементов матрицы
//ввод диапазона случайных чисел
printf("введите диапазон заполнения\n");
// пробегаем по всем строкам
// пробегаем по всем столбцам для данной строки i
a[i][j]=rand() % range+1; // прсиваиваем элементу матрицы a с номером строки i и номер столбца j случайного значения в диапазоне от 0 до 9
// пробегаем по всем строкам
// пробегаем по всем столбцам для данной строки i
// переход на следующую строку
При выводе матрицы на экран в Си для каждой строки мы совершаем переход на следующую строку с помощью оператора printf(" ");
Ввод матрицы в Си с помощью клавиатуры
Пример программы 23. Задаётся матрица размера 3 на 3 с помощью клавиатуры и ищется ее максимальный элемент. Он выводится на экран. При поиске максимального элемента, мы создаем специальную переменную max и присваиваем ей значение элемента a[0][0]. Пробегаем по всем элементам матрицы с помощью вложенного цикла, сравнивая текущий элемент с максимумом, если текущий элемент больше максимума, то максимуму присваивается значение этого элемента.
int a[2][2]; // объявление матрицы 3 на 3
int i,j; // счетчики циклов
int max; // переменная для хранения максимального элемента матрицы
// пробегаем по всем строкам
// пробегаем по всем столбцам для данной строки i
// ввод текущего элемента матрицы с клавиатуры
printf("Введите элемент матрицы [%d][%d]", i, j);
// переход на следующую строку
// пробегаем по всем строкам
// пробегаем по всем столбцам для данной строки i
// переход на следующую строку
// пробегаем по всем строкам
// пробегаем по всем столбцам для данной строки i
// сравниваем текущий элемент массива с максимумом
// вывод максимального элемента
printf ("Максимальный элемент массива %d", max);
Вернуться к содержанию
Перейти к теме Работа с файлами в Си
Полезно почитать по теме массивы и матрицы в си
Массивы в си
Игра на си Крестики Нолики
С какого элемента считаются матрицы c
Вернуться к содержанию
Перейти к теме Работа с файлами в Си

1 & 0 & 0 & X\cr 0 & 1 & 0 & Y\cr 0 & 0 & 1 & Z\cr 0 & 0 & 0 & 1\cr \end
0 & 1 & 2 & 3\cr 4 & 5 & 6 & 7\cr 8 & 9 & 10 & 11\cr 12 & 13 & 14 & 15\cr \end
0 & 4 & 8 & 12\cr 1 & 5 & 9 & 13\cr 2 & 6 & 10 & 14\cr 3 & 7 & 11 & 15\cr \end
00 & 10 & 20 & 30\cr 01 & 11 & 21 & 31\cr 02 & 12 & 22 & 32\cr 03 & 13 & 23 & 33\cr \end
С какого элемента считаются матрицы c
Матрица — это некоторая прямоугольная область (таблица), состоящая из строк и столбцов. Пересечения строк и столбцов образуют ячейки. Изобразим на рисунке прямоугольную матрицу a ( n × m ), состоящую из n строк и m столбцов:
Пусть n =3 и m =4. Строки и столбцы пронумеруем, начиная с 0. Заведём вспомогательные переменные:
i — текущее значение строки;
j — текущее значение столбца.
Прежде чем начать работу с матрицей, необходимо дать её описание. Но не всё так просто. У матрицы два измерения, а в языках С/С++ имеются только одномерные массивы и нет двумерных, трёхмерных и т.д. массивов, т.е. нет многомерных массивов, а есть только одномерные. Как же тогда работать с матрицами? Решение элементарное. Считаем матрицу одномерным массивом, состоящим из n строк, где каждая строка — это тоже массив, но из m элементов, т.е. рассматриваем матрицу как массив массивов. Формально это можно записать таким образом:
Тип_элементов Имя_матрицы [ число_строк ][ число_столбцов ];
Для нашей матрицы a описание будет выглядеть так (пусть элементы матрицы — действительные числа):
const int n = 3; // число строк
const int m = 4; // число столбцов
double a[n][m]; // выделяем память под матрицу
И теперь можно приступать к работе с матрицей. Например, присвоить значение какому-нибудь элементу матрицы:
Так мы присвоили значение элементу, расположенному в первой строке и во втором столбце (именно он отмечен на рисунке).
Индексы для матриц задаются так же, как и для одномерных массивов. И так же нежелательно выходить за пределы матрицы (по строкам или по столбцам — всё равно).
Разберём на простом примере некоторые приёмы работы с матрицами.
Пример . Дана прямоугольная матрица действительных чисел размером n × m . Пронормировать эту матрицу, т.е. поделить значение всех элементов матрицы на максимальный по модулю элемент.
Лекция 6. ОБРАБОТКА МАТРИЦ В С++
В С++ определены и двумерные массивы (матрицы), например матрица A, состоящая из 4 строк и 5 столбцов..
Двумерный массив (матрицу) можно объявить так:
тип имя_переменной [n][m];
где n – количество строк в матрице(строки нумеруются от 0 до n-1 ), m – количество столбцов (столбцы нумеруются от 0 до m-1 ).
Описана матрица x , состоящая из 10 строк и 15 столбцов (строки
нумеруются от 0 до 9, столбцы от 0 до 14).
Для обращения к элементу матрицы необходимо указать ее имя, и в квадратных скобках номер строки, а затем в квадратных скобках – номер столбца. Например, x[2][4] – элемент матрицы x , находящийся в третьей строке и
В С++ можно описать многомерные массивы, которые можно объявить с
помощью оператора следующей структуры:
тип имя_переменной [n1][n2]…[nk];
6.1. Блок-схемы основных алгоритмов обработки матриц
Блок-схема ввода матрицы представлена на рис. 6.1
Рис 6.1. Ввод матрицы
C использованием функций printf и scanf ввод матрицы можно
реализовать следующим образом.
printf(«N=»); scanf(«%d»,&N); printf(«M=»); scanf(«%d»,&M); printf(«\n Vvedite A \n»); for(i=0;i<N;i++)
C использованием cin и cout ввод матрицы можно реализовать следующим
Блок-схема вывода матрицы представлена на рис. 6.2
Рис 6.2. Вывод матрицы
C использованием функций printf и scanf построчный вывод матрицы
можно реализовать следующим образом. printf(«\n Matrica A\n»);
C использованием cin и cout построчный вывод матрицы можно реализовать
следующим образом. cout<<«\n Matrica A\n»;
На рис. 6.3 представлена программа ввода-вывода матрицы т результаты ее работы.
Рис 6.3. Результаты работы программы ввода матрицы и ее вывода
Вначале в качестве максимального элемента запоминается первый элемент матрицы A[0][0], номер строки imaх=0, jmax=0. Затем организуется цикл прохода по матрице, где каждый элемент сравнивается со значением max, и если
оказывается больше, то его значение запоминается как новое значение max, и
также запоминаются его индексы. Блок-схема алгоритма представлена на рис. 6.4.
Рис 6.4. Поиск максимального элемента матрицы и его индексов
Программа поиска максимального элемента и его номера представлена
int i,j,n,m, imax, jmax; float max;
max=a[0][0]; imax=0; jmax=0; for(i=0;i<n;i++)
Перед рассмотрением других алгоритмов, давайте вспомним некоторые свойства матриц (см. рис. 6.5):
● если номер строки элемента совпадает с номером столбца ( i = j ), это означает что элемент лежит на главной диагонали матрицы;
● если номер строки превышает номер столбца ( i > j ), то элемент находится ниже главной диагонали;
● если номер столбца больше номера строки ( i < j ), то элемент находится выше главной диагонали.
● элемент лежит на побочной диагонали квадратной матрицы , если его
индексы удовлетворяют равенству i + j + 1 = n;
● неравенство i + j + 1 < n характерно для элемента находящегося выше побочной диагонали квадратной матрицы ;
● соответственно, элементу квадратной матрицы , лежащему ниже
побочной диагонали соответствует выражение i + j + 1 > n.
Рис 6.5. Соотношение индексов у квадратной матрицы Вспомним из курса высшей математики некоторые типы квадратных матриц:
● матрица называется единичной , если все элементы нули, а на главной диагонали единицы;
● матрица называется диагональной , если все элементы нули, кроме
● матрица нулевая , если все элементы нули;
● матрица называется верхнетреугольной , если все элементы ниже
главной диагонали нули; ● матрица называется нижнетреугольной , если все элементы выше
главной диагонали нули;
● матрица называется симметричной , если A = A T .
Для проверки, что матрица В является обратной матрице А, нужно проверить условие А × В=Е (Е – единичная матрица).
Дальнейшие алгоритмы работы с матрицами рассмотрим на примерах решения задач.
ЗАДАЧА 6.1. Найти сумму элементов матрицы, лежащих выше главной диагонали.