Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2134 / 486 | Длительность: 24:14:00
Лекция 6:

Статические и динамические матрицы

6.3 Обработка матриц в С(С++)

Рассмотрим основные операции, выполняемые над матрицами (статическими и динамическими) при решении задач.

Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Блок- схема ввода элементов матрицы x[n][m] изображена на рис. 6.3.

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

Рис. 6.3. Ввод элементов матрицы
Блок-схема построчного вывода матрицы

Рис. 6.4. Блок-схема построчного вывода матрицы

При выводе матрицы элементы располагаются построчно, например:

\begin{matrix}6&-9&7&13\\5&8&3&8\\3&7&88&33\\55&77&88&37\end{matrix}

Алгоритм построчного вывода элементов матрицы приведён на рис. 6.4.

Ниже приведён текст программы на C++ ввода-вывода статической матрицы.

#include <iostream>
using namespace std;
int main ( )
{
	int i, j,N,M, a [ 20 ] [ 20 ];
	cout<<" N = ";
	cin>>N; //Ввод количества строк
	cout<<" M = ";
	cin>>M; //Ввод количества столбцов
	cout<<"Ввод матрицы A "<<endl;
	for ( i =0; i<N; i++) //Цикл по переменной i, перебираем строки матрицы
		for ( j =0; j<M; j++) //Цикл по переменной j, перебираем элементы внутри строки
			cin>>a [ i ] [ j ]; //Ввод очередного элемента матрицы
	cout<<"Вывод матрицы A "<<endl;
	for ( i =0; i<N; i++) //Цикл по переменной i, перебираем строки матрицы
	{
		for ( j =0; j<M; j++) //Цикл по переменной j, перебираем строки матрицы
			cout<<a [ i ] [ j ]<<" \t "; //Вывод очередного элемента матрицы
		cout<<endl; //По окончанию вывода всех элементов строки — переход на новую строку.
	}
}

Цикл для построчного вывода матрицы можно записать и так.

for ( i =0; i<N; cout<<end l, i++)
	for ( j =0; j<M; j++)
		cout<<a [ i ] [ j ]<<" \t ";

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

N=4
M=5
Ввод матрицы A
1 2 3
5 4
3 6 7 8 9
1 2 3 4 5 6 7 8 9 0
Вывод матрицы A
1	2	3	5	4
3	6	7	8	9
1	2	3	4	5
6	7	8	9	0

Далее на примерах решения практических задач будут рассмотрены основные алгоритмы обработки матриц и их реализация в C++. Перед этим давайте вспомним некоторые свойства матриц (рис. 6.5):

  • если номер строки элемента совпадает с номером столбца (i = j), это означает, что элемент лежит на главной диагонали матрицы;
  • если номер строки превышает номер столбца (i > j), то элемент находится ниже главной диагонали;
  • если номер столбца больше номера строки (i < j), то элемент находится выше главной диагонали.
  • элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i + j = n - 1;
  • неравенство i + j < n - 1 характерно для элемента, находящегося выше побочной диагонали;
  • соответственно, элементу лежащему ниже побочной диагонали соответствует выражение i + j > n - 1.
Свойства элементов матрицы

Рис. 6.5. Свойства элементов матрицы
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?