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

lorenzcollixx
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.. :-D


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;)!!!

Risposte
lorenzcollixx
ma qualcuno mi aiuta???? :-D

vict85
Si capisce dal contesto ma dovresti fare un po’ più attenzione perché, per esempio, il significato di “costituiscono l'elemento (i,j)” non è tra i più chiari.

In generale, basta scorrere tutti gli elementi della matrice, contare gli elementi contigui e calcolare la media. In alternativa, se vuoi evitare le varie condizioni, puoi anche calcolarti interno, bordi e vertici in ‘cicli’ diversi. In che linguaggio devi scriverlo? A cosa ti riferisci con la domanda “una direttiva, un input?”?


[edit] Attenzione! Il regolamento prevede di dover aspettare almeno 24 ore prima di richiamare l'attenzione sulla tua discussione. Facendolo rischi ‘sanzioni’ da parte dei moderatori.

apatriarca
L'idea principale è quella di fare due cicli, uno per le righe e l'altro per le colonne. Le righe dovranno andare da max(0, i-1) a min(NUMERO_RIGHE-1, i+1) mentre le colonne da max(0, j-1) a min(NUMERO_COLONNE, j+1). Dopodiché dovrai avere un contatore che conta il numero di elementi considerati nei due cicli (ricordati che devi anche escludere il valore in posizione (i,j)) e un accumulatore per calcolare la somma. Al di fuori del ciclo dovrai quindi dividere la somma per il numero di elementi e scriverlo nella nuova matrice.

lorenzcollixx
Grazie mille apatriarca disponibilissimo come sempre!!!! :wink:
In che linguaggio devi scriverlo? A cosa ti riferisci con la domanda “una direttiva, un input?”?

devo scriverlo in linguaggio java..per input intendo un idea per svolgere il programma..

lorenzcollixx
Scusa apatriarca ma cosa intenti per max e min.. devo scandire due volte la matrice???intendi questo??==>
i=indice di riga
j=indice di colonna

primo ciclo:
for (int i=0;i<m.length;i++)
for (int j=0;j<m[0].length;j++)

secondo ciclo:
for (int i=m.length-1;i>0;i--)
for (int j=m[0].length;j>0;j--)



??????

apatriarca
No, in tutto ci saranno 4 cicli annidati. Devi eseguire quei due cicli per ogni elemento della prima matrice. max e min hanno l'usuale significato matematica (il massimo e il minimo tra quei due valori).

lorenzcollixx
ok grazie;)!!ma ci rinuncio..spero che non capiti un esercizio del genere all esame!!!xkè mi alzo e mi ritiro!!!
troppo complicato!!!(ovviamente parlo per me!!!)

apatriarca
Coraggio.. non rinunciare così.. Prova con un esercizio un po' più semplice: la media dell'elemento successivo e precedente nella stessa riga.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.