Professional Documents
Culture Documents
Nome e Cognome
Matricola
Programmazione
Si realizzi un programma strutturato in linguaggio C che permetta di gestire le statistiche di una
partita di calcio. Le informazioni sono contenute in un file il cui nome viene passato da linea di
comando. Tale file contiene, uno per riga e separati da spazi: nome e cognome del giocatore, ruolo,
chilometri percorsi, passaggi completati, tiri effettuati, goal fatti, falli fatti e falli subiti. Ad
esempio, il file pu contenere:
!"#$%&'%(($&)$*+,(%#+&-./&-0&1&1&20&0&
345"&6+#)$&)$*+,(%#+&7.8&01&2&1&/1&21&
9,)#+"&:$",5;$&5+,<#%5"=>$(<"&8.?&@1&0&2&-&0&
A"B#$C$%&D",<","&"<<"55",<+&7.1&/0&0&2&E&/1&
34$F$&G"HH")$,%&>%#<$+#+&1.0&/0&1&1&1&?&
Si facciano le seguenti assunzioni:
Il numero di righe del file non pu essere maggiore di 14
I campi I%=+ e J%F,%=+ sono lunghi al pi 30 caratteri e non possono contenere spazi
Il ruolo pu essere: portiere, difensore, centrocampista o attaccante
I chilometri percorsi sono rappresentati come numeri reali con la precisione di una cifra
decimale
I restanti valori sono rappresentati come valori interi.
Il programma pu ricevere da linea di comando uno dei seguenti parametri:
1. il flag "-a" e una stringa di caratteri che indica il cognome di un giocatore (si supponga non
ci siano omonimie); in questo caso, il programma deve restituire a video tutte le statistiche
relative al giocatore specificato.
2. il flag -b e una stringa di caratteri che indica un ruolo; in questo caso, il programma deve
restituire le statistiche di tutti i calciatori che giocano in quel ruolo.
3. il flag "-c"; in questo caso, il programma deve visualizzare l'indicazione di tutti i giocatori
che hanno fatto il massimo numero di goal.
Esempio, se il file dell'esempio precedente, contenente i risultati della gara, si chiama
(<"<$(<$5;+.<K<:
JLMN&>#%F.+K+&(<"<$(<$5;+.<K<&O"&6+#)$&
l'output del programma dovr essere il seguente:
345"&6+#)$L&P=&7.8Q&>"(("FF$&01Q&<$#$&2Q&F%"H&1Q&*"HH$&*"<<$&/1Q&*"HH$&(4B$<$&21&
oppure:
JLMN&>#%F.+K+&(<"<$(<$5;+.<K<&OB&)$*+,(%#+&
l'output del programma dovr essere il seguente:
!"#$%&'%(($L&P=&-./Q&>"(("FF$&-0Q&<$#$&1Q&F%"H&1Q&*"HH$&*"<<$&20Q&*"HH$&(4B$<$&0&
345"&6+#)$L&P=&7.8Q&>"(("FF$&01Q&<$#$&2Q&F%"H&1Q&*"HH$&*"<<$&/1Q&*"HH$&(4B$<$&21&
&
%>>4#+L&&
&
JLMN&>#%F.+K+&(<"<$(<$5;+.<K<&O5&
l'output del programma dovr essere il seguente:
9,)#+"&:$",5;$&5+,<#%5"=>$(<"&2&F%"H&
A"B#$C$%&D",<","&"<<"55",<+&2&F%"H
So120903_TurnoA_A.c
07/06/13 11.31
if(argc>2)
strcpy(nomefile,argv[1]);
else
{
printf("Introduci nome file\n");
scanf("%s",nomefile);
getchar();
}
Page 1 of 4
So120903_TurnoA_A.c
07/06/13 11.31
if((filein=fopen(nomefile,"r"))==NULL)
{
printf("Errore , file non trovato\n");
exit(EXIT_FAILURE);
}
i=0;
while((fscanf(filein,"%s%s%s%f%d%d%d%d%d",giocatore[i].nome,giocatore[i].
cognome,giocatore[i].ruolo
,&giocatore[i].kilometri,&giocatore[i].passaggi,&giocatore[i
].tiri,&giocatore[i].goal
,&giocatore[i].falli_fatti,&giocatore[i].falli_subiti)!=EOF)
&&i<MAX_GIOCATORI)
i++;
num_dati=i;
fclose(filein);
if(argc<3)
{
errore=1;
while(errore)
{
errore=0;
printf("Introduci il comando [a/b/c] e il parametro del comando
[cognome/ruolo/NULLA]\n");
scanf("%c",&comando);
switch(comando)
{
case 'a':
case 'A':
scanf("%s",cognome);
break;
case 'b':
case 'B':
scanf("%s",ruolo);
break;
case 'c':
case 'C':
break;
default:
printf("Errore, riprova\n");
errore=1;
}
while(getchar()!='\n');
}
}
else
{
switch(comando=argv[2][1])
{
case 'a':
case 'A':
if(argc==4)
Page 2 of 4
So120903_TurnoA_A.c
07/06/13 11.31
strcpy(cognome,argv[3]);
else
{
printf("Errore manca il nome\n");
exit(EXIT_FAILURE);
}
break;
case 'b':
case 'B':
if(argc==4)
strcpy(ruolo,argv[3]);
else
{
printf("Errore manca il ruolo\n");
exit(EXIT_FAILURE);
}
break;
case 'c':
case 'C':
break;
default:
printf("Comando sconosciuto");
exit(EXIT_FAILURE);
}
}
switch(comando)
{
case 'c':
case 'C':
stampatutto(giocatore,num_dati);
break;
case 'a':
case 'A':
if((ind_giocatore=trova_cognome(giocatore,num_dati,cognome))!=
NON_PRESENTE)
printf("%s %s :\n%s, km %2.2f, passaggi %d, tiri %d, goal %d
\nfalli fatti %d, falli subiti %d\n"
,giocatore[ind_giocatore].nome,giocatore[ind_giocatore
].cognome
,giocatore[ind_giocatore].ruolo,giocatore
[ind_giocatore].kilometri
,giocatore[ind_giocatore].passaggi,giocatore
[ind_giocatore].tiri
,giocatore[ind_giocatore].goal,giocatore[ind_giocatore
].falli_fatti
,giocatore[ind_giocatore].falli_subiti);
else
printf("Giocatore non presente\n");
break;
case 'b':
case 'B':
trova_stampa_ruolo(giocatore,num_dati,ruolo);
}
return EXIT_SUCCESS;
}
Page 3 of 4
So120903_TurnoA_A.c
07/06/13 11.31
Page 4 of 4