#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

struct data {
    int dia, mes, ano;
};
typedef struct data Data;

struct funcionario {
    int mat; /* matricula do funcionario */
    char nome[51]; /* nome do funcionario */
    Data admissao; /* data de admissão do funcionario */
};
typedef struct funcionario Funcionario;


Funcionario* Cria_funcionario(int mat, char* n, int d, int m, int a){

Funcionario* funcionario = (Funcionario*)malloc(sizeof(Funcionario));
strcpy(funcionario->nome,n);
funcionario->mat=mat;
funcionario->admissao.dia=d;
funcionario->admissao.mes=m;
funcionario->admissao.ano=a;

return funcionario;
}
static int compara(const void* p1, const void* p2)
{
   Funcionario **f1 = (Funcionario**)p1;
   Funcionario **f2 = (Funcionario**)p2;

   if((*f1)->admissao.ano >(*f2)->admissao.ano)
	   return -1;
   if((*f1)->admissao.ano <(*f2)->admissao.ano)
	   return 1;
   if((*f1)->admissao.mes >(*f2)->admissao.mes)
	   return -1;
   if((*f1)->admissao.mes <(*f2)->admissao.mes)
	   return 1;
   if((*f1)->admissao.dia >(*f2)->admissao.dia)
	   return -1;
   if((*f1)->admissao.dia <(*f2)->admissao.dia)
	   return 1;
return ((*f1)->mat >(*f2)->mat);
}

void Ordena_funcionarios(Funcionario** vet, int n)
{

	qsort(vet, n, sizeof(Funcionario*), compara);
}

void Imprime_funcionario(Funcionario** vet, int n) {
   int i;
   for(i=0;i < n; i++)
      printf("\nMatrícula=%d; Nome=%s; Dia=%d; Mês=%d; Ano=%d", vet[i]->mat, vet[i]->nome, vet[i]->admissao.dia, vet[i]->admissao.mes, vet[i]->admissao.ano);
}


int main () {
 setlocale(LC_ALL,"portuguese");
     char nome [51];
     int mat;
     int d,m,a;
     int n, i;
     Funcionario* f[80];
     printf("informe a quantidade de funcionários: ");
     scanf("%d", &n);
    for (i=0;i<n;i++){
         printf ("digite o nome do funcionário ");
         scanf ("%s",nome);
         printf("digite a matrícula do funcionário ");
         scanf ("%d", &mat);
         printf("digite a data de admissão do funcionário ");
         scanf ("%d %d %d",&d,&m,&a);
         f[i] = Cria_funcionario(mat, nome, d, m, a);
     }
    Ordena_funcionarios(f,n);
    Imprime_funcionario(f,n);
}

