Bom treino, muito completo: classificação de atletas
Publicado por Lucas Reis (última atualização em 15/10/2016)
[ Hits: 2.971 ]
Homepage: https://twitter.com/makumberos_face
Foi um trabalho escolar que realizei há algum tempo. Partilho para quem pretender praticar criando algo semelhante.
Objetivo:
- Definir o número de atletas e juízes que participarão no evento;
- Inserir a pontuação de cada juiz para cada atleta;
- Mostrar a nota média por aletas;
- Mostrar os atletas que têm a nota mais alta e a mais baixa;
- No total, qual a porcentagem de notas máximas (9);
- Para cada um dos atletas, mostrar o número do juiz que lhe atribuiu a melhor nota. No caso da nota mais alta de determinado atleta ser 6, por exemplo, e se essa foi dada por mais de um juiz, mostrar o número desses juízes;
- Mostrar todos os atletas e as suas pontuações.
Exemplo descritivo (com repetição do objectivo acima):
Haverá um concurso de patinagem artística onde participarão 5 concorrentes. Esses concorrentes serão avaliados por 3 juízes e a apresentação será única e sequencial. Quero um programa que me auxilie no registo das avaliações. Para isso terá de recolher o nome do atleta e a avaliação dos juízes, que também é dada em sequência.
No final quero poder consultar a nota média de cada atleta, ver quais foram as notas mais altas e as mais baixas, bem como os atletas correspondentes; Mostrar a porcentagem de notas máximas; Quais foram os juízes que atribuíram as melhores notas para cada um dos atletas. Por fim, quero ver a listagem completa, ou seja, todos os atletas e as suas pontuações. Ah! Eu pretendo utilizar essa aplicação para o mesmo evento nos anos seguintes e o número de atletas/juízes pode variar.
Não investi tempo em filtrar o que o utilizador introduz. Você poderá fazer isso para que o seu código fique completo. Por isso ao executá-lo, quando pedir um número, introduza um número e quando pedir um nome, introduza apenas letras sem caracteres especiais (inclui acentos, espaços e "ç").
Terminando este desafio eu acredito que você terá a base sólida a nível básico da linguagem e o raciocínio lógico necessário para aplicações mais avançadas.
Partilho também Workflow que certamente ajudará o pessoal a compreender todo o pensamento lógico por detrás do código.
Workflow de cada função disponível no meu flickr: https://www.flickr.com/gp/133659721@N04/P73i52
Altere o código, faça da sua maneira o que é pedido, acrescente novas funções e partilhe o código nos comentários.
Espero ter ajudado,
Lucas
tainanreis@yahoo.com
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct {
char nome_atleta[60];
}dados;
/*============================================*/
/*Função número dos juízes que atribuíram a melhor nota ao atleta*/
void juizes_melhor_nota_atleta(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados dados[]){
int i_atletas, i_juizes;
int pontuacao_mais_alta=0, numero_juiz=0;
printf("\nNumero dos juizes que atribuiram a melhor nota dos atletas:");
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
printf("\nNome: %s\n", dados[i_atletas].nome_atleta);
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]>pontuacao_mais_alta){
pontuacao_mais_alta=pontuacao[i_atletas][i_juizes];
}
}
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]==pontuacao_mais_alta){
printf("Juiz %d: %d\n", i_juizes+1, pontuacao[i_atletas][i_juizes]);
}
}
pontuacao_mais_alta=0;
}
system("pause");
}
/*============================================*/
/*Função percentagem de pontuação maior ou igual a 8*/
void percentagem_maior_8(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados dados[]){
int i_atletas, i_juizes;
int total_notas=n_max_juizes*n_max_atletas, igual_superior_8=0;
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]>=8){
igual_superior_8++;
}
}
}
printf("Percentagem: %.2f%%\n",((float)igual_superior_8/total_notas)*100);
system("pause");
}
/*============================================*/
/*Função pior e melhor pontuação*/
void pior_melhor_pontuacao(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados dados[]){
int i_atletas, i_juizes, i=0;
int pontuacao_min=pontuacao[0][0], pontuacao_max=pontuacao[0][0];
int quantos_melhores=0, quantos_piores=0;
int posicao_melhor[n_max_atletas], posicao_pior[n_max_atletas];
int ja_incluido;
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]<pontuacao_min){
pontuacao_min=pontuacao[i_atletas][i_juizes];
}
if(pontuacao[i_atletas][i_juizes]>pontuacao_max){
pontuacao_max=pontuacao[i_atletas][i_juizes];
}
}
}
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
ja_incluido=0;
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]==pontuacao_min){
if(ja_incluido==0){
posicao_pior[quantos_piores]=i_atletas;
quantos_piores=quantos_piores+1;
ja_incluido=1;
}
}
}
}
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
ja_incluido=0;
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
if(pontuacao[i_atletas][i_juizes]==pontuacao_max){
if(ja_incluido==0){
posicao_melhor[quantos_melhores]=i_atletas;
quantos_melhores=quantos_melhores+1;
ja_incluido=1;
}
}
}
}
printf("\nAtletas com a pior pontuacao (%d):\n", pontuacao_min);
for(i=0;i<quantos_piores;i++){
printf("Nome: %s\n", dados[posicao_pior[i]].nome_atleta);
}
printf("\nAtletas com a melhor pontuacao (%d):\n", pontuacao_max);
for(i=0;i<quantos_melhores;i++){
printf("Nome: %s\n", dados[posicao_melhor[i]].nome_atleta);
}
system("pause");
}
/*============================================*/
/*Função nota média por atleta*/
void nota_media_atleta(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados dados[]){
int i_atletas, i_juizes, media;
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
media=0;
printf("\n\nNome do atleta: %s\n", dados[i_atletas].nome_atleta);
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
media=media+pontuacao[i_atletas][i_juizes];
}
printf("Media: %.2f\n", ((float)media) /n_max_juizes);
}
system("pause");
}
/*============================================*/
/*Função ver todos*/
void teste_ver_todos(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados dados[]){
int i_atletas, i_juizes;
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
printf("\n\nNome do atleta: %s", dados[i_atletas].nome_atleta);
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
printf("\nNota do juiz [%d]: %d", i_juizes+1, pontuacao[i_atletas][i_juizes]);
}
}
printf("\n");
system("pause");
}
/*============================================*/
/*Função Inserir*/
void inserir(int n_max_atletas, int n_max_juizes, int pontuacao[][MAX], dados inserir[]){
int i_atletas, i_juizes;
int valor_inserido;
for(i_atletas=0; i_atletas<n_max_atletas; i_atletas++){
printf("\nNome do atleta: \n> ");
scanf("%s", inserir[i_atletas].nome_atleta);
for(i_juizes=0; i_juizes<n_max_juizes; i_juizes++){
printf("\nNota do juiz [%d]: ", i_juizes+1);
scanf("%d", &valor_inserido);
if(valor_inserido>=0 && valor_inserido<=9){
pontuacao[i_atletas][i_juizes]=valor_inserido;
}else{
printf("\n\nIntroduza um valor entre 0 e 9!\n\n");
i_juizes--;
}
}
}
}
/*============================================*/
/*Função principal*/
main(){
int n_max_atletas, n_max_juizes, opcao_menu=0, pontuacao[MAX][MAX];
dados dados[MAX];
printf("Insira o numero de atletas:\n> ");
scanf("%d", &n_max_atletas);
printf("Insira o numero de juizes:\n> ");
scanf("%d", &n_max_juizes);
while(opcao_menu!=7){
system("cls");
printf(
"Escola uma opcao:\n"
"1\t-\tInserir\n"
"2\t-\tNota media por atleta\n"
"3\t-\tPior e melhor pontuacao\n"
"4\t-\tPercentagem de pontuacoes iguais ou superiores a 8\n"
"5\t-\tNumero dos juizes que atribuiram melhor nota por atleta\n"
"6\t-\tMostrar todos os atletas e pontos\n\n"
"7\t-\tSair\n>"
);
scanf("%d", &opcao_menu);
switch(opcao_menu){
case 1:
inserir(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 2:
nota_media_atleta(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 3:
pior_melhor_pontuacao(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 4:
percentagem_maior_8(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 5:
juizes_melhor_nota_atleta(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 6:
teste_ver_todos(n_max_atletas, n_max_juizes, pontuacao, dados);
break;
case 7:
exit(0);
break;
default:
printf("\nEscolheu uma opcao nao valida!");
system("PAUSE");
}
}
}
Equações de primeiro e segundo grau
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (2)
Estou tentando ser legalista, mas tá complicado! (0)
É normal não gostar de KDE? (17)
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (1)









