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 25-06-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
Permutaciones de un numero

Saludos a todos/as , Necesito hacer una busqueda de un numero en un campo pero ese numero puede variar mejor dicho

Yo tengo un numero el 123 yo quiero que delphi me busque en un campo ese numero y sus posibles conbinaciones ejemplo: 231,312 etc.. alguna funcion o idea
Responder Con Cita
  #2  
Antiguo 25-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Siempre que hables de Bases de datos, dinos qué base de datos usas, porque suele haber una solución distinta para cada una de ellas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 25-06-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Quizás, generar en una matriz de dos dimensiones, las distintas combinaciones posibles del número dado y luego ir buscando las distintas combinaciones y guardar en la segunda posición, por ejemplo S, cuando se encuentre, la otra posición se habría inicializado a N.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 26-06-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
la base de datos es en paradox. pero mejor seria que me den un ejemplo por codigo.....

o existe alguna funcion , perdone son novato
Responder Con Cita
  #5  
Antiguo 26-06-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
Realiza las combinaciones posibles que en tu caso serían seis. Supongamos que cada combinación la guardas en un arreglo de longitud 6, luego harías una consulta que se me ocurre puede ser así aunque no la he probado:
Query1.close;
Query1.ParamByname('Var1').Value:=Comb1;
Query1.ParamByname('Var2').Value:=Comb2;
.........
Query1.SQL.add('select campo1,campo2,.... from tabla where campo1=:Var1 or campo1=:Var2 or campo1=:var3 or campo1=:var4........')
Query1.execSQL;
Query1.Open;

Puedes validar que los numeros que generaste no se repitan para que optimices el código. Pero así como está debería funcionarte.
Responder Con Cita
  #6  
Antiguo 26-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Otra forma es guardarlo en un string y usar algo así:

Código Delphi [-]
query1.sql.text := 'select * from tabla where campo in ('321', '123', '213')'

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 28-06-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
Bueno ya un amigo me ha dado la solucion pero el caso esta en que este me repite los numeros ejemplo yo le entro el 553 y me genera las posibles combinaciones pero me repite los numeros varias veces.

553
535
553
535
355
355

El codigo es este

Código Delphi [-]
 
cadena:=Edit1.Text;
  Memo1.Lines.Add(cadena[1]+cadena[2]+cadena[3]);
  Memo1.Lines.Add(cadena[1]+cadena[3]+cadena[2]);
  Memo1.Lines.Add(cadena[2]+cadena[1]+cadena[3]);
  Memo1.Lines.Add(cadena[2]+cadena[3]+cadena[1]);
  Memo1.Lines.Add(cadena[3]+cadena[1]+cadena[2]);
  Memo1.Lines.Add(cadena[3]+cadena[2]+cadena[1]);

Alguna sugerencia

Última edición por dec fecha: 29-06-2006 a las 00:45:53.
Responder Con Cita
  #8  
Antiguo 29-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La propiedad Lines del Memo es un TStrings, compatible con un TStringList, este último tiene la propiedad Duplicates que se puede establecer en dupIgnore, de esta forma al repetir una cadena... obviamente la ignora y no la añade.

Código Delphi [-]
var X :TStringList;
begin
X := Tstringlist.create;
x.sorted := true; // debe estar ordenado para ignorar duplicados
x.Duplilcates := dupIgnore;
X.Add('uno');
X.Add('uno'); // este no se añade por estar duplicado
Memo1.Lines.Assign(X); // sustituimos lo que hay en el memo por X (sin duplicados)
Memo1.Lines.Add(X); // tambien podemos añadir los textos al memo, sin borrar lo que haya
X.Free;// destruimos la lista.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 06-07-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
Disculpenme

Disculpenme por la tardanza para contestar pero es el trabajo que me ocupa de mucho al igual que ustedes.

Realmente lo que necesito es que si tengo un numero por ejemplo de cuatro cifra 2343 que me genere las posibles combinaciones para ese numero sin repetirlo y que me diga cuantas combinaciones se generaron para guardar en una variable X..
Responder Con Cita
  #10  
Antiguo 06-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Falta quitar los duplicados, pero lo más gordo está hecho. No lo he testeado a fondo, pero creo que funciona. Está hecho a lo bruto, por simples intercambios de caracteres:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var pivot, str:string;
    i, saltos,idx: Integer;
begin

  saltos := 1;
  mmo1.lines.Add(edt1.Text);
  for i := 1 to Length(edt1.Text) do
  begin
    str := edt1.Text+#0;
    saltos := 1;
    pivot := str[i];
    mmo1.lines.Add('------- Nuevo Pivot: '+pivot+' ---');
    Delete(str,i,1);
    str := pivot + str; // pasamos el pivot al primer caracter de la cadena
    idx := 2;
    while saltos < length(str)-1 do
    begin
      Application.ProcessMessages;
      if idx = length(str)-1 then
      begin
        inc(saltos);
        idx := 2;
        mmo1.lines.Add('------salto-----------');
      end
      else
      begin
        str := Copy(str,1,idx-1) + str[idx+1] + str[idx]+ Copy(str,idx+2,255);
        inc(idx);
        mmo1.lines.Add(str);
      end;
    end;

  end;
end;

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
  #11  
Antiguo 06-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
acabo de ver que tiene un fallo... pero eso te lo dejo a tí

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 06-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El caso es complicado, por eso he puesto parte de la solución, ahora te toca trabajarlo a tí y buscar linea por linea los errores.

La filosofía es la siguiente: de la cadena principal elijo el primer caracter como Pivote, lo paso al principio de la cadena y ahora voy intercambiando el segundo caracter con el tercer, despues el tercero con el cuarto, etc. Pero siempre quedan combinaciones que no las pillas, por eso está lo de los "saltos".

Para ayudarte, quitando los fallos me da lo siguiente:

texto:23
Solución:
Código:
Total de combinaciones 2
23
32
texto:233
Solución:
Código:
Total de combinaciones 3
233
323
332
texto:234
Solución:
Código:
Total de combinaciones 6
234
243
324
342
423
432
texto:2344
Solución:
Código:
Total de combinaciones 12
2344
2434
2443
3244
3424
3442
4234
4243
4324
4342
4423
4432
texto: 2345
Solución:
Código:
Total de combinaciones 24
2345
2354
2435
2453
2534
2543
3245
3254
3425
3452
3524
3542
4235
4253
4325
4352
4523
4532
5234
5243
5324
5342
5423
5432
Esta última no la he comprobado... pero juraría que va bien

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 07-07-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
OffTopic

Con el permiso otorgado por CoCaine, he cambiado el titulo del hilo para que el titulo coincida con el contenido de éste, y para futura busqueda.


Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #14  
Antiguo 08-07-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
Saludos a todos

Cuando resolvamos este dilema le voy a invitar una jarra de cervezas a todos mis colegas y amigos un saludo a mi hermano Marverick.

Realmente lo que quiero es guardar en una tabla las convinaciones del numero eh checkado la solucion y no encuentro como convertir la varible a string debido a que la varible es un tstringlist, que viene siendo parecido a una arreglo.


Con convertir eso y algunos arregrillos creo que resuelvo
Responder Con Cita
  #15  
Antiguo 08-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver si en esto último que dices puedo echarte una mano. La variable "TStrings" obviamente no puede convertirse a "Integer", pero, es que una variable de tipo "TStrings" se compone de uno o varios elementos que son a su vez de tipo "String". Es decir, son dichos elementos los que podrías convertir a "Integer", si es necesario.

¿Un ejemplo? A ver si puede servirte de algo:

Código Delphi [-]
var
  i,j: integer;
  ejemplo: TStrings;
begin
  ejemplo := TStringList.Create;

  // Un suponer...
  ejemplo.Add('1234');
  ejemplo.Add('4321');
  ejemplo.Add('4211');

  for i := 0 to ejemplo.Count-1 do
  begin
    {
      Accederemos aquí a cada uno de los elementos
      de "ejemplo", que podríamos convertir desde
      "Integer" a "String" con "StrToInt"...
    }
    
    // "j" es de tipo "Integer"
    j := StrToInt( ejemplo[i] );
    
  end;

  ejemplo.Free;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #16  
Antiguo 08-07-2006
CoCaInE CoCaInE is offline
Miembro
 
Registrado: nov 2005
Posts: 66
Poder: 19
CoCaInE Va por buen camino
Gracias

Con la ayuda de todos y de dec eh logrado hacer las combinaciones , gracias a todos.
Responder Con Cita
  #17  
Antiguo 08-07-2006
madriles madriles is offline
Miembro
 
Registrado: may 2003
Ubicación: madrid
Posts: 93
Poder: 21
madriles Va por buen camino
hola
solo una pequeña aclaracion al tema. ya que se ha cambiado el nombre para futuras busquedas, deberia volver a cambiarse, me explico, a la vista de las respuestas estamos hablando de permutaciones no de combinaciones para ver esto cito un texto

Cita:
http://www.aulafacil.com/CursoEstadi...ecc-20-est.htm

Combinaciones:
Determina el número de subgrupos de 1, 2, 3, etc. elementos que se pueden formar con los "n" elementos de una muestra. Cada subgrupo se diferencia del resto en los elementos que lo componen, sin que influya el orden.
Por ejemplo, calcular las posibles combinaciones de 2 elementos que se pueden formar con los números 1, 2 y 3.
Se pueden establecer 3 parejas diferentes: (1,2), (1,3) y (2,3). En el cálculo de combinaciones las parejas (1,2) y (2,1) se consideran idénticas, por lo que sólo se cuentan una vez.

Para calcular el número de combinaciones se aplica la siguiente fórmula:

Cm,n = m! / n! * (m-n)!


El termino " n ! " se denomina "factorial de n" y es la multiplicación de todos los números que van desde "n" hasta 1.
Por ejemplo: 4 ! = 4 * 3 * 2 * 1 = 24
La expresión "Cm,n" representa las combinaciones de "m" elementos, formando subgrupos de "n" elementos.
y esto serian las permutaciones

Cita:
Permutaciones:
Cálcula las posibles agrupaciones que se pueden establecer con todos los elementos de un grupo, por lo tanto, lo que diferencia a cada subgrupo del resto es el orden de los elementos.
Por ejemplo, calcular las posibles formas en que se pueden ordenar los número 1, 2 y 3.
Hay 6 posibles agrupaciones: (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2) y (3, 2, 1)

Permutaciones:
Para calcular el número de permutaciones se aplica la siguiente fórmula:
Pm = m!
La expresión "Pm" representa las permutaciones de "m" elementos, tomando todos los elementos. Los subgrupos se diferenciaran únicamente por el orden de los elementos.
Aclarado esto, a ver si alguien propone un algotirmo de permutaciones para cualquier cifra dada
un saludo
Responder Con Cita
  #18  
Antiguo 03-07-2007
eduardosanz eduardosanz is offline
Registrado
 
Registrado: nov 2006
Posts: 1
Poder: 0
eduardosanz Va por buen camino
Help me

Hey amigo gracias por ese codigo para realizar combinaciones con letras y numeros pero necesito por favor que me lo envies con las correcciones ya que, soy nuevo programando en Delphi y no entiendo mucho, aunque te prometo que me esforzare por aprender, pero please enviame el programita sin errores y si puedes explicarmelo en palabras mucho mejor.

Gracias

EduardoSanz.
Rep. Dom.
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
busqueda sql Dark Aeris Firebird e Interbase 10 06-06-2006 23:05:20
búsqueda en BD edusus Conexión con bases de datos 12 19-05-2006 00:08:19
Busqueda Con Una Sql salvanano SQL 5 05-05-2005 20:59:11
busqueda alachaise Internet 1 31-03-2005 16:57:34
Búsqueda !!! vpepen Conexión con bases de datos 4 26-11-2003 12:48:58


La franja horaria es GMT +2. Ahora son las 00:54:59.


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