codice:
#include <stdio.h>
# define nmax 10
# define mmax 10
void visualizza(int[][mmax],int,int);
void carica(int[][mmax],int *,int *);
void calcola_somma(int[][mmax],int,int,int [][mmax]);
void confronto(int[][mmax],int[][mmax],int,int);
int main(){
int v[nmax][mmax],n,m,s,p[nmax][mmax];
carica(v,&n,&m);
printf("\n\n\nLa matrice inserita risulta:");
visualizza(v,n,m);
calcola_somma(v,n,m,p);
confronto(v,p,n,m);
getchar();
getchar();
}
void carica(int v[][mmax],int *n,int *m){ //caricamento matrice
int i,j;
do{
printf("\ninserisci numero righe: ");
scanf("%d",n);
}while(*n<=0 || *n>nmax);
do{
printf("\ninserisci numero colonne: ");
scanf("%d",m);
}while(*m<=0 || *m>mmax);
for(i=0;i<*n;i++)
for(j=0;j<*m;j++){
printf("\ninserisci matrice[%d][%d]: ",i,j);
scanf("%d",&v[i][j]);}
}
void visualizza(int v[][mmax],int n,int m){ //visualizzazione matrice
int i,j;
printf("\n\n");
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<m;j++)
printf("%4d",v[i][j]);
}
}
void confronto(int v[][mmax], int p[][mmax],int n,int m){
int i,j,k=0; //confronta le due matrici
for(i=0;i<n;i++){ //e sostituisce dove necessario
for(j=0;j<m;j++)
if((p[i][j])%(v[i][j])==0){
k++;
printf("\n\n\nMatrice A prima della %d^ sostituzione:",k);
visualizza(v,n,m); //matrice prima della sostituzione
printf("\n\n");
v[i][j]=(p[i][j])/(v[i][j]);
printf("\nMatrice A dopo la %d^ sostituzione:",k);
visualizza(v,n,m);}} //matrice dopo la sostituzione
confronto(v,p,n,m); //qui la ricorsione continua all'infinito! (***)
}
void calcola_somma(int v[][mmax],int n,int m,int p[][mmax]){
int i,j,s; //calcola le somme delle adiacenze
for(i=0;i<n;i++){ //e le memorizza nella matrice p
for(j=0;j<m;j++){
if(i==0 && j==0){ //primo elemento prima riga
s=v[i+1][j+1]+v[i][j+1]+v[i+1][j];
p[i][j]=s;}
else
if(i==0 && j==m-1){ //ultimo elemento prima riga
s=v[i][j-1]+v[i+1][j-1]+v[i+1][j];
p[i][j]=s;}
else
if(i==n-1 && j==0){ //primo elemento ultima riga
s=v[i-1][j]+v[i-1][j+1]+v[i][j+1];
p[i][j]=s;}
else
if(i==n-1 && j==m-1){ //ultimo elemento ultima riga
s=v[i-1][j-1]+v[i][j-1]+v[i-1][j];
p[i][j]=s;}
else
if(j==0 && 0<i<n-1){ //elementi centrali prima colonna
s=v[i-1][j]+v[i-1][j+1]+v[i][j+1]+v[i+1][j+1]+v[i+1][j];
p[i][j]=s;}
else
if(j==m-1 && 0<i<n-1){ //elementi centrali ultima colonna
s=v[i-1][j]+v[i-1][j-1]+v[i][j-1]+v[i+1][j-1]+v[i+1][j];
p[i][j]=s;}
else
if(i==0 && 0<j<m-1){ //elementi centrali prima riga
s=v[i][j-1]+v[i+1][j-1]+v[i+1][j]+v[i+1][j+1]+v[i][j+1];
p[i][j]=s;}
else
if(i==n-1 && 0<j<m-1){ //elementi centrali ultima riga
s=v[i][j+1]+v[i-1][j+1]+v[i-1][j]+v[i-1][j-1]+v[i][j-1];
p[i][j]=s;}
else //generico elemento interno (non sul bordo)
{s=v[i][j+1]+v[i+1][j+1]+v[i+1][j]+v[i+1][j-1]+v[i][j-1]+v[i-1][j-1]+v[i-1][j]+v[i-1][j+1];
p[i][j]=s;}}}
}