Essas três palavrinhas fazem parte de clássicos da computação e matemática. então resolvi explicá-las e demonstrar com a linguagem C.
Arranjo: são grupos sem repetição, ou seja, se eu tenho os elementos 1, 2 e 3, eu posso agrupá-los em dupla (conjuntos de dois elementos) para formar os seguintes números: 12, 13, 21, 23, 31, 32.
O arranjo é a base da Combinação e da permutação. Sua fórmula é descrita assim:
A n,p = n!/(n-p)!
Onde “n” é 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 já entendemos a base, vamos para o próximo, a Combinação.
Combinação: é um Arranjo onde deveremos ignoramos os grupos que contenha os mesmo elementos, independente da ordem.
No exemplo do Arranjo, nós consideramos conjuntos distintos os números 12 e 21, porque numericamente são diferentes.
Mas imagine o caso onde temos um João e uma Maria. Tanto faz se o conjunto é (João, Maria) ou (Maria, João), pois formam o mesmo casamento . Então essa é a Combinação: 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 é possível compor a fórmula da Combinação se baseando na fórmula do Arranjo.
Vamos ver um exemplo: Qual a quantidade de duplas possíveis com as pessoas Adriana, Xenofreuda e Tonha.
C 3,2 = 3!/2!(3-2)! = 3.2.1/2.1.1! = 3
E finalmente a Permutação.
Permutação: Arranjos onde a quantidade de elementos é igual ao tamanho do grupo, utilizado muito em anagramas. Anagramas são as variações possíveis de se fazer com as letras de uma palavra, por exemplo a palavra “mel”: mle, lme, lem, eml, elm.
Sua formula é um simples fatorial:
P n = n!
Para o exemplo:
P 3 = 3! = 3.2.1 = 6
Uma vez que entendemos a teoria, vamos colocá-la na pratica dentro da computação com a linguagem C.
Para isso, usei conceitos de Recursividade e Números 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 opções.
wcout << "Qual operação deseja realizar?" << endl;
wcout << "\t1-) Fatorial" << endl;
wcout << "\t2-) Arranjo" << endl;
wcout << "\t3-) Combinação" << endl;
wcout << "\t4-) Permutação" << endl;
wcout << "\t5-) Sair" << endl;
wcout << "\tOpção: ";int opcao, quantidadeElementos, tamanhoGrupo;
long double resultado;scanf("%i", &opcao);
switch (opcao)
{
case 1:
wcout << "Infome um número para calcular seu fatorial: ";
scanf("%i", &quantidadeElementos);resultado = CalcularFatorial(quantidadeElementos);
break;
case 2:
wcout << "Cálculo de Arranjo" << endl;
wcout << "Infome a quantidade de elementos: ";
scanf("%i", &quantidadeElementos);
wcout << "Infome o tamanho do grupo: ";
scanf("%i", &tamanhoGrupo);resultado = CalcularArranjo(quantidadeElementos, tamanhoGrupo);
break;
case 3:
wcout << "Cálculo de Combinação" << endl;
wcout << "Infome a quantidade de elementos: ";
scanf("%i", &quantidadeElementos);
wcout << "Infome o tamanho do grupo: ";
scanf("%i", &tamanhoGrupo);resultado = CalcularCombinacao(quantidadeElementos, tamanhoGrupo);
break;
case 4:
wcout << "Cálculo de Permutação" << endl;
wcout << "Infome a quantidade de elementos: ";
scanf("%i", &quantidadeElementos);resultado = CalcularPermutacao(quantidadeElementos);
break;
}if(opcao > 4) // -> Encerra a aplicação
break;wcout << endl << "Resultado: " << resultado << endl << endl;
wcout << "Pressione enter para continuar...";
fflush(stdin);
getchar();
}wcout << endl << "Fim!";
/*fflush(stdin);
getchar();*/
}
Percebam que, como vimos na teoria, é possível aproveitar o Arranjo para compor a formula da Combinação, e fiz exatamente isso na função CalcularCombinacao().
Outro ponto é que, para os resultados eu tive que apelar para o tipo long double (96 bits), pois quando falamos em fatoriais, os números podem crescer freneticamente.
Acompanhe alguns testes:
É isso daí pessoal.
Já calcularam qual o números de combinações possíveis de maquiagem de maquiagem da sua namorada, mulher ou enrolada?
Você irá se surpreender O.o
1 comentários:
Cara esclareceu muito mesmo valew
Postar um comentário