/* Esta rotina devolve o individuo escolhido pelo mecanismo da roleta russa */ int roleta(int nind, int *fo_pop) { register int j; double aux; double *escala, *fracao; int escolhido; fracao = cria_vetor_double(nind); escala = cria_vetor_double(nind); int soma = 0; for (int j=0; j < nind; j++){ soma += fo_pop[j]; printf("fo_pop[%d] = %d \n",j,fo_pop[j]); } for (int j=0; j < nind; j++){ fracao[j] = (double) fo_pop[j]/soma; printf("fracao[%d] = %f \n",j,fracao[j]); } escala[0] = fracao[0]; for (int j=1; j < nind; j++){ escala[j] = escala[j-1] + fracao[j]; printf("escala[%d] = %f \n",j,escala[j]); } aux = randomico(0,1); j = 0; while (escala[j] <= aux) j++; escolhido = j; free(fracao); free(escala); return escolhido; } /* cria memoria para um vetor de tam posicoes com elementos do tipo double */ double *cria_vetor_double(int tam) { double *vetor; vetor = (double *) malloc(tam*sizeof(double)); if (!vetor){ printf("Falta memoria para alocar o vetor de ponteiros"); exit(1); } return vetor; }