Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Follow

[Resolvido] Programinha para gerar palavras a partir do caracter

Recommended Posts

Primeiramente peço desculpas se estou postando em area errada. Atualmente estou brigando um um script em php mas sem resultados muitos satisfatorios, ai pensei porque não tentar em outra area.

Pensei no visual Studio. O que eu necessito atualmente é algo para gerar palavras a partir de caracter e tamanho denifido se salve as linhas no banco de dados mysql, me disseram que isso é Anagrama.

Como meu conhecimento é quase 0 e eu to apanhando com logica não to conseguindo fazer algo que aparentemente é simples, por isso apelo pela ajuda de vocês. Vou exemplificar mais ou menos a minha ideia:

 

Tamanho do texto a ser gerado: 3

Caracteres: a, b

 

Resultados:

 

a

b

aa

ab

ba

bb

aaa

aab

aba

abb

baa

bab

bba

bbb

 

Suponhamos que fosse numérico ao invés de texto

 

Tamanho do texto a ser gerado: 3

Caracteres: 0, 1

 

Resultados:

 

0

1

00

01

10

11

000

001

010

011

100

101

110

111

 

Pelo pouco que entendi eu teria que montar o array com caracteres um while e o for next. Alguem poderia me ajudar a montar o programinha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Como o tempo tá corrido e não dá pra montar o algoritmo pra você, sugiro que use recursividade e que inicie ilustrando um algoritmo de maneira visual mesmo (caixas, repetições, etc). Isso vai facilitar na compreensão do algoritmo base e escrita do código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa fazer todas as combinações possiveis?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato e com repetição de caracter. Eu to começando com programação e ja que queria algo que gere nunca a mesma palavra sempre uma variante. Amora é diferente de amora que é diferente de AmorA e assim vai, pegar uma palavra para gerar variantes, no meu caso é caracter :)

No caso minha ideia é indiferente se é caracter ocidental, arabico, Russo, hiragana, etc ou combinados importante que gere as possibilidades. Um anagrama misto praticamente :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu adoro esse lance de permutação, tanto que reprovei na ufrj rsss

 

Existem coisas que você deve analisar como repetição de caracteres, tanto no anagrama, como na listas de caracteres.

 

Por exemplo: Anagremas com OMO

 

OOM

OMO

MOO

Sendo que se você substituir OMO por OMX ou seja admitir que as letras "O" são diferentes teriamos

 

OMX

OXM

XMO

XOM

MOX

MXO

 

Isso é um ponto pois se o usuário, que sempre faz besteira, é da natureza dele, vai colocar abac ou seja dois "a" isso pode gerar resultados duplicado e você tem que tratar isso.

 

Com relação ao número de caracteres se você informar 3 caracteres é o máximo se sim você tem que formar o seu loop para palavras com 1 ,2 e 3 caracteres, assim acho mais fácil.

 

Como eu faria em vb.net ??

Código sem validação, dá uma olhada pois não testei

 

dim Palavra as string = ""

dim Car() as string = txtCarecteres.text.split()

 

'Loop do tamanho da palavra

for i as integer = 1 to cint(txtTamanho.text) step 1

 

'Loop para formar a palavra

for i2 as integer = 1 to i

 

***o problema está aqui****

 

next

 

next

 

 

Você tem fazer loop nas letras e ir permutando como no sistema de numeração quando chegar no ultimo item o nivel anterior é adinicionado, e o nivel atual volta ao primeiro item

 

0

1

2

...

9

10

11

12

...

19 chega ao fim na unidade

20 decimal é acrescido e unidade volta ao primeiro item do array

 

O problema esta no fato do seu loop não ser fixo, ou seja com o número de caracteres fixo, se você faz com 3 carecteres sempre fica

 

 

for letra1 = 0 to car().lenght - 1

 

 

for letra2 = 0 to car().lenght - 1

 

 

for letra3 = 0 to car().lenght - 1

 

palavra = letra1 & letra2 & letra3

 

next

 

next

 

next

 

onde car() é o array com os caracteres que podem ser usados

 

se achar uma solução escrevo aqui, não é difícil mas não é tão simples

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se você já conseguiu caso não usa esse aqui

 

 

Crie em um formulário com

 

3 TextBox nomes: cmpCaracteres ; txtPalavras ; cmpTamanho

1 CommandButton nome: cmdGerar

 

E cola esse cara, não deu looping infinito e isso é muito importante

 

 

 Private Sub cmdGerar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGerar.Click
        Dim Palavra As String
        Dim MaxLen As Integer
        Dim Car As New ArrayList

        'Monta o array e elimina os caracteres repetidos 
        For i As Integer = 0 To cmpCaracteres.Text.Length - 1
            If Not Car.Contains(cmpCaracteres.Text.Substring(i, 1)) Then Car.Add(cmpCaracteres.Text.Substring(i, 1))
        Next

        MaxLen = CInt(cmpTamanho.Text)

        'Looping para o tamanho das palavras
        For i1 As Integer = 0 To MaxLen - 1

            Dim PL(i1) As String

            'Informa que o caracter atual para todas as posições da palavra é o 0 (zero)
            'Ou seja o primeiro item do arraylist Car
            For i2 As Integer = 0 To i1
                PL(i2) = 0
            Next



            Do
                'Reseta a palavra
                Palavra = String.Empty

                'Preenche a palavra com cada posição do arraylist
                For i2 As Integer = 0 To i1
                    Palavra = Car(PL(i2)) & Palavra
                Next

                'Insere a palavra no textbox
                txtPalavras.Text &= Palavra & vbCrLf

                'Incrementa o contador em uma unidade
                'Caso item atual seja o ultimo, o nível é resetado, contudo se for o ultima posição ele sai do looping
                For i As Integer = 0 To i1
                    If PL(i) = Car.Count - 1 Then
                        If (i = i1) Then Exit Do
                        PL(i) = 0
                    Else
                        PL(i) += 1
                        Exit For
                    End If
                Next


            Loop



        Next




    End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei criar o formulario como voce me orientou mas esta dando erro de namespace,desculpe sou muito leigo e to tnetnando aprender, veja como esta meu codigo e obrigado pela ajuda

 

Public Class gerador Beta

    Private: Sub cmdGerar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGerar.Click
        Dim Palavra As String
        Dim MaxLen As Integer
        Dim Car As New ArrayList

        'Monta o array e elimina os caracteres repetidos 
        For i As Integer = 0 To cmpCaracteres.Text.Length - 1
            If Not Car.Contains(cmpCaracteres.Text.Substring(i, 1)) Then Car.Add(cmpCaracteres.Text.Substring(i, 1))
        Next

        MaxLen = CInt(cmpTamanho.Text)

        'Looping para o tamanho das palavras
        For i1 As Integer = 0 To MaxLen - 1

            Dim PL(i1) As String

            'Informa que o caracter atual para todas as posições da palavra é o 0 (zero)
            'Ou seja o primeiro item do arraylist Car
            For i2 As Integer = 0 To i1
                PL(i2) = 0
            Next
            Do
                'Reseta a palavra
                Palavra = String.Empty

                'Preenche a palavra com cada posição do arraylist
                For i2 As Integer = 0 To i1
                    Palavra = Car(PL(i2)) & Palavra
                Next

                'Insere a palavra no textbox
                txtPalavras.Text &= Palavra & vbCrLf

                'Incrementa o contador em uma unidade
                'Caso item atual seja o ultimo, o nível é resetado, contudo se for o ultima posição ele sai do looping
                For i As Integer = 0 To i1
                    If PL(i) = Car.Count - 1 Then
                        If (i = i1) Then Exit Do
                        PL(i) = 0
                    Else
                        PL(i) += 1
                        Exit For
                    End If
                Next
            Loop
        Next
    End Sub

End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

era apenas o controle que tava com nome errado pelo que notei. Outra duvida como eu faria para salvar os resultados no mysql. Ja possuo o mysql conector.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sei que bagunçaria quintelab eu achei que estava resolvido comecei a testar um pouco e vi não sei se seria apropriado debater outro topico do mesmo assunto. Aqui por exemplo testei com 6 caracteres BANban e tamanho 6, resultado programa nem responde isso num pc simples C2D e6400 2 gb e um xeon quad core 16 gb que pedi pra testarem, simplesmente a aplicação trava. Não sei se é ma sorte minha ou se realmente tem algo errado nesse loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.