elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda, sumar elementos en torno a un punto de la matriz en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda, sumar elementos en torno a un punto de la matriz en C  (Leído 1,410 veces)
MrDude

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Duda, sumar elementos en torno a un punto de la matriz en C
« en: 7 Julio 2015, 21:47 pm »

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.
Código:
#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!


En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Duda, sumar elementos en torno a un punto de la matriz en C
« Respuesta #1 en: 8 Julio 2015, 10:19 am »

es simples es por ejemplo si tenemos una matriz int m[3][5] y estamos en m[1][2] sumar a esa m[1][2] la casilla de la izquierda y de la derecha. seria hacer

m[1][2] = m[1][2] + m[1][1] + m[1][3]; //a m[1][2] le sumo la casilla anterior (m[1][1]) y la siguiente (m[1][3])

pero claro hay un problema... que pasa cuando estoy en m[2][0] ??? eso es muy difícil de hacer si piensas en una matriz como una matriz, pero... ¡Y si pensamos que una matriz es una tabla! WTF! XDDD

Es tan simples como pensar que int m[3][5] es int m[3*5] que es lo mismo que int m[15] aun que realmente sea una matriz, seria como hacer:

m[0][8] = m[0][8] +m[0][7] + m[0][9];

¿Fácil no?

Para entender eso mire ese vídeo:



Ahora si vas a seguir mi consejo pues que sepa que la primera casilla es la m[0][0] de siempre, pero la ultima es la m[0][3*15], es lo mismo que m[0][15] que lo tratamos como m[15]. Si ignoras el echo de que las lineas no las tocamos nunca solo modificamos las columnas. Como dije mire el vídeo para entenderlo y te será pan comido. ;)

Recuerde que por muy bidimensional que sea una matriz en la memoria siempre va a ser una tabla o vector, en fin, secuencial(cada casilla va estar una al lado de otra). Si sabes eso puedes jugar con ella y te será más fácil. ;)

De la otra forma te va costar mucho jajaja XD

Otra cosa a destacar es que hay 2 casos especiales, no puedes sumar la casilla anterior de la primera posición m[0][0] ni la siguiente después de m[0][15], ya que en esos caso te estas saliendo de rango. A la primera m[0][0] que no existe anterior(ya que es la primera dah!!!), solo le puedes sumar la siguiente m[0][1], y a la m[0][15] que no hay siguiente ya que es la ultima, solo le puedes sumar la anterior m[0][14].

Espero que te sirva =)

Banzay XD


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda]Sumar elementos de un listBox y mostrarlos en un textBox
Programación C/C++
Beaustyle 1 5,050 Último mensaje 16 Junio 2013, 00:55 am
por aguml
Sumar los elementos de una fila de una matriz en Pythong
Dudas Generales
Matinegro 1 1,651 Último mensaje 10 Noviembre 2013, 20:41 pm
por crazykenny
[Ruby] Sumar elementos de un array
Scripting
ka0s 2 6,310 Último mensaje 25 Noviembre 2013, 20:32 pm
por ka0s
Duda del desplazamiento de los elementos de una matriz(norte,sur,este,oeste)
Programación C/C++
xuhipoint 3 3,852 Último mensaje 14 Mayo 2014, 18:21 pm
por Blaster
Sumar los elementos de un vector con DyV
Programación C/C++
Gauss 4 758 Último mensaje 18 Diciembre 2018, 10:15 am
por dijsktra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines