Club Delphi  
    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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola, hee creado una imagen general a ver si asi me explico mejor. Saludos.
__________________
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 14-04-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola,

este ejemplo esta completo y funcional, contiene dos listas con combinaciones:
Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    list:TStringList;
    function GetComb(listBox:TListBox):String;
    procedure buscarComunes(const Cad1:Int64);
    function  extraerComunes(const res:int64):string;
    procedure CompararCombinaciones(const Cad1, cad2:Int64);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  //inicio del proceso
  // poner esto al principio del proceso fuera de todos los bucles
  list:=TStringList.create;
  list.delimiter:=' ';

  With listbox1, items do begin
    add('10 12 21 33 45');
    add('10 13 23 34 45');
    add('16 33 14 27 10'); //<-- da lo mismo el orden de los elementos
  end;

  With listbox2, items do begin
    add('10 11 20 33 45');
    add('2 20 22 34 44');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // al final del proceso
  list.free; //liberar el objeto
end;

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;
function  TForm1.GetComb(listBox:TListBox):String;
begin
  result:=listBox.items[listBox.itemIndex];
end;

function  TForm1.extraerComunes(const res:int64):string;
var
  i:integer;
begin
  result:='';
  for i :=0 to 49 do
    if ((res and (int64(1) shl i))<>0) then
      result:=result+IntToStr(i+1)+' ';
end;
procedure TForm1.CompararCombinaciones(const Cad1, cad2:Int64);
var
  res:Int64;
  comunes:string;
begin
  res:=cad1 and cad2;
  if (cad1 = cad2) then begin
    // las dos combinaciones son iguales
  end
  else if (res <> 0) then begin
    // coinciden algunos elementos y en particular los elementos que coinciden
    // son aquellos cuya posición de bit esta puesta a 1
    //para saber los elementos que son comunes recorres bit a bit la variable RES
    comunes:=extraerComunes(res);
    // mostrar resultados
    Memo1.lines.add(GetComb(listbox1)+#9+GetComb(listbox2)+#9+'->'+#9+comunes);
  end
  else begin
    // las dos combinaciones son totalmente distintas
  end;
end;
procedure TForm1.buscarComunes(const Cad1:Int64);
var
  cad2:Int64;
  j:integer;
begin
  // Recorro la lista2
   with listbox2 do
   for j := 0 to Count -1 do
   begin
     ItemIndex := j;
     //convierto el string separado por espacios a una lista
     list.delimitedText:=Items[j];
     // Calculo CAD2 cada vez que cambia el indice de per
     cad2 := ValorCombinacion(list);
     CompararCombinaciones(cad1, cad2);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  cad1:Int64;
  i:integer;
begin
  //Recorro la lista1
  with ListBox1 do
    for i := 0 to Count -1 do
    begin
      // Calculo CAD1 cada vez que cambia el indice de lista3
      ItemIndex := i;
      //convierto el string separado por espacios a una lista
      list.delimitedText:=Items[i];
      cad1:= ValorCombinacion(list);
      buscarComunes(cad1);
    end;
end;

end.
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
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 01:36:38.


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