Привести матрицу к треугольному виду, найти количество строк среднее арифметическое которых меньше заданной величины.

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

Листинг(исходник) программы:


	#include <cmath>
	#include <iostream>
	#include <locale>
	using namespace std;
	
	void ShowVector(int n, double * vec);
	void PryamoiHod(int n, double **a );
	
	int main()
	{
	setlocale(LC_ALL,"Russian");
	int i,j,n;
	double **a;
	char chInp = 0;
	do
	{
	cout<<"Введите размерность n для получения матрицы NхN: ";cin>>n;
	//Выделяем память под матрицу А
	a = new double *[n];
	for(i = 0; i < n; i++)
	{
	a[i] = new double[n];
	//Ввод a
	for(j = 0; j < n; j++)
	{
	cout<<"a["<<i + 1<<"]["<<j + 1<<"] = ";
	cin>>a[i][j];cin.get();
	}
	}
	
	cout<<"\\tИсходная матрица\\r\\n"<<endl;
	cout<<"Matrix A:\\r\\n";
	for(i = 0; i < n; i++)
	ShowVector(n, a[i]);
	
	cout<<endl<<"\\tМатрица приведенная к треугольному виду\\r\\n"<<endl;
	PryamoiHod(n, a );
	cout<<"Matrix A:\\r\\n";
	for(i = 0; i < n; i++)
	ShowVector(n, a[i]);
	
	int R,SummStr=0;double Summ=0;
	cout<<endl<<"\\t\\tВведите велечину, и вы узнаете сколько строк имеют\\n\\t\\t\\t среднее арифметическое меньше неё : ";
	cin>>R;
	cout<<endl;
	for (i=0; i < n; i++)
	{
	for(j=0; j<n; j++)
	{
	Summ += a[i][j];
	}
	if( (Summ/(double)n) < R)
	{
	SummStr += 1;
	}
	Summ = 0;
	}
	switch (SummStr)
	{
	case 0: cout<<SummStr<<" строк имеет среднее арифметическое меньше "<<R<<endl; break;
	case 1: cout<<SummStr<<" строка имеет среднее арифметическое меньше "<<R<<endl; break;
	case 2: cout<<SummStr<<" строки имеет среднее арифметическое меньше "<<R<<endl; break;
	case 3: cout<<SummStr<<" строки имеет среднее арифметическое меньше "<<R<<endl; break;
	case 4: cout<<SummStr<<" строки имеет среднее арифметическое меньше "<<R<<endl; break;
	
	default: cout<<SummStr<<" строк имеет среднее арифметическое меньше "<<R<<endl; break;
	
	}
	
	cin>>chInp;cin.get();
	//Чистим память
	for(i = 0; i < n; i++)
	delete [] a[i];
	delete [] a;
	}
	while(toupper(chInp) == \'Y8\');
	return 0;
	}
	
	void ShowVector(int n, double * vec)
	{
	for(int i = 0; i < n; i++)
	cout<<vec[i]<<"\\t";
	printf("\\r\\n");
	}
	
	void PryamoiHod(int n, double **a)
	{
	double v;
	for(int k = 0,i,j,im; k < n - 1; k++)
	{
	im = k;
	for(i = k + 1; i < n; i++)
	{
	if(fabs(a[im][k]) < fabs(a[i][k]))
	{
	im = i;
	}
	}
	
	
	
	
	if(im != k)
	{
	for(j = 0; j < n; j++)
	{ 
	swap(a[im][j] , a[k][j]);
	}
	}
	
	
	
	for(i = k + 1; i < n; i++)
	{
	v = 1.0*a[i][k]/a[k][k];
	a[i][k] = 0;
	if(v != 0)
	for(j = k + 1; j < n; j++)
	{
	a[i][j] -= v*a[k][j];
	}
	}
	}
	}
	

Автор: Павел Кадыров

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *