Вот код нахождения определителя:
| Код |
#include "stdafx.h" #include <iostream> #include <math.h> using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { double *a, k, r, max; int i, j ,q, n, j_max;
cout << "Input n: "; cin >> n; a=new double [n*n]; for (i=0; i<n; i++){ for (j=0; j<n; j++){ cout << "Input a[" << i << "][" << j << "]="; cin >> a[i*n+j]; } } for (i=0; i<n; i++){ for (j=0; j<n; j++) cout << a[i*n+j] << " "; cout << endl; }
for (i=0; i<n-1; i++){ // Ищем максимальный по // модулю элемент в столбце max=a[i*n+i]; j_max=i; for (j=i+1; j<n; j++){ if (fabs(a[j*n+i])>fabs(max)){ max=a[j*n+i]; j_max=j; } } // Меняем строки местами if (j_max!=i){ for (j=0; j<n; j++){ r=a[j_max*n+j]; a[j_max*n+j]=a[i*n+j]; a[i*n+j]=-r; } } /* Если элемент главной диагонали не равен нулю, используя элементарные преобразования, обнуляем все элементы j-ого столбца, начиная с i+1 элемента. */ if (a[i*n+i]!=0){ for (j=i+1; j<n; j++){ k=a[j*n+i]/a[i*n+i]; for (q=i; q<n; q++) a[j*n+q]-=k*a[i*n+q]; } } else{ cout << "Net resh!"; return 0; } } if (a[(n-1)*n+(n-1)]==0){ cout << "Net resh!"; return 0; }
k=1; for (i=0; i<n; i++) k=k*a[i*n+i]; cout << endl; cout << "det= " << k << endl;
delete [] a; cin >> i; return 0; }
|
|