Calcola il determinante della matrice

di Anonimizzato27293 il
3 risposte
Buongiorno devo realizzare questo programma che calcola il determinante di una matrice ottenuta generando numeri casuali (e altre cosette)

il problema sta nel fatto che non riesco a fargli calcolare il determinante, qualcuno può dirmi dove sbaglio?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{
    int a[3][3], b[3], c[3][6], i, j, X, seed, Y, z, deta;
    seed = time(NULL);
    srand(seed);

    for( i=0; i<3; i++ ) {          /* Genera numeri casuali tra [0,10] e li mette in b[i][j] */
       X = rand()%11;
       b[i] = X;
    }
    
    for( i=0; i<3; i++ ) {       
       printf("%d ",b[i]);       /* Stampa b[i][j] */
       printf("\n"); 
    }
    
    for( i=0; i<3; i++ ) {
        for ( j=0; j<3; j++ ) {      /* Genera numeri casuali tra [-9,9] e li mette in a[i][j] */
            Y = rand()%19 - 9;       /* copia a[i][j] in c[i][j+3] */
            a[i][j] = Y;
            c[i][j] = a[i][j];
            c[i][j+3] = a[i][j];
        }
    }
    
    for( i=0; i<3; i++ ) {
       printf("\n");
       for ( j=0; j<3; j++ ) {       /* Stampa a[i][j] */
           printf("%d ",a[i][j]);
       }
    }
    printf("\n");
    
    for( i=0; i<3; i++ ) {
       printf("\n");
       for ( j=0; j<6; j++ ) {       /* Stampa c[i][j] */
           printf("%d ",c[i][j]);
       }
    }
    printf("\n");
    
    printf("\nIl sistema di equazioni da risolvere e': \n");   /* Scrive il sistema di equazioni da risolvere eliminando il coefficiente se 
                                                               a[i][j] = 1 e eliminado anche l'incognita se vale 0 */ 
    for( i=0; i<3; i++) { 
        
        for( j=0; j<3; j++ ) {
            
            
            if( a[i][j] != 0 ) {
                
              if ( a[i][j] > 0 )
                 printf("+");
                
              if ( a[i][j] != 1 ) {
                 printf("%dx_%d",a[i][j],j+1);
              }
              else {
                 printf("x_%d",j+1);
              }
            
            }  
            else {
              printf("  ");  
            } 
               
        
        }
        printf("=%d",b[i]); 
        printf("\n");
    }
    printf("\n");
    
    
    int diag1 = 0;
    for( z=0; z<=2; z++) {
        i = 0;
        for( j=0; j<=2; j++) {
            diag1 = c[i][j] * c[i+1][j+1] * c[i+2][j+2] + diag1;
        }
    }
    
    printf("diag1 vale %d\n",diag1);
    
    int diag2 = 0;
    for( z=0; z<=2; z++) {
        i = 2;
        for( j=0; j<=2; j++) {
            diag1 = c[i][j] * c[i-1][j+1] * c[i-2][j+2] + diag2;
        }
    }
    printf("diag2 vale %d\n",diag2);
    
    deta = diag1 - diag2;
    printf("\nIl determinante della matrice A vale %d\n", deta);
        
    return 0;
}

3 Risposte

  • Tutto sto delirio per una matrice 3x3?

    L'inizializzazione la fai così
    
    int main()
    {
        int a[3][3], i, j, deta = 0;
       
        srand(time(NULL));
    
        for( i=0; i<3; i++ ) 
            for ( j=0; j<3; j++ ) 
                a[i][j]= rand()%19 - 9;   
    
    Poi il determinante lo calcoli secondo la regola di Sarrus
    https://it.m.wikipedia.org/wiki/Regola_di_Sarru
    
     deta += a[0][0]*a[1][1]*a[2][2];
     deta += ...
     deta += ...
     deta -= a[0][2]*a[1][1]*a[2][0];
     deta -= ...
     deta -= ...
    
    completa tu le 4 righe che mancano
  • Alla fine ho risolto cosi:
    
    int diag1 = 0;
        for( j=0; j<3; j++) {
            diag1 = c[0][j] * c[1][j+1] * c[2][j+2] + diag1;     /* Calcola la somma dei prodotti degli elementi sulle diagonali principali
                                                                   di c[i][j] */
        }
        
        int diag2 = 0;
           for( j=1; j<4; j++) {
            diag2 = c[2][j] * c[1][j+1] * c[0][j+2] + diag2;    /* Calcola la somma dei prodotti degli elementi sulle diagonali secondarie
                                                                   di c[i][j] */
        }
            
        deta = diag1 - diag2;    
        printf("\nIl determinante di A vale %d\n",deta);
    
Devi accedere o registrarti per scrivere nel forum
3 risposte