elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cargar struct dentro de una matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cargar struct dentro de una matriz  (Leído 2,696 veces)
eriss_15

Desconectado Desconectado

Mensajes: 3


Ver Perfil
cargar struct dentro de una matriz
« en: 17 Mayo 2012, 22:43 pm »

Hola, quería saber si alguien me podría ayudar con esto...
Tengo q hacer un estructura q contenga 3 datos y esta misma por una función cargarla dentro de una matriz. esa matriz después me va a servir para actualizar un archivo, q solo se actualiza si el tipo es distinto de 99 y la producción distinta de 0




#include <conio.h>
#include <stdio.h>
#define TAM 3
typedef struct
{
   int tipo;
   float produccion;
   float valor;
}t_parcela;
void ver_archivo(FILE*);
void cargar_matriz(t_parcela*[][TAM]);
void main()
{
   int i,j;
   FILE*pf;
   t_parcela parcela[TAM][TAM];
   cargar_matriz(parcela);
   pf=fopen("campo.dat","w+b");
   {
      for(i=0;i<TAM;i++)
         for(j=0;j<TAM;j++)
         {
            if(parcela[j].produccion!=0 && parcela[j].tipo!=99)
            {
               fseek(pf,((i*TAM)+j+1)*sizeof(t_parcela),0);
               fwrite(&parcela[j].tipo,sizeof(int),1,pf);
               fwrite(&parcela[j].produccion,sizeof(float),1,pf);
               fwrite(&parcela[j].valor,sizeof(float),1,pf);
               fseek(pf,(-1L)*sizeof(t_parcela),1);
               fseek(pf,0,1);
            }
         }
   }
   fclose(pf);
   ver_archivo(pf);
   getch();
}
void cargar_matriz(t_parcela *p[TAM][TAM])
{
   int i,j;
   for(i=0;i<TAM;i++)
      for(j=0;j<TAM;j++)
         {
              puts("Escriba el tipo de grano(entero de 1 a 5)");
             scanf("%d",&p[j]->tipo);
             puts("Escriba la produccion obtenida");
             scanf("%f",&p[j]->produccion);
             puts("Escriba el valor de la produccion");
             scanf("%f",&p[j]->valor);
         }
}
void ver_archivo(FILE*pf)
{
   t_parcela parcela;
         pf=fopen("campo.dat","rb");
         fread(&parcela,sizeof(t_parcela),1,pf);
         while(!feof(pf))
         {
            printf("%d",parcela.tipo);
            printf("%f",parcela.produccion);
            printf("%f",parcela.valor);
            fread(&parcela,sizeof(t_parcela),1,pf);
         }
         fclose(pf);
}


el programa sin querer cargar la matriz anda barbaro pero quiero cargarle un par de datos y despues ver el archivo para ver si al grabar quedo bien,,,
Desde ya Graciaaaas..!


En línea

exel

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: cargar struct dentro de una matriz
« Respuesta #1 en: 18 Mayo 2012, 06:33 am »

 De acuerdo a lo que dices, he corregido errores potenciales del codigo, aunque no estoy conforme porque no se ajusta a especificaciones estandar.

 No lo he probado pero creo que esta bien, sin embargo observa las correcciones que hice.

Código
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #define TAM 3
  4.  
  5. typedef struct
  6. {
  7.   int tipo;
  8.   float produccion;
  9.   float valor;
  10. }t_parcela;
  11.  
  12. void ver_archivo(FILE*);
  13. void cargar_matriz(t_parcela*[][TAM]);
  14.  
  15. void main()
  16. {
  17.   int i,j;
  18.   FILE*pf;
  19.   t_parcela parcela[TAM][TAM];
  20.   cargar_matriz(parcela);
  21.   pf=fopen("campo.dat","w+b");
  22.   {
  23.      for(i=0;i<TAM;i++)
  24.         for(j=0;j<TAM;j++)
  25.         {
  26.            if(parcela[i][j].produccion!=0 && parcela[i][j].tipo!=99)
  27.            {
  28.               fseek(pf,((i*TAM)+j)*sizeof(t_parcela),SEEK_SET);
  29.               fwrite(&parcela[i][j],sizeof(parcela),1,pf);
  30.            }
  31.         }
  32.   }
  33.   fclose(pf);
  34.   ver_archivo(pf);
  35.   getch();
  36. }
  37.  
  38. void cargar_matriz(t_parcela p[TAM][TAM])
  39. {
  40.   int i,j;
  41.   for(i=0;i<TAM;i++)
  42.      for(j=0;j<TAM;j++)
  43.         {
  44.             puts("Escriba el tipo de grano(entero de 1 a 5)");
  45.             scanf("%d",&p[i][j].tipo);
  46.             puts("Escriba la produccion obtenida");
  47.             scanf("%f",&p[i][j].produccion);
  48.             puts("Escriba el valor de la produccion");
  49.             scanf("%f",&p[i][j].valor);
  50.         }
  51. }
  52.  
  53. void ver_archivo(FILE*pf)
  54. {
  55.   t_parcela parcela;
  56.         pf=fopen("campo.dat","rb");
  57.         fread(&parcela,sizeof(t_parcela),1,pf);
  58.         while(!feof(pf))
  59.         {
  60.            printf("%d",parcela.tipo);
  61.            printf("%f",parcela.produccion);
  62.            printf("%f",parcela.valor);
  63.            fread(&parcela,sizeof(t_parcela),1,pf);
  64.         }
  65.         fclose(pf);
  66. }
  67.  

Antes te sugiero que modifiques las salidas de los printf() agregando espacios como saltos de lineas para que puedas leer mejor los resultados.

 Saludos


« Última modificación: 18 Mayo 2012, 06:46 am por exel » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines