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); }

Rispondi quotando