#include #include "lab4.h" FILE *abre_arquivo(const char *arquivo){ FILE *arq; arq = fopen(arquivo,"rb"); if (arq == NULL){ printf("ERRO"); return NULL; } return arq; } int fecha_arquivo(FILE *arq){ return fclose(arq); } times_t *le_times(const char *arquivo, unsigned int *numero_de_times){ unsigned int i = 0; FILE *arqu = abre_arquivo(arquivo); times_t equipe; while(!feof(arqu)){ i++; fseek(arqu,i*sizeof(times_t),SEEK_SET); fread(&equipe, sizeof(times_t),1,arqu); } *numero_de_times = i; times_t *times = (times_t*)malloc(i*sizeof(times_t)); if(times == NULL){ free(times); fecha_arquivo(arqu); return NULL; } fseek(arqu,0,SEEK_SET); int checagem = fread(times,sizeof(times_t),i,arqu); if (checagem < i){ free(times); fecha_arquivo(arqu); return NULL; } fecha_arquivo(arqu); return times; } void encontra_jogador_cartao_vermelho_e_jogos(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float proporcao = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (((float)(times[i].jogadores[j].cartoes_vermelhos)/(times[i].jogadores[j].numero_jogos)) > proporcao){ proporcao = ((float)(times[i].jogadores[j].cartoes_vermelhos))/(times[i].jogadores[j].numero_jogos); *jogador = ×[i].jogadores[j]; *time = ×[i]; } } } } void encontra_jogador_artilheiro(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j,gols = 0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if ((times[i].jogadores[j].gols_marcados) > gols){ gols = times[i].jogadores[j].gols_marcados; *jogador = ×[i].jogadores[j]; *time = ×[i]; } } } } void encontra_jogador_mais_eficiente(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float artilharia = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (((float)(times[i].jogadores[j].gols_marcados))/(times[i].jogadores[j].numero_jogos) > artilharia){ artilharia = ((float)(times[i].jogadores[j].gols_marcados))/(times[i].jogadores[j].numero_jogos); *jogador = ×[i].jogadores[j]; *time = ×[i]; } } } } void encontra_time_com_mais_titulos(times_t *times, unsigned int num_times, times_t **time){ int i; float titulo = 0.0; for(i = 0; i < num_times;i++){ if (((float)(times[i].numero_copas_brasil + times[i].numero_tit_brasileiros + times[i].numero_tit_estadual + times[i].numero_tit_libertadores)/(times[i].ano_fundacao)) > titulo){ titulo = (((float)(times[i].numero_copas_brasil + times[i].numero_tit_brasileiros + times[i].numero_tit_estadual + times[i].numero_tit_libertadores))/(times[i].ano_fundacao)); *time = ×[i]; } } } void encontra_goleiro_que_defendeu_mais_penaltis(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float defesas = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (times[i].jogadores[j].posicao == 0){ if(((float)(times[i].jogadores[j].penalti_defendidos)/(times[i].jogadores[j].numero_jogos)) > defesas){ defesas = ((times[i].jogadores[j].penalti_defendidos)/(times[i].jogadores[j].numero_jogos)); *jogador = ×[i].jogadores[j]; *time = ×[i]; } } } } } void encontra_jogador_mais_agressivo(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float agressividade = 0.0, x; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ x = 5*(times[i].jogadores[j].cartoes_vermelhos) + times[i].jogadores[j].cartoes_amarelos + 0.2*(times[i].jogadores[j].faltas_cometidas); if(x > agressividade){ agressividade = x; *time = ×[i]; *jogador = ×[i].jogadores[j]; } } } } int main(void){ int numeroDeTimes; char nomeArquivo[15] = "arq.dat"; times_t *times = le_times(nomeArquivo, &numeroDeTimes); times_t *maiorTime; jogador_t *maiorJogador; encontra_jogador_cartao_vermelho_e_jogos(times,numeroDeTimes,&maiorJogador, &maiorTime); printf("%s \n",maiorTime->nome); printf("%s",maiorJogador->nome); encontra_jogador_artilheiro(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_jogador_mais_eficiente(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_time_com_mais_titulos(times,numeroDeTimes, &maiorTime); encontra_goleiro_que_defendeu_mais_penaltis(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_jogador_mais_agressivo(times,numeroDeTimes,&maiorJogador, &maiorTime); return 0; }