Матрица
1. Матрица представляет собой двумерное отображение строк и столбцов, используемое для организации или сравнения данных.
2. В программировании матрица это двумерный массив.
3. Когда речь идет о кино, Матрица это популярная трилогия фильмов с Киану Ривз и Лоуренсом Фишбёрном в главных ролях. Первая часть фильма появилась в 1999 году.
Понравилось? Поделись с друзьями!
Новое
- 5 причин перегрева компьютера
- Вылетают игры на компьютере: причины
- Не открываются страницы в браузерах в Windows 10
- Что делать, если программы из магазина в Windows 10 не подключаются к интернету
- Что делать, если внезапно перестали работать USB в Windows 10
Матрицы в C++. Общие сведения
Матрица — это двумерный массив, каждый элемент которого имеет два индекса: номер строки и номер столбца, поэтому для работы с элементами матрицы необходимо использовать два цикла. Если значениями параметра первого цикла будут номера строк матрицы, то значениями параметрами второго — столбцы (или наоборот). Обработка матрицы заключается в том, что вначале поочередно рассматриваются элементы первой строки (столбца), затем второй и т.д. до последней.
Перед тем, как приступить к изучению алгоритмов обработки матриц, давайте рассмотрим, как описываются матрицы в C++. Двумерный массив можно объявить так:
тип имя_переменной [n] [m];
Здесь тип определяет тип элементов массива, имя_переменной — имя матрицы, n — количество строк, m — количество столбцов. Строки нумеруются от 0 до n-1, столбцы от 0 до m-1.
Например int h[10] [15];
Выше матрица целых чисел h, состоящая из 10 строк и 15 столбцов (строки нумеруются от 0 до 9, столбцы от 0 до 14).
Для обращения к элементу матрицы необходимо указать ее имя и в квадратных скобках номер строки, затем номер столбца. Например, h[2] [5].
Ввод-вывод матриц
Матрицы, как и одномерные массивы, нужно вводить (выводить) поэлементно. Блок-схема ввода элементов матрицы A[n] [m] изображена ниже:
Код программы на Visual C++ вода-вывода матрицы будет иметь примерно такой вид:
#include "stdafx.h" #include using namespace std; int main() < setlocale (LC_ALL, "RUS"); int i,j,N,M,a[20][20]; cout>N; cout>M; cout>a[i][j]; //ввод очередного элемента матрицы cout system("pause"); return 0; >
Результат работы программы:
Теперь, давайте рассмотрим некоторые свойства матриц:
- если номер строки элемента совпадает с номером столбца (i = j), это означает , что элемент лежит на главной диагонали матрицы;
- если номер строки превышает номер столбца (i > j), то элемент находиться ниже главной диагонали;
- если номер столбца больше номера строки (i < j), то элемент находиться выше главной диагонали;
- элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i+j+1=n;
- неравенство i+j+1 характерно для элемента, находящегося выше побочной диагонали;
- соответственно, элементу, лежащему ниже побочной диагонали, соответствует выражение i+j+1>n.
Примеры задач обработки матриц
Задача 1
Найти сумму элементов матрицы, лежащих выше главной диагонали (рис. ниже)
Алгоритм решения данной задачи можно построить следующим образом: обнулить ячейку для накапливания суммы (переменная S). Затем с помощью двух циклов просмотреть каждый элемент матрицы, суммировать элементы при условии, что элемент находиться выше главной диагонали. Текст решения задачи:
#include «stdafx.h» #include using namespace std; int main() < setlocale (LC_ALL, "RUS"); int S, i, j, N, M, a[20][20]; cout>N; cout>M; cout>a[i][j]; for (S=i=0; ii) S+=a[i][j]; cout
Задача 2
Проверить, является ли заданная квадратная матрица единичной. Единичной называют матрицу, у которой элементы главной диагонали — единицы, а все остальные — нули. Например:
Решать задачу будем так. Предположим, что матрица единичная и попытаемся доказать обратное. Если окажется, что хотя бы один диагональный элемент не равен единице или любой из элементов вне диагонали не равен нулю, то матрица единичной не является. Воспользовавшись логическими операциями языка C++, все эти условия можно соединить в одно и составить программу:
#include «stdafx.h» #include using namespace std; int main() < setlocale (LC_ALL, "RUS"); int pr, i, j, N, a[20][20]; cout>N; cout>a[i][j]; //предположим, что матрица единичная, и присвоем переменной pr значение 1 //если значение этой переменной при выходе из цикла не измениться, //это будет означать, что матрица действительно единичная for (pr=1, i=0; i //проверка значения переменной pr и вывод соответствующего сообщения if (pr) cout
Задача 3
Преобразовать исходную матрицу так, чтобы нулевой элемент каждый строки был заменен среднем арифметическим элементом этой строки.
Для решения задачи необходимо найти в каждой строке сумму элементов, которую разделить на их количество. Полученный результат записать в нулевой элемент соответствующей строки.
#include «stdafx.h» #include using namespace std; int main() < setlocale (LC_ALL, "RUS"); int i, j, N, M; double S, a[20][20]; cout>N; cout>M; cout>a[i][j]; for (i=0; i Матрица это набор объектов, которые хранятся в виде таблицы. У каждой матрицы есть имя, единый тип всех ее объектов. Также как и переменные матрицу в Си необходимо объявить перед тем как с ней работать, необходимо указать ее тип, ее имя , количество строк -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. // вложенный цикл, “пробегаемся” по всем столбцам для Нумерация столбцов с 0. …Имя матрицы [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); Вернуться к содержанию Перейти к теме Работа с файлами в Си Полезно почитать по теме массивы и матрицы в си Комментарии ( 0 ) Нет комментариев. Ваш будет первым! Здравствуйте.Подскажите пожалуйста что такое матрица в плане программирования?В поисковике пробивал-результатов нет. Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы. Форумчанин Форумчанин Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы. somewhere else Матрица это не массив, для начала. Матрица в программировании это тоже самое что и в высшей математике. «Тяжело в учении, легко в бою» — А.В. Суворов Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.Обявление матрицы в Си
Задание матрицы в Си
Ввод матрицы в Си с помощью клавиатуры
Массивы в си
Игра на си Крестики Нолики Что такое матрица в программировании
Регистрация: 19.06.2009
Сообщений: 896
В плане программирования это обычно массив.
Вавел из ГМТУ
Посмотреть профиль
Найти ещё сообщения от Вавел из ГМТУ
Регистрация: 25.02.2009
Сообщений: 145
А если можно поточнее.Или это простой статический массив и все?
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
< 0 0 1 >
< 1 2 7 >
< 4 6 3 >
Вот это матрица — квадратная. Умножение матриц происходит по определенному закону, сложение же простое — к каждому элементу прибавляется аналогичный элемент из другой матрицы.
< A00 A01 A02 >
< A10 A11 A12 >
< A20 A21 A22 >
Вот так нумеруются элементы.
В программирование матрицы используются практически во всех более ли менее сложных алгоритмах, таких как шифрование или хеш-функции.
В 3D графике с их помощью модифицируются координаты. Вобщем используются они повсеместно и знать какие с ними можно производить действия нужно каждому более ли менее образованному программисту.
Кстати самый простой пример реализации алгоритма с матрицами — это алгоритм решения систем уравнений — например методом Гауса или Крамера.
Другой вопрос что числовые матрицы чаще всего представляют многоуровневыми массивами, это самая близкая к математической модели матриц, их реализация в языках высокого уровня.
PS: Я бы конечно мог бы тут рассказать про то как и что можно делать с матрицами но спрашивается зачем если есть Википедия
Форумчанин
Регистрация: 25.02.2009
Сообщений: 145
Спасибо за объяснение.