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

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

Задача 6.3. Проверить, является ли заданная квадратная матрица единичной.

Единичной называют матрицу, у которой элементы главной диагонали — единицы, а все остальные — нули. Например,

\left(\begin{matrix}1&0&0&0&0\\0&1&0&0&0\\0&0&1&0&0\\0&0&0&1&0\\0&0&0&0&1\end{matrix}\right)

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

#include <iostream>
using namespace std;
int main ( )
{
	int pr, i, j,N, **a;
	cout<<" N = "; //Ввод размерности матрицы
	cin>>N;
	a=new int * [N ]; //Создаём квадратную динамическую матрицу
	for ( i =0; i<N; i++)
		a [ i ]=new int [N ];
	cout<<"Ввод элементов матрицы A "<<endl;
	for ( i =0; i<N; i++)
		for ( j =0; j<N; j++)
			cin>>a [ i ] [ j ];
	//Предположим, что матрица единичная, и присвоим переменной pr значение 1 (истина).
	//Если значение этой переменной при выходе из цикла не изменится, это будет означать,
	//что матрица действительно единичная.
	for ( pr =1, i =0; i<N; i++)
		for ( j =0; j<N; j++)
		if ( ( ( i==j )&&(a [ i ] [ j ] ! = 1 ) ) | | ( ( i != j )&&(a [ i ] [ j ] ! = 0 ) ) )
		//Если элемент лежит на главной диагонали и не равен единице или элемент лежит вне
		//главной диагонали и не равен нулю, то
		{
			pr =0; //Переменной pr присвоить значение 0 (ложь), это будет означать,
			break; //что матрица единичной не является, и выйти из цикла.
		}
	//Проверка значения переменной pr и вывод соответствующего сообщения.
	if ( pr ) cout<<"Единичная матрица\n ";
	else cout<<"Матрица не является единичной\n ";
}

Задача 6.4.Преобразовать исходную матрицу так, чтобы нулевой элемент каждой строки был заменён средним арифметическим элементов этой строки.

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

#include <iostream>
using namespace std;
int main ( )
{
	int i, j,N,M;
	double S, **a;
	cout<<" N = "; //Ввод размерности матрицы.
	cin>>N;
	cout<<" M = ";
	cin>>M;
	a=new double * [N ]; //Создаём динамическую матрицу
	for ( i =0; i<N; i++)
		a [ i ]=new double [M];
	cout<<"Ввод элементов матрицы A "<<endl;
	for ( i =0; i<N; i++)
		for ( j =0; j<M; j++)
			cin>>a [ i ] [ j ];
	//Цикл по i завершается записью среднего значения в нулевой элемент строки и наращиванием i.
	for ( i =0; i<N; a [ i ] [ 0 ] = S/M, i++)
		for ( S=j =0; j<M; j++) //Вычисление суммы элементов строки.
			S+=a [ i ] [ j ];
	cout<<"Преобразованная матрица A "<<endl;
	for ( i =0; i<N; cout<<end l, i++)
		for ( j =0; j<M; j++)
			cout<<a [ i ] [ j ]<<" \t ";
}
Сергей Радыгин
Сергей Радыгин

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

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

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

 

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

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