fpontesmorales

Trabalhando com arquivos e funções

Aug 31st, 2011
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.44 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #pragma pack(1)
  4.  
  5. /*Então, um programa utilizou este tipo para armazenar algumas informações em um
  6. arquivo no modo binário. Este arquivo possui como primeira informação, um inteiro n
  7. contendo a quantidade de dados do tipo Record. Na sequencia, todos os n dados Record.
  8.  
  9.         Implementar um programa que leia estes dados e exiba:
  10. a. A soma de todos os pesos;
  11. b. A maior das idades.
  12. c. A menor idade encontrada;
  13. d. A quantidade de pessoas dos sexos masculino e feminino.*/
  14.  
  15. typedef struct {
  16.   int id;
  17.   short age;
  18.   float height;
  19.   float weight;
  20.   char gender;
  21. } Record;
  22.  
  23. int main(void) {
  24.  
  25.     FILE *bd;
  26.  
  27.     if((bd=fopen("records.dat", "rb")) == NULL) {
  28.         printf("Erro ao abrir o arquivo.\n");
  29.         exit(1);
  30.     }
  31.  
  32.     conta_registros(bd);
  33.     mostra_registros(bd);
  34.     soma_pesos(bd);
  35.     maior_idade(bd);
  36.     menor_altura(bd);
  37.     pessoas_por_sexo(bd);
  38.  
  39.     fclose(bd);
  40.  
  41.     return 0;
  42.  
  43. }
  44.  
  45. conta_registros(FILE *bd){
  46.  
  47.     int n;
  48.     Record registro;
  49.     fseek(bd,0,SEEK_SET);
  50.     fread(&n, sizeof(int),1,bd);
  51.     fseek(bd,sizeof(int),SEEK_SET);
  52.     return n;
  53. }
  54.  
  55. mostra_registros(FILE *bd){
  56.  
  57.     int n,i;
  58.  
  59.     Record registro;
  60.  
  61.     n=conta_registros(bd);
  62.  
  63.     printf("\n\nQuantidade de registros encontrados: %d \n\n",n);
  64.  
  65.     for(i=0 ; i<n;i++) {
  66.         fread(&registro, sizeof(Record), 1, bd);
  67.         if (feof(bd)) break;
  68.         // mostra dados
  69.         printf ("|-----------------------------|\n");
  70.         printf ("| Identificador: %d          |\n",registro.id);
  71.         printf ("|         Idade: %d  Anos     |\n",registro.age);
  72.         printf ("|          Peso: %.2f Kg     |\n",registro.height);
  73.         printf ("|        Altura: %.2f M       |\n",registro.weight);
  74.         printf ("|          Sexo: %c            |\n",registro.gender);
  75.         printf ("|-----------------------------|\n\n");
  76.         }
  77.  
  78. }
  79.  
  80. soma_pesos(FILE *bd){
  81.  
  82.     int n,i;
  83.     float soma=0;
  84.  
  85.     Record registro;
  86.  
  87.     n=conta_registros(bd);
  88.  
  89.     for(i=0 ; i<n;i++) {
  90.         fread(&registro, sizeof(Record), 1, bd);
  91.         if (feof(bd)) break;
  92.         soma = soma + registro.height;
  93.     }
  94.  
  95.     printf("Soma dos pesos = %.2f Kg\n\n", soma);
  96.  
  97.  
  98. }
  99.  
  100. maior_idade(FILE *bd){
  101.  
  102.     int n,i,maior_idade=0, id_idade=0;
  103.  
  104.     Record registro;
  105.  
  106.     n=conta_registros(bd);
  107.  
  108.     for(i=0 ; i<n;i++) {
  109.         fread(&registro, sizeof(Record), 1, bd);
  110.         if (feof(bd)) break;
  111.         if (maior_idade<registro.age) {maior_idade=registro.age; id_idade=registro.id ;}
  112.     }
  113.  
  114.     printf("Maior Idade = %d Anos\n\nId maior Idade = %d \n\n", maior_idade , id_idade );
  115.  
  116. }
  117.  
  118. menor_altura(FILE *bd){
  119.  
  120.     int n,i;
  121.     float menor_altura=9999;
  122.  
  123.     Record registro;
  124.  
  125.     n=conta_registros(bd);
  126.  
  127.     for(i=0 ; i<n;i++) {
  128.         fread(&registro, sizeof(Record), 1, bd);
  129.         if (feof(bd)) break;
  130.         if (menor_altura>registro.weight) menor_altura=registro.weight;
  131.     }
  132.  
  133.     printf("Menor Altura = %.2f Metros\n\n", menor_altura );
  134.  
  135. }
  136.  
  137. pessoas_por_sexo(FILE *bd){
  138.  
  139.     int n,i,masculino=0,feminino=0;
  140.  
  141.     Record registro;
  142.  
  143.     n=conta_registros(bd);
  144.  
  145.     for(i=0 ; i<n;i++) {
  146.         fread(&registro, sizeof(Record), 1, bd);
  147.         if (feof(bd)) break;
  148.         if (registro.gender=='F') feminino++;
  149.         if (registro.gender=='M') masculino++;
  150.     }
  151.  
  152.     printf("Masculino = %d homi\n\n", masculino );
  153.     printf("Feminino = %d muieh\n\n", feminino );
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment