Na verdade é um exercício de Análise Combinatória - AC. Mas estava tentando gerar uma calculadora de análise combinatória que vi em visual basic para ser usada no excel (segue arquivo abaixo). Tentei uma aproximação diferente para poder retirar o "lixo" (combinações indesejadas) e me deparei com o seguinte problema: Se você fizer a AC de um número muito grande (milhões de combinações), o excel não vai suportar. Por isso pensei em fazer essa "Calculadora de AC" utilizando colunas dentro de uma matriz com a linguagem de programação que comecei a aprender. Assim poderia fazer a AC não só de números, mas de qualquer coisa que quisesse ('char', 'int' ou 'string' como é o caso).
A opção que achei foi separar os resultados em vários arquivos csv ou txt. Tentei fazer com vetores bidimensionais, mas toda vez que compilava, entrava em loop infinito (ainda estou apanhando do parâmetro 'for'). Por isso parti para string.
Meu primeiro código (exercício de soma de vetores) foi assim:
#include <iostream>
#include <fstream>
int main()
{
std::ofstream meuarquivo("combinacaosoma.csv");
int x0, s0;
int n=10;
int total=0;
int soma00a10[10][10] = {{1,1,1,0,0,1,1,0,0,0}, {1,1,1,0,0,1,0,1,0,0}, {1,1,1,0,0,1,0,0,1,0}, {1,1,1,0,0,1,0,0,0,1}, {1,1,1,0,0,0,1,1,0,0}, {1,1,1,0,0,0,1,0,1,0}, {1,1,1,0,0,0,1,0,0,1}, {1,1,1,0,0,0,0,1,1,0}, {1,1,1,0,0,0,0,1,0,1}, {1,1,1,0,0,0,0,0,1,1}};
int soma11a20[10][10] = {{1,1,1,0,0,1,1,0,0,0}, {1,1,1,0,0,1,0,1,0,0}, {1,1,1,0,0,1,0,0,1,0}, {1,1,1,0,0,1,0,0,0,1}, {1,1,1,0,0,0,1,1,0,0}, {1,1,1,0,0,0,1,0,1,0}, {1,1,1,0,0,0,1,0,0,1}, {1,1,1,0,0,0,0,1,1,0}, {1,1,1,0,0,0,0,1,0,1}, {1,1,1,0,0,0,0,0,1,1}};
int soma21a30[10][10] = {{1,1,1,0,0,1,1,0,0,0}, {1,1,1,0,0,1,0,1,0,0}, {1,1,1,0,0,1,0,0,1,0}, {1,1,1,0,0,1,0,0,0,1}, {1,1,1,0,0,0,1,1,0,0}, {1,1,1,0,0,0,1,0,1,0}, {1,1,1,0,0,0,1,0,0,1}, {1,1,1,0,0,0,0,1,1,0}, {1,1,1,0,0,0,0,1,0,1}, {1,1,1,0,0,0,0,0,1,1}};
int soma31a40[10][10] = {{1,1,1,0,0,1,1,0,0,0}, {1,1,1,0,0,1,0,1,0,0}, {1,1,1,0,0,1,0,0,1,0}, {1,1,1,0,0,1,0,0,0,1}, {1,1,1,0,0,0,1,1,0,0}, {1,1,1,0,0,0,1,0,1,0}, {1,1,1,0,0,0,1,0,0,1}, {1,1,1,0,0,0,0,1,1,0}, {1,1,1,0,0,0,0,1,0,1}, {1,1,1,0,0,0,0,0,1,1}};
int soma41a50[10][10] = {{1,1,1,0,0,1,1,0,0,0}, {1,1,1,0,0,1,0,1,0,0}, {1,1,1,0,0,1,0,0,1,0}, {1,1,1,0,0,1,0,0,0,1}, {1,1,1,0,0,0,1,1,0,0}, {1,1,1,0,0,0,1,0,1,0}, {1,1,1,0,0,0,1,0,0,1}, {1,1,1,0,0,0,0,1,1,0}, {1,1,1,0,0,0,0,1,0,1}, {1,1,1,0,0,0,0,0,1,1}};
int somatotal[10][10];
for(x0=0 ; x0<n ; x0++)
{
for(s0=0 ; s0<n ; s0++)
{
somatotal[x0][s0] = soma00a10[x0][s0] + soma11a20[x0][s0] + soma21a30[x0][s0] + soma31a40[x0][s0] + soma41a50[x0][s0];
}
}
for(x0=0 ; x0<n ; x0++)
{
for(s0=0 ; s0<n ; s0++)
{
meuarquivo << somatotal[x0][s0] << ",";
total++;
}
meuarquivo << std::endl;
}
meuarquivo.close();
std::cout << total << std::endl;
return 0;
}
A distribuição que eu queria e consegui foi essa:
Só me falta agora implementar a quebra de arquivos para fechar esse exercício.
Espero ter explicado.
Fui.
gerador de combinacao e permutacao (com opcoes).zip