Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-12-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cool Ayuda para hacer un algoritmo de busqueda y comparacion

Hola a todos
Necesito ayuda para elaborar un algoritmo que me permita buscar un elemento de una lista en otra lista.

Es decir

Lista 1 ---- Lista 2
1 ------------ a
2 ------------ b
3 ------------ c

Comparar 1 con cada elemento a, b y c para saber si son iguales
Comparar 2 y 3 de la misma forma

Para explicarme mejor:

Tengo una BD con todos los Discos duros de la PC, y hago un nuevo chequeo de hardware donde obtengo la lista de discos duros existentes en ese momento en la PC
El objetivo es comparar si son los mismos que estan en la BD o si hubo cambios con alguno de ellos (es decir, si cambiaron uno por otro, o quitaron, o agregaron alguno).
El cambio lo detecto por el numero de serie que es unico para cada disco duro

Tal vez el metodo que trato de implementar no sea el correcto, pero agradeceria cualquier ayuda para poder hacer lo que quiero
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 18-12-2008 a las 20:55:30.
Responder Con Cita
  #2  
Antiguo 18-12-2008
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
pues dependiendo el componente que uses, se me ocurre algo asi:
Código Delphi [-]
for i:= 1 to num_elementos_lista1 do
begin
    
      for j:= 1 to num_elementos_lista2 do
      begin
             
              IF elemento_lista1[i] = elemento_lista2[j] then
              begin
                    //hacemos lo que queramos si son iguales los elementos
              end;

      end;
end;

Es una idea, no se como es la lista, si es una tabla, un Tlist, o lo que sea.

Saludos
Responder Con Cita
  #3  
Antiguo 19-12-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cool

Hola Rockin

Vale la idea que me das, las listas una es una tabla y la otra un stringlist, ya habia probado algo parecido pero el problema esta en que cuando comparo, siempre me da diferente.
Pues me compara el Elemento 1 con cada uno de la otra lista, y entonces cuando compara con el 1 da Verdadero y con los siguientes me da falso
Y al final no se como hacer para saber si el disco 1 cambio




Gracias
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 19-12-2008 a las 22:30:10.
Responder Con Cita
  #4  
Antiguo 20-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
la tabla, cárgalo en otro stringlist si quieres:
Código Delphi [-]
// lista1 la base de datos
// lista2 el stringlist con los discos duros
for i:= 0 lista1.count-1 do
begin
   if lista2.indexOf(lista1[i]) = -1 then
      showmessage('ups no existe ' + lista1[i] + ' en lista2');
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 20-12-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cool

Muy bueno tu codigo Lepe, de esa forma es mas facil saber si un elemento de una lista existe en la otra.

Entonces aplicando esa funcion, lo que pretendo hacer es:
- Buscar cada elemento de Lista1 en Lista2
- Lo almaceno en X si no existe
- Buscar cada elemento de Lista2 en Lista1
- Lo almaceno en Y si no existe
- Si X o Y contienen algo, entonces emito el mensaje de que hubo cambios y muestro los valores de X y de Y

Este algoritmo estara correcto asi?
Si tienen otra forma mejor o mas optima, digamenlo tambien para implementarlo, o si con este algoritmo ya estaria bien.
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #6  
Antiguo 20-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Puedes usar otra lista ¿no?
Código Delphi [-]
// lista1 la base de datos
// lista2 el stringlist con los discos duros
noExiste = TStringlist.Create;
for i:= 0 lista1.count-1 do
begin
   if lista2.indexOf(lista1[i]) = -1 then
      noExiste.Add(Lista1[i])
end;
if noExiste.Count > 0 then
   ShowMessage(' Se han eliminado los siguientes discos ' + #13#10 + noExiste.CommaText);

Cuando te mostrará los discos duros que han sido reemplazados.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 23-12-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cool

El objetivo es cuando se va a revisar la PC (auditoria), al hacer clic en un boton obtiene los datos del hardware y los compara con los que estan previamente almacenados en la BD. Si hay cambios los muestra en un Treeview clasificados por categorias
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #8  
Antiguo 23-12-2008
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Algoritmo para comparar dos listas de valores
Las listas pueden ser en tablas, listas, cualquier cosa, lo unico que hay que hacer es adecuar el código al caso que proceda.A saber, si es una lista aumentar en uno el contador y si es una tabla leer el siguiente registro.

Importante: Las listas deben estar ordenadas por el mismo valor, que es el que se compara

Código Delphi [-]
1.- Poner las listas en su primer elemento
2.- Comparar los elementos
    A.- Son iguales ? El valor leido está en las dos listas
                           Actuar en consecuencia.
                           Coger los siguientes valores de las dos listas.

    B.- el valor de la lista 1 es menor? El valor de la lista 1 sólo se encuentra en la primera lista.
                                                  Actuar en consecuencia.
                                                  coger el elemento siguiente de la primera lista
    C.- el valor de la lista 2 es menor? El valor de la lista 2 sólo se encuentra en la segunda lista.
                                                  Actuar en consecuencia.
                                                  coger el elemento siguiente de la segunda lista
    D.- Si no se han acabado las listas, Volver a iterar el punto 2
    E.- Si se ha acabado alguna de las listas ,iterar leyendo siempre de la que no ha acabado. Se actúa como si la que no ha acabado es menor el valor.
3.- Ya está

Este procedimiento asegura un par de cosas.
1.- Se tratan todos los elementos.
2.- Se optimiza al máximo los accesos, ya que sólo se lee una vez cada elemento de las listas.

Este procedimiento seguro que lo conocen aquellos que han trabajado con ficheros secuenciales, es decir, los mayores de 38/40 años, ya que se utilizaba a menudo en programas cobol con ficheros secuenciales. Yo los hacía con lápiz y papel, que en definitiva, es como mejor se aprende.De primero de informática de los años 70-80.
CONCLUSIÓN: Si los elementos son iguales, se lee de las dos listas. Si son distintos, siempre se lee de la lista del elemento menor.

Un pequeño juego de ensayo quizás ayude a comprenderlo

Código SQL [-]
Lista1      Lista2
1            1      
2            3
4            5
5            6
6
Iteraciones
1 - 1 -> Iguales se leen las dos listas
2 - 3 -> menor el de la lista 1, el 2 no está en la lista 2, se lee de la lista 1.
4 - 3 -> menor el de la lista 2, el 3 no está en la lista 1. leo de la lista 2
4 - 5 -> menor el de la lista 1, el 4 no está en la lista 2, leo de la lista 1
5 - 5 -> iguales, el 5 está en las dos listas, se lee de las dos listas
6 - 6 -> iguales, el 6 está en las dos listas, se lee de las dos listas
FIN

Espero que os sea de ayuda

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Algoritmo para comparacion de cadenas danilo_candales Varios 8 17-11-2007 17:23:14
Ayuda para hacer una busqueda radije MySQL 0 30-04-2007 10:19:22
Algoritmo de búsqueda fonética Alexander Varios 2 13-10-2004 00:47:32
Buena codigo para hacer una busqueda edwin1 OOP 2 12-09-2003 20:35:00
hacer una comparacion con null oesteve Conexión con bases de datos 1 18-06-2003 15:08:34


La franja horaria es GMT +2. Ahora son las 20:11:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi