TheMaker 0 Denunciar post Postado Dezembro 10, 2004 Olá...Seguinte... supondo que tenho um string 'forum do site imaster'...Esse String tem 4 Palavras (nesse exemplo)...Preciso de uma rotina que crie todas as combinações possiveis a partir desse stringoriginal...Ex:imaster forum do site;site imaster forum do;do site imaster forum;imaster do site forum; E assim por diante...Me ajudem!!!Qualquer dica que resolva é valida....Obrigado! :) Compartilhar este post Link para o post Compartilhar em outros sites
apocalipse 0 Denunciar post Postado Dezembro 10, 2004 Salve TheMakerBom voce ta querendo algo do tipo Combinacao de n em p ne ... tipo na matematica...CNPBom vou procurar lagumac coisa aqui a te mando se achar... velho nao sei se voce conhece isso que to falando ... tenho encontrado com progrmadores super novos e que ainda nao viram esta materia .. entao na se sinta ofendido.MSN OtacilioRicardo@hotmail.comICQ 337637102 noturno Compartilhar este post Link para o post Compartilhar em outros sites
TheMaker 0 Denunciar post Postado Dezembro 10, 2004 Já ouvi falar sim... Quebrei um pouco a cabeça agora a pouco e já consigo o resultado q eu queria Ficou assim: Procedure TShake.LoadShakeWordsToRich(ThemeStr : String; Rich : TRichEdit);LabelGoOut;VarArrayCol : Array OF Integer;X,Y,A1,A2 : Integer;StrTemp : String;begin IF Trim(ThemeStr) = '' Then Abort;Common.ExtractWords(ThemeStr,Common.WordsCount(ThemeStr));//separa as palavras do parametro Themestr em um array globalSetLength(ArrayCol,Length(Common.Words)); Y := 0;//Carrrga o array numerico c/ quantidade de palavras For X := 0 To High(Common.Words) Do Begin ArrayCol[Y] := 0; Inc(Y); End;// Inicio do Processo... While ArrayCol[0] < Length(ArrayCol) Do Begin Application.ProcessMessages; //Evita combinações tipo 011(Com repetição) For A1 := 0 To High(ArrayCol) Do Begin For A2 := A1+1 To High(ArrayCol) Do Begin IF ArrayCol[A1] = ArrayCol[A2] Then Begin Goto GoOut; End;; End; End; //Carrega StrTemp com Sequencia de combinação.. StrTemp := ''; For X := 0 To High(ArrayCol) Do Begin IF ArrayCol[X] < Length(ArrayCol) Then Begin StrTemp := StrTemp + Common.Words[ArrayCol[X]][0]; End Else Begin Goto GoOut; End; End; Rich.Lines.Add(Trim(StrTemp)); GoOut: Inc(ArrayCol[Length(ArrayCol)-1]); //Faz o cronometro andar... For Y := 0 To High(ArrayCol) Do Begin IF ArrayCol[Y] = Length(ArrayCol) Then Begin ArrayCol[Y] := 0; Inc(ArrayCol[Y-1]); End; End; End;End;Se tiver algo que melhore a rotina seria bom... afinal ainda acho q está muito grande... De qualquer forma valeu pela Moral!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites