You are on page 1of 4

Solucin Saltos de Trampoln

Mdulo principal:
Leer nadadores e iniciar la puntuacin a cero
Proporcionar (Leer) el nmero de rondas
Ejecutar rondas // Competicin
Mostrar las medallas
Mdulo Leer nadadores
Entrada: Fichero conteniendo los nmeros de los dorsales
Salida: Coleccin de nadadores con las notas a cero
Mdulo proporcionar nmero de rondas
Entrada: Nmero entero desde teclado
Salida: nmero de rondas
Mdulo Ejecutar Rondas // Competicin
Entrada: Coleccin de nadadores ordenada por el orden inicial y el nmero de rondas
Salida: Coleccin de nadadores ordenada por puntuacin
Debe hacer: Ejecutar cada una de las rondas (bucle en nmero de rondas)
Mdulo Ejecutar Una Ronda
Entrada: Coleccin de nadadores ordenada
Salida: Coleccin de nadadores actualizada y ordenada con las notas de esta ronda
Debe hacer:
Leer el nmero de jueces
Realiza salto cada nadador (bucle en nadadores)
Modulo Actualizar Notas de nadador
Ordenar la coleccin de nadadores por puntuacin
Modulo Actualizar Nota
Entrada: nadador con la nota previa y nmero de jueces
Salida: nadador con la nota actualizada
Debe hacer:
Leer la nota de cada juez
Calcular nota
Actualizar la nota del nadador
Modulo Calcular Nota
Entrada: las notas de los jueces
Salida: la puntuacin en funcin de la media
Debe hacer:
calcular Suma
Calcular Minimo
Calcular Maximo
Calcular media quitando mximo y mnimo
Mdulo Calcular Suma
Entrada: Notas de los jueces

Salida: Suma de todas las notas


Mdulo Calcular Minimo
Entrada: Notas de los jueces
Salida: Mnimo de las notas
Mdulo Calcular Maximo
Entrada: Notas de los jueces
Salida: Mximo de las notas
Mdulo Ordenar Notas
Entrada: Lista de Nadadores
Salida: Lista de Nadadores ordenada por puntuacin
Modulo Mostrar Medallas
Entrada: Coleccin ordenada de Nadadores por puntuacin
Salida: Mostrar en pantalla o escribir en fichero los dorsales de los tres primeros
nadadores
Codificado en C
#include <stdio.h>
#include <stdlib.h>
#define MAXNAD 10
#define MAXJUE 5
typedef struct{
int dorsal;
double nota;
} Nadador;
typedef Nadador TablaNadadores[MAXNAD];
typedef double TablaNotas[MAXJUE];
typedef char Cadena[256];
int leerNadadores(Cadena,TablaNadadores);
void ordenarNotas(TablaNadadores, int);
void escribirTabla(TablaNadadores, int);
void actualizarNotas(Nadador *, int);
double calcularNota(TablaNotas, int);
void ejecutarRonda(TablaNadadores, int);
void muestraGanadores(const TablaNadadores, int);
void main(void){
int nrondas,numnad;
TablaNadadores nadadores;
int i;
numnad=leerNadadores("nadadores.txt",nadadores);
printf("introduzca el nmero de rondas: ");
scanf("%d",&nrondas);
for(i=1;i<=nrondas;i++){
printf("\nEmpieza la ronda %d \n",i);

ejecutarRonda(nadadores,numnad);
escribirTabla(nadadores,numnad);
}
muestraGanadores(nadadores,numnad);
}
void actualizarNotas(Nadador * nd, int nj){
int j;
double puntos;
TablaNotas notas;
printf("\nHa saltado el nadador %d. Calificaciones: \n",nd->dorsal);
for(j=0;j<nj;j++){
printf("Introduzca la nota del juez %d: ",j+1);
scanf("%lf",&notas[j]);
}
puntos=calcularNota(notas,nj);
nd->nota=nd->nota+puntos;
}
double suma(const TablaNotas t, int n){
int i;
double suma=0.;
for (i=0;i<n;i++){
suma = suma + t[i];
}
return suma;
}
double maximo(const TablaNotas t, int n){
int i;
double max=t[0];
for (i=0;i<n;i++){
if (max<t[i])
max=t[i];
}
return max;
}
double minimo(const TablaNotas t, int n){
int i;
double min=t[0];
for (i=0;i<n;i++){
if (min>t[i])
min=t[i];
}
return min;
}
double calcularNota(const TablaNotas t, int n){
double nota;
nota=suma(t,n)-maximo(t,n)-minimo(t,n);
return nota/(n-2);
}
void ejecutarRonda(TablaNadadores t, int n){
int i, nj;
printf("Introduzca el nmero de jueces de la ronda: ");

scanf("%d",&nj);
for (i=0;i<n;i++){
actualizarNotas(&t[i],nj);
}
ordenarNotas(t,n);
}
void muestraGanadores(const TablaNadadores t, int n){
printf("\nLa medalla de oro es el dorsal %d con %lf puntos\n",t[n1].dorsal, t[n-1].nota);
printf("\nLa medalla de plata es el dorsal %d con %lf puntos\n",t[n2].dorsal, t[n-2].nota);
printf("\nLa medalla de bronce es el dorsal %d con %lf puntos\n",t[n3].dorsal, t[n-3].nota);
}
void escribirTabla(TablaNadadores t, int n){
int i;
for (i=n-1;i>=0;i--){
printf("\n Nadador: %d Puntos: %f\n",t[i].dorsal,t[i].nota);
}
}
int leerNadadores(Cadena nomfich,TablaNadadores t){
FILE *f;
int i=0;
f=fopen(nomfich,"r");
if (f==NULL){
printf("El fichero no est\n");
}
else{
while(!feof(f)){
fscanf(f,"%d",&t[i].dorsal);
t[i].nota=0.;
i++;
}
}
return i;
}
void ordenarNotas(TablaNadadores t, int n){
int i, ordenado=0;
Nadador temp;
while (!ordenado){
ordenado=1;
for (i=0;i<n-1;i++){
if (t[i].nota > t[i+1].nota){
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
ordenado = 0;
}
}
}
}

You might also like