#include <stdio.h>
#include <conio.h>

struct data
  {
	int dia,mes,any;
  };
struct alumne
  {
	char nom[20],cognom1[20],cognom2[20];
	int nota;
	struct data datan;
  };

void ordena1 (struct alumne *t, int max)
{
 int i,j,canvi;
 struct alumne aux;
 i=0;canvi=1;
 while (i < max-1 && canvi==1)
 {
	j=max-1;canvi=0;
	while (j > i)
	{
	  if(t[j].nota < t[j-1].nota)
	  {
		 aux=t[j]; t[j]=t[j-1];t[j-1]=aux;canvi=1;
	  }
	  j--;
	}
	i++;
 }
}

void ordena2 (struct alumne *t, int max)
{
 int i,j,canvi,fercanvi;
 struct alumne aux;
 i=0;canvi=1;
 while (i < max-1 && canvi==1)
 {
	j=max-1;canvi=0;
	while (j > i)
	{
	  fercanvi=0;
	  if(t[j].nota < t[j-1].nota) fercanvi=1;
	  else if (t[j].nota==t[j-1].nota)
				if((t[j].datan.any < t[j-1].datan.any) ||
					(t[j].datan.any==t[j-1].datan.any && (t[j].datan.mes<t[j-1].datan.mes ||
					(t[j].datan.mes==t[j-1].datan.mes && t[j].datan.dia < t[j-1].datan.dia))))
					  fercanvi=1;
	  if (fercanvi==1)
	  {
		 aux=t[j]; t[j]=t[j-1];t[j-1]=aux;canvi=1;
	  }
	  j--;
	}
	i++;
 }
}

void main()
{
 struct alumne talum[30];
 int i, max;
 char continuar;
 /* Omplir taula */
 i=0;
 continuar='S';
 do
  {
	clrscr();
	printf("\nALUMNE Nš %d\n",i+1);
	printf("\nNOM DE L'ALUMNE: ");scanf("%20[^\n]",talum[i].nom);fflush(stdin);
	printf("\n1ER COGNOM DE L'ALUMNE: ");scanf("%20[^\n]",talum[i].cognom1);fflush(stdin);
	printf("\n2ON COGNOM DE L'ALUMNE: ");scanf("%20[^\n]",talum[i].cognom2);fflush(stdin);
	printf("\NOTA: ");scanf("%d",&talum[i].nota);fflush(stdin);
	printf("\DATA: ");scanf("%2d/%2d/%4d",&talum[i].datan.dia,&talum[i].datan.mes,&talum[i].datan.any);fflush(stdin);
	printf("\n\nVols continuar? (S/N)");
	do
	{
	 scanf("%c",&continuar);fflush(stdin);
	}
	while (continuar!='s' && continuar!='S' && continuar!='n' && continuar!='N');
	i++;
  }
 while(i<30 && (continuar=='s' || continuar=='S'));
 max=i; /* ens guardem el nombre d'elements introduits */
 clrscr();
 printf("Ara visualitzem les dades introduides\n\n\n");
 for(i=0;i<max;i++)
 {
  printf("\nAlumne %d ",i+1);
  printf(" Nom:  %s ",talum[i].nom);
  printf(" Nota: %d ",talum[i].nota);
 }
 getch();
 printf("\n\nAra ordenem la taula");
 ordena1(talum,max);
 printf("\n\nAra visualitzem les dades ordenades\n\n");
 for(i=0;i<max;i++)
 {
  printf("\nAlumne %d ",i+1);
  printf(" Nom:  %s ",talum[i].nom);
  printf(" Nota: %d ",talum[i].nota);
 }
 getch();
 printf("\n\nAra ordenem la taula per nota i data");
 ordena2(talum,max);
 printf("\n\nAra visualitzem les dades ordenades\n\n");
 for(i=0;i<max;i++)
 {
  printf("\nAlumne %d ",i+1);
  printf(" Nom:  %s ",talum[i].nom);
  printf(" Nota: %d ",talum[i].nota);
 }
 getch();
}
