/* File: matsimm.c */ /* Time-stamp: "2002-04-16 15:10:36 calvanes" */ /* Scopo: uso di array multidimensionali */ /* Legge una matrice quadrata e verifica se e' una matrice simmetrica (mat[i][j] = mat[j][i]). */ #include <stdio.h> #define DIM 3 void leggiMatrice(int m[DIM][DIM]) { int i, j; printf("Inserire gli elementi di una matrice di interi %dx%d\n", DIM, DIM); for (i = 0; i < DIM; i++) for (j = 0; j < DIM; j++) scanf("%d", &m[i][j]); } void stampaMatrice(int m[DIM][DIM]) { int i, j; for (i = 0; i < DIM; i++) { for (j = 0; j < DIM; j++) printf("%5d", m[i][j]); printf("\n"); } } int simmetrica(int m[DIM][DIM]) { int i, j; int simm; /* booleana: indica se la matrice e` simmetrica */ simm = 1; /* assumiamo che sia simmetrica */ for (i = 0; i < DIM; i++) for (j = i+1; j < DIM; j++) if (m[i][j] != m[j][i]) /* ho trovato una coppia di elementi */ simm = 0; /* che viola la simmetria */ /* NON ci deve essere il ramo else */ return simm; /* Per anticipare l'uscita dai cicli durante la verifica si puo` modificare il codice si sopra come segue: simm = 1; for (i = 0; simm && i < DIM; i++) for (j = 0; simm && j < DIM; j++) if (m[i][j] != m[j][i]) simm = 0; Oppure usando l'istruzione break: simm = 1; for (i = 0; simm && i < DIM; i++) for (j = 0; j < DIM; j++) if (m[i][j] != m[j][i]) { simm = 0; break; } */ } int main(void) { int mat[DIM][DIM]; leggiMatrice(mat); printf("La matrice\n"); stampaMatrice(mat); if (simmetrica(mat)) printf("e` simmetrica!\n"); else printf("non e` simmetrica!\n"); return 0; }