Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/01/2012, 23:17
Avatar de FelipePower
FelipePower
 
Fecha de Ingreso: diciembre-2011
Ubicación: Chile-Talca
Mensajes: 9
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Matrices en C

Código C:
Ver original
  1. //IMPLEMENTACIÓN DE UN ALGORITMO GENÉTICO
  2. //Felipe Rebolledo Castro
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h> //incluye srand() y rand()
  6. #include <conio.h>
  7. #include <time.h> //incluye time()
  8.  
  9. //los printf colocados, son para guiarme entre las lineas
  10.  
  11. main()
  12. {
  13.     FILE *fin,*fout; //para entrar y configurar el archivo
  14.     //Inicialización de variables
  15.     int tm, tg, gen, g=0, individuo;
  16.     float pmut;
  17.     int i, j, k, h;
  18.     int mat[tm][tg], P_I, P_NEW;
  19.     int cont1, cont2, cont3, cont4;
  20.     int eleccion;
  21.     int *cromosoma;
  22.    
  23.     srand(time(0));  
  24.    
  25.     fin=fopen("ag.in","r");  //abre y lee el archivo completo
  26.     fout=fopen("ag.out","w"); //abre y escribe en el archivo ag.out
  27.  
  28.     if(fin==NULL){  //para verificar que el archivo exista
  29.         printf("error");
  30.         exit(1);
  31.     }
  32.    
  33.     //para leer los diferentes parámetros en el archivo ag.in
  34.    
  35.     fscanf(fin, "%d", & tm);
  36.     fscanf(fin, "%d", & tg);
  37.     fscanf(fin, "%f", & pmut);
  38.     fscanf(fin, "%d", & gen);
  39.    
  40.     //contadores para almacenar datos
  41.     cont1=0; //fitnes par acada individuo
  42.     cont2=0;//maximo fitnes
  43.     cont3=0;//suma total fitnes
  44.    
  45.    
  46.     //creación matriz
  47.    
  48.     for(i=0;i<tm;i++){ //genera elementos horizontalez
  49.        
  50.         //printf("Individuo %d: ", (i+1));
  51.         for (j=0;j<tg;j++){ //genera elementos verticales
  52.             mat[i][j]=rand()&1;
  53.             P_I=mat[i][j];  
  54.             //printf("%d", P_I);
  55.                
  56.             individuo=1;
  57.             if(mat[i][j]==1){ //para verificar si es un 1 o un 0
  58.                 cont1++;
  59.             }  
  60.             if(mat[i][j]==1){
  61.                 cont3++;
  62.             }              
  63.         }
  64.         //printf("\n");
  65.         if(cont1==0){ //en el caso de que el fitnes sea 0
  66.             //printf("Fitnes individuo= %d\n",cont1+1);
  67.             if(cont1>cont2){ //para hacer prevalecer el mayor número
  68.                 cont2=cont1;
  69.             //printf("g:%d\n", cont2);
  70.             cont1=0;
  71.             }
  72.         }
  73.         else{
  74.             //printf("Fitnes individuo= %d\n\n", cont1);
  75.             if(cont1>cont2){ //para hacer prevalecer el mayor número
  76.                 cont2=cont1;
  77.             }
  78.             //printf("g:%d\n", cont2);
  79.             cont1=0;
  80.         }              
  81.         //printf("\n\n");
  82.     }
  83.     //printf("\nFitnes Total: %d", cont3);
  84.    
  85.    
  86.     eleccion=rand()&1+cont3;  //para elegir en forma aleatoria
  87.             //...
  88.    
  89.     //while (g<gen){
  90.             //for (i=0;i<tm;i++){
  91.                 //for (j=0;j<tg;j++){
  92.                     //cromosoma[i]=k;
  93.                 //}
  94.             //  fprintf(fout,"%d",cromosoma[i]);
  95.             //}
  96.     //g++;
  97.     //}
  98.    
  99.     fprintf(fout, "Parámetros: %d %d %.1f %d\n", tm, tg, pmut, gen); //impresión de en el archivo de salida
  100.     for(k=1;k<gen;k++){ //para generar los numeros de las generaciones: g1, g2, g3, etc.
  101.         fprintf(fout, "g%d:%d\n", k, cont2);
  102.     }
  103.     fclose(fin);
  104.     fclose(fout);  //cierre del archivo
  105.    
  106. }


esto llegue a hacer.