• Viernes 8 de Noviembre de 2024, 13:05

Autor Tema:  Programa De Combinaciones  (Leído 5451 veces)

dacaba

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Programa De Combinaciones
« en: Domingo 16 de Septiembre de 2007, 02:13 »
0
Bueno que tal a todos soy nuevo en esto de la programacion y encontre este foro al cual pienso concurrir mucho biggrin.gif

Aqui mi duda: :rolleyes:

Necesito crear un programa que muestre las combinaciones posibles para cuatro elementos ingrsados por el usuario por el inputbox (los elementos deben ser letras, numeros o numeros y letras).
Trabajo con Visual.Net 2005 y bueno les comento a mas detalles para que me colaboren:

Al cargar el formulario este queda inactivo esperando que el usuario haga algo  :comp:
cuando el usuario de click en un boton llamado "START"  el programa le muestre un msgbox("Donde le dice que acontinuación debe ingresar los elementos a combinar")
luego la captura de datos la tengo que hacer con inputbox, y aquí empiezan mis dudas, pues no se si es mejor capturar los elemtos (datos) en un arreglo(unidimensional), o en variable propia para cada dato , o en una variable tipo String.

Dependiendo de esto:
a= inputbox("el dato")
b= inputbox("el dato")
=================>>> Este seria manejando una variable para cada dato
num(0) = inputbox("el dato") Pero al hacer esto me produce error porque debo de hacer referencia new para el elemento... es lo que dice
=================>>> Este seria con arreglo
dim cadena as Sring
cadena = inutbox("se toman todos los 4 datos aqui") y luego seguiria trabajar con los funciones de cadena
======================================================
Amigos lo siguiente es hacerla combinaciones:

Debo de utilizar sentencias de control como: if else end if; while end while... For to step  next;
Para hacer as combinaciones no se como hacerlo
Gracias por su tiempo y por la colaboración

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Programa De Combinaciones
« Respuesta #1 en: Domingo 16 de Septiembre de 2007, 05:05 »
0
http://foros.solocodigo.com/index.php?showtopic=31489&hl=
http://foros.solocodigo.com/index.php?showtopic=31490&hl=

No es necesario que repitas tu mismo problema en varios lugares, solo basta una vez. <_<

BYTE
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Programa De Combinaciones
« Respuesta #2 en: Martes 18 de Septiembre de 2007, 02:34 »
0
Si sólo tienes que hacer permutaciones con 4 elementos, lo mejor es ni siquiera clacularlo, puesto que su factorial es 24, estas las puedes guardar directamente ya en una matriz, así no tienes que calcularlo cada vez que supuestamente pasares por una rutina dada, simplemente bastaría con leerlo de la función que toma las asignaciones:

sería algo como:

Código: Text
  1.  
  2.  
  3. rutina donde se usan las combinaciones
  4.    dim combina(0 to 23)
  5.     .....
  6.     .....
  7.    combina=asignaCombinas 'llamar a la asignación de combinaciones
  8.      ....
  9. fin rutina
  10.  
  11. funcion asignaCombinas() as string()
  12.    asignaCombinas(0)="ABCD"
  13.    asignaCombinas(1)="ABDC"
  14.    asignaCombinas(2)="ACBD"
  15.           ...
  16.          ...
  17.            ...
  18.    asignaCombinas(22)="DCAB"
  19.    asignaCombinas(23)="DCBA"
  20. fin funcion
  21.  
  22.  

Claro que si usas muy a menudo esto entonces es mejor hacer la variable combina pública, e invocar sólo una vez a la función asignaCombinas, es decir en el evento load del programa, así te quedaría disponible el resto del programa.

Es una solución rápida y eficaz para un problema concreto (4 elementos con 24 permutaciones), así que si es así de concreto, va adecuado.
p.d.: releyendo tu pregunta... dices que los guarismos a usar son los que entren por un inputbox, en ese caso tienes que llamar a otra función después de la de asignación que consisite en un bucle de sustitución.

en ese caso debes sustituir cada "J" por cada "A" que aparezca en los elementos de combina()... fíjate de no cometer el error, de si coinciden un guarismo que se entra con otro que está en uso (excepto que sea el último guarismo), ya que si haces así, como ocurriría con la entrada(1) ("C"), entonces todas las "B" existentes serían "C", pero como también existen "C" entonces el siguiente cambio daría erróneo.

Esto se evita con un guarismo intermedio, es decir antes de intercambiar, debes comprobar que los guarismos de entrada noo son idénticos a los que ya hay, si los hay entonces aquel que ya exista (excepto si es el último, debes cambiarlo temporalmente por otro que no exista, por ejemplo por "~" ú otros poco frecuentes, después de terminar, ya no habra "C" 'ces' con lo que cambiarías "~" por "C".... si sólo hay una coincidencia, podrías hacer ese cambio el último, así no precisarías hacer un cambio intermedio....

Espero que me entiendas...

Es decir si el usuario introdjo: entrada(0)="J", entrada(1)="C", entrada(2)="K", entrada(3)="Y"
Código: Text
  1.  
  2. funcion remplazaCombinas
  3.    dim suelto(0 to 3)
  4.    dim temp(0 to 3)
  5.    dim usar(0 to 3)
  6.    temp(0)="#" : temp(1)="€" : temp(2)="@" : temp(3)="~" 'matriz supuesta para reemplazar temporalmente a la matriz entrada.
  7.  
  8.      suelto=deshaceCombina(combina(0))
  9.       existen=compruebaCoincidencias(entrada,suelto)
  10.       if existen=true entonces '
  11.           usar=temp '  usamos la matriz temp
  12.       no existen  'entonces usamos la matriz entrada
  13.          usar=entrada
  14.       fin existe
  15.   
  16.    for i=0 to 3
  17.       cambiarPor=usar(i)
  18.       for k=1 to 23
  19.          suelto=deshaceCombina(combina(K))
  20.          combina(k)=intercambia(suelto, cambiarPor)
  21.       fin k
  22.    fin i
  23.    if existen=true then  'si existen ya que se mudaron por algunos que 'supuestamente no existen, ahora los cambiamos por los que introdujo el usuario....
  24.       for i=0 to 3
  25.          cambiarPor=entrada(i)
  26.          for k=1 to 23
  27.             suelto=deshaceCombina(combina(K))
  28.             combina(k)=intercambia(suelto, cambiarPor)
  29.          fin k
  30.       fin i
  31.    end if
  32. fin funcion
  33.  
  34. ' intercambia los valores y los reune en una cadena que devuelve
  35. funcio intercambia(destino(),origen) as string
  36.     for i=0 to 3
  37.        if origen=destino(i) luego
  38.           destino(i)=origen(i)
  39.        end if
  40.        intercambia=intercambia & destino(i)
  41.     fin i  
  42. fin funcion
  43.  
  44. ' comprueba si un guarismo entrado ya existe en la cadena a sustituir
  45. funcion compruebaCoincidencias(a() as string,b() as string) as boolean
  46.    dim repes as byte
  47.    for i=0 to 3
  48.       for k=0 to 3
  49.          if a(i)=b(k) then
  50.                  repes=respes +1
  51.          end if
  52.       fin k
  53.    fin i
  54.    compruebaCoincidencias=(repes>0)
  55. fin funcion
  56.  
  57. ' entrando un string en la forma "ABCD" devuelve una matriz
  58. ' enla forma c(0)="A", c(1)="B", c(2)="C", c(3)="D"
  59. funcion deshaceCombina(cadena as string) as string()
  60.    deshaceCombina(0)=mid(cadena,1,1)
  61.    deshaceCombina(1)=mid(cadena,2,1)
  62.    deshaceCombina(2)=mid(cadena,3,1)
  63.    deshaceCombina(3)=mid(cadena,4,1)
  64.  
  65. fin funcion
  66.  
  67.  

Fíjate que no te he resuelto el caso de que sólo haya una equivalencia entre los guarismos usados, he asumido que todos están repes, y he asumido que dichos caracteres no los va a usar el usuario, en realidad eso es algo que tendrás que poner tú, yo te he puesto esos valores, para que no sea todo muy en el aire...con poco esfuerzo puedes mejorarlo, ya que yo lo he escrito de corrido...procurando que me entiendas sin liarte demasiado.
«Ma non troppo»
----> ModoVacaciones = False<----

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Programa De Combinaciones
« Respuesta #3 en: Miércoles 19 de Septiembre de 2007, 05:31 »
0
el algoritmo q buscas es el tipico algoritmo del anagrama...
...,buscalo en internet e intenta entenderlo, realmente tiene solo
unas cuantas lines, pero es algo complejo...

ya sabes... anagrama...

Salu2 !!!