Usuario
Formar palabras de una sola

Pregunta
-
Hola, tengo que hacer un programa que de una palabra que se escriba en un textbox, forme todas las posibles y las muestre en una lista asi com el numero de palabras formadas, ya lo he intentado pero la verdad soy muy malo en esto pero quiero aprender.
lo que he hecho primero es poner un text box donde se escribira la palabra
un list box donde se pondra cada una de las palabras formadas.
un label donde pondra el total de palabras
y un boton donde empezara la accion.
lo que creia es que con un bucle se podria pero no!!!
La clave creo ya la encontre es recorrer la primer letra una posición y la segunda ponerla en la primer posición y despues las demas letras, asi hasta que la palabra se repita.se detendra el proceso(por ello crei en un bucle, pero no se como escribirlo). ej SAL
ASL
dim nueva as string
nueva = txtbx1.text.chars(0 +1) & txtbx.text.chars(1-1)& txtbx.text.chars(2)
list_listbx.item.add(nueva)
el problema es que cuando escriban una palabra de 15 letras :(
espero me puedan ayudar ! a lo hago en visual basic 2008 express
Todas las respuestas
-
hola
algo como esto
Generar una Combinatoria de elementos
sino vi mal el codigfo es para VB6, pero por la idea es la misma
Not: cuando dice Command1 se refiere a un boton
para contar la cantidad de items generados podrias suar
ListBox.Items.Count
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Gracias no use el código tal cúal pero me esta sirviendo algo de su estructura, lo que buscaba es solo poner las palabras con todas las letras, en el ejemplo que me mandaste pone muchas combinaciones pero incluyendo los de 1 dato. y mira siguiendo lo que comentaba de recorrer solo la letra principal hasta el final (con esto se forman nuevas palabras, con todos los caractéres) pude crear esta parte del código gracias a tu ayuda(por que no me acordaba de las funciones LEN y MID que me funcionaron bien).
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim primero As Integer = 0
Dim segundo As Integer = 1
Dim tercero As Integer = 3
Dim original As String = ""
For i = 0 To Palabra_txt.Text.Count + 1
If tercero >= Palabra_txt.Text.Count + 2 Then Exit For
If primero > 0 Then
lista_listbox.Items.Add(Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original)))
original = Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original))
Else
lista_listbox.Items.Add(Palabra_txt.Text.Chars(primero + 1) & Palabra_txt.Text.Chars(segundo - 1) & Mid(Palabra_txt.Text, tercero, Len(Palabra_txt.Text)))
original = Palabra_txt.Text.Chars(primero + 1) & Palabra_txt.Text.Chars(segundo - 1) & Mid(Palabra_txt.Text, tercero, Len(Palabra_txt.Text))
End If
primero = primero + 1
segundo = segundo + 1
tercero = tercero + 1
Next
use como ejemplo la palabra toluca de 6 caracteres, si uso una palabra de 2 letras me causa error supongo. pero recorre bien la primer letra hasta la ultima posicion formando nuevas palabras. ahora estoy trabajando para ver como hacer que se repita este proceso hasta que la palabra llegue a ser toluca y ahi detener el proceso.jaja crei que era mas sencillo. Gracias por tu ayuda.
-
Aqui el código que use ya funciona al 100%. Gracias por tu ayuda ya me estaba dando por vencido jaja.
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
lista_listbox.Items.Clear()
If Palabra_txt.Text = "" Then
MsgBox(
"Ingrese una palabra", MsgBoxStyle.Information)
Palabra_txt.Focus()
Exit Sub
End If
Dim primero As Integer = 0
Dim segundo As Integer = 1
Dim tercero As Integer = 3
Dim original As String = ""
For i = 0 To 1000
If tercero >= Palabra_txt.Text.Count + 2 Then
primero = 0
segundo = 1
tercero = 3
If original = Palabra_txt.Text Then
total_lbl.Text = lista_listbox.Items.Count
MsgBox(
"En total se pudieron formar " & lista_listbox.Items.Count & " palabras", MsgBoxStyle.Information)
Exit For
End If
End If
If primero > 0 Then
lista_listbox.Items.Add(Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original)))
original = Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original))
Else
If original = "" Then
lista_listbox.Items.Add(Palabra_txt.Text.Chars(primero + 1) & Palabra_txt.Text.Chars(segundo - 1) & Mid(Palabra_txt.Text, tercero, Len(Palabra_txt.Text)))
original = Palabra_txt.Text.Chars(primero + 1) & Palabra_txt.Text.Chars(segundo - 1) & Mid(Palabra_txt.Text, tercero, Len(Palabra_txt.Text))
Else
lista_listbox.Items.Add(Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original)))
original = Mid(original, 1, primero) & original.Chars(primero + 1) & original.Chars(segundo - 1) & Mid(original, tercero, Len(original))
End If
End If
primero = primero + 1
segundo = segundo + 1
tercero = tercero + 1
Next
End Sub
- Propuesto como respuesta Enmanuel Grullard lunes, 8 de noviembre de 2010 19:30