Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: muymuyperdido en 29 Diciembre 2012, 20:16 pm



Título: Tratamiento de dos tablas a la vez
Publicado por: muymuyperdido en 29 Diciembre 2012, 20:16 pm
Lo puse en otro post, pero no sé si está bien explicado asique aqui lo pongo más claro
Tengo dos tablas y tengo que tratar cada fila de una de ellas con todas las filas de la otra.
Asi
1 2 3
4 5 6
7 8 9
11 12 13
14 15 16
17 18 19
La fila 1 2 3 con 11 12 13, con 14 15 16, y con 17 18 19.
La 4 5 6  con 11 12 13, con 14 15 16, y con 17 18 19.
Y la 7 8 9  con 11 12 13, con 14 15 16, y con 17 18 19.
Seria calcular la distancia euclidea como si fuesen ejes coordenados, es decir
la raiz de la suma de las diferencias al cuadrado (en una funcion)
No pongo codigo porque no sé por donde empezar, es decir, que bucle hago para hacer esa relacion?


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: durasno en 29 Diciembre 2012, 23:36 pm
Hola! vas a necesitar 3 bucles anidados:

-El indice del primer bucle maneja las filas de la tabla 1
-El indice del segundo bucle maneja las filas de la tabla 2
-El indice del tercer bucle maneja las columnas de ambas tablas


Saludos


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: flony en 29 Diciembre 2012, 23:38 pm
arrancar por usar la biblioteca standar para sacar las raices y potencias...lo de la tabla seria con 2 vectores de tamaño 2(corre desde 0 a 2 y suma 3)...
info de biblioteca
http://www.cplusplus.com/reference/cmath/ (http://www.cplusplus.com/reference/cmath/)
....jaajaja lo lindo de la programacion hay mas de una manera de llegar al mismo rsultado


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: muymuyperdido en 30 Diciembre 2012, 00:59 am
Hola! vas a necesitar 3 bucles anidados:

-El indice del primer bucle maneja las filas de la tabla 1
-El indice del segundo bucle maneja las filas de la tabla 2
-El indice del tercer bucle maneja las columnas de ambas tablas


Saludos

Esto es lo que necesitaba! Muchas gracias^^
Lo he planteado asi

for(z=0;z<m;z++){
for(i=0;i<m;i++){
dist[z]=0;
for(j=0;j<m;j++){
dist[z]=dist[z]+((tabla1[j]-tabla2[j])(tabla1[j]-tabla2[j]))
}
dist[z]=sqrt(dist[z]);
}
}
No lo he comprobado pero creo, ...creo, que está bien.
Para ordenar cada columna de forma independiente como seria?


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: flony en 30 Diciembre 2012, 02:27 am
yo decia hacer algo asi...
Código:
#include <iostream>
#include <math.h>

using namespace std;

float main()
{
int vector[2];
int vector1[2];
float vector2[2];
int i=0;
for (int i = 0; i < 2; i++)
{
vector2[i]=sqrt( pow(vector[i]-vector1[i], 2));
}
cin.get();
return 0;
}
es solo para que te hagas la idea...supongo que los datos de las tablas las tenes en algun lado, y esa area todavia no la uso bien :)


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: muymuyperdido en 30 Diciembre 2012, 10:37 am
Código
  1. for(z=0;z<m;z++){
  2.     for(i=0;i<m;i++){
  3.           dist[z]=0;
  4.           for(j=0;j<m;j++){
  5.                  dist[z][i]=dist[z][i]+((tabla1[j]-tabla2[j])(tabla1[j]-tabla2[j]))
  6.           }
  7.     dist[z]=sqrt(dist[z]);
  8. }
  9. }
¿No podria ser así? Almacenandose todas las distancias en una tabla bidimensional?


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: durasno en 31 Diciembre 2012, 02:23 am
Una pregunta: dist es un arreglo o una matriz???

Si es una matriz esto dist[z]=0 es un error, nose si lo compilaste o no pero trata de prestar atencion a los errores que te marca el compilador...


El tamaño de la tabla para almacenar los resultados debe ser igual a las combinaciones que se generan, segun el ejemplo debe ser de 3x3 ya que se van a generar 9 resultados


Saludos


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: leosansan en 31 Diciembre 2012, 19:24 pm

Seria calcular la distancia euclidea como si fuesen ejes coordenados, es decir
la raiz de la suma de las diferencias al cuadrado (en una funcion)
No pongo codigo porque no sé por donde empezar, es decir, que bucle hago para hacer esa relacion?
A ver si así te aclaras un poquito más. te he puesto un par de cosas para que veas como va el código, aunque sólo con la parte de CALCULO DE CUADRADO DE DISTANCIA tienes lo que realmente quieres:
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.   int v1[3][3]={{1,2,3},
  6.                 {4,5,6},
  7.                 {7,8,9}},
  8.       v2[3][3]={{2,4,8},
  9.                 {6,9,18},
  10.                 {3,4,5}}, i,j,k;
  11.   float d[3][3]={0};
  12.   /******ESTO PARA VER COMO SE RESTAN LAS LINEAS*************/
  13.   for (i=0;i<3;i++){
  14.      for (j=0;j<3;j++){
  15.         for (k=0;k<3;k++){
  16.            d[i][j]+=v2[i][k]-v1[j][k];
  17.         }
  18.      }
  19.   }
  20.   for (i=0;i<3;i++){
  21.      for (j=0;j<3;j++){
  22.         printf ("%g  ",d[i][j]);
  23.      }puts ("\n");
  24.   }
  25.   puts ("\n");
  26.   /*****************CALCULO DE CUADRADO DE DISTANCIAS****ESTO SOLO YA TE VALE****************/
  27.  
  28.   for (i=0;i<3;i++){
  29.      for (j=0;j<3;j++){d[i][j]=0;
  30.         for (k=0;k<3;k++){
  31.            d[i][j]+=pow (v2[i][k]-v1[j][k],2);
  32.         }/* d[i][j]=sqrt (d[i][j]);<== para calcular aqui las distancias y quitando CALCULO DE DISTANCIAS */
  33.      }
  34.   }
  35.   for (i=0;i<3;i++){
  36.      for (j=0;j<3;j++){
  37.         printf ("%g  ",d[i][j]);
  38.      }puts ("\n");
  39.   }
  40. /*****************CALCULO DE DISTANCIAS********************/
  41.  
  42.   for (i=0;i<3;i++){
  43.      for (j=0;j<3;j++){
  44.            d[i][j]=sqrt (d[i][j]);
  45.      }
  46.   }
  47.   for (i=0;i<3;i++){
  48.      for (j=0;j<3;j++){
  49.         printf ("%g  ",d[i][j]);
  50.      }puts ("\n");
  51.   }
  52.   return 0;
  53. }
  54.  
Saluditos!. ... y Feliz 2013  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Tratamiento de dos tablas a la vez
Publicado por: muymuyperdido en 1 Enero 2013, 13:01 pm
aunque sólo con la parte de CALCULO DE CUADRADO DE DISTANCIA tienes lo que realmente quieres
¡Muchisimas gracias! :D  :D :D :D :D :D