Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> // i/o, file
- #include <string.h> // strcpy
- typedef struct {
- int codigo;
- char nome[30];
- char regiao[30];
- } Cidade;
- typedef struct {
- int origem;
- int destino;
- float preco;
- char data_ida[10];
- char data_volta[10];
- } Voo;
- typedef struct {
- char nome_cidade[30];
- float media_preco;
- char regiao[30];
- } Resultado;
- int carregaCidades (FILE *arqCidades, Cidade cidades[]) {
- int tamanho = 0;
- while (fread(&cidades[tamanho], 1, sizeof(Cidade), arqCidades) > 0) // coloca cada entrada no arquivo
- tamanho++; // proxima posicao
- return tamanho;
- }
- int carregaVoos (FILE *arqVoos, Voo voos[]) {
- int tamanho = 0;
- while (fread(&voos[tamanho], 1, sizeof(Voo), arqVoos) > 0) // coloca cada entrada no arquivo
- tamanho++; // proxima posicao
- return tamanho;
- }
- void criaResultado (Resultado *resultado, char nome[30], char regiao[30], float media) {
- // insere as variaveis na posicao dada do vetor (pelo ponteiro)
- strcpy((*resultado).nome_cidade, nome);
- (*resultado).media_preco = media;
- strcpy((*resultado).regiao, regiao);
- }
- void escreveResultado (FILE *arqRes, Resultado *resultado) {
- Resultado buffer;
- while (fread(&buffer, 1, sizeof(Resultado), arqRes) > 0) {} // só serve pra encontrar o fim do arquivo
- fwrite(resultado, sizeof(Resultado), 1, arqRes); // escreve o resultado no fim do arquivo
- }
- int main () {
- FILE *arqCidades, *arqVoos, *arqRes;
- Cidade cidades[1000];
- Voo voos[10000];
- Resultado res[1000];
- int tamCidades, tamVoos, tamRes = 0;
- int i, j, posRes = 0; // posicao res é a posicao atual do vetor res
- // abre os arquivos
- arqCidades = fopen("cidades.dat", "rb");
- arqVoos = fopen("voos.dat", "rb");
- arqRes = fopen("resultados.dat", "wb");
- // encerra a execucao se a abertura de algum arquivo falhar
- if (!(arqCidades && arqVoos && arqRes)) {
- printf("Falha de abertura de arquivo\n");
- return 1;
- }
- tamCidades = carregaCidades(arqCidades, cidades);
- tamVoos = carregaVoos(arqVoos, voos);
- // percorre o vetor cidades
- for (i = 0; i < tamCidades; i++) {
- float media = 0;
- int qnt_voos = 0;
- // percorre o vetor voos, procurando a cidade de cidades[i]
- for (j = 0; j < tamVoos; j++) {
- if (voos[j].origem == cidades[i].codigo) {
- media += voos[j].preco; // soma os precos
- qnt_voos++; // conta a quantidade de voos
- }
- }
- if (qnt_voos > 0) { // se pelo menos 1 voo foi encontrado
- media /= qnt_voos; // calcula a media
- criaResultado(&res[posRes], cidades[i].nome, cidades[i].regiao, media);
- escreveResultado(arqRes, &res[posRes]);
- posRes++; // passa para a proxima posicao
- }
- }
- // fecha os arquivos
- fclose(arqCidades);
- fclose(arqVoos);
- fclose(arqRes);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement