# include <stdio.h>
# include <string.h>
/** Auto legetai dilosi domis 
 *  kai einai typos..
 * **/

typedef struct
{
	char street[100];
	char city[100];
	int number;
}Address;
typedef struct 
{
	char name[100];
	char lastname[100];
	int  age;
	double grades[5];
	Address myAddress;
}Student;

typedef struct
{
	char name[100];
	char lastname[100];
	Address myAddress;
}Teacher;

double mesos(double x[],int n)
{
	int i;
	double sum = 0.0;
	for(i=0;i<n;i++)
	  sum+=x[i];
	return sum/n;
}

double mesosGrade(Student x)
{
	int i;
	double sum = 0.0;
	for(i=0;i<5;i++)
	  sum+=x.grades[i];
	return sum/5;
}

Address readAddress()
{
	Address x;
	printf("Dose odo \n");
	scanf("%s",x.street);
	printf("Dose arithmo \n");
	scanf("%d",&x.number);
	printf("Dose poli \n");
	scanf("%s",x.city);
	return x;
}

Student readStudent()
{
	Student x;
	int i;
	printf("Dose onoma \n");
	scanf("%s",x.name);
	printf("Dose epitheto \n");
	scanf("%s",x.lastname);
	printf("Dose ilikia \n");
	scanf("%d",&x.age);
	for(i=0;i<5;i++)
	{
		printf("Dose bathmo %d \n",i);
		scanf("%lf",&x.grades[i]);
	}
	x.myAddress=readAddress();
	return x;
}

Teacher readTeacher()
{
	Teacher x;
	printf("Dose onoma \n");
	scanf("%s",x.name);
	printf("Dose epitheto \n");
	scanf("%s",x.lastname);
	x.myAddress=readAddress();
	return x;
}

void printStudent(Student x)
{
	printf("Onoma      : %s \n",x.name);
	printf("Epitheto   : %s \n",x.lastname);
	printf("Ilikia     : %d \n",x.age);
	printf("Mesos oros : %lf \n",mesosGrade(x));
}


/** AUti i synartisi epistrefei 1 an o mathitis a exei
 * pio megalo meso oro apo ton mathiti b **/
int betterStudent(Student a,Student b)
{
	if(a.grades[1]>b.grades[1]) return 1;
	else return 0;
	/*if(mesosGrade(a)>mesosGrade(b)) return 1;
	
	else return 0;*/
}

int main()
{
	Student myClass[5];
	int i,j;
	for(i=0;i<5;i++)
	{
		printf("Student %d details \n",i);
		myClass[i]=readStudent();
	}
	
	for(i=0;i<5;i++)
	{
		printf("Student %d details \n",i);
		printStudent(myClass[i]);
	}
	/** thelo ton mathiti me ton pio megalo meso oro **/
	int maxStudent=-1;
	double maxAvg=0.0;
	for(i=0;i<5;i++)
	{
		if(i==0 || mesosGrade(myClass[i])>maxAvg)
		{
			maxStudent=i;
			maxAvg=mesosGrade(myClass[i]);
		}
	}
	
	printf("O kalyteros mathitis einai o %d \n",maxStudent);
	
	/** Posoi foitites menoun Arta??? **/
	int countArta  = 0;
	for(i=0;i<5;i++)
	{
		if(strcmp(myClass[i].myAddress.city,"Arta")) 
		   countArta++;
	}
	printf("Stin Arta menoun %d \n",countArta);
	/** esto oti stin deyteri thesi einai o programmatismos 2
	 * pos tha typoso tis bathmologies olon se ayton to mathima??**/
	 for(i=0;i<5;i++)
	 {
		 printf("%s %s %lf \n",myClass[i].name,
				myClass[i].lastname,myClass[i].grades[1]);
	 }
	 
	 /** Tha kano taxinomisi os pros to epitheto **/
	 for(i=0;i<5;i++)
	 {
		 for(j=0;j<4;j++)
		 {
			 if(strcmp(myClass[j].lastname,myClass[j+1].lastname)>0)
			 {
				 Student temp = myClass[j];
				 myClass[j]=myClass[j+1];
				 myClass[j+1]=temp;
			 }
			 /** an ta epitheta einai idia koitazo to mikro onoma **/
			 else
			 if(strcmp(myClass[j].lastname,myClass[j+1].lastname)==0)
			 {
				 if(strcmp(myClass[j].name,myClass[j+1].name)>0)
				 {
					Student temp = myClass[j];
					myClass[j]=myClass[j+1];
					myClass[j+1]=temp;
				 }
			 }
		 }
	 }
	 for(i=0;i<5;i++)
	 {
		 printStudent(myClass[i]);
	 }
	 
	 /** taxinomisi foititon os pros meso oro bathmologias **/
	 for(i=0;i<5;i++)
	 {
		 for(j=0;j<4;j++)
		 {
			 if(betterStudent(myClass[j],myClass[j+1]))
			 {
				Student temp = myClass[j];
				myClass[j]=myClass[j+1];
				myClass[j+1]=temp; 
			 }
		 }
	 }
	 for(i=0;i<5;i++)
	 {
		 printStudent(myClass[i]);
	 }
	return 0;
}
