Buenas people, espero que podáis ayudarme.
El ejercicio pide coger una matriz, y que como resultado obtengas esa misma matriz, con la media aritmética del total de números que la conforman, y además, que cada elemento de esa matriz esté formado por la suma de los elementos de su alrededor.
Ahora bien, no sé como hacer que cada elemento tenga la suma de los elementos que están en torno a él, ahora que ya tengo la media aritmética aplicada a cada elemento.
Por ejemplo si tenemos la matriz:
00 01 02 03
10 11 12 13
20 21 22 23
30 31 33 34
Cada elemento sería (formando un cuadrado imaginario en torno al punto):
00 = 00 + 01 + 10 +11
01 = 00 +01 + 02 + 10 + 11 + 12
11 = 00 + 01 + 02 + 10 +11 +12 +20 + 21 +22
Me han dejado caer que es usando condicionales que nunca tomen los valores menores que 0 para i o j, y también que sean menores que N (ya que los valores por la izquierda o arriba del 00 por ejemplo no existen).
Luego que en cada iteración de la matriz sea un recorrido de las que hay en torno a él, a través de nuevos vectores (por eso en el código tengo a y b). Pero no se me ocurre como hacerlo.
Teóricamente en el N/2 y M/2 estaríamos en una distancia en torno a ese mismo punto, pero no sé como escribirlo en código.
Saludos y espero que me ayudéis
Y gracias!
El ejercicio pide coger una matriz, y que como resultado obtengas esa misma matriz, con la media aritmética del total de números que la conforman, y además, que cada elemento de esa matriz esté formado por la suma de los elementos de su alrededor.
Código [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
//Matriz. Hacer media aritmética de todos los elementos y cada uno es la suma de los que hay a su alrededor.
#define N 4
#define M 4
int main(void)
{
int i;
int j;
float ju[N][M];
int a;
int b;
int ja[N][M];
int cont=0; //Contador para la media aritmética
//Pedir mat
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("\n Introduse el valoh si tienes valoh en el punto %d %d : ",i+1,j+1);
scanf("%f",&ju[i][j]);
cont++; //Cada vez que introduzcan un dato el contador sube, igualando el número de datos totales.
}
}
printf("\n El número de elementos es %d",cont);
//Enseñar mat
printf("\n La matris sera: \n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("%f ",ju[i][j]);
}
printf("\n");
}
//Dividimos cada elemento por la media aritmética
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
ju[i][j]=ju[i][j]/cont;
}
}
/*for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
for(a=i-N/2;a<N;a++)
{
for(b=j-M/2;b<M;b++)
{
}
}
ju[i][j]+=ja[a][b];
}
}*/
printf("\n La matriz dividida entre la media aritmética será: \n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("%f ",ju[i][j]);
}
printf("\n");
}
return 0;
}
Ahora bien, no sé como hacer que cada elemento tenga la suma de los elementos que están en torno a él, ahora que ya tengo la media aritmética aplicada a cada elemento.
Por ejemplo si tenemos la matriz:
00 01 02 03
10 11 12 13
20 21 22 23
30 31 33 34
Cada elemento sería (formando un cuadrado imaginario en torno al punto):
00 = 00 + 01 + 10 +11
01 = 00 +01 + 02 + 10 + 11 + 12
11 = 00 + 01 + 02 + 10 +11 +12 +20 + 21 +22
Me han dejado caer que es usando condicionales que nunca tomen los valores menores que 0 para i o j, y también que sean menores que N (ya que los valores por la izquierda o arriba del 00 por ejemplo no existen).
Luego que en cada iteración de la matriz sea un recorrido de las que hay en torno a él, a través de nuevos vectores (por eso en el código tengo a y b). Pero no se me ocurre como hacerlo.
Teóricamente en el N/2 y M/2 estaríamos en una distancia en torno a ese mismo punto, pero no sé como escribirlo en código.
Saludos y espero que me ayudéis

Y gracias!