Buon giorno a tutti, mi sono imbattuto nel seguente problema:
e nella seguente soluzione:codice:Media aritmetica tra elementi adiacenti in una matrice ------------------------------------------------------ Scrivere un programma che: 1. legga da terminale una matrice quadrata di numeri reali mat_in di dimensione predefinita MAX 2. calcoli una seconda matrice (mat_med) in cui ciascun elemento (i, j) è un numero reale uguale alla media aritmetica dei valori presenti nella prima matrice nelle otto caselle adiacenti all'elemento (i, j). Per gli elementi sui "bordi" della matrice la media va fatta utilizzando solo gli elementi adiacenti che appartengono alla matrice. La soluzione utilizzi due funzioni: 1. media: per il calcolo del valore medio degli elementi adiacenti a ciascun elemento della matrice 2. dentro: richiamata dalla funzione media per verificare se un certo elemento è interno alla matrice oppure no. Esempio ------- Se la matrice di ingresso è la seguente: 1 2 3 4 5 6 7 8 9 la matrice prodotta sarà: 3.66 3.80 4.33 4.60 5.00 5.40 5.66 6.20 6.33
ora vi chiederete di che altro hai bisogno?codice:#include <stdio.h> #define MAX 3 #define TRUE 1 #define FALSE 0 int dentro(int x, int y); float media(int x, int y); float mat[MAX][MAX],mat_med[MAX][MAX]; main() { int x,y; for (x=0; x<MAX; x++){ for (y=0; y<MAX; y++){ printf("mat[%d][%d] = ",x+1,y+1); scanf("%f",&mat[x][y]); } } printf("\n\n"); //Calcolo della media for (x=0; x<MAX; x++) for (y=0; y<MAX; y++) mat_med[x][y] = media(x,y); // visualizza risultato for (x=0; x<MAX; x++) { for (y=0; y<MAX; y++) printf ("%6.2f", mat_med[x][y]); printf ("\n"); } getch(); } int dentro(int x, int y) { if (x<0 || x>=MAX) return FALSE; if (y<0 || y>=MAX) return FALSE; else return TRUE; } float media(int x, int y) { int i, j, conta=0; float somma=0; for (i=-1; i<2; i++) for (j=-1; j<2; j++) /* scandisce gli elementi interni alla matrice tranne l'elemento stesso */ if ( ((i!=0)||(j!=0)) && dentro (x+i, y+j) == TRUE ) { conta++; somma += mat[x+i][y+j]; } return (somma/conta); }
Non sono riuscito a capire l'ultima funzione cioè dove calcola la media che stratagemma è stato utilizzato perchè i contatori partono da -1? e così via..perchè è stato risolto in questo modo? e perchè sono così scemo da non arrivarci
grazie![]()
![]()

perchè è stato risolto in questo modo? e perchè sono così scemo da non arrivarci
Rispondi quotando