Скачиваний:
8
Добавлен:
25.05.2014
Размер:
2.37 Кб
Скачать
#include "iostream.h"
#include "stdio.h"
#include "conio.h"

void diagonal(float**,int);

void treugolnik(float**,int);

void printmatrix(float**,int);

float det(float**,int);

void main()
{
	cout<<" \t\t Metod KPAMEPA"<<endl;
	cout<<"Chislo uravnenii: ";
	int n=0;
	cin>>n;

	float** a = new  float*[n];
	
	for(int i=0;i<n;i++)
		a[i]=new float[n];
    float** t=new float*[n];
	for(i=0;i<n;i++)
		t[i]=new float[n];

	float* b=new float[n];
	

	
	cout<<"Vvedite matritsu koeffitsientov: "<<endl;
	for(i=0;i<n;i++)
		for(int j=0; j<n; j++)
		{
		  cout<<"A["<<i<<','<<j<<"]=";
		  cin>>a[i][j];
		  t[i][j]=a[i][j];		  
		} 

	cout<<"Vvedite vector svobodnih chlenov: "<<endl;
	
	for(i=0;i<n;i++)
	  {
		  cout<<"B["<<i<<"]=";
		  cin>>b[i];
		  
	  }
	
    float Delta=det(t,n);
	if(Delta==0)
	{
		cout<<"Dennaya sistema ne reshaetsya metodom KPAMEPA:)";
		return;
	}

	for(int j=0;j<n;j++)
	{
		for(int i=0;i<n;i++)
			for(int k=0;k<n;k++)
				t[i][k]=a[i][k];
		
		
		for(i=0;i<n;i++)
			t[i][j]=b[i];
		
		float x=det(t,n)/Delta;
		printf(" %s %d %s %3.5f \n","X",j, "=", x);
		cout<<endl;
	}
		
for(i=0;i<n;i++)
   delete *(t+i);
delete []t;

for(i=0;i<n;i++)
   delete *(a+i);
delete []a;

delete []b;
getch();
}

void diagonal(float** a,int n)
{
	for(int j=0;j<n;j++)
		if(*(*(a+j)+j)==0)
			for(int i=j+1;i<n;i++)
				if(*(*(a+i)+j)!=0)
					for(int k=0;k<n;k++)
					{ float t=*(*(a+j)+k);
					*(*(a+j)+k)=*(*(a+i)+k);
					*(*(a+i)+k)=t;
					}
	if(*(*(a+n-1)+n-1)==0)
		for(int i=0;i<n;i++)
			if( (*(*(a+n-1)+i)!=0)&&(*(*(a+i)+n-1)!=0))
			{
				for(int k=0;k<n;k++)
				{float t=*(*(a+i)+k);
				*(*(a+i)+k)=*(*(a+n-1)+k);
				*(*(a+n-1)+k)=t;
				}
				return;
			}
				
}

void treugolnik(float** a,int n)
{
	for(int j=0;j<n;j++)
	{
		for(int i=j+1;i<n;i++)
			if(*(*(a+i)+j)!=0)
			{	float q=(*(*(a+i)+j))/(*(*(a+j)+j));
				for(int k=0;k<n;k++)
					(*(*(a+i)+k))-=*(*(a+j)+k)*q;
			}
		
		diagonal(a,n);	
	}
}

void printmatrix(float** a,int n)
{
	for( int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			printf("%3.2f \t",*(*(a+i)+j));
		printf("\n");
		
	}
}
float det(float** a,int n)
{
	diagonal(a,n);
	treugolnik(a,n);
	float result=*(*(a+0)+0);
	for(int i=1;i<n;i++)
		result*=(*(*(a+i)+i));
	return result;
	
}
Соседние файлы в папке C++. Крамер, Гаусс, БД, текст. лабораторная за 1 семестр