Advertisement
Ponja

Ejercicio 22 Archivos

Nov 14th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct{char CodProv[4];
  6.                char NProv[31];
  7.               }TProvincia;
  8. typedef struct  {char CodProv[4];
  9.                  int Nacionalidad;
  10.                  int Cantidad;
  11.                 }TCenso;
  12. typedef struct  {char Mod;
  13.                  char CodProv[4];
  14.                  int Nacionalidad;
  15.                  int Cantidad;
  16.                 }TMCenso;
  17. void cargavec (TProvincia[],int);
  18. int busqueda (TCenso,TProvincia[],int);
  19. int busqueda2 (TMCenso,TProvincia[],int);
  20. void ordenar (TCenso[],int);
  21. void mostrar (TCenso[],int);
  22. void busquedacod (char [],TProvincia[],int);
  23.  
  24.  
  25. int main()
  26. {
  27.     char VecCod[4];
  28.     TProvincia aux,VecProv[24];
  29.     TCenso aux1,VecOrd[24];
  30.     TMCenso aux2;
  31.     int Censo[24][50]={{0}},pos,mpos,j,i,l;
  32.     FILE*CS;
  33.     FILE*MCS;
  34.     CS=fopen("CENSO.dat","rb");
  35.     if(CS==NULL)
  36.     {
  37.         printf("No se ha podido abrir el archivo ");
  38.         exit(1);
  39.     }
  40.     MCS=fopen("MODIF_CENSO","rb");
  41.     if(MCS==NULL)
  42.     {
  43.         printf("No se ha podido abrir el archivos ");
  44.         exit(1);
  45.     }
  46.  
  47.     cargavec(VecProv,24);
  48.     fread(&aux1,sizeof(TCenso),1,CS);
  49.     while(!feof(CS))
  50.     {
  51.         pos=busqueda(aux1,VecProv,24);
  52.         if(pos!=-1)
  53.         {
  54.             Censo[pos][aux1.Nacionalidad-1]+=aux1.Cantidad;
  55.         }  else printf("No se ha podido encontrar el codigo de privincia");
  56.         fread(&aux1,sizeof(TCenso),1,CS);
  57.  
  58.     }
  59.     fread(&aux2,sizeof(TMCenso),1,MCS);
  60.     while(!feof(MCS))
  61.     {
  62.         mpos=busqueda2(aux2,VecProv,24);
  63.         if(mpos!=-1)
  64.         {
  65.             if(aux2.Mod=='A')
  66.             {
  67.                 Censo[mpos][aux2.Nacionalidad-1]+=aux2.Cantidad;
  68.             }else Censo[mpos][aux2.Nacionalidad-1]=aux2.Cantidad;
  69.  
  70.         }else printf("No se ha podido encontrar el Codigo de Provincia");
  71.         fread(&aux2,sizeof(TMCenso),1,MCS);
  72.     }
  73.     fclose(CS);
  74.     fclose(MCS);
  75.     CS=fopen("CENSO.dat","wb");
  76.     if(CS==NULL)
  77.     {
  78.         printf("No se ha podido abrir el archivo ");
  79.         exit(1);
  80.     }
  81.  
  82.         for(i=0;i<24;i++)
  83.         {
  84.             busquedacod(VecCod,VecProv,i);
  85.             strcpy(aux1.CodProv,VecCod);
  86.             aux1.Nacionalidad=j+1;
  87.             for(j=0;j<50;j++)
  88.             {
  89.                 aux1.Cantidad+=Censo[i][j];
  90.             }
  91.             fwrite(&aux1,sizeof(TProvincia),1,CS);
  92.         }
  93.     fclose(CS);
  94.  
  95.     CS=fopen("CENSO.dat","rb");
  96.     if(CS==NULL)
  97.     {
  98.         printf("No se ha podido abrir el archivo ");
  99.         exit(1);
  100.     }
  101.     for(l=0;l<24;l++)
  102.     {
  103.         fread(&aux1,sizeof(TCenso),1,CS);
  104.         VecOrd[l]=aux1;
  105.     }
  106.     ordenar(VecOrd,24);
  107.     mostrar(VecOrd,24);
  108. }
  109.  
  110. ///////////////////////////////////////////////////
  111. void cargavec (TProvincia Vec[],int a)
  112. {
  113.     int i;
  114.     TProvincia aux;
  115.     FILE*pf;
  116.     pf=fopen("PROVINCIAS.dat","rb");
  117.     if(pf==NULL)
  118.     {
  119.         printf("No se ha podido abrir el archivo ");
  120.         exit(1);
  121.     }
  122.     for(i=0;i<a;i++)
  123.     {
  124.         fread(&aux,sizeof(TProvincia),1,pf);
  125.         Vec[i]=aux;
  126.     }
  127.  
  128.     fclose(pf);
  129. }
  130. ////////////////////////////////////////////////////////////////////
  131. int busqueda (TCenso aux,TProvincia Vec[],int a)
  132. {
  133.     int i=0,pos=-1;
  134.     while(i<a&&pos==-1)
  135.     {
  136.         if(aux.CodProv==Vec[i].CodProv)
  137.         {
  138.             pos==i;
  139.         }else i++;
  140.     }
  141.     return pos;
  142. }
  143. ////////////////////////////////////////////////////////////////
  144. int busqueda2 (TMCenso aux,TProvincia Vec[],int a)
  145. {
  146.     int i=0,pos=-1;
  147.     while(i<a&&pos==-1)
  148.     {
  149.         if(aux.CodProv==Vec[i].CodProv)
  150.         {
  151.             pos=i;
  152.         }else i++;
  153.     }
  154.     return pos;
  155. }
  156. /////////////////////////////////////////////////////////////////////////
  157. void ordenar (TCenso Vec[],int a)
  158. {
  159.     int i,j;
  160.     TCenso aux;
  161.     for(i=0;i<a-1;i++)
  162.     {
  163.         for(j=0;j<a-1-i;j++)
  164.         {
  165.             if(Vec[j].Cantidad>Vec[j+1].Cantidad)
  166.             {
  167.                 aux=Vec[j];
  168.                 Vec[j]=Vec[j+1];
  169.                 Vec[j+1]=aux;
  170.             }
  171.         }
  172.     }
  173. }
  174. ////////////////////////////////////////////////////////////////////
  175. void mostrar (TCenso Vec[],int a)
  176. {
  177.     int i;
  178.     printf("\nCodigo Provincia\tNacionalidad\tCantidad de Habitantes");
  179.     for(i=0;i<a;i++)
  180.     {
  181.         printf("\n%s\t\t%%d\t\t%d",Vec[i].CodProv,Vec[i].Nacionalidad,Vec[i].Cantidad);
  182.     }
  183. }
  184. /////////////////////////////////////////////////////////////////////////////
  185. void busquedacod (char VecCod[],TProvincia Vec[],int a)
  186. {
  187.     strcpy(VecCod,Vec[a].CodProv);
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement