const int Ns = 44;
const int Svec[Ns] = {1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50,75,100,125,150,200,250,300,350,400,500,600,800,1000,1250,1500,2000,2500,3000,3500,4000,5000,6000,7000,8000,9000,10000};
int umapartida(int d, int r){ //Funcao que devolve um n para uma partida com dado de d faces esperando r repeticoes
int n = 0, jogar = 1, Jmax = d*(r-1)+1, i, jogada;
int jaObtidos[d];
void fdprobabilidade(int array, int d, int r, int s){ //Coloca a funcao densidade de probabilidade no vetor apontado que dependa de d, r e s
int i, a, jmax;
jmax = d(r-1)+1;
for(i=0;i<jmax;i++){
array[i]=0;
}
for(i=0; i< s; i++){
a = umapartida(d, r);
array[a-1]++;
}
}
void printarrayfile(int array, int d, int r, FILE file){ //Apenas imprime o array apontado no arquivo apontado
int i, jmax = d*(r-1)+1;
for(i=0; i<jmax; i++){
fprintf(file, "%d\t%d\n", (i+1), array[i]); //print bin e o valor do array
}
fprintf(file, "\n");
}
void printarrayacumulado(int array, int d, int r, FILE file){ //Printa o array acumulado no arquivo apontado
int i, j, soma, jmax = d*(r-1)+1;
int acumulado[jmax];
for(i=0; i<jmax;i++){
soma = 0;
for(j=i; j>=0; j--){
soma = soma + array[j];
}
acumulado[i] = soma;
fprintf(file, "%d\t%d\n", (i+1), acumulado[i]); //print bin e o acumulado ate posicao i
}
fprintf(file, "\n");
}
void printfinal(int array, int d, int r, FILE file){ //Printa o array acumulado ao lado do ja montado
int i, j, soma, jmax = d*(r-1)+1;
int acumulado[jmax];
for(i=0; i<jmax;i++){
soma = 0;
for(j=i; j>=0; j--){
soma = soma + array[j];
}
acumulado[i] = soma;
fprintf(file, "%d\t%d\t%d\n", (i+1), array[i], acumulado[i]); //print bin \t original \t acumulado
}
fprintf(file, "\n");
}
void mediaedesvio(int array, int d, int r, int smax, FILE evolucaomedia, FILE evolucaodesvio){ //FALTA PRINT E TESTE
int i, j, jmax = d(r-1)+1, soma;
double media, desvpad, parcela;
soma = 0;
for(i=0; i<smax;i++){
array[i]=umapartida(d, r);
}
for(i=0; i<smax; i++){
soma = soma + array[i];
media = (double)soma / (double)(i+1);
desvpad = 0;
parcela = 0;
for(j=i; j>=0; j--){
parcela = parcela + (( (double)array[j] - media )*((double)array[j] - media) );
}
if(i!=0){
desvpad = sqrt( parcela/(double)i );
}
fprintf(evolucaomedia, "%d\t%f\n", (i+1), media);
fprintf(evolucaodesvio, "%d\t%f\n", (i+1), desvpad);
}
}
void matrizfdp(int matriz[][NMAX], int array, int d, int r, int s, int h){ //Coloca H fdps na matriz apontada
int i, j, jmax = d(r-1)+1;
for(i=0; i<h; i++){
fdprobabilidade(array, d, r, s);
for(j=0; j<jmax;j++){
matriz[i][j] = array[j];
}
}
}
int main(){
//Inicializacao das variaveis com valores maximos de D, R, S e H
int D, R, S, H;
int i, j, Jmax, n, simulacao, histograma, resultado, soma;
int umHist[NMAX];
int final[MMAX][NMAX];
int faces[]= {4, 6, 8, 10, 12, 20, 365};
double media;
FILE arquivo, arquivo2;
{ //Inicializacao de semente aleatoria e matriz
time_t t;
srand((unsigned) time(&t));
Jmax = NMAX;
H = MMAX;
for(i=0; i<H; i++){
for(j=0; j<Jmax; j++){
final[i][j]=0;
umHist[j]=0;
}
}
}
{ //Histogramas da evolucao com D
/*
S = 1e7; R=2;
include
include
include
include
include
include
include
define MMAX 600
define NMAX 800
using namespace std;
const int Ns = 44; const int Svec[Ns] = {1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50,75,100,125,150,200,250,300,350,400,500,600,800,1000,1250,1500,2000,2500,3000,3500,4000,5000,6000,7000,8000,9000,10000};
int umapartida(int d, int r){ //Funcao que devolve um n para uma partida com dado de d faces esperando r repeticoes int n = 0, jogar = 1, Jmax = d*(r-1)+1, i, jogada; int jaObtidos[d];
}
void fdprobabilidade(int array, int d, int r, int s){ //Coloca a funcao densidade de probabilidade no vetor apontado que dependa de d, r e s int i, a, jmax; jmax = d(r-1)+1; for(i=0;i<jmax;i++){ array[i]=0; } for(i=0; i< s; i++){ a = umapartida(d, r); array[a-1]++; } }
void printarrayfile(int array, int d, int r, FILE file){ //Apenas imprime o array apontado no arquivo apontado int i, jmax = d*(r-1)+1; for(i=0; i<jmax; i++){ fprintf(file, "%d\t%d\n", (i+1), array[i]); //print bin e o valor do array } fprintf(file, "\n"); }
void printarrayacumulado(int array, int d, int r, FILE file){ //Printa o array acumulado no arquivo apontado int i, j, soma, jmax = d*(r-1)+1; int acumulado[jmax]; for(i=0; i<jmax;i++){ soma = 0; for(j=i; j>=0; j--){ soma = soma + array[j]; } acumulado[i] = soma; fprintf(file, "%d\t%d\n", (i+1), acumulado[i]); //print bin e o acumulado ate posicao i } fprintf(file, "\n"); }
void printfinal(int array, int d, int r, FILE file){ //Printa o array acumulado ao lado do ja montado int i, j, soma, jmax = d*(r-1)+1; int acumulado[jmax]; for(i=0; i<jmax;i++){ soma = 0; for(j=i; j>=0; j--){ soma = soma + array[j]; } acumulado[i] = soma; fprintf(file, "%d\t%d\t%d\n", (i+1), array[i], acumulado[i]); //print bin \t original \t acumulado } fprintf(file, "\n"); }
void mediaedesvio(int array, int d, int r, int smax, FILE evolucaomedia, FILE evolucaodesvio){ //FALTA PRINT E TESTE int i, j, jmax = d(r-1)+1, soma; double media, desvpad, parcela; soma = 0; for(i=0; i<smax;i++){ array[i]=umapartida(d, r); } for(i=0; i<smax; i++){ soma = soma + array[i]; media = (double)soma / (double)(i+1); desvpad = 0; parcela = 0; for(j=i; j>=0; j--){ parcela = parcela + (( (double)array[j] - media )*((double)array[j] - media) ); } if(i!=0){ desvpad = sqrt( parcela/(double)i ); } fprintf(evolucaomedia, "%d\t%f\n", (i+1), media); fprintf(evolucaodesvio, "%d\t%f\n", (i+1), desvpad); } }
void matrizfdp(int matriz[][NMAX], int array, int d, int r, int s, int h){ //Coloca H fdps na matriz apontada int i, j, jmax = d(r-1)+1; for(i=0; i<h; i++){ fdprobabilidade(array, d, r, s); for(j=0; j<jmax;j++){ matriz[i][j] = array[j]; } } }
int main(){
//Inicializacao das variaveis com valores maximos de D, R, S e H int D, R, S, H; int i, j, Jmax, n, simulacao, histograma, resultado, soma; int umHist[NMAX]; int final[MMAX][NMAX]; int faces[]= {4, 6, 8, 10, 12, 20, 365}; double media; FILE arquivo, arquivo2;
{ //Inicializacao de semente aleatoria e matriz time_t t; srand((unsigned) time(&t)); Jmax = NMAX; H = MMAX; for(i=0; i<H; i++){ for(j=0; j<Jmax; j++){ final[i][j]=0; umHist[j]=0; } } }
{ //Histogramas da evolucao com D /* S = 1e7; R=2;
D = 4; arquivo = fopen("histograma_D4_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 6; arquivo = fopen("histograma_D6_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 8; arquivo = fopen("histograma_D8_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 10; arquivo = fopen("histograma_D10_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 12; arquivo = fopen("histograma_D12_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 20; arquivo = fopen("histograma_D20_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
D = 365; arquivo = fopen("histograma_D365_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo); */ }
{ //Histogramas da evolucao com R /* S = 1e7; D = 6;
R = 2; arquivo = fopen("histograma_D6_R2_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
R = 3; arquivo = fopen("histograma_D6_R3_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
R = 5; arquivo = fopen("histograma_D6_R5_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
R = 10; arquivo = fopen("histograma_D6_R10_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
R = 20; arquivo = fopen("histograma_D6_R20_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo); */ }
{ // Alusoes /* S = 1e7; D = 2; R = 3; //Md5 (League of Legends) arquivo = fopen("AlusaoAoLOL_histograma_D2_R3_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo);
R = 4; //Md7 (Alusao final da NBA) arquivo = fopen("AlusaoANBA_histograma_D2_R4_S1e7.txt", "w+"); fdprobabilidade(umHist, D, R, S); printfinal(umHist, D, R, arquivo); */ }
{ //Evolucao media e desvio / D = 6; R = 2; S = 1e5; arquivo = fopen("evolucaomedia_D6_R2_S1e5.txt", "w+"); arquivo2 = fopen("evolucaodesvio_D6_R2_S1e5.txt", "w+"); mediaedesvio(umHist, D, R, S, arquivo, arquivo2); / }
{ //Teorema Central do Limite / D = 6; R = 2, H = 1e5; for(int k=0; k<Ns; k++){ ofstream data; S=Svec[k]; char str[80]; sprintf(str, "histmedias_S%d.dat", S); data.open(str); for(i=0; i<H; i++){ soma = 0; fdprobabilidade(umHist, D, R, S); Jmax = D(R-1)+1; for(j=0; j<Jmax; j++){ soma = soma + (j+1)umHist[j]; } media = (double)soma / (double)S; data << media << endl; } data.close(); } / }
{ // Construcao da matriz final / Jmax = D(R-1)+1; matrizfdp(final, umHist, D, R, S, H);
for(i=0; i<H; i++){ // Imprime fdp ja em porcentagem for(j=0; j<Jmax; j++){ printf("%.2f%%\t", ((double)final[i][j]/(double)S)100); } printf("\n"); } / }
printf("Pronto"); return 0; }