Follow 0 Denunciar post Postado Janeiro 5, 2010 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
Juliano.net 2 Denunciar post Postado Janeiro 5, 2010 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
Follow 0 Denunciar post Postado Janeiro 5, 2010 Ai que ta eu não consigo sair do visual, até tinha feito algo http://img96.imageshack.us/i/anagrama.jpg/ Eu só solicito um exemplo mesmo, que eu tento adaptar. To aprendendo, aceito recomendações de leitura :) Compartilhar este post Link para o post Compartilhar em outros sites
scorpio 7 Denunciar post Postado Janeiro 6, 2010 Você precisa fazer todas as combinações possiveis? Compartilhar este post Link para o post Compartilhar em outros sites
Follow 0 Denunciar post Postado Janeiro 6, 2010 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
Daniel LM Costa 2 Denunciar post Postado Janeiro 19, 2010 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
Daniel LM Costa 2 Denunciar post Postado Janeiro 19, 2010 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
Follow 0 Denunciar post Postado Janeiro 20, 2010 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
quintelab 91 Denunciar post Postado Janeiro 20, 2010 Poste toda a mensagem de erro, fica mais fácil. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Follow 0 Denunciar post Postado Janeiro 20, 2010 Devo tar fazendo alguma besteira na hora decompilar Compartilhar este post Link para o post Compartilhar em outros sites
Daniel LM Costa 2 Denunciar post Postado Janeiro 22, 2010 Esse erro dá quando você não coloca o controle com esse nome. Botei no 4shared http://www.4shared.com/file/204080754/4179c19d/Gerador_de_Palavras.html Compartilhar este post Link para o post Compartilhar em outros sites
Follow 0 Denunciar post Postado Janeiro 22, 2010 Esse erro dá quando você não coloca o controle com esse nome. Botei no 4shared http://www.4shared.com/file/204080754/4179c19d/Gerador_de_Palavras.html Muito obrigado, vou estudar a source pra ver como errei. Moderação pode colocar como resolvido =] Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 22, 2010 Poste a solução aqui depois. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Follow 0 Denunciar post Postado Janeiro 24, 2010 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
quintelab 91 Denunciar post Postado Janeiro 25, 2010 Utilize outro tópico para outra dúvida. Se não ficará muito bagunçado. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Follow 0 Denunciar post Postado Janeiro 26, 2010 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