Esercizio matrice:media dell' intorno di un elemento !!

di il
1 risposte

Esercizio matrice:media dell' intorno di un elemento !!

Salve a tutti!!!ho bisogno del vostro aiuto!!sono alle prese con questo maledetto esercizo di fondamenti di informaticaaaaa, "la mia materia preferita"..e non riesco a trovare una strada da seguire per svolgerlo!!!Qualcuno può darmi una mano???una direttiva,un input???perfavore..


Scrivere un metodo FILTROMEDIA che riceve in input una matrice di interi M e restituisce una matrice N di interi delle stesse dimensioni costruita come segue: l'elemento in posizione (i,j) dI N viene calcolato come la media degli elementi che costituiscono l'elemento (i,j) della matrice M. per esempio l'elemento N[0][0] sarà dato dalla media degli elementi che fanno da contorno all'elemento M[0][0] e dunque ==> N[0][0]=(M[0][1]+M[1][1]+M[1][0])/3


               100  100  48   48
               215  100  56   56
M=             100  48  215   56
               215  215  56   56

              138   104   72  53
              90    110   84  85
N=            159   146   80  88 
              121   127  204  109

N[0][0]=(100+100+215)/3=138
N[1][1]=(100+48+215+56+48+100+100+215)/8=110

Spero di essere stato chiaro;)!!!

1 Risposte

  • Re: Esercizio matrice:media dell' intorno di un elemento !!

    Ciao provo ad aiutarti dandoti una possibile soluzione in Java. Prima di tutto facciamo una semplice formalizzazione :

    abbiamo una matrice in input: M(axb)

    M[i,j] sia un suo elemento sulla riga generica i e colonna j

    definiamo un intorno di M[i,j]

    I(i,j)={M[i-1,j-1] ,M[i-1,j] ,M[i-1,j+1],M[i,j-1],M[i,j+1],M[i+1,j-1],M[,i+1,j],M[i+1,j+1]}

    con i vincoli che gli elementi che contengono gli indici i-1 , i+1 , j-1 e j+1 appartengono all'intorno solo se gli indici non violano le dimensioni di riga e colonna.

    Possiamo realizzare un programma Java con il metodo richiesto facendo una iterazione della matrice per righe e colonne che ricava l'intorno di un elemento ed esegue la media:

    public class Mat {


    public static void main(String[] args) {
    int[][] m ={ {100, 100 , 48 , 48},
    {215 , 100 , 56 , 56},
    {100 , 48 , 215 , 56},
    {215 , 215, 56, 56}
    };

    int[][] n = filtroMedia(m);

    for( int i=0 ; i<n.length; i++){
    for(int j=0 ; j<n.length;j++){
    System.out.print("["+n[j]+"]");
    }
    System.out.println();
    }
    }

    public static int[][] filtroMedia(int[][] m) {
    int[][] n;

    if (m == null || m.length == 0) {
    throw new IllegalArgumentException("Argomento null");
    } else {

    n = new int[m.length][m[0].length];

    for (int i = 0; i < m.length; i++) {
    for (int j = 0; j < m.length; j++) {

    int somma = 0;

    int dimensioneIntorno = 0;


    if (i - 1 >= 0 ) {
    somma = somma + m[i - 1][j];
    dimensioneIntorno = dimensioneIntorno + 1;
    if ( j - 1 >=0 ) {
    somma = somma + m[i - 1][j-1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }
    if ( j + 1 < m.length) {
    somma = somma + m[i - 1][j+1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }

    }


    if (i + 1 < m.length) {
    somma = somma + m[i + 1][j];
    dimensioneIntorno = dimensioneIntorno + 1;
    if (j-1 >=0) {
    somma = somma + m[i + 1][j-1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }

    if (j + 1 < m.length) {
    somma = somma + m[i + 1][j+1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }
    }


    if (j - 1 >= 0 ) {
    somma = somma + m[j - 1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }


    if ( j + 1 < m.length) {
    somma = somma + m[i][j + 1];
    dimensioneIntorno = dimensioneIntorno + 1;
    }


    n[i][j] = somma / dimensioneIntorno;

    }

    }

    }

    return n;
    }
    }

    Sperando di aver capito e non commesso errori spero di esserti stato di aiuto.
Devi accedere o registrarti per scrivere nel forum
1 risposte