2013-11-27 3 views
0

прежде всего им нового на c.i попытаться получить определитель матрицы NxN с этим кодомне может получить точный результат для определителя

double Determinant(double *A, int N){ 
int i; 
int j; 
int k; 
double y[100][100]; 
double x[100][100]; 
int sign = 1; 
double result = 0; 
int arrayRow; 
int arrayColumn; 

for(i = 0 ; i < N ; i++){ 
    for(j = 0; j < N ;j++){ 
     x[i][j] = A[(N*i)+j];}} 

if(N == 2){ 
    result =x[0][0]*x[1][1] - x[0][1]*x[1][0]; 
    } 
else 
    { 
    for(i = 0; i < N ; i++){ 
     arrayRow = 0; 
     arrayColumn = 0; 
     for(j = 1 ;j < N; j++){ 
      for(k = 0; k < N ; k++){ 
       if(k == i){ 
       continue;} 
       y[arrayRow][arrayColumn] =x[j][k]; 
       arrayColumn++; 
      } 
      arrayColumn = 0; 
      arrayRow++; 
     } 



     result += sign*x[0][i]*Determinant(*y,N-1); 
     sign = -sign;} 
} 
printf("%d",result); 
return result; 
} /* end-Determinant */ 

но показать что-то очень неожиданное число, как -85899 .... это тестовый код, а определитель не возвращает правильный результат.

int main(){ 
double A[] = {5, 2, 4, 2, 4, 6, 1, 2, 8}; 
int a ; 

if(Determinant(A, 3) == 80){ 
    a = Determinant(A,3); 
    printf("%d",a);}; 
    getchar(); 
} /* end-main */ 

ответ

0

У вас неправильный спецификатор формата в printf.

Try: printf("%f",a); и printf("%f",result);

спецификаторы формата Printf Смотрите здесь http://www.cplusplus.com/reference/cstdio/printf/ (% d для целых чисел не двойников).

Смежные вопросы