Download: media.c
The MIT License (MIT)
The MIT License (MIT)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /* Autor: Ismael Felipe Ferreira dos Santos Instituto de Fisica, Universidade Federal de Alagoas E-mail: ismaellxd@gmail.com Copyright © 2019 MIT LICENCE GIT: https://ismaeldamiao.blogspot.com/fisicacomputacional Objetivo: Calcular a Media de dados de outros programas... Escrito em: 16 de novembro de 2019 */ #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 /* Alterar a seguinte linha implica que alteracoes devem ser feitas nas linhas 63, 64, 73 e 74*/ int const QuantidadeColunas = 4, MAX = 1000; int main(){ int QuantidadeArquivos, i, j, fim = FALSE; char NomeArquivoNomes[100], NomeResultado[100], command[2][100], NomeArquivoMedia[MAX][100], ch; double soma[QuantidadeColunas], c[MAX][QuantidadeColunas]; FILE *ArquivoNomes, *resultado, *ArquivoMedia[MAX]; /* Cria um arquivo contendo os nomes de todos os arquivos de onde vamos tirar a media */ printf("Qual o padrao do nome dos arquivo para fazer a media (*)? "); scanf("%s", command[1]); sprintf(NomeArquivoNomes, "%s.txt", command[1]); sprintf(command[0], "ls %s >> %s", command[1], NomeArquivoNomes); system(command[0]); ArquivoNomes = fopen(NomeArquivoNomes, "r"); /* Conta quantas linhas tem no arquivo, ou seja, quantos arquivos tem para tirar a media */ for(;(ch=fgetc(ArquivoNomes)) != EOF;) if(ch == '\n') ++QuantidadeArquivos; fclose(ArquivoNomes); ArquivoNomes = fopen(NomeArquivoNomes, "r"); /* Salva o nome de todos os arquivos para tirar a media */ for(i = 0; i < QuantidadeArquivos; ++i){ fscanf(ArquivoNomes, "%s", NomeArquivoMedia[i]); } fclose(ArquivoNomes); /* Abre todos os arquivos para tirar a media */ for(i = 0; i < QuantidadeArquivos; ++i) ArquivoMedia[i] = fopen(NomeArquivoMedia[i], "r"); sprintf(NomeResultado, "%s.dat", command[1]); resultado = fopen(NomeResultado, "w"); for(;;){ for(j = 0; j < QuantidadeColunas; ++j) soma[j] = 0; /* Guarda no vetor soma a soma, coluna a coluna, da n-esima linha de cada um dos arquivos */ for(i = 0; i < QuantidadeArquivos; ++i){ if((fscanf(ArquivoMedia[i], "%lf %lf %lf %lf", &c[i][0], &c[i][1], &c[i][2], &c[i][3])) != EOF){ for(j = 0; j < QuantidadeColunas; ++j) soma[j] += c[i][j]; }else{ fim = TRUE; break; } } if(fim) break; for(j = 0; j < QuantidadeColunas; ++j) soma[j] /= QuantidadeArquivos; fprintf(resultado, "%18.8g %18.8g %18.8g %18.8g\n", soma[0], soma[1], soma[2], soma[3]); } printf("Pronto!\n"); return 0; } |