2016-12-29 3 views
0

Я пытаюсь написать программу, которая будет вычислять определитель для меня, и это то, что я сделал до сих пор. Но он не работает, он просто печатает 6356918 для каждой матрицы, которую я бросаю на нее. Я даже сравнил свой код с некоторыми другими кодами в Интернете, но это не сработало.Программа C для вычисления детерминанта матрицы NxN

И я ничего не знаю о указателях, поэтому я не могу их использовать. Я попробовал отладку, о которой я тоже мало что знаю, но, похоже, что-то не так с первым «if» во второй функции и с последней частью кода, которая вычисляет определитель. Я кодирую в code :: blocks.

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

main() 
{ 
    int A[100][100]; 
    int i,j,k,n,res; 
    printf("Enter the order of the matrix: \n"); 
    scanf("%d",&n); 
    printf("\nEnter the elements of the matrix one by one: \n"); 
    for(i = 0 ; i < n ; i++) 
    { 
     for(j = 0 ; j < n ; j++) 
     { 
      scanf("%d",&A[i][j]); 
     } 
    } 
    for(i = 0 ; i < n ; i++) 
    { 
     for(j = 0 ; j < n ; j++) 
     { 
      printf("%5d",A[i][j]); 
     } 
     printf("\n"); 
    } 
    res = det(A,n); 
    printf("%d",res); 
} 
int det(int A[100][100], int n) 
{ 
    int Minor[100][100]; 
    int i,j,k,c1,c2; 
    int determinant; 
    int c[100]; 
    int O=1; 

    if(n == 2) 
    { 
     determinant = 0; 
     determinant = A[0][0]*A[1][1]-A[0][1]*A[1][0]; 
     return determinant; 
    } 
    else 
    { 
     for(i = 0 ; i < n ; i++) 
     { 
      c1 = 0, c2 = 0; 
      for(j = 0 ; j < n ; j++) 
      { 
       for(k = 0 ; k < n ; k++) 
       { 
        if(j != 0 && k != i) 
        { 
         Minor[c1][c2] = A[j][k]; 
         c2++; 
         if(c2>n-2) 
         { 
          c1++; 
          c2=0; 
         } 
        } 
       } 
      } 
      determinant = determinant + O*(A[0][i]*det(Minor,n-1)); 
      O=-1*O; 
     } 
    } 
    return determinant; 
} 
+1

'И BTW Я ничего не знаю о указателях, поэтому я буквально не могу их использовать ... что мешает вам узнать их? Они полезны. :) –

+1

У меня такое чувство, что у вас проблемы с вашими данными, а не с расчетами ... –

+0

@Sourav Ghosh Я знаю, но для этого конкретного кода мне не разрешено использовать их, хорошо, профессор сказал, что мы можем только используйте материал, который мы уже знаем :( – ChipsAndbeer

ответ

1

В функции det() вы инициализирован determinant только тогда, когда не надо было

determinant = 0; 
determinant = A[0][0]*A[1][1]-A[0][1]*A[1][0]; 

, но когда это было необходимо

determinant = determinant + O*(A[0][i]*det(Minor,n-1)); 

не было никакой предыдущей инициализации. Так двигаться

determinant = 0; 

выше if(n == 2) вблизи начала функции.

+0

Yup, это сработало. – ChipsAndbeer

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