Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con Matrices en C

Estas en el tema de Problema con Matrices en C en el foro de C/C++ en Foros del Web. Hola señores y señoritas, Tengo la siguiente consulta o problemita. sere breve e ire al grano: Necesito poder sumar de alguna forma, todos los 1 ...
  #1 (permalink)  
Antiguo 23/01/2012, 19:35
Avatar de FelipePower  
Fecha de Ingreso: diciembre-2011
Ubicación: Chile-Talca
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Pregunta Problema con Matrices en C

Hola señores y señoritas,

Tengo la siguiente consulta o problemita.
sere breve e ire al grano:

Necesito poder sumar de alguna forma, todos los 1 de cada fila de la matriz:

nota:(tm y tg son variables que desconosco ya quese leen desde un archivo .txt y pueden ser numeros cualquieras menores de 50)

ejemplo:

mat[tm][tg];
(llena de 0 y 1 al azar)

0110
1110
0001
1110

nesecito sumar los 1 de cada fila de alguna forma, para poder avanzar en mi programa, eh pensado en almacenar las filas como una cadena individual de enteros, pero como nose cual es el tamaño de la matriz que el usuario ingresará me complico.

Cualquier ayuda sirve, Thanks.

PD: ya genere la matriz con el ciclo for asi:
for(i=0;i<tm;i++)
for (j=0;j<tg;j++)
  #2 (permalink)  
Antiguo 24/01/2012, 11:13
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Problema con Matrices en C

Hola! de la misma manera que generas la matriz (con los dos for), solo que en el segundo for pones un if donde se cumpla que mat[tm][tg]==1 y si es igual sumas un contador

Código C:
Ver original
  1. for(i=0;i<tm;i++)
  2. {
  3. for(j=0;j<tg;j++)
  4. {
  5. if(mat[tm][tg]==1) // cada vez que encuentra un 1 suma
  6.    contador++;
  7. }
  8. }

Saludos
  #3 (permalink)  
Antiguo 24/01/2012, 12:57
Avatar de FelipePower  
Fecha de Ingreso: diciembre-2011
Ubicación: Chile-Talca
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Información Respuesta: Problema con Matrices en C

Código C:
Ver original
  1. //IMPLEMENTACIÓN DE UN ALGORITMO GENÉTICO
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h> //incluye srand() y rand()
  5. #include <conio.h>
  6. #include <time.h> //incluye time()
  7.  
  8.  
  9. main()
  10. {
  11.     FILE *fin,*fout;
  12.    
  13.     int tm, tg, gen, g=0;
  14.     float pmut;
  15.     int i, j;
  16.     int mat[500][50], P_I;
  17.     int cont;
  18.  
  19.     srand(time(0));
  20.    
  21.     fin=fopen("ag.in","r");
  22.     fout=fopen("ag.out","w");
  23.  
  24.     if(fin==NULL){
  25.         printf("error");
  26.         exit(1);
  27.     }
  28.    
  29.     fscanf(fin, "%d", & tm);
  30.     fscanf(fin, "%d", & tg);
  31.     fscanf(fin, "%f", & pmut);
  32.     fscanf(fin, "%d", & gen);
  33.    
  34.     cont=0;
  35.  
  36.     for(i=0;i<tm;i++){
  37.         printf("Individuo %d: ", (i+1));
  38.         for (j=0;j<tg;j++){
  39.             mat[i][j]=rand()&1;
  40.             P_I=mat[i][j];  
  41.             printf("%d", P_I);
  42.            
  43.             if(mat[tm][tg]==1){
  44.                 cont++;
  45.             }  
  46.            
  47.            
  48.         }
  49.         printf("\n\n");
  50.     }
  51.        
  52.     printf("\n%d\n",cont);
  53.  
  54.     fprintf(fout, "Parámetros: %d %d %.1f %d\n", tm, tg, pmut, gen);
  55.    
  56.     fclose(fout);
  57. }





Pero no me funciona, me dice en el: printf("%d", cont) ... = 0 en todo, a que te refieres con agregar ese if.
  #4 (permalink)  
Antiguo 24/01/2012, 13:14
Avatar de FelipePower  
Fecha de Ingreso: diciembre-2011
Ubicación: Chile-Talca
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problema con Matrices en C

if(mat[tm][tg]==1){
cont++;
}

debe ser:

if(mat[i][j]==1){
cont++;
}



Pero ahora nose como hacer para que me diga, fila 1 = (unos) , fila 2..... , porque me lee la suma total de los unos de toda la matriz.
  #5 (permalink)  
Antiguo 24/01/2012, 14:15
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Problema con Matrices en C

Asi es verdad! es con los subindices i j , no se xq puse tm y tg :s pero x suerte t dist cuenta...Para mejorar la legilibilidad del codigo te combiene hacer 4 for.
Los primeros dos para llenar la matriz como bien lo hiciste vos
Código C:
Ver original
  1. for(i=0;i<tm;i++){
  2.  for (j=0;j<tg;j++){
  3.        mat[i][j]=rand()&1; // xq una &??? no me acuerdo bien el uso del rand
  4. }
  5. }

Los otros dos for para determinar donde estan los 1s
Código C:
Ver original
  1. for(i=0;i<tm;i++){
  2.         for (j=0;j<tg;j++){
  3.             if(mat[i][j]==1)  {
  4.                 contador++; // el contador lo podes sacar si no necesitas el total de los 1
  5.                 COMPLETAR; } }
bueno con respecto a saber en que fila y comlumna estan los 1 hay varias formaas, pero la pregunta es ¿que vas a hacer con esos datos?
Si es solo para imprimir en pantalla (esto va donde dice COMPLETAR)
Código C:
Ver original
  1. printf("Fila : %d   Columna: %d\n",i+1,j+1);
y si es para guardar en el archivo, lo mismo que el anterior solo que usas un fprintf

Espero haberte ayudado, Saludos
  #6 (permalink)  
Antiguo 26/01/2012, 23:17
Avatar de FelipePower  
Fecha de Ingreso: diciembre-2011
Ubicación: Chile-Talca
Mensajes: 9
Antigüedad: 12 años, 11 meses
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.

Etiquetas: matrices, matriz, programa, variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:20.