Combinações de caracteres

1. Combinações de caracteres

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 06/01/2013 - 09:59h

Olá , bom dia .

Preciso escrever um algoritmo em c++ para criar combinações entre caracteres . Porém eu vou passar por parâmetro a quantidade de caracteres para combinar e os caracteres também . A lógica é estilo a lei da tabela da verdade .

Vou colocar aqui uma explicação de lógica que me deram para facilitar .

Vamos supor que eu quero criar senhas de três caracteres com a, b e c.
aaa
aab
aac
Aí eu gerei todas as combinações possíveis começando com aa.
Agora...
aba
abb
abc
aca
acb
acc
Agora eu gerei todas as combinações possíveis que começam com a letra a.
Agora, perceba a variação dos caracteres. quando eu começo no aaa, o ultimo caractere tem a variação igual a 1, ou seja aaa, aab e aac, a cada uma combinação que eu gero, eu troco o caractere pelo seguinte. O segundo caractere tem variação 3, ou seja a cada três combinações eu troco o valor do segundo caractere
aba
abb
abc (três se passaram)
aca
acb
acc
E a variação do primeiro caractere é 9, ou seja a cada 9 combinações geradas eu troco o valor do primeiro caractere.
O segredo desse algorítmo é trabalhar com a variação, se eu tenho três caracteres para gerar as combinações de três caracteres então, a variação do último é 3^0 = 1, a variação do penúltimo é 3^1 = 3 e a variação do primeiro é 3^2 = 9

Agora vou colocar aqui o meu código .Só tentei fazer para a primeira parte da lógica , ele contêm erros , mas vou postar mesmo assim . Assim vocês me ajudam .

Obrigada .

O código ...

#include <iostream>
using namespace std ;

int main (int argc , char * argv[]) {
char vet[10];
int n;

for (int i = 1 ; i < 10;i++){
for (int j = 0 ; j < 10 ; j++){
argv [j + 1] = argv [j]; // iguala o segundo caracter ao primeiro
argv [j + 2] = argv [j]; // // iguala o terceiror caracter ao primeiro
n = pow(argc , 0 ); // fiz a quantidade de caracteres p/ combinacoes elevada a zero ,
// a primeira parte da logica que voce me enviou
vet[i] = argv * n ; // o vetor esta recebendo a combinacao . Porem algo falta .

}
cout << vet[i] << "" << ; // escrevendo o vetor
}


}


  


2. Re: Combinações de caracteres

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/01/2013 - 10:18h

Faça uma função recursiva que recebe o alfabeto, um prefixo e o numero de posições que faltam ser preenchidas, e dentro dessa função você percorre o alfabeto, montando novos prefixos e chamando a própria função com o prefixo novo e o tamanho uma unidade menor.


3. Re: Combinações de caracteres

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 06/01/2013 - 10:22h

Obrigada pela dica , porém já vi recursividade . Mas nesta disciplina ainda não . Quero uma solução mais simples .


4. Re: Combinações de caracteres

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/01/2013 - 17:49h

A solução recursiva é a mais simples, tanto em termos de notação quanto pelo fato de que o "trabalho sujo" é feito pelo compilador.

Para fazer de outro modo, você terá de usar mais variáveis de controle, empilhando-as e desempilhando-as manualmente.


5. Re: Combinações de caracteres

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 06/01/2013 - 18:25h

Entendi , obrigada pelo esclarecimento .



  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts