void armazena_vitoria(entrada* vetor, time* campeonato, time* times_camp, int *i, int* quant_times, int* quant_times_jogaram){ int j=0, pos1=0, pos2=0, posic1=0, posic2=0; time time_a, time_b; //Verificar os times que jogaram. strcpy(time_a.nome, vetor[*i].elemento2); strcpy(time_b.nome, vetor[*i].elemento3); posic1= consulta_time(time_a, times_camp, quant_times); posic2= consulta_time(time_b, times_camp, quant_times); if(posic1!=-1){ time_a.pontuacao= times_camp[posic1].pontuacao; pos1= verifica_ranking(time_a, campeonato, quant_times_jogaram); } if(posic2!=-1){ time_b.pontuacao= times_camp[posic2].pontuacao; pos2= verifica_ranking(time_b, campeonato, quant_times_jogaram); } //Caso o time vencedor tenha feito sua primeira partida no campeonato e não tenha sido citado anteriormente na entrada, ele será inserido na competição e no vetor para consulta. if(posic1== -1){ insere_time(time_a, campeonato, quant_times_jogaram); insere_time(time_a, times_camp, quant_times); pos1= (*quant_times_jogaram); posic1= (*quant_times); } //Caso o time perdedor tenha feito sua primeira partida no campeonato e não tenha sido citado anteriormente na entrada, ele será inserido na competição e no vetor para consulta. if(posic2== -1){ insere_time(time_b, campeonato, quant_times_jogaram); insere_time(time_b, times_camp, quant_times); pos2= (*quant_times_jogaram); posic2= (*quant_times); } //Caso o time vencedor tenha feito sua primeira partida no campeonato, mas já tenha sido citado anteriormente na entrada, ele será inserido na competição apenas. if(pos1== -1){ insere_time(time_a, campeonato, quant_times_jogaram); pos1= (*quant_times_jogaram); } //Caso o time perdedor tenha feito sua primeira partida no campeonato, mas já tenha sido citado anteriormente na entrada, ele será inserido na competição apenas. if(pos2== -1){ insere_time(time_b, campeonato, quant_times_jogaram); pos2= (*quant_times_jogaram); } //Modificar a pontuação dos times que jogaram. modifica_pontuacao(times_camp, posic1, 3, posic2, 0); modifica_pontuacao(campeonato, pos1, 3, pos2, 0); //Reordenar a classificação do campeonato. ordena_ranking(campeonato, *quant_times_jogaram); for(j=1; j<= *quant_times_jogaram; j++){ campeonato[j].ranking=j; } //Reordenar o vetor que contém os times em ordem alfabética. ordena_nome(times_camp, *quant_times, campeonato); }
int main() { estrelas=(dados*)malloc(sizeof(dados)*(n_linhas()+1)); //aloca memoria necessaria para carregar todos os dados do ficheiro preenche_tabela(); //preenche a tabela na inicializacao do programa char opcao; do //ciclo que so termina se o utilizador introduzir x ou X { printf("\n\nMostrar o conteudo da tabela....1\n"); printf("Acrescentar uma estrela.........2\n"); printf("Corrigir dados de uma estrela...3\n"); printf("Ordenar por massa...............4\n"); printf("Ordenar por nome................5\n"); printf("Ordenar por constelacao.........6\n"); printf("Sair............................x\n"); opcao=getchar(); getchar(); if (opcao=='x' || opcao=='X') exit (2); else switch (opcao) { case '1': imprime_tabela(); break; case '2': insere_estrela(); break; case '3': corrige_dados(); break; case '4': ordena_massa(); break; case '5': ordena_nome(); break; case '6': ordena_constelacao();break; default : {printf("Opcao incorrecta");while(getchar()!='\n');}; } }while(opcao!='x' || opcao!='X'); return 0; }
void operacao_consulta(FILE* saida, entrada *vetor, time* campeonato, time* times_camp, int *i, int* quant_times, int* quant_times_jogaram){ char *rank="RANKING", *pont="PONTUACAO"; int pos1=0, posic1=0; char *info2; time time_a; //Verificar o time a ser consultado. strcpy(time_a.nome, vetor[*i].elemento3); posic1= consulta_time(time_a, times_camp, quant_times); //Se o time for novo, inserir o time no vetor. if(posic1== -1){ insere_time(time_a, times_camp, quant_times); posic1= (*quant_times); times_camp[posic1].ranking= (*quant_times_jogaram)+1; } //Verificar o tipo de consulta solicitada. info2= vetor[*i].elemento2; //Caso a consulta seja ao ranking do time. if(strcmp(info2, rank)==0){ //Se o time já jogou, verifica a posição no ranking pelo vetor ordenado por ranking. if(times_camp[posic1].flag_jogou==1){ time_a.pontuacao= times_camp[posic1].pontuacao; pos1= verifica_ranking(time_a, campeonato, quant_times_jogaram); fprintf(saida, "RANKING,%s,%d\n", campeonato[pos1].nome, campeonato[pos1].ranking); } //Se o time não jogou ainda, seu ranking é N+1. else fprintf(saida, "RANKING,%s,%d\n", times_camp[posic1].nome, times_camp[posic1].ranking); } //Caso a consulta seja à pontuação do time. else if(strcmp(info2, pont)==0){ fprintf(saida, "PONTUACAO,%s,%d\n", times_camp[posic1].nome, times_camp[posic1].pontuacao); } //Validação da entrada. else{ printf("ENTRADA INVÁLIDA! Se vai fazer consulta, o segundo campo da linha deve ser RANKING ou PONTUACAO.\n"); exit(0); } //Reordenar o vetor que contém os times em ordem alfabética. ordena_nome(times_camp, *quant_times, campeonato); }