Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1.  
  2. #include <stdio.h> // i/o, file
  3. #include <string.h> // strcpy
  4.  
  5. typedef struct {
  6.     int codigo;
  7.     char nome[30];
  8.     char regiao[30];
  9. } Cidade;
  10.  
  11. typedef struct {
  12.     int origem;
  13.     int destino;
  14.     float preco;
  15.     char data_ida[10];
  16.     char data_volta[10];
  17. } Voo;
  18.  
  19. typedef struct {
  20.     char nome_cidade[30];
  21.     float media_preco;
  22.     char regiao[30];
  23. } Resultado;
  24.  
  25. int carregaCidades (FILE *arqCidades, Cidade cidades[]) {
  26.     int tamanho = 0;
  27.  
  28.     while (fread(&cidades[tamanho], 1, sizeof(Cidade), arqCidades) > 0) // coloca cada entrada no arquivo
  29.         tamanho++; // proxima posicao
  30.  
  31.     return tamanho;
  32. }
  33.  
  34. int carregaVoos (FILE *arqVoos, Voo voos[]) {
  35.     int tamanho = 0;
  36.  
  37.     while (fread(&voos[tamanho], 1, sizeof(Voo), arqVoos) > 0) // coloca cada entrada no arquivo
  38.         tamanho++; // proxima posicao
  39.  
  40.     return tamanho;
  41. }
  42.  
  43. void criaResultado (Resultado *resultado, char nome[30], char regiao[30], float media) {
  44.     // insere as variaveis na posicao dada do vetor (pelo ponteiro)
  45.     strcpy((*resultado).nome_cidade, nome);
  46.     (*resultado).media_preco = media;
  47.     strcpy((*resultado).regiao, regiao);
  48. }
  49.  
  50. void escreveResultado (FILE *arqRes, Resultado *resultado) {
  51.     Resultado buffer;
  52.     while (fread(&buffer, 1, sizeof(Resultado), arqRes) > 0) {} // só serve pra encontrar o fim do arquivo
  53.  
  54.     fwrite(resultado, sizeof(Resultado), 1, arqRes); // escreve o resultado no fim do arquivo
  55. }
  56.  
  57. int main () {
  58.     FILE *arqCidades, *arqVoos, *arqRes;
  59.     Cidade cidades[1000];
  60.     Voo voos[10000];
  61.     Resultado res[1000];
  62.     int tamCidades, tamVoos, tamRes = 0;
  63.  
  64.     int i, j, posRes = 0; // posicao res é a posicao atual do vetor res
  65.  
  66.     // abre os arquivos
  67.     arqCidades = fopen("cidades.dat", "rb");
  68.     arqVoos = fopen("voos.dat", "rb");
  69.     arqRes = fopen("resultados.dat", "wb");
  70.  
  71.     // encerra a execucao se a abertura de algum arquivo falhar
  72.     if (!(arqCidades && arqVoos && arqRes)) {
  73.         printf("Falha de abertura de arquivo\n");
  74.         return 1;
  75.     }
  76.  
  77.     tamCidades = carregaCidades(arqCidades, cidades);
  78.     tamVoos = carregaVoos(arqVoos, voos);
  79.  
  80.     // percorre o vetor cidades
  81.     for (i = 0; i < tamCidades; i++) {
  82.         float media = 0;
  83.         int qnt_voos = 0;
  84.  
  85.         // percorre o vetor voos, procurando a cidade de cidades[i]
  86.         for (j = 0; j < tamVoos; j++) {
  87.             if (voos[j].origem == cidades[i].codigo) {
  88.                 media += voos[j].preco; // soma os precos
  89.                 qnt_voos++; // conta a quantidade de voos
  90.             }
  91.         }
  92.  
  93.         if (qnt_voos > 0) { // se pelo menos 1 voo foi encontrado
  94.             media /= qnt_voos; // calcula a media
  95.  
  96.             criaResultado(&res[posRes], cidades[i].nome, cidades[i].regiao, media);
  97.             escreveResultado(arqRes, &res[posRes]);
  98.             posRes++; // passa para a proxima posicao
  99.         }
  100.     }
  101.  
  102.     // fecha os arquivos
  103.     fclose(arqCidades);
  104.     fclose(arqVoos);
  105.     fclose(arqRes);
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement