Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 5 //countries
#define M 13 //years
//---To struct StatisticalData-----------------------------------------------------------//
struct StatisticalData {
char name[30];
int num_years;
int *years;
float *inflation, *aep_growth, *investments;
float avg_inflation, min_inflation, max_inflation;
float avg_aep_growth, min_aep_growth, max_aep_growth;
float avg_investments, min_investments, max_investments;
};
//--------------------------------------------------------------------------------------//
//---H sunartisi LoadData---------------------------------------------------------------//
int LoadData(struct StatisticalData *all_data)
{
FILE *infile1 =NULL;
FILE *infile2 =NULL;
FILE *infile3 =NULL;
int i, j;
float buf[100];
char *c;
infile1= fopen("inflation.ascii", "r");
if(infile1==NULL)
{
printf("ERROR OPENING FILE inflation.ascii \n");
exit(0);
}
for(i=0; i<N; i++)
{
fgets(buf, 99, infile1);
c=strtok(buf, "\t");
all_data[i].inflation[0]=atof(c);
for(j=0; j<M; j++)
{
c=strtok(NULL, "\t");
all_data[i].inflation[j]=atof(c);
}
}
infile2= fopen("aep.ascii", "r");
if(infile2==NULL)
{
printf("ERROR OPENING FILE aep.ascii \n");
exit(0);
}
for(i=0; i<N; i++)
{
fgets(buf, 99, infile2);
c=strtok(buf, "\t");
all_data[i].aep_growth[0]=atof(c);
for(j=0; j<M; j++)
{
c=strtok(NULL, "\t");
all_data[i].aep_growth[j]=atof(c);
}
}
infile3= fopen("investments.ascii", "r");
if(infile3==NULL)
{
printf("ERROR OPENING FILE investments.ascii \n");
exit(0);
}
for(i=0; i<N; i++)
{
fgets(buf, 99, infile3);
c=strtok(buf, "\t");
all_data[i].investments[0]=atof(c);
for(j=0; j<M; j++)
{
c=strtok(NULL, "\t");
all_data[i].investments[j]=atof(c);
}
}
//--vazoume ta onomata twn xwrwn------------//
strcpy(all_data[0].name,"Belgium");
strcpy(all_data[1].name,"Chile");
strcpy(all_data[2].name,"Greece");
strcpy(all_data[3].name,"Japan");
strcpy(all_data[4].name,"Zambia");
//-----------------------------------------//
//--vazoume tis xronologies----------------//
for(i=0; i<N; i++)
{
all_data[i].years[0]=1990;
all_data[i].years[1]=1991;
all_data[i].years[2]=1992;
all_data[i].years[3]=1993;
all_data[i].years[4]=1994;
all_data[i].years[5]=1995;
all_data[i].years[6]=1996;
all_data[i].years[7]=1997;
all_data[i].years[8]=1998;
all_data[i].years[9]=1999;
all_data[i].years[10]=2000;
all_data[i].years[11]=2001;
all_data[i].years[12]=2002;
}
//---------------------------------------//
return(0); //Epistrefei mhden epeidi ola pigan kala
}
//--telos tis sunartisis LoadData--------------------------------------------------------//
//---H sunartisi calcStats---------------------------------------------------------------//
void calcStats(struct StatisticalData *all_data)
{
int i,j;
//---vriskoume tous mesous orous--------------------------------//
for(i=0; i<N; i++)
{
all_data[i].avg_inflation=0;
for(j=0; j<M; j++)
{
all_data[i].avg_inflation += all_data[i].inflation[j];
}
all_data[i].avg_inflation /= M;
}
for(i=0; i<N; i++)
{
all_data[i].avg_aep_growth=0;
for(j=0; j<M; j++)
{
all_data[i].avg_aep_growth += all_data[i].aep_growth[j];
}
all_data[i].avg_aep_growth /= M;
}
for(i=0; i<N; i++)
{
all_data[i].avg_investments=0;
for(j=0; j<M; j++)
{
all_data[i].avg_investments += all_data[i].investments[j];
}
all_data[i].avg_investments /= M;
}
//----------------------------------------------------------------------//
//--vriskoume ta min kai max--------------------------------------------//
for(i=0; i<N; i++)
{
all_data[i].min_inflation = all_data[i].inflation[0];
for(j=0; j<M; j++)
{
if(all_data[i].inflation[j] < all_data[i].min_inflation)
{
all_data[i].min_inflation = all_data[i].inflation[j];
}
}
}
for(i=0; i<N; i++)
{
all_data[i].min_aep_growth = all_data[i].aep_growth[0];
for(j=0; j<M; j++)
{
if(all_data[i].aep_growth[j] < all_data[i].min_aep_growth)
{
all_data[i].min_aep_growth = all_data[i].aep_growth[j];
}
}
}
for(i=0; i<N; i++)
{
all_data[i].min_investments = all_data[i].investments[0];
for(j=0; j<M; j++)
{
if(all_data[i].investments[j] < all_data[i].min_investments)
{
all_data[i].min_investments = all_data[i].investments[j];
}
}
}
for(i=0; i<N; i++)
{
all_data[i].max_inflation = all_data[i].inflation[0];
for(j=0; j<M; j++)
{
if(all_data[i].inflation[j] > all_data[i].max_inflation)
{
all_data[i].max_inflation = all_data[i].inflation[j];
}
}
}
for(i=0; i<N; i++)
{
all_data[i].max_aep_growth = all_data[i].aep_growth[0];
for(j=0; j<M; j++)
{
if(all_data[i].aep_growth[j] > all_data[i].max_aep_growth)
{
all_data[i].max_aep_growth = all_data[i].aep_growth[j];
}
}
}
for(i=0; i<N; i++)
{
all_data[i].max_investments = all_data[i].investments[0];
for(j=0; j<M; j++)
{
if(all_data[i].investments[j] > all_data[i].max_investments)
{
all_data[i].max_investments = all_data[i].investments[j];
}
}
}
}//--telos tis calcStats------------------------------------------------------------------//
//--H sunartisi printXML------------------------------------------------------------------//
void printXML(struct StatisticalData *all_data)
{
int i;
FILE *outfile;
outfile = fopen("summaryData.xml", "w");
fprintf(outfile, "<stats>\n");
for(i=0; i<N; i++)
{
fprintf(outfile, "\t <country> %s \n", all_data[i].name);
fprintf(outfile, "\t\t <inflation>\n");
fprintf(outfile, "\t\t\t <avg_inflation> %f </avg_inflation> \n", all_data[i].avg_inflation);
fprintf(outfile, "\t\t\t <min_inflation> %f </min_inflation> \n", all_data[i].min_inflation);
fprintf(outfile, "\t\t\t <max_inflation> %f </max_inflation> \n", all_data[i].max_inflation);
fprintf(outfile, "\t\t </inflation>\n");
fprintf(outfile, "\t\t <aep_growth>\n");
fprintf(outfile, "\t\t\t <avg_aep_growth> %f </avg_aep_growth> \n", all_data[i].avg_aep_growth);
fprintf(outfile, "\t\t\t <min_aep_growth> %f </min_aep_growth> \n", all_data[i].min_aep_growth);
fprintf(outfile, "\t\t\t <max_aep_growth> %f </max_aep_growth> \n", all_data[i].max_aep_growth);
fprintf(outfile, "\t\t </aep_growth>\n");
fprintf(outfile, "\t\t <investments>\n");
fprintf(outfile, "\t\t\t <avg_investments> %f </avg_investments> \n", all_data[i].avg_investments);
fprintf(outfile, "\t\t\t <min_investments> %f </min_investments> \n", all_data[i].min_investments);
fprintf(outfile, "\t\t\t <max_investments> %f </max_investments> \n", all_data[i].max_investments);
fprintf(outfile, "\t\t </investments>\n");
fprintf(outfile, "\t </country>\n");
}
fprintf(outfile, "</stats>\n");
}//--telos tis printXML---------------------------------------------------------------//
//--H voithitiki sunartisi findCountry-----------------------------------------------//
int findCountry(struct StatisticalData *all_data, char *country)
{
int i;
for(i=0; i<N; i++)
{
if(strcmp(country, all_data[i].name)==0)
{
return(i);
}
return(-1);
}
}//telos tis sunartisis findCountry-----------------------------------------------//
//---H voithitiki sunartisi conv gia tin summetavlitotita-------------------------//
int conv(float *posotita1, float *posotita2, float *avg_posotitas1, float *avg_posotitas2, float *convol, int N)
{
int i;
*convol=0;
for(i=0; i<N; i++)
{
*convol = posotita1[i]*posotita2[i]-avg_posotitas1*avg_posotitas2;
*convol /= N;
}
if(*convol>0)
return(1);
else if(*convol<0)
return(-1);
else
return(0);
} //----------telos tis sunartisis conv---------------------------------------------------------
//---Mia alli voithitiki gia tin summetavlitotita----------------------------------------------//
void Help_Conv(float *inflation, float *aep_growth, float *investments, float *avg_inflation, float *avg_aep_growth, float *avg_investments, float *conv_inflationVSaep, float *conv_inflVSinvest, float *conv_aepVSinvest)
{
conv(inflation, aep_growth, avg_inflation, avg_aep_growth, conv_inflationVSaep, 13);
conv(inflation, investments, avg_inflation, avg_investments, conv_inflVSinvest, 13);
conv(aep_growth, investments, avg_aep_growth, avg_investments, conv_aepVSinvest, 13);
}//--telos voithitikis------------------------------------------------------------------//
//---H sunartisi All in One-------------------------------------------------------------//
void AllinOne(struct StatisticalData *all_data, float *conv1, float *conv2, float *conv3)
{
int a;
char country [10];
printf("Dose onoma xwras gia anazitisi statistikwn stoixeiwn. \n");
scanf("%s", country);
a = findCountry(all_data, country);
if(a!=-1)
{
Help_Conv(&all_data[a].inflation, &all_data[a].aep_growth, &all_data[a].investments, &all_data[a].avg_inflation, &all_data[a].avg_aep_growth, &all_data[a].avg_investments, conv1, conv2, conv3);
}
else
{
printf("H xwra den uparxei. \n");
}
}//--telos tis AllinOne------------------------------------------------------------------//
//--------------------------------------------------------------------------------------//
// H main //
//--------------------------------------------------------------------------------------//
main()
{
struct StatisticalData *all_data;
int i, j, select;
float conv1, conv2, conv3;
//-------Kanoume malloc gia desmeusi tou all_data------------------------------------------//
all_data=(struct StatisticalData*)malloc(N*sizeof(struct StatisticalData));
if(all_data==NULL)
{
printf("Error allocating memory.\n");
exit(0);
}
for(i=0; i<N; i++)
{
all_data[i].years=(int*)malloc(M*sizeof(int));
all_data[i].inflation=(float*)malloc(M*sizeof(float));
all_data[i].aep_growth=(float*)malloc(M*sizeof(float));
all_data[i].investments=(float*)malloc(M*sizeof(float));
if(all_data[i].years==NULL || all_data[i].inflation==NULL || all_data[i].aep_growth==NULL || all_data[i].investments==NULL)
{
printf("Error allocating memory.\n");
exit(0);
}
}
//-----------------------------------------------------------------------------------------//
LoadData(all_data);
calcStats(all_data);
while(1)
{
printf("Menu epilogwn \n");
printf("Dialekse ena apo ta parakatw: \n");
printf("1. Ektypwsi meswn, megistwn kai elaxistwn timwn ana xwra.(se arxeio XML) \n");
printf("2. Ypologismos summetavlitotitas. \n");
printf("3. Exodos. \n");
scanf("%d", select);
switch(select)
{
case 1: printXML(all_data);
break;
case 2: AllinOne(all_data, &conv1, &conv2, &conv3);
printf("H summetavlitotita metaksu inflation kai aep growth einai %f \n", conv1);
printf("H summetavlitotita metaksu inflation kai investments einai %f \n", conv2);
printf("H summetavlitotita metaksu aep growth kai investments einai %f \n", conv3);
break;
case 3:
exit(0);
default:
printf("Den uparxei tetoia epilogi. \n");
break;
}
}
}//telos tis main