1

上三角行列の行列式を見つける関数を機能させるのに問題があります。私のコードは明らかに正しくない値を返すようです。通常はゼロです。これは、関数を何らかの方法で誤って定義したことが原因であると確信しています。それは私の側の基本的なエラーだと思いますが、しばらくそれを見つめた後、私はそれを理解することができませんでした. 関数と印刷コードは次のとおりです。

int Determinant(int mat[20][20],int N)
{
int X=0,Det=0;
    if (N==2){
              Det=mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];
              return(Det);
             }
    else {
             for(X = 0; X < N; X++){
             Det *= mat[X][X];

          }
         }
return (Det);
}

および印刷機能:

determinant=Determinant(matrix,n);
printf("Determinant = %d",determinant);

詳細を提供するために、これまでに作成した完全なコードを含めます。現時点での基本的なアプリケーションは、n x n 行列 (2

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

int determinant(int mat[20][20],int N);
int Determinant(int mat[20][20],int N)
{
int X=0,Det=0;
    if (N==2){
              Det=mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];
              return(Det);
             }
    else {
             for(X = 0; X < N; X++){
             Det *= mat[X][X];
          }
         }
return (Det);
}

int main()
{
    int n=0,i=1;
    printf("Please enter a number (n) between 2 and 4 to determine the dimensions of an (nxn) matrix \n");
    scanf("%d",&n);

        while(n<2||n>4){
            printf("The value %d does not lie within the required range of 2-4, please re-enter \n",n);
            scanf("%d",&n);
            i++;
            if (i>=3){
                      printf("\nYou have entered invalid values 3 times. The programme has been terminated");
                      exit(0);
                     }
           }

    printf("\n(%dx%d) matrix selected\n",n,n);
    int matrix[n][n];


                int f,g=0;
                printf("Please enter matrix elements\n");
                    for(f=0;f<n;f++){

                        for(g=0;g<n;g++){
                            printf("Element[%d][%d] = ",f,g);
                            scanf("%d",&matrix[f][g]);
                        }
                    }

      int k,j;
      printf("\nThe matrix is\n");
      for(k=0;k<n;k++){
          printf("\n");
          for(j=0;j<n;j++){
              printf("%d\t",matrix[k][j]);
              }
           }



        int temp=0,c=0,determinant=0;
        float factor=0;
        k=0;
    /* Transform matrix into upper triangular */
    for(i = 0; i < n - 1; i++)
    {
        /* Elementary Row Operation I */
        if(matrix[i][i] == 0)
        {
            for(k = i; k < n; k++)
            {
                if(matrix[k][i] != 0)
                {
                    for(j = 0; j < n; j++)
                    {
                        temp = matrix[i][j];
                        matrix[i][j] = matrix[k][j];
                        matrix[k][j] = temp;
                    }
                k = n;
                }
            }
            c++;
        }
        /* Elementary Row Operation III */
        if(matrix[i][i] != 0)
        {
            for(k = i + 1; k < n; k++)
            {
                factor = -1.0 * matrix[k][i] /  matrix[i][i];
                for(j = i; j < n; j++)
                {
                    matrix[k][j] = matrix[k][j] + (factor * matrix[i][j]);
                }
            }
        }
    }



      printf("\nThe Upper triangular is\n");
      for(k=0;k<n;k++){
          printf("\n");
          for(j=0;j<n;j++){
              printf("%d\t",matrix[k][j]);
              }
           }

determinant=Determinant(matrix,n);
printf("Determinant = %d",determinant);


    /*
           */

    return 0;
}
4

1 に答える 1