si ho già corretto, grazie mille..


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;}}}
}

l'unico problema ora è trovare una condizione che faccia terminare la ricorsione della funzione confronto in questo punto (***)

se qualcuno mi può aiutare ringrazio anticipatamente tutti..