Esercizio Riepilogativo su Strutture Lineari Collegate
Si vuole implementare un sistema che consenta di gestire un campionato calcistico giocato da n
(pari) squadre.
1
Realizzare una classe Giornata che sia in grado di gestire le partite
giocate in una giornata di campionato. La classe dovrà mantenere le
seguenti informazioni:
● Campo Identificativo (es. “giornata 1” o più semplicemente “1”)
● Elenco delle partite disputate, rappresentato da una matrice di String
con n/2 righe e 2 colonne.
● Risultato di ciascuna partita (matrice di int con n/2 righe e 2 colonne)
● Segno sulla schedina (array o matrice di char (n/2 x 1) contenente
esclusivamente i caratteri ‘1’, ‘X’, ‘2’).
Figura 1 - Esempio di Rappresentazione di un Oggetto Giornata
La classe Giornata deve contenere, oltre agli opportuni metodi costruttori, i seguenti metodi:
● public static Giornata leggiPartiteDaUtente (): chiede all’utente di
inserire da tastiera l’identificatore della giornata, il numero di
partite disputate e l’elenco delle partite, e restituisce un’istanza di
classe Giornata contenente tali informazioni.
● public static Giornata leggiPartiteDaFile (String nomeFile): legge da
un file di testo le informazioni relative alle partite di una giornata e
restituisce un’istanza contenente tali informazioni. Il metodo deve
leggere il file riga per riga. L’inizio delle informazioni riguardanti
una giornata sono identificate dalla stringa “Giornata” seguita
dall’identificativo della giornata. Nella riga successiva è indicato il
numero x di partite disputate nella giornata e nelle x righe
successive l’elenco delle partite nel formato “<prima squadra> <seconda squadra>”.
La fine delle informazioni di una giornata è contrassegnata dalla stringa “<\fine
giornata>”.
Figura 2 - Esempio di un Frammento di File di testo
●
public void aggiornaPunteggidaFile(String nomeFile): legge da un
file di testo i risultati delle partite della giornata oggetto
d’invocazione. Il metodo deve leggere il file riga per riga. L’inizio
delle informazioni riguardanti una giornata è constrassegnato dalla
stringa “Giornata” seguita dall’identificativo della giornata. Nelle
due righe successive è riportato l’elenco delle partite e i relativi
punteggi nel formato
“<squadra casa> - < squadra ospite>”
“<goal casa>-<goal ospite>”
La fine delle informazioni di una giornata è contrassegnata dalla stringa “<\fine
giornata>”.
Figura 3 - Esempio di Frammento di File di Testo
public char assegnaPunteggio(String sq1, String sq2, int p1, int p2):
assegna il punteggio p1-p2 alla partita sq1-sq2, aggiorna il simbolo
in schedina e lo restituisce.
● public char goal(String sq): assegna un goal alla squadra sq1,
aggiorna il segno in schedina e lo restituisce.
● public void stampaGiornata(): stampa a video le informazioni della
giornata nella forma:
●
ID Giornata
<Squadra1c> – <Squadra1o> <punteggioC> - <punteggioO> <segnoSchedina>
<Squadra2c> – <Squadra2o> <punteggioC> - <punteggioO> <segnoSchedina>
.
.
.
2
Realizzare una classe Classifica che rappresenti la classifica delle squadre
partecipanti al campionato, ordinata per punteggio decrescente.
Classifica deve essere implementata come struttura lineare collegata.
Suggerimento: Il nodo della lista classifica deve contenere come
informazione sia il nome della squadra che il punteggio attuale.
La classe Classifica deve contenere, oltre agli opportuni metodi
costruttori, i seguenti metodi:
● public Classifica aggiornaClassifica(Giornata g): il metodo aggiorna
la classifica tenendo conto dei risultati della giornata g, assegnando
3 punti alle squadre vincenti, 1 punto alle squadre che hanno
pareggiato e 0 punti alle squadre perdenti . L’implementazione di
questo metodo deve essere funzionale.
● public void penalizza(String sq, int pt): toglie pt punti alla squadra
sq e aggiorna l’ordine.
● public void rimuoviPenalizzazione (String sq, int pt): aggiunge pt
punti alla squadra sq e aggiorna l’ordine.
● public void stampaClassifica(): stampa a video la classifica.
3
Realizzare una classe Campionato in grado di gestire le seguenti
informazioni:
● Elenco delle giornate: rappresenta l’elenco ordinato delle giornate a
partire dalla prima;
● Classifica: rappresenta la classifica aggiornata dopo l’ultima
giornata.
L’elenco delle giornate deve essere realizzato utilizzando una struttura lineare collegata.
La classe Campionato deve fornire i seguenti metodi:
●
●
●
●
●
●
●
●
●
●
●
●
Metodo costruttore senza parametri
public void aggiungiGiornata(Giornata g, int k): il metodo deve
aggiungere la giornata g in posizione k. L’implementazione deve
essere ricorsiva.
public Giornata cercaGiornata(String id): il metodo cerca la giornata
identificata dalla stringa id. Se presente restituisce la giornata
altrimenti, stampa un messaggio di errore e restituisce una
giornata vuota. Il metodo deve essere ricorsivo.
public String maxGoalSegnati(): restituisce il nome di una qualsiasi
delle squadre che hanno segnato il maggior numero di goal.
L’implementazione di questo metodo deve essere ricorsiva.
public String maxGoalSubiti(): restituisce il nome di una qualsiasi
delle squadre che hanno subito più goal.
public int totaleGoalSegnati(String sq): restituisce il numero di goal
totali segnati dalla squadra sq. L’implementazione di questo
metodo deve essere ricorsiva.
public String maxPareggi(): restituisce il nome di una delle squadre
che hanno pareggiato più volte.
public String minPareggi(): restituisce il nome di una delle squadre
che hanno pareggiato meno volte.
public String[] squadrePiuGoal(int x): restituisce un array
contenente le squadre che hanno segnato più di x goal.
public stampaSquadreChampions(): stampa la sotto-classifica
relativa alle squadre che hanno accesso alla Champions League,
ovvero le prime 4 squadre in classifica.
public stampaSquadreRetrocesse(): stampa la sotto-classifica
relativa alle squadre in zona retrocessione, ovvero le ultime 4
squadre.
public void primoDopoXGiornate(int x): stampa a video il nome e il
punteggio del primo in classifica dopo la giornata x.
●
4
public void yDopoXGiornate(int pos, int x): stampa a video il nome
e il punteggio della squadra in posizione y nella classifica dopo la
giornata x.
Scrivere un programma di test che invochi tutti i metodi almeno una
volta.
Suggerimento: se necessario, sviluppare metodi ausiliari per l’implementazione di procedure
ricorrenti (es. conteggi, ricerche etc…).
Scarica

Esercizio Riepilogativo su Strutture Lineari Collegate.docx.docx