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

typedef struct concurso
{
    char nome[30];
    int matri;
    int prov1;
    int prov2;
    int prov3;
} con;

typedef struct clasificados
{
    char n[30];
    int m;
    int pont;
} cla;

void ordena(con* co,int tam)
{
    cla *conc=(cla*)malloc(sizeof(cla)*tam);
    cla aux;
    int i,j=0;
    for(i=0; i<tam; i++)
    {
        if((co[i].prov1>40)&&(co[i].prov2>40)&&(co[i].prov3>40)&&(co[i].prov1+co[i].prov2+co[i].prov3>=150))
        {
            conc[j].pont=co[i].prov1+co[i].prov2+co[i].prov3;
            strcpy(conc[j].n,co[i].nome);
            conc[j].m=co[i].matri;
            j++;
        }
    }
//O PROBLEMA ESTA DAQUI PARA BAIXO, AQUI QUERO ORDENAR OS DADOS DA STRUCT CLASSIFCADOS, ATE QUE ORDENA, MAIS O PRIMEIRO ELEMENTO SAI COMO LIXO DE MEMORIA
    for( i=0; i<j; i++ )
    {
        if( conc[i].pont < conc[i+1].pont )
        {
            aux.pont = conc[i+1].pont;
            conc[i+1].pont = conc[i].pont;
            conc[i].pont = aux.pont;

            strcpy(aux.n,conc[i+1].n);
            strcpy(conc[i+1].n,conc[i].n);
            strcpy(conc[i].n, aux.n);

            aux.m = conc[i+1].m;
            conc[i+1].m = conc[i].m;
            conc[i].m = aux.m;
            i=-1;
        }
    }

    printf("\n\t\t------Classificados-------\n");
    printf("\nPOSICAO\t\tMATRICULA\tCANDIDATO\tNOTA\n");
    for( i=0; i<j; i++ )
    {
        printf("%d\t\t%d\t\t%s\t\t%3d\n",i+1,conc[i].m,conc[i].n,conc[i].pont);
    }
    free(conc);
}

int main()
{
    int i,j;
    int tam;
    printf("Digite o numero de candidatos: ");
    scanf("%d",&tam);
    con *c=(con*)malloc(sizeof(con)*tam);

    for(i=0; i<tam; i++)
    {
        printf("Digite o nome do candidato %d: ",i+1);
        scanf(" %[^\n]s",c[i].nome);

        printf("Digite a matricula do candidato %s: ",c[i].nome);
        scanf("%d",&c[i].matri);

        printf("Digite a nota 1 do candidato %s: ",c[i].nome);
        scanf("%d",&c[i].prov1);

        printf("Digite a nota 2 do candidato %s: ",c[i].nome);
        scanf("%d",&c[i].prov2);

        printf("Digite a nota 3 do candidato %s: ",c[i].nome);
        scanf("%d",&c[i].prov3);
    }
    ordena(c,tam);

    free(c);

    return 0;
}
