/* File: matdiago.c */ /* Time-stamp: "2002-05-14 12:39:39 calvanes" */ /* Scopo: uso di array multidimensionali */ /* Legge una matrice quadrata e verifica se e' una matrice diagonale (mat[i][j] = 0 se i != j). */ #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 diagonale(int m[DIM][DIM]) { int i, j; int diag; /* booleana: indica se la matrice e` diagonale */ diag = 1; /* assumiamo che sia diagonale */ for (i = 0; i < DIM; i++) for (j = 0; j < DIM; j++) if (i != j && m[i][j] != 0) /* ho trovato un elemento diverso da 0 */ diag = 0; /* fuori della diagonale */ /* NON ci deve essere il ramo else */ return diag; /* Per anticipare l'uscita dai cicli durante la verifica si puo` modificare il codice di sopra come segue: diag = 1; for (i = 0; diag && i < DIM; i++) for (j = 0; diag && j < DIM; j++) if (i != j && m[i][j] != 0) diag = 0; Oppure usando l'istruzione break: diag = 1; for (i = 0; diag && i < DIM; i++) for (j = 0; j < DIM; j++) if (i != j && m[i][j] != 0) { diag = 0; break; } */ } int main(void) { int mat[DIM][DIM]; leggiMatrice(mat); printf("La matrice\n"); stampaMatrice(mat); if (diagonale(mat)) printf("e` diagonale!\n"); else printf("non e` diagonale!\n"); return 0; }