PDA

View Full Version : Medie Elementi array 2D


clikkami
12-01-2007, 20:34
Algoritmo per il calcolo dell’array 2D delle medie di un array 2D. L’algoritmo riceve in input un array 2D quadrato A, mxn, e genera in output un array 2D quadrato A_diffuso, dello stesso size di A. L’elemento i,j di A_diffuso è la media dei quattro elementi vicini dell’elemento i,j di A (ovvero quello sopra, quello sotto, quello a sinistra e quello a destra). Fare attenzione al caso in cui l’elemento i,j si trova sul bordo dell’array (in tal caso gli elementi vicini sono tre oppure due). Nei test (almeno 4) usare array 2D di size 8x8, 10x10, 15x15, 20x20. Il main genera a caso gli elementi dell’array di input, che devono essere numeri float nell’intervallo [-100,100]): si ricorda che, se x_casuale è dichiarata di tipo float, allora l’istruzione
x_casuale=-100.0F+200.0F*(float)rand()/(float)MAX_RAND;
genera un numero casuale di tipo float (distribuzione uniforme) nell’intervallo [-100,100].

io ho provato a farlo in questo modo; riesco a generare l'array di numeri casuali di tipo float, ma poi nn so come devo proseguire, perchè così c'è qualcosa che nn va!!!

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void main ()
{
int i=0,j=0,nx=0,ny=0;
float x_casuale;
float a[8][8];
float a_diffuso[8][8];

srand(time(NULL));
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
x_casuale=-100.0F+200.0F*(float)rand()/(float)RAND_MAX;
a[i][j]=x_casuale;
}
}

for (i=0;i<8;i++)
{
for (j=0;j<8;j++)

printf(" %.2f ",a[i][j]);

printf("\n");
}

do a_diffuso[0][0]=(a[1][0]+a[0][1])/2;
while (a[i][j]==a[0][0]);
do a_diffuso[0][7]=(a[0][6]+a[1][7])/2;
while (a[i][j]==a[0][7]);
do a_diffuso[7][0]=(a[6][0]+a[7][1])/2;
while (a[i][j]==a[7][0]);
do a_diffuso[7][7]=(a[6][7]+a[7][6])/2;
while (a[i][j]==a[7][7]);


for (i=1;i<7;i++)
{
for(j=1;j<7;j++)
{
a_diffuso[nx][ny]=(a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/4;
}
}


for (i=1;i<7;i++)
{
a_diffuso[nx][ny]=(a[i-1][0]+a[i+1][0]+a[i][1])/3;
}


for (i=1;i<7;i++)
{
a_diffuso[nx][ny]=(a[i-1][7]+a[i+1][7]+a[i][6])/3;
}


for (j=1;j<7;j++)
{
a_diffuso[nx][ny]=(a[0][j-1]+a[0][j+1]+a[1][j])/3;
}


for (j=1;j<7;j++)
{
a_diffuso[nx][ny]=(a[7][j-1]+a[7][j+1]+a[6][j])/3;

}


printf("\n\n\n");
for (nx=0;nx<8;nx++)
{
for(ny=0;ny<8;ny++)
{
printf(" %.2f ",a_diffuso[nx][ny]);
}
printf("\n");
}
}


ringrazio anticipatamente tutti quelli che riescono a trovare i difetti... accetto suggerimenti e quant'altro!!!