Si scriva un programma in linguaggio C che gestisca i dati relativi ai risultati di una gara di atletica
leggera. Il programma, noto il numero di partecipanti alla gara, deve:
a) allocare dinamicamente un vettore, nel quale ogni elemento rappresenta il risultato di un
diverso atleta;
b) Per ogni atleta e` necessario memorizzare:
pettorale (intero): rappresenta il numero di pettorale dell'atleta iscritto alla gara;
cognome (max 21caratteri);
nome (max 21caratteri);
specialità (max 7 caratteri): (es.: 1500m, 100m, 400m hs);
tempo personale (intero): rappresenta il tempo in secondi (se questo valore e` uguale a 1,
significa che l'atleta si è ritirato durante la gara.
Una volta acquisiti i dati relativi alla gara, il programma deve:
1. Visualizzare la graduatoria finale della competizione ( in ordine di tempo totale
crescente) con, per ogni atleta cognome, nome, numero e tempo.
2. Visualizzare cognome, nome, numero e tempo del vincitore.
3. Visualizzare cognome, nome e numero degli atleti ritirati;
Allora il programma è quasi completo, manca solo la parte che visualizza la graduatoria finale in ordine di tempo. Come si fa? Poi un'altra cosa: perchè quando mi visualizza il vincitore il nome e il cognome si vedono tutti a caratteri strani? Dove ho sbagliato?
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int pettorale;
char cognome[21];
char nome[21];
char specialita[7];
int tempo;
}partecipante;
main()
{
int n, i, pm, tm;
char cm[21], nm[21];
partecipante *p;
do{
printf("Quanti partecipanti? ");
scanf("%d", &n);
p=(partecipante *) malloc (sizeof(partecipante) * n);
for(i=0;i<n;i++)
{
printf("\nAtleta numero %d", i+1);
printf("\n\nNumero di pettorale: ");
scanf("%d", &p[i].pettorale);
printf("\nCognome: ");
scanf("%s", p[i].cognome);
printf("\nNome: ");
scanf("%s", p[i].nome);
printf("\nSpecialita': ");
scanf("%s", p[i].specialita);
printf("\nTempo: ");
scanf("%d", &p[i].tempo);
}
printf("\n\nRITIRATI:\n\n");
for(i=0;i<n;i++)
{
if(p[i].tempo == -1)
printf("%s---%s---%d\n\n", p[i].cognome, p[i].nome, p[i].pettorale);
}
printf("VINCITORE:\n\n");
tm=p[0].tempo;
for(i=0;i<n;i++)
{
if(p[i].tempo < tm && p[i].tempo != -1)
{
strcpy(p[i].cognome, cm);
strcpy(p[i].nome, nm);
pm=p[i].pettorale;
tm=p[i].tempo;
}
}
printf("%s---%s---%d---%d\n\n", cm, nm, pm, tm);
}while(n);
}