• Jueves 14 de Noviembre de 2024, 23:15

Autor Tema:  Combinacion De Elementos De Una Lista  (Leído 2987 veces)

vimaci

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Combinacion De Elementos De Una Lista
« en: Miércoles 2 de Agosto de 2006, 19:57 »
0
Tengo una lista con, por ejemplo, los siguientes elementos: A, B, C, D, E y tengo que escribir todas las combinaciones posibles de N elementos (siendo N un parametro que me dan en la llamada del programa)
por ejemplo, para N=2 las combinaciones serían

A, B, C, D, E, AA, AB, AC, AD, AE, BA, BB, BC, BD, BE, CA, CB, CC, CD, CE, DA, DB, DC, DD, DE, EA, EB, EC, ED, EE

tengo que hacer una funcioncilla que me haga esto, y no se como hacerlo, agradezco cualquier sugerencia

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Combinacion De Elementos De Una Lista
« Respuesta #1 en: Jueves 3 de Agosto de 2006, 16:47 »
0
Trasladé a Diseño de Algoritmos, seguramente tendrás mas suerte aqui :rolleyes:

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Combinacion De Elementos De Una Lista
« Respuesta #2 en: Jueves 3 de Agosto de 2006, 18:36 »
0
Hola, que tal.

Eso es fácil, lo único que tienes que hacer es tomar tu primer caracter, luego el segundo, después el tercero y así sucesivamente hasta que completes los N carateres. Esto lo deberas hacer recursivamente para que cuando regrese tu función, tomes el siguiente caracter.

Espero que me hayas entendido como.

Hasta luego.

vimaci

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Combinacion De Elementos De Una Lista
« Respuesta #3 en: Viernes 4 de Agosto de 2006, 16:04 »
0
Se que lo tengo que hacer recursivamente, pero estoy muuuuuuuuuuy pez en recursividad y no sé como hacerlo...

no encuentro por ahí nada parecido que me pueda orientar, asique solicito ayuda!!!!!!!
Voy a describir mi programa un poco mas a fondo. Tengo un programa que me lee de un fichero las letras que estén almacenadas y me las almacena en una lista, y ahora tengo que coger estas letras que tenga almacenadas en la lista y escribir en otra lista todas las posibles combinaciones de letras que se pudieran crear con estas letras. El tamaño de las letras que tengo que crear va desde 1 (es decir, enumerar todas las letras que tengo) hasta N, siendo N un numero que introduzco como variable a la funcion. Todas las letras se pueden repetir el numero de veces que haga falta.

P.D:El programa lo estoy codificando en PASCAL/Delphi

Muchas gracias

vimaci

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Combinacion De Elementos De Una Lista
« Respuesta #4 en: Sábado 5 de Agosto de 2006, 16:10 »
0
ya está hecho

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Combinacion De Elementos De Una Lista
« Respuesta #5 en: Martes 8 de Agosto de 2006, 21:29 »
0
Hola.

La verdad no le entiendo muy bien a tu código, pero yo creo que sería más fácil que utilices un arreglo, ya que de esta forma sólo retornas el indice y no pierdes tus elementos como dices que te esta pasando, amenos que te lo hayan pedido con listas entonces revisa bien lo que haces.

Hasta luego.

vimaci

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Combinacion De Elementos De Una Lista
« Respuesta #6 en: Martes 15 de Agosto de 2006, 12:26 »
0
bueno, al final conseguí hacer la combinacion, el codigo utilizado es el siguiente, es evidente que tengo una unidad para la gestion de las listas:


procedure Combinacion(M,N:integer; coleccion : tlista; var comb:tlista);
..var
....letra,aux : tlista;
..procedure Combina(pos : integer);
....var i:integer;
......s,pal:tinfo;
....begin
......pal:='';
......if pos > M then
........begin
..........aux:=letra;
..........while aux<>nil do
............begin
..............pal:=pal+(aux^.info);
..............aux:=aux^.sig;
............end;
..........InsertarAlFinal(comb, pal);
..........borrarultimonodo(letra);
........end
......else
........begin
..........for i := 1 to N do
............begin
..............obtenerinfopos(coleccion, s, i);
..............Insertar(letra,s,pos);
..............Combina(pos + 1);
............end;
..........borrarultimonodo(letra);
........end
....end;
..begin
......crear(letra);
......Combina(1);
..end;