2016-12-29 41 views
0

Ich versuche, ein Programm zu schreiben, das die Determinante für mich berechnen würde, und das ist, was ich bisher gemacht habe. Aber es funktioniert nicht, es druckt nur 6356918 für jede Matrix, die ich darauf werfe. Ich habe sogar meinen Code mit einigen anderen Codes im Internet verglichen, aber das hat nicht funktioniert.C-Programm zur Berechnung der Determinante einer NxN-Matrix

Und ich weiß nichts über Zeiger, damit ich sie nicht verwenden kann. Ich habe Debugging versucht, von dem ich auch nicht viel weiß, aber mit dem ersten 'wenn' in der zweiten Funktion und dem letzten Teil des Codes, der die Determinante berechnet, scheint etwas nicht in Ordnung zu sein. Ich codiere in 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

'Und BTW Ich weiß nichts über Zeiger, so dass ich sie buchstäblich nicht benutzen kann ... ... was hält Sie davon ab, sie zu lernen? Sie sind nützlich. :) –

+1

Ich habe das Gefühl, dass Sie Probleme mit Ihrer Eingabe haben, anstatt mit der Berechnung ... –

+0

@Sourav Ghosh Ich weiß, aber für diesen bestimmten Code darf ich sie nicht verwenden, und der Professor sagte, dass wir nur können benutze die Sachen, die wir bereits kennen :(. – ChipsAndbeer

Antwort

1

In Funktion det() haben Sie determinant nur initialisiert, wenn es

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

nicht notwendig war, aber wenn es

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

erforderlich war es keine vorherige Initialisierung war. So bewegen

determinant = 0; 

oben if(n == 2) in der Nähe der Start der Funktion.

+0

Yup, das hat funktioniert. – ChipsAndbeer

Verwandte Themen