Matrici in C

di il
9 risposte

Matrici in C

Salve a tutti,
ho iniziato da poco a programmare in c, quindi il mio livello di programmazione è elementare.
Ho riscontrato il seguente problema:
ho scritto un programma il quale presa una matrice A, ne crea un'altra B contente per elementi la divisione intera degli elementi presenti in A, ad esempio:
A= 3 1 0
0 2 1
1 2 4
gli elementi della matrice B sono dati dall'operazione B[j]=-A[j]/A, con i diverso da j, mentre per i=j ho che B[j]=0, in questo modo dovrei avere:
B= 0 -1/3 0
0 0 -1/2
-1/4 -1/2 0
Il problema è che quando vado a compilare mi da come errore "Thread 1: EXC_ARITHMETIC (code=EXC_I386_DIV, subcode=0x0)" nella riga dell'operazione che ho scritto sopra e si interrompe il programma!
Dov'è che sbaglio?
Grazie in anticipo

9 Risposte

  • Re: Matrici in C

    Quando vai a compilare? O vuoi dire quando vai ad eseguire?

    In ogni caso, se non mostri il codice che hai scritto, guardiamo nella sfera di cristallo?
  • Re: Matrici in C

    Quando vado ad eseguire scusami!

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define MAX 3


    void crea_matrice(int A[MAX][MAX]){
    int i, j, n;
    printf("dammi la dimensione della matrice n: \n");
    scanf("%d",&n);
    for(i=0; i<n; i++){
    for(j=0; j<n; j++){
    printf("dammi un elemento: \n");
    scanf("%d",&A[j]);
    }
    }
    return;
    }



    void stampa_matrice(int A[MAX][MAX]) {
    int i, j;

    for (i=0; i<MAX; i++) {
    for (j=0; j<MAX; j++)
    printf("%d ", A[j]);
    printf("\n");
    }
    return;
    }

    void diagonale_dominante(int A[MAX][MAX]){
    int i,j,s,p;
    p=0;
    for(i=0; i<MAX; i++){
    s=0;
    for(j=0; j<MAX; j++){
    if(i!=j){
    s=s+A[j];
    }
    }
    if((unsigned)A>s){
    p=p+1;
    }
    }
    if(p==3){
    printf("La matrice è a diagonale dominante \n");
    }
    else {
    printf("La matrice non è a diagonale dominante \n");
    }

    return;
    }


    void matriceJ(int A[MAX][MAX]){
    int i,j;
    int B[MAX][MAX];
    for(i=0; i<MAX; i++){
    for(j=0; j<MAX; j++){
    if(i==j){
    B[j]=0;
    }
    else{
    B[j]=(-(A[j])/(A)); QUI MI DA L'ERRORE!!
    }
    printf("%d",B[i][j]);
    }
    }
    return;
    }



    int main (void){
    int A[MAX][MAX],B[MAX][MAX];
    crea_matrice(A);
    stampa_matrice(A);
    diagonale_dominante(A);
    matriceJ(B);
    stampa_matrice(B);
    return(0);
    }

    Te lo mando tutto perché forse c'è qualche errore anche nella parte precedente!
  • Re: Matrici in C

    Il codice va postato usando i tag CODE ...

    Comunque hai controllato se A, durante le divisioni, è uguale a zero ?
  • Re: Matrici in C

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define MAX 3
    
    
    void crea_matrice(int A[MAX][MAX]){
        int i, j, n;
        printf("dammi la dimensione della matrice n: \n");
        scanf("%d",&n);
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                printf("dammi un elemento: \n");
                scanf("%d",&A[i][j]);
            }
        }
        return;
    }
    
    
    
    void stampa_matrice(int A[MAX][MAX]) {
        int i, j;
        
        for (i=0; i<MAX; i++) {
            for (j=0; j<MAX; j++)
                printf("%d ", A[i][j]);
            printf("\n");
        }
        return;
    }
    
    void diagonale_dominante(int A[MAX][MAX]){
        int i,j,s,p;
        p=0;
        for(i=0; i<MAX; i++){
            s=0;
            for(j=0; j<MAX; j++){
                if(i!=j){
                    s=s+A[i][j];
                }
            }
            if((unsigned)A[i][i]>s){
                p=p+1;
            }
        }
        if(p==3){
            printf("La matrice è a diagonale dominante \n");
        }
        else {
            printf("La matrice non è a diagonale dominante \n");
        }
        
        return;
    }
    
    
    void matriceJ(int A[MAX][MAX]){
        int i,j;
        int B[MAX][MAX];
        for(i=0; i<MAX; i++){
            for(j=0; j<MAX; j++){
                if(i==j){
                    B[i][j]=0;
                }
                else{
                    B[i][j]=(-(A[i][j])/(A[i][i]));
                }
                printf("%d",B[i][j]);
            }
        }
        return;
    }
    
    
    
    int main (void){
        int A[MAX][MAX],B[MAX][MAX];
        crea_matrice(A);
        stampa_matrice(A);
        diagonale_dominante(A);
        matriceJ(B);
        stampa_matrice(B);
        return(0);
    }
    
  • Re: Matrici in C

    oregon ha scritto:


    Il codice va postato usando i tag CODE ...

    Comunque hai controllato se A, durante le divisioni, è uguale a zero ?


    Si si, creo io la matrice proprio per questo motivo
  • Re: Matrici in C

    Non ho capito che intendi con la tua risposta
  • Re: Matrici in C

    oregon ha scritto:


    Non ho capito che intendi con la tua risposta
    A non può essere uguale a zero perché creo io la matrice quindi scelgo gli elementi e li inserisco manualmente
  • Re: Matrici in C

    Fai un controllo specifico e visualizza A, mi sembra proprio una divisione per zero.
  • Re: Matrici in C

    Thread chiuso per violazione della regola sul cross-posting.
Devi accedere o registrarti per scrivere nel forum
9 risposte