#include #include #include // Usar Vetor // Usar Struct // Usar Sub-rotinas // Usar Arquivos FILE *arq; typedef struct { float ce; // Consumo de Energia (GWatts) float pib; // Produto Interno Bruto (percentual) } reg_dados; reg_dados Dados[1000]; float Media_ce; float Media_pib; int le_arquivo() { char nomarq[256]="dados.txt"; int contador; int sai; printf(">> Lendo arquivo de dados... "); printf("\nNome do Arquivo: "); scanf ("%s",nomarq); arq=fopen(nomarq,"rt"); if (arq == NULL) { printf("# Erro na abertura do arquivo [%s]\n",nomarq); exit(0); } sai=0; contador=0; while (!sai) { fscanf (arq,"%f %f",&Dados[contador].ce,&Dados[contador].pib); if (Dados[contador].ce == 0) sai=1; else contador++; if (feof(arq)) sai=1; } fclose(arq); printf("%d dados lidos\n",contador); return(contador); } calcula_medias(int qtde, float *medce, float *medpib) { int i; float totalce; float totalpib; printf("\n"); printf(">> Calculo da media do Consumo Eletrico e do PIB\n"); totalce=totalpib=0.0; for (i=0; i < qtde; i++) { totalce=totalce+Dados[i].ce; totalpib=totalpib+Dados[i].pib; } *medce=totalce/qtde; *medpib=totalpib/qtde; } float calcula_correlacao(int qtde, float medce, float medpib) { int i; float somdif; float somdifce2,somdifpib2; float covar; float varx,vary; float correl; // Correlacao de Pearson // [ Somatorio((x-xmed)*(y-ymed)) ] / // [ sqrt( somatorio((x-xmed)*(x-xmed)) ) * sqrt( somatorio((x-xmed)*(x-xmed)) ) printf("\n"); printf(">> Calculo da correlacao... \n"); somdif=0.0; for (i=0; i < qtde; i++) { somdif = somdif + (Dados[i].ce - medce) * (Dados[i].pib); } covar=somdif; printf("Covariancia: %.4f\n",covar); somdifce2=0.0; somdifpib2=0.0; for (i=0; i < qtde; i++) { somdifce2 = somdifce2 + ((Dados[i].ce - medce) * (Dados[i].ce - medce)); somdifpib2= somdifpib2+ ((Dados[i].pib-medpib) * (Dados[i].pib-medpib)); } varx=somdifce2; vary=somdifpib2; printf("Variancia Consumo Eletrico: %.4f\n",varx); printf("Variancia PIB: %.4f\n",vary); correl= covar / sqrtf(varx * vary); printf("Correlacao: %.4f\n",correl); printf("\n"); return(correl); } main() { int totdados; float correlacao; printf("\n"); printf(">>> Calculo da Correlacao: Consumo Eletrico e PIB <<<\n"); printf("\n"); totdados=le_arquivo(); calcula_medias(totdados,&Media_ce,&Media_pib); printf("Media do Consumo Eletrico: %.4f GWatts\n",Media_ce); printf("Media do PIB: %.4f\n\n",Media_pib); correlacao=calcula_correlacao(totdados,Media_ce,Media_pib); printf("\n"); printf(">>> Resultado Final <<<\n\n"); printf("Correlacao dos Dados: %.4f\n",correlacao); if (correlacao >= 0.85) printf("Existe uma alta relacao direta entre os dados analisados\n"); else if (correlacao <= -0.85) printf("Existe uma alta relacao inversa entre os dados analisados\n"); else if (correlacao < 0.1 && correlacao > -0.1) printf("Nao existe uma relacao linear entre os dados analisados\n"); else printf("Nao foi possivel determinar se existe uma clara relacao linear entre os dados\n"); printf("\n"); system("Pause"); exit(0); }