نمایش نتایج 1 تا 6 از 6

نام تاپیک: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

  1. #1

    برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    امیدوارم که این برنامه نیاز شما را برآورده نماید.
    جعفر فخرطه

  2. #2

    نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    #include<stdio.h>
    #include<CONIO.H>
    #include<MATH.H>
    typedef struct
    {
    double *p;
    int num;
    }det_mat;
    /////////////////////////////////////////////////////////
    det_mat *AllocateMat(int i)
    {
    det_mat *X;
    X=new det_mat;
    X->p=new double [i];
    return X;
    }

    void FreeMat(det_mat *X)
    {
    delete X->p;
    delete X;
    }

    det_mat *DeleteColRow(det_mat *M ,int i)
    {
    det_mat *X=AllocateMat((M->num-1)*(M->num-1));

    int tt=0,a,b=0;

    // !!!!!!!!!!!!!!!! M->p+=M->num;
    for(a=0;a<M->num*(M->num-1);a++)
    {
    tt++;
    if (tt!=i)
    {
    X->p[b] = M->p[a+M->num];
    b++;
    }
    if (tt == M->num) tt=0;
    }
    X->num=M->num-1;
    return(X);
    }
    //////////////////////////////////////////////////////////
    double determinan(det_mat *f)
    {
    double s=0;
    if (f->num==1) return(*(f->p));
    else

    for (int i=1; i<=f->num;i++)
    {
    det_mat *deli=DeleteColRow(f,i);
    double d = determinan(deli);
    FreeMat(deli);
    s += pow(-1,i+1) * f->p[i-1] * d;
    }

    return s;
    }

    //////////////////////////////////////////////////////////
    void main(void)
    {
    double p[16]={2,1,4
    ,5,1,2
    ,0,5,2};

    det_mat *D = new det_mat;
    D->p=p;
    D->num=3;

    printf("\n\n determinan [ matris ] = %4lf \n" ,determinan(D));

    delete D;
    getch();
    }

  3. #3

    نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    برنامه دترمینان ماتریس به روش بازگشتی


    #include<stdio.h>
    #include<CONIO.H>
    #include<MATH.H>
    typedef struct
    {
    double *p;
    int num;
    }det_mat;
    /////////////////////////////////////////////////////////
    det_mat *AllocateMat(int i)
    {
    det_mat *X;
    X=new det_mat;
    X->p=new double [i];
    return X;
    }

    void FreeMat(det_mat *X)
    {
    delete X->p;
    delete X;
    }

    det_mat *DeleteColRow(det_mat *M ,int i)
    {
    det_mat *X=AllocateMat((M->num-1)*(M->num-1));

    int tt=0,a,b=0;

    // !!!!!!!!!!!!!!!! M->p+=M->num;
    for(a=0;a<M->num*(M->num-1);a++)
    {
    tt++;
    if (tt!=i)
    {
    X->p[b] = M->p[a+M->num];
    b++;
    }
    if (tt == M->num) tt=0;
    }
    X->num=M->num-1;
    return(X);
    }
    //////////////////////////////////////////////////////////
    double determinan(det_mat *f)
    {
    double s=0;
    if (f->num==1) return(*(f->p));
    else

    for (int i=1; i<=f->num;i++)
    {
    det_mat *deli=DeleteColRow(f,i);
    double d = determinan(deli);
    FreeMat(deli);
    s += pow(-1,i+1) * f->p[i-1] * d;
    }

    return s;
    }

    //////////////////////////////////////////////////////////
    void main(void)
    {
    double p[16]={2,1,4
    ,5,1,2
    ,0,5,2};

    det_mat *D = new det_mat;
    D->p=p;
    D->num=3;

    printf("\n\n determinan [ matris ] = %4lf \n" ,determinan(D));

    delete D;
    getch();
    }

  4. #4

    نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    چند قطعه کد و برنامه دیگر برای محاسبه دترمینان ماتریس براتون میذارم.امیدوارم که به دردتون بخوره.
    سید جعفر فخرطه

  5. #5

    نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    محاسبه دترمینان ماتریس با اشاره گر n*n


    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    // A square matrix struct
    typedef struct

    {
    int order;
    int **array;

    } SQRMATRIX;

    // Function declarations
    int CreateMatrix( SQRMATRIX *p, int order );
    void DisplayMatrix( SQRMATRIX *p );
    void InputMatrix( SQRMATRIX *p );
    int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col );
    int CalcDeterminant( SQRMATRIX *p );
    void DestroyMatrix( SQRMATRIX *p );
    // main( )
    int main( )


    {
    SQRMATRIX p;
    int order;

    printf("Enter order of matrix: ");
    scanf("%d", &order );

    if( !CreateMatrix( &p, order ))


    {
    printf("Matrix couldn't be created.");
    return 0;
    }

    printf("Matrix created.\n\n");
    InputMatrix( &p );

    printf("\nThe matrix is:\n");
    DisplayMatrix( &p );
    printf("\nThe determinant of the matrix is: %d", CalcDeterminant( &p ));

    getch( );
    return 0;
    }

    // Create matrix of specified order
    int CreateMatrix( SQRMATRIX *p, int order )


    {
    int i;

    if( order < 1 )
    return 0;

    p->order = order;
    p->array = (int**) malloc( order * sizeof( int* )); // Allocate space for each row

    if( !p->array )
    return 0;

    for( i=0; i < order; i++ )


    {
    p->array = (int*) malloc( order* sizeof( int )); // Allocate space for each column
    if( !p->array )
    return 0;
    }
    return 1;
    }


    // Print matrix in proper format
    void DisplayMatrix( SQRMATRIX *p )


    {
    int i,j;

    if( p->order < 1 )
    return;

    for( i = 0; i < p->order; i++ )


    {
    for( j = 0; j < p->order; j++ )
    printf("%5d ", p->array[j] );

    printf("\n");
    }
    }

    // Input matrix from user
    void InputMatrix( SQRMATRIX *p )


    {
    int i,j;

    for( i = 0; i < p->order; i++ )
    for( j = 0; j < p->order; j++ )


    {
    printf("Enter element at ( %d, %dSad ", i+1, j+1 );
    scanf("%d", &p->array[j] );
    }
    }


    /* Calculate the 'minor' of the given matrix at given position.
    The minor is the matrix formed by deleting the specified row
    and column from the matrix.
    */
    int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col )


    {
    int i,j,a,b;
    if( p->order <= 1 )
    return 0;

    if( row >= p->order || col >= p->order )
    return 0;

    if( !CreateMatrix( minor, p->order-1 ))
    return 0;

    a = b = 0;

    for( i = 0; i < p->order; i++ )


    {
    if( i != row )


    {
    b = 0;
    for( j = 0; j < p->order; j++ )


    {
    if( j != col )


    {
    minor->array[a] = p->array[j];
    b++; // Increase column-count of minor
    }
    }
    a++; // Increase row-count of minor
    }
    }

    return 1;
    }

    /* Calculate the determinant recursively.
    The recursive definition is :
    det( m ) = Summation( i = 0 to order ) [ (-1)^i * m[0] * det( minor( m[0] ))]
    */
    int CalcDeterminant( SQRMATRIX *p )


    {
    int i, result = 0, temp;
    SQRMATRIX minor;
    if( p->order < 1 )


    {
    printf("CalcDeterminant( ) : Invalid matrix.");
    return 0;
    }

    // The 'stopping' condition
    if( p->order == 1 )
    return p->array[0][0];

    for( i = 0; i < p->order; i++ )


    {
    if( !CalcMinor( p, &minor, 0, i ))


    {
    printf("CalcDeterminant( ) : Memory allocation failed.");
    return 0;
    }

    result += ( pow( -1, i ) * p->array[0] * CalcDeterminant( &minor ));

    DestroyMatrix( &minor );
    }

    return result;
    }

    // Release allocated memory
    void DestroyMatrix( SQRMATRIX *p )


    {
    int i;

    if( p->order < 1 )
    return;

    for( i = 0; i < p->order; i++ )
    free( p->array ); // free each columns

    free( p->array ); // free each row
    p->order = 0;
    }

  6. #6

    نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی

    محاسبه دترمینان ماتریس


    #include&lt;conio.h>
    #include&lt;stdio.h>
    #include&lt;math.h>
    int main()
    {
    clrscr();
    int i,j,k=1,n,p;
    float m[50][50],a[50][50],b[50][50],h,det=1;
    printf("enter row and column of matrix:");
    scanf("%d%d",&amp;n,&amp;p);
    if(p!=n)
    printf("this matrix havenot the determinan!");
    else
    {
    printf("enter element of matrix:\n");
    for(i=1;i&lt;=n;++i)
    {
    printf("\n");
    for(j=1;j&lt;=n;++j)
    {
    printf("a[%d,%d]=",i,j);
    scanf("%f",&amp;a[i][j]);
    b[i][j]=a[i][j];
    if(i==n &amp;&amp;j==n)
    printf("\a\a");
    }
    }
    i=1;
    /*while(i&lt;=n)
    {
    if(a[i][1]==0)
    ++i;
    else
    break;
    }
    if(i-1==n)
    {
    printf("determinan of matrix(%d*%d)=%d\n",n,n,0);
    printf("matrix(%d*%d) is:",n,n);
    for(i=1;i&lt;=n;++i)
    {
    printf("\n");
    for(j=1;j&lt;=n;++j)
    printf("%4.2f ",b[i][j]);
    }
    getch();
    return 0;
    } */
    while(k&lt;=n-1)
    {
    for(i=k+1;i&lt;=n;++i)
    {
    if(abs(a[k][k])&lt;abs(a[i][k]))
    {
    for(j=1;j&lt;=n;++j)
    {
    h=a[k][j];
    a[k][j]=a[i][j];
    a[i][j]=h;
    }
    det=-1*det;
    break;
    }
    }
    for(i=k+1;i&lt;=n;++i)
    {
    if(a[k][k]!=0)
    m[i][k]=(float)(a[i][k]/a[k][k]);
    for(j=1;j&lt;=n;++j)
    a[i][j]=a[i][j]-m[i][k]*a[k][j];
    }
    ++k;
    }
    for(i=1;i&lt;=n;++i)
    det=det*a[i][i];
    printf("determinan of matrix (%d*%d)=%4.2f\n",n,n,det);
    printf("matrix(%d*%d) is:",n,n);
    for(i=1;i&lt;=n;++i)
    {
    printf("\n");
    for(j=1;j&lt;=n;++j)
    printf("%4.2f ",b[i][j]);
    }
    }
    getch();
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •