Essas tres palavrinhas fazem parte de classicos da computacao e matematica. entao resolvi explica-las e demonstrar com a linguagem C. Arranjo: sao grupos sem repeticao, ou seja, se eu tenho os elementos 1, 2 e 3, eu posso agrupa-los em dupla (conjuntos de dois elementos) para formar os seguintes numeros: 12, 13, 21, 23, 31, 32. O arranjo e a base da Combinacao e da permutacao. Sua formula e descrita assim: A n,p = n!/(n-p)! Onde n e o quantidade de elementos e p o tamanho do grupo. No exemplo mencionado temos 3 elementos (quantidade) colocados em par (tamanho do grupo = 2). A 3,2 = 3!/(3-2)! = 3.2.1/1! = 6 Agora que ja entendemos a base, vamos para o proximo, a Combinacao. Combinacao: e um Arranjo onde deveremos ignoramos os grupos que contenha os mesmo elementos, independente da ordem. No exemplo do Arranjo, nos consideramos conjuntos distintos os numeros 12 e 21, porque numericamente sao diferentes. Mas imagine o caso onde temos um Joao e uma Maria. Tanto faz se o conjunto e (Joao, Maria) ou (Maria, Joao), pois formam o mesmo casamento . Entao essa e a Combinacao: Arranjos que desconsideramos demais conjuntos que contenham o mesmo elemento independente da ordem. C n,p = A n,p/p! = n!/p!(n-p)! Percebam que e possivel compor a formula da Combinacao se baseando na formula do Arranjo. Vamos ver um exemplo: Qual a quantidade de duplas possiveis com as pessoas Adriana, Xenofreuda e Tonha. C 3,2 = 3!/2!(3-2)! = 3.2.1/2.1.1! = 3 E finalmente a Permutacao. Permutacao: Arranjos onde a quantidade de elementos e igual ao tamanho do grupo, utilizado muito em anagramas. Anagramas sao as variacoes possiveis de se fazer com as letras de uma palavra, por exemplo a palavra mel: mle, lme, lem, eml, elm. Sua formula e um simples fatorial: P n = n! Para o exemplo: P 3 = 3! = 3.2.1 = 6 Uma vez que entendemos a teoria, vamos coloca-la na pratica dentro da computacao com a linguagem C. Para isso, usei conceitos de Recursividade e Numeros Fatoriais. // -> Para poder usar o "wcout" e o cout #include<iostream> using namespace std; long double CalcularFatorial(int numero) { if(numero < 2) return numero; return numero * CalcularFatorial(numero - 1); } long double CalcularArranjo(int quantidadeElementos, int tamanhoGrupo) { return CalcularFatorial(quantidadeElementos)/CalcularFatorial(quantidadeElementos - tamanhoGrupo); } long double CalcularCombinacao(int quantidadeElementos, int tamanhoGrupo) { return CalcularArranjo(quantidadeElementos, tamanhoGrupo)/CalcularFatorial(tamanhoGrupo); } long double CalcularPermutacao(int quantidadeElementos) { return CalcularFatorial(quantidadeElementos); } void main() { setlocale(LC_ALL, "Portuguese"); // -> Permitir acentos. while(true) { // -> Limpa a tela. system("cls"); // -> Monta o menu de opcoes. wcout << "Qual operacao deseja realizar?" << endl; wcout << "\t1-) Fatorial" << endl; wcout << "\t2-) Arranjo" << endl; wcout << "\t3-) Combinacao" << endl; wcout << "\t4-) Permutacao" << endl; wcout << "\t5-) Sair" << endl; wcout << "\tOpcao: "; int opcao, quantidadeElementos, tamanhoGrupo; long double resultado; scanf("%i", &opcao); switch (opcao) { case 1: wcout << "Infome um numero para calcular seu fatorial: "; scanf("%i", &quantidadeElementos); resultado = CalcularFatorial(quantidadeElementos); break; case 2: wcout << "Calculo de Arranjo" << endl; wcout << "Infome