/* calcola la somma degli elementi piu' grandi di ogni riga */ int somma_max_riga(int M[][NUM_COLONNE]) { int i,j; int max; int totale=0; for (i=0; i max) max=M[i][j]; } totale+=max; } return totale; } /* calcola la somma degli elementi piu' piccoli di ogni colonna */ int somma_min_colonne(int M[][NUM_COLONNE]) { int i,j; int min; int totale=0; for (j=0; jzeri) zeri=temp; temp=0; flag=0; } } } return ((temp>zeri)?temp:zeri); } /*calcola la sequenza piu' lunga di zeri consecutivi della matrice scorrendola per righe da destra a sinistra, dal basso in alto*/ int zeri_matrice2(int M[][NUM_COLONNE]) { int i,j; int zeri=0; int temp=0; int flag=0; for (i=NUM_RIGHE-1; i>=0; i--) { for (j=NUM_COLONNE-1; j>=0; j--) { if ((M[i][j]==0) && (!flag)) { temp++; flag=1; } else if ((M[i][j]==0) && (flag==1)) { temp++; } /* le due righe sopra possono essere compattate*/ else if ((M[i][j]!=0) && (flag==1)) { if (temp>zeri) zeri=temp; temp=0; flag=0; } } } return ((temp>zeri)?temp:zeri); } /* stampa gli elementi della matrice a serpentina dal basso in alto*/ void stampa_matrice_serpentina(int M[][NUM_COLONNE]) { int i,j; for (i=NUM_RIGHE-1; i>=0; i--) { if ((NUM_RIGHE-1-i)%2==0) { for (j=NUM_COLONNE-1; j>=0; j--) printf("%d",M[i][j]); } else { for (j=0; jM[i][j]) return 0; } for (c=0; cM[i][j]) return 0; } return 1; } /* dato un elemento i e j la funzione verifica se tale elemento e' il piu' grande tra gli elementi delle diagonali che passano per lui*/ int massimo_diagonale (int M[][NUM_COLONNE],int i,int j) { int r,c; r=i+1; c=j+1; while ((rM[i][j]) { return 0; } else { r++; c++; } } r=i-1; c=j-1; while ((r>0) && (c>0)) { if (M[r][c]>M[i][j]) { return 0; } else { r--; c--; } } r=i+1; c=j-1; while ((r0)) { if (M[r][c]>M[i][j]) { return 0; } else { r++; c--; } } r=i-1; c=j+1; while ((r>0) && (cM[i][j]) { return 0; } else { r--; c++; } } return 1; }