Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola, lo sé. El problema es que el programa no fue capaz de encontrar cinco de los seis números de una combinación que si tuvo en su día cinco aciertos. De ahí mis dudas, la única forma de mostrarlo es con un vídeo del proceso pero es engorroso grabar un vídeo tras otro hasta conseguir uno válido. Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 13-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola, cuando escribí mi último mensaje, estaba en el trabajo y no podía verificarlo, pero pensando pensando caí en la cuenta de que en cad1 solo metía 5 números de la lista y no 6 por eso nunca encontraría cinco aciertos en caso de que uno de ellos fuera diferente. Ya lo solucioné y paso a probar. Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #3  
Antiguo 13-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola de nuevo, he revisado ese error que comentaba antes, y sigue sin encontrar nada, el día 9-05-15 salío una combinación que coincide en 5 números con las generadas por el programa, pero este no la encuentra (y el listado de sorteos es real, se carga de un CSV). ¿Alguna idea?

Combinación de ese dia: 16 27 29 34 38 43
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #4  
Antiguo 13-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
No hay forma, puedo intentarlo hasta el infinito que no va a funcionar y la razon es que si en cad1 tengo 12345 y en cad2 tengo 12346 jamás encontrará 5 coincidencias por que uno de los números es distinto por muy ordenados y por muy permutacion que sea. Me tiene ya frustrado por que no sé como solucionarlo.

Si per muestra las permutaciones a partir de 12345 y en lista3 tengo 12346 las permutaciones nunca coincidiran con lista 3.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #5  
Antiguo 13-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
He pensado en una posible solución, calcular las permutaciones de cada fila de la lista3

Código Delphi [-]
Combinatoria2([(Items.Item[i].SubItems[0]), Items.Item[i].SubItems[1], Items.Item[i].SubItems[2],
    Items.Item[i].SubItems[3], Items.Item[i].SubItems[4], listBox2);

El problema es que no acepta enteros y cadenas y cuando pongo IntToStr da error.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #6  
Antiguo 13-04-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
hola danielmj,

Una opción es representar la combinación con un entero de 32 bits si los elementos a combinar son menos de 32 o de 64 bits si son mas de 32 elementos y menos de 64 elementos, (para mas elementos tendrías que crear array de enteros), de tal forma que cada posición de un bit representa ese numero de elemento.

por ejemplo: si tienes una combinación de 3 elementos de una lista del 1 al 8
combinación 1: elementos 1, 5, 6
combinación 2: elementos 2, 5, 6

Código:
bit|7|6|5|4|3|2|1|0|	->	DEC
C1=|0|0|1|1|0|0|0|1|	->	49
C2=|0|0|1|1|0|0|1|0|	->	50
IMPORTANTE: como el indice de los bits se inicia en 0 y los elementos en 1 hay que ajustar el indice restando una unidad

Al ejecutar el siguiente código ya puedes saber si hay coincidencias o no
Código Delphi [-]
var
  c1, c2: Integer;
begin
  ...
  if (c1 = c2) then begin
   // las dos combinaciones son iguales
  end
  else if (c1 and c2) <> 0 then begin
   // coinciden algunos elementos y en particular los elementos que coinciden
   // son aquellos cuya posicion de bit esta puesta a 1
  end
  else begin
    // las dos combinaciones son totalmente distintas
  end;
  ...
end;

Para obtener el entero de la combinación a partir de una lista con los elementos selecionados puede hacer los siguiente
Código Delphi [-]
function ValorCombinacion(list:TStrings):Int64;
var
  elemento:Byte;
  i: Integer;
begin
  result := 0;
  with list do
    for i := 0 to Count - 1 do begin
      //se obtiene el valor numerico de la lista
      elemento := StrToInt(strings[i])-1;
      //se inserta en el resultado
      result := result or (Int64(1) shl elemento);
    end;
end;

Espero que esto te pueda ayudar
Un saludo

Última edición por bucanero fecha: 13-04-2018 a las 16:38:47.
Responder Con Cita
  #7  
Antiguo 13-04-2018
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 19
TOPX Va camino a la fama
Hola,

Puede ser que le esté entendiendo mal, pero sospecho que le puede servir el típico "set intersection". A saber:
Código Delphi [-]
var
  a, b, c: set of char;
  x: char;
begin
  a := ['A', 'B', 'C', 'D'];
  b := ['C', 'D', 'E', 'F'];
  c := a*b; // "c" es la intersección de "a" y "b", c = ['C', 'D']

  Memo1.Lines.Clear;
  for x in c do
  begin
    Memo1.Lines.Add(x);
  end;
end;
Fuente: Intersection of two strings/sets - Stack Overflow
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #8  
Antiguo 13-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 16
danielmj Va por buen camino
Hola, mi código es este:

Código Delphi [-]
for i := 0 to lista3.Items.Count -1 do
begin
    // Calculo CAD1 cada vez que cambia el indice de lista3
  with lista3 do
    begin
        Selected := Items[i];
    fila.Caption:= 'Fila: '+IntToStr(i)+' /'+items.item[i].caption;
    n.Caption:= items.Item[i].SubItems[0] + ' '+ items.Item[i].SubItems[1]+
    ' '+ items.Item[i].SubItems[2] + ' '+ items.Item[i].SubItems[3]+
    ' '+items.Item[i].SubItems[4];

    {Items.Item[i].SubItems[0] +
        ' '+ Items.Item[i].SubItems[1] +' '+ Items.Item[i].SubItems[2]+
        ' '+ Items.Item[i].SubItems[3] +' '+ Items.Item[i].SubItems[4];{+
    ' '+ Items.Item[i].SubItems[5];}
    end;

    // Recorro per
    for j := 0 to per.Items.Count -1 do
    begin
        // Actualizo panel de informacion
        stB.Panels.Items[2].Text:= '[C. '+IntToStr(i+1)+'],'+'[P. '+IntToStr(j+1)+']';
        barra.Max:= lista3.Items.Count;
        barra.Position:= i+1;
        barra2.Max:= per.Items.Count;
        barra2.Position:= j;
        stB.Panels.Items[4].Text:= FormatFloat('0.00',(i * 100) / lista3.items.Count)+'%';

        // Calculo CAD2 cada vez que cambia el indice de per
        cad2 := per.Items.Strings[j];

        // Si lista3 y per son "iguales" agrego un registro a listaResumen2
    // Si alguno de los 5 numeros de lista 3 es distinto a alguno de los
    //numeros de per, YA NO VA A FUNCIONAR.

      if cad2 = n.Caption then
        begin
            with listaResumen2.Items.Add do
            begin
                inc(cinco);
                caption:= lista3.Selected.Caption;
                subitems[0]:= lista3.Items.Item[i].SubItems[0];
                subitems[1]:= lista3.Items.Item[i].SubItems[1];
                subitems[2]:= lista3.Items.Item[i].SubItems[2];
                subitems[3]:= lista3.Items.Item[i].SubItems[3];
                subitems[4]:= lista3.Items.Item[i].SubItems[4];
                subitems[5]:= lista3.Items.Item[i].SubItems[5];
                subitems[5]:= IntToStr(5);
                subitems[6]:= IntToStr(cinco);
            end;
        end;
    end;

Comparo cada item de per (cad2) con la etiqueta "n" ¿no debería funciionar? loo pregunto por que no lo hace.
Voy a probar tu código y te comento. Gracias.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
sumando valores de un listview danielmj Varios 28 14-11-2014 21:52:30
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes ASAPLTDA Firebird e Interbase 17 02-12-2012 12:09:02
Rellenar con 0.... buitrago Varios 6 17-11-2011 20:02:53
¿Cómo insertar una imágen en un lisbox o un memo? Acuarius3000 Gráficos 3 27-06-2005 08:44:53
arastrar archivos a un lisbox gulder C++ Builder 3 05-05-2005 13:31:50


La franja horaria es GMT +2. Ahora son las 22:51:21.


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