Corso di Programmazione - Prova Pratica - 24 giugno 2004


L'esame di oggi vi chiede di gestire la Nazionale di calcio.

I giocatori sono divisi in quattro ruoli (portieri, difensori, centrocampisti ed attaccanti) rappresentati dai valori del tipo enumerazione Ruolo.
Il tipo
Giocatore associa ad ogni giocatore un nome, un numero di maglia, il numero di goal segnati ed un ruolo.

L’intera squadra nazionale e' rappresentata da un valore di tipo Nazionale, ovvero una struttura contenente due array di valori di tipo Giocatore, corrispondenti all’insieme dei giocatori in campo e a quello dei giocatori in panchina. E’ inoltre definito il tipo ListaGiocatori come lista di elementi di tipo Giocatore.

 

#define N_GIOCATORI 11
 
typedef enum
   {portiere,difensore,
    centrocampista,attaccante} 
Ruolo;
 
typedef struct {
   char *nome;
   int num_maglia;
   int num_goals;
   Ruolo ruolo;
} Giocatore;
 
 
typedef struct {
   Giocatore incampo[N_GIOCATORI];
   Giocatore inpanchina[N_GIOCATORI];
} Nazionale;
 
 
typedef struct Elem{
   Giocatore giocatore;
   struct Elem *next;
}Elem;

 
typedef Elem *ListaGiocatori;
 
 

Esercizio 1: Implementare la seguente procedura:                                      

void sostituzione(Nazionale *nazionale, int esce, int entra)

La procedura sostituzione aggiorna lo stato della squadra puntata da nazionale, effettuando la sostituzione del giocatore avente numero di maglia esce in favore del giocatore con numero di maglia entra. Piu’ precisamente,  il giocatore con numero esce dovra’ essere spostato dall’array dei giocatori in campo a quello dei giocatori in panchina; viceversa, il giocatore con numero entra dovra’ essere spostato dall’array dei giocatori in panchina a quello dei giocatori in campo.


Esercizio 2: Implementare la seguente funzione:


void stampa_panchina(Nazionale nazionale, Ruolo ruolo);

La funzione stampa_panchina visualizza sullo standard output i giocatori  in panchina della squadra nazionale che giocano nel ruolo specificato da ruolo.

 


Esercizio 3: Implementare la seguente funzione:


ListaGiocatori elenca_incampo(Nazionale nazionale);

La funzione elenca_incampo crea dinamicamente (e restituisce) un valore di tipo ListaGiocatori i cui elementi sono i giocatori  in campo della squadra nazionale.


Esercizio 4: Implementare la seguente procedura:

void scambia_tutti(Nazionale *nazionale)

La procedura scambia_tutti sposta in panchina tutti i giocatori che sono in campo, e sposta in campo tutti i giocatori che sono in panchina.


Esercizio 5: Implementare la seguente funzione:


void stampa_incampo(Nazionale nazionale, Ruolo ruolo);

La funzione stampa_incampo visualizza sullo standard output i giocatori  in campo della squadra nazionale che giocano nel ruolo specificato da ruolo.

 


Esercizio 6: Implementare la seguente funzione:


ListaGiocatori elenca_marcatori(Nazionale nazionale);

La funzione elenca_marcatori crea dinamicamente (e restituisce) un valore di tipo ListaGiocatori i cui elementi sono i giocatori della squadra nazionale che abbiano segnato almeno un goal.

 

 

La modalitÓ di consegna dell'esame Ŕ analoga a quella delle esercitazioni durante il corso: Ŕ sufficiente inviarlo come esercitazione numero 999. Bisogna inserire esclusivamente la definizione delle procedure, per consentirne la correzione automatica.