Задача на рекурсию....
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Нужен код где программа считает определитель любой размерности, реализация через рекурсию... Плиз Хэлп..))
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Воспользуйся поиском. Эта тема неоднократно поднималась на страничках нашего форума.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
посмотрите вот этот заголовочный файл, написанный моим знакомы, который должен решать подобное:
Код: Выделить всё
//matrix.h
#ifndef __MATRIX_H
#define __MATRIX_H
#ifndef __IOSTREAM_H
#include<iostream.h>
#endif
class matrix
{
double **a;
int n;
public:
~matrix();
matrix(int c=3,int f=1); //f-flag of creation
matrix(int c,double **t);
matrix(const matrix &m);
matrix operator+(matrix& x);
matrix operator*(matrix& x);
matrix operator*(double x);
matrix& operator=(matrix& x);
matrix dminor(int x,int y);
double algd(int x,int y);
friend double det(matrix x);
friend matrix obr(matrix x);
friend istream& operator>>(istream& in,matrix& mt);
friend ostream& operator<<(ostream& on,matrix& m);
};
//----------------------Constructors and destructors--------------------------
matrix::~matrix()
{ for(int i=0;i<n;i++)delete[]a[i];
delete[]a;}
matrix::matrix(int c,int f)
{ n=c;
a=new double*[n];
for(int k=0;k<n;k++)a[k]=new double[n];
if(f==1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j)a[i][j]=1;else a[i][j]=0;
}
else if(f==0)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;
}
}
matrix::matrix(int c,double **t)
{ n=c;
a=new double*[3];
for(int k=0;k<n;k++)a[k]=new double[3];
for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i][j]=t[i][j];}
matrix::matrix(const matrix &m)
{ n=m.n;
a=new double*[n];
for(int i=0;i<n;i++)a[i]=new double[n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=m.a[i][j];}
//----------------------Fucnction-members-------------------------------------
matrix matrix: :o perator+(matrix &x)
{ matrix z=matrix(n);
for(int i=0;i<n;i++) for(int j=0;j<n;j++) z.a[i][j]=a[i][j]+x.a[i][j];
return z;
}
matrix matrix: :o perator*(matrix& x)
{
matrix z(n,0);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
z.a[i][j]+=a[i][k]*x.a[k][j];
return z;
}
matrix matrix: :o perator*(double x)
{
matrix z(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
z.a[i][j]=a[i][j]*x;
return z;
}
matrix& matrix: :o perator=(matrix& x)
{
n=x.n;
a=new double*[n];
for(int i=0;i<n;i++)a[i]=new double[n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=x.a[i][j];
return *this;
}
matrix matrix::dminor(int x,int y)
{ int i,j,n1=n-1;
matrix z=matrix(n1);
for(i=0;i<x;i++) for(j=0;j<y;j++)z.a[i][j]=a[i][j];
for(i=x;i<n1;i++)for(j=0;j<y;j++)z.a[i][j]=a[i+1][j];
for(i=0;i<x;i++)for(j=y;j<n1;j++)z.a[i][j]=a[i][j+1];
for(i=x;i<n1;i++)for(j=y;j<n1;j++)z.a[i][j]=a[i+1][j+1];
return z;
}
double matrix::algd(int x,int y)
{
double d=det(dminor(x,y));
if((x+y)%2==0)return d;else return -d;}
//-------------------------function-friends-----------------------------------
double det(matrix x)
{ int n=x.n;
double d=0;
if(n==1)return x.a[0][0];
else if(n==2)d=x.a[0][0]*x.a[1][1]-x.a[0][1]*x.a[1][0];
else
{
for(int i=0;i<n;i++)
d+=x.a[0][i]*x.algd(0,i);
}
return d;
}
matrix obr(matrix x)
{
double detx=det(x);
int n=x.n,i,j;
if(detx==0)return matrix(n,0);
matrix z=matrix(n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
z.a[j][i]=x.algd(i,j)/detx;
return z;
}
istream& operator>>(istream& in,matrix& mt)
{
int n=mt.n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
in>>mt.a[i][j];
return in;
}
ostream& operator<<(ostream& on,matrix& m)
{
int n=m.n;
for(int i=0;i<n;i++)
{
on<<"\n";
for(int j=0;j<n;j++)
on<<m.a[i][j]<<" ";
}
on<<"\n";
return on;
}
#endif