다음은 제가 원래 작성한 행렬 클래스로, 정사각 행렬의 결정 함수를 구현합니다: int det(matrix);
//matrix.h
//********************************
# ifndef 행렬_h
# 행렬_h 정의
클래스 행렬
{
private:
int m;
int n;
double arr[8][8];
공개:
행렬();
행렬( double);
p>
void set();//행렬에 할당;
void show();//행렬을 화면에 표시;
friend int homotype(matrix ,matrix);//같은 유형인지 여부;
friend int multipliable(matrix,matrix);
//행렬을 곱할 수 있는지 확인
친구 행렬 연산자 +(matrix,matrix);
//행렬 더하기, 더하기 기호 오버로드;
친구 행렬 연산자 -(matrix,matrix);
//행렬 기계 빼기, 빼기 기호 오버로드;
friend 행렬 add(matrix,matrix);
//행렬 추가;
friend 행렬 빼기(행렬,행렬);
//행렬 빼기
친구 행렬 곱하기(행렬,행렬);
//행렬 위상 곱하기
friend 행렬 연산자 *(matrix, 행렬);
//행렬 곱셈, 곱셈 기호 오버로드;
friend double det(matrix) ;
//정사각 행렬의 행렬식을 찾습니다;
int issquare()
{
return m==n;
}
//정사각 행렬인지 확인;
행렬 left(int x, int y);
//요소 찾기 보조인자 of arr[x][y](x,y는 0부터 시작);
};
# endif
//**** ** *************************
//matrix.cpp
//다음은 구현입니다. 클래스의 멤버 및 친구 기능
//************************************ *
# 포함
# 포함 "matrix.h"
matrix::matrix()
{
m = 8;
n = 8;
for(int i=0;i { for(int j=0;j arr[i][j] = 0; } } 행렬::행렬(이중 x) { m = 1; n = 1; arr[0][0] = x; } p> void 행렬::set() { cout<<"행렬의 유형을 설정합니다(?*?)"< cin>>m>>n; cout<<"이제 행렬의 요소를 입력하세요:"< for(int i=0; i { for(int j=0;j cin>>arr[i][j ]; } } void 행렬::show() { cout<< "이것은 행렬입니다:"< for(int i=0;i { for(int j =0;j { cout< } cout< } } int 호모타입(행렬 x,행렬 y) { p> if(x.m==y.m&&x.n==y.n) 1을 반환; else 0을 반환; } int 곱셈 가능(행렬 x,행렬 y) { if(x.n==y.m) 1을 반환; else 0을 반환; } 행렬 추가(행렬 x,행렬 y) { 행렬 z; if(homotype(x,y)) { z.m = x.m; p> p> z.n = x.n; for(int i=0;i for(int j=0;j z.arr[i][j] = x.arr[i][j] + y.arr[i][j]; return z; p> } else { cout<<"추가할 수 없습니다!"< return z; } } 행렬 연산자 +(행렬 x,행렬 y) { return add (x,y); } 행렬 빼기(행렬 x,행렬 y) { 행렬 z; if(homotype(x,y)) { z.m = x.m; z.n = x.n; for(int i=0;i for(int j=0;j z.arr[i][j] = x.arr[i][j] - y.arr[i][j]; return z; p> } else { cout<<"추가할 수 없습니다!"< return z; } } 행렬 연산자 -(행렬 x,행렬 y) { return minus(x,y); } 행렬 곱하기(행렬 x,행렬 y) { 행렬 z; if(x.n!=y.m) { cout<<"두 행렬은 곱할 수 없습니다."< return z; } for(int i=0;i { for( int j=0;j { for(int k=0;k z.arr[ i][j] += x.arr[i][k]*y.arr[k][j]; } } z.m = x.m; z.n = y.n; return z; } 행렬 연산자 *(행렬 x,행렬 y) { 행렬 z; z = 곱하기(x,y); z를 반환; } 행렬 행렬::left(int x,int y) { 행렬 leftmatrix; if((x >=m)||(y>=n)) { cout<<"errer"< return leftmatrix; p> } /* if(!issquare()) { cout<<"정사각형 행렬이 아닙니다!"< return *this; }//*/ leftmatrix.m = m - 1; leftmatrix.n = n - 1; int testx = 0; int testy = 0; for(int i=0;i { testy = 0; for(int j=0;j {< / p> if(i==x) testx = 1; if(j==y) testy = 1; if((!testx)&&(!testy)) leftmatrix.arr[i] [j] = this->arr[i][j]; else if(testx&&(!testy)) leftmatrix.arr[i][j] = this- >arr[i+1][j]; else if((!testx)&&testy) leftmatrix.arr[i][j] = this->arr[i ][j+1]; else leftmatrix.arr[i][j] = this->arr[i+1][j+1]; } } return leftmatrix; } double det(matrix x)//재귀 알고리즘 { if(!x.issquare()) { cout<<"정사각형 행렬이 아닙니다!"< 9.99를 반환; } if(x.m==0) 0을 반환; else if(x.m==1) return x.arr[0][0]; else if(x.m==2) return ( x .arr[0][0]*x.arr[1][1] - x.arr[0][1]*x.arr[1][0]); else< / p> { double num = 0; int a = 1; for(int i=0;i { num = num + a*x.arr[0][i]*det(x.left(0,i)); //0번째 줄을 따라 확장 a = -a; } return num; } } //************************************* *****