Tratamiento de dos tablas a la vez

Iniciado por muymuyperdido, 29 Diciembre 2012, 20:16 PM

0 Miembros y 1 Visitante están viendo este tema.

muymuyperdido

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?

durasno

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
Ahorrate una pregunta, lee el man

flony

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/
....jaajaja lo lindo de la programacion hay mas de una manera de llegar al mismo rsultado
si un problema no tiene solucion entonces no es un problema...es algo inevitable

muymuyperdido

Cita de: 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

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?

flony

#4
yo decia hacer algo asi...
#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 :)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

muymuyperdido

for(z=0;z<m;z++){
     for(i=0;i<m;i++){
           dist[z]=0;
           for(j=0;j<m;j++){
                  dist[z][i]=dist[z][i]+((tabla1[j]-tabla2[j])(tabla1[j]-tabla2[j]))
           }
     dist[z]=sqrt(dist[z]);
}
}

¿No podria ser así? Almacenandose todas las distancias en una tabla bidimensional?

durasno

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
Ahorrate una pregunta, lee el man

leosansan

#7
Cita de: muymuyperdido en 29 Diciembre 2012, 20:16 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 (cpp) [Seleccionar]

#include <stdio.h>
#include <math.h>
int main()
{
  int v1[3][3]={{1,2,3},
                {4,5,6},
                {7,8,9}},
      v2[3][3]={{2,4,8},
                {6,9,18},
                {3,4,5}}, i,j,k;
  float d[3][3]={0};
  /******ESTO PARA VER COMO SE RESTAN LAS LINEAS*************/
  for (i=0;i<3;i++){
     for (j=0;j<3;j++){
        for (k=0;k<3;k++){
           d[i][j]+=v2[i][k]-v1[j][k];
        }
     }
  }
  for (i=0;i<3;i++){
     for (j=0;j<3;j++){
        printf ("%g  ",d[i][j]);
     }puts ("\n");
  }
  puts ("\n");
  /*****************CALCULO DE CUADRADO DE DISTANCIAS****ESTO SOLO YA TE VALE****************/

  for (i=0;i<3;i++){
     for (j=0;j<3;j++){d[i][j]=0;
        for (k=0;k<3;k++){
           d[i][j]+=pow (v2[i][k]-v1[j][k],2);
        }/* d[i][j]=sqrt (d[i][j]);<== para calcular aqui las distancias y quitando CALCULO DE DISTANCIAS */
     }
  }
  for (i=0;i<3;i++){
     for (j=0;j<3;j++){
        printf ("%g  ",d[i][j]);
     }puts ("\n");
  }
/*****************CALCULO DE DISTANCIAS********************/

  for (i=0;i<3;i++){
     for (j=0;j<3;j++){
           d[i][j]=sqrt (d[i][j]);
     }
  }
  for (i=0;i<3;i++){
     for (j=0;j<3;j++){
        printf ("%g  ",d[i][j]);
     }puts ("\n");
  }
  return 0;
}

Saluditos!. ... y Feliz 2013  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

muymuyperdido

Cita de: leosansan en 31 Diciembre 2012, 19:24 PMaunque sólo con la parte de CALCULO DE CUADRADO DE DISTANCIA tienes lo que realmente quieres
¡Muchisimas gracias! :D  :D :D :D :D :D