Gara Nazionale di Informatica Abacus 2008
Prova Pratica del 27/11/2008
“Il Vino: dalla Vigna alla Tavola”
Ogni anno a Prato la manifestazione “DiVini Profumi” propone l’incontro con i produttori di
vini del territorio toscano. Nel corso della manifestazione si possono degustare al banco
d'assaggio numerose annate di Carmignano docg e il Pinot nero Villa di Bagnolo, insieme
ad alcuni prodotti tipici del territorio.
Alla manifestazione partecipano numerose aziende produttrici di vini, fattorie e tenute, che
producono il Barco Reale, il Rosato Vin Ruspo, il Vin Santo di Carmignano e alcuni vini
bianchi tipici della zona. In seguito alla manifestazione, che ha l’onore di presentare anche
dei nuovi vini, le aziende produttrici si attivano per la vendita.
Per assistere un'azienda vinicola, intenzionata ad abbandonare la vendita di vino sfuso e
convertire l’intera produzione alla vendita di un prodotto di qualità, si è pensato di costruire
e gestire un sistema informativo che agevoli la produzione del vino, l'imbottigliamento, la
sistemazione delle bottiglie negli appositi locali e la composizione delle confezioni delle
bottiglie.
L’azienda, che per semplicità corrisponde alla cantina, possiede diversi vigneti
specializzati e le varietà viticole coltivate sono: Sangiovese, Ciliegiolo e Canaiolo per i
vitigni a bacca rossa; Vermentino, Trebbiano Toscano e Malvasia per i vitigni a bacca
bianca.
Produce tre tipologie di vino, appartenenti a tre distinte denominazioni di Origine
Controllata: “Divino Rosso” DOC , “Bacco Bianco” DOC , “Tralcio Rosè” DOC.
Ogni vino è identificato dal nome del vino, dal colore, dall'annata della vendemmia, dalla
gradazione alcolica, dalla valutazione di degustazione (un indice di qualità individuato dal
produttore), dalla quantità di litri presenti (da calcolare).
[vedi file caratteristicheVino.txt]
Ogni vino si compone di più vitigni appartenenti ai vari vigneti, miscelati con percentuali
diverse. La nostra cantina caratterizzata da nome e indirizzo, possiede più vigneti e
produce 3 vini diversi:
il vino Divino Rosso:
il vino Bacco Bianco:
il vino Tralcio Rosè :
Sangiovese 70%, Canaiolo 20%, Ciliegiolo 10%
Vermentino 40%, Trebbiano 40%, Malvasia 20%
Sangiovese 40%, Malvasia 30%, Vermentino 30%
[vedi file tipologieVini.txt]
pag. 1 di 6
Ogni vitigno, utilizzabile per più vini, è identificato da un nome, dal colore e dalla zona di
origine.
[vedi file vitigni.txt]
Un vigneto può contenere più vitigni e di ogni vigneto si conosce il nome, la zona di
collocazione, il tipo di vitigno e la quantità di litri di vino prodotti per vitigno e per anno.
[vedi file produzioneVigneto.txt]
Per ottenere una migliore rintracciabilità del vino, la cantina è suddivisa in zone, in cui
vengono immagazzinate bottiglie di vino di una determinata annata e di un determinato
tipo, che vengono poi confezionati per la vendita.
Le caratteristiche delle zone e delle confezioni sono:
1) Le zone della cantina sono contigue e di dimensioni varie (numero di bottiglie
contenute); se il numero di bottiglie di un certo vino di quell'annata eccede la
capacità di una zona, si può estendere la zona oltre i propri confini, prelevando
spazio dalle zone attigue. In pratica, viene ridefinita la dimensione, incrementando
la capacità della zona (a scapito della zona confinante), in modo da poter inserire
un numero maggiore di bottiglie di quel determinato vino (se non esistono zone
libere è possibile crearne una nuova unendo gli spazi liberi di zone adiacenti).
[vedi file zone.txt]
Se non si riesce a sistemare tutte le bottiglie di tale vino nella zona assegnata,
queste vengono inserite in una zona DEP (Deposito Eccedenze Provvisorie), che
ospita gli eccessi di bottiglie che non rientrano nelle rispettive zone. La zona DEP
viene “riordinata” periodicamente dagli addetti che ridistribuiscono le bottiglie nelle
rispettive zone laddove vi è spazio (manutenzione zona DEP ).
Ogni zona riporta, comunque, il numero di eventuali eccedenze
2) Le confezioni di cartone dei vini, tutte uguali, devono contenere 3 bottiglie di vino da
un litro (1l) ciascuna: una bottiglia di vino bianco, una di vino rosso e una di vino
rosè. Le bottiglie necessarie per la confezione devono essere prelevate utilizzando,
prima di tutto, il vino residente nelle zone più occupate, tralasciando la zona DEP
che viene gestita separatamente.
Ogni bottiglia di vino ha un valore di degustazione, il cui indice è un numero
compreso tra 1 e 6 ed è collegato al prezzo di vendita nel seguente modo:
•
•
•
1–2
3–4
5–6
prezzo 5 euro
prezzo 7 euro
prezzo 9 euro.
Alla confezione prodotta verrà assegnato un prezzo di vendita pari alla somma dei
prezzi delle singole bottiglie.
Il progetto deve contenere l'implementazione, con il linguaggio di programmazione scelto,
delle classi con i relativi metodi, facendo riferimento, se voluto, alla progettazione UML
pag. 2 di 6
allegata. L'implementazione software deve contenere, ogni qualvolta lo si ritenga
necessario, i commenti che rendano più chiara la lettura/analisi dello svolgimento.
Al termine del progetto è richiesto un file di risultati, uno per ogni algoritmo, ottenuto
elaborando gli input, presi dai files allegati alla prova (disco Z).
Il progetto da realizzare consiste nell'implementazione dei seguenti algoritmi:
•
si vuole ottenere la produzione in litri dei 3 vini (DivinoRosso, BaccoBianco,
TralcioRosè), per anno di vendemmia, ripartendo le diverse quantità delle varietà
viticole, secondo le percentuali già descritte. Dovrà quindi essere generato un file di
output (produzione.txt) con il seguente tracciato record:
annata; nome vino; quantità(litri)
•
produrre una soluzione che sia di supporto agli addetti della cantina in grado di
memorizzare il posizionamento delle bottiglie, in relazione al vino, all'annata, alla
quantità prodotta (produzione.txt) e alla capacità della relativa zona, inserendo il
numero delle eccedenze (vedi punto 1). Dovrà essere prodotto un file di output
(zoneOut.txt) con il seguente tracciato record:
codice zona; dimensione; nome vino; annata; spazio occupato; eccedenze
•
gestire il confezionamento dei vini con le specifiche sopra descritte (vedi punto 2),
producendo il massimo numero di confezioni possibile. Dovrà essere prodotto un file di
output (confezioni.txt) con il seguente tracciato record:
numero confezione; indice medio di degustazione; nome vino; annata; nome vino;
annata; nome vino; annata; prezzo
_________________________________________________________________________
pag. 3 di 6
I dati presenti nei file sono inseriti per riga (terminata da CR e LF), in formato CSV
(comma separated value), contenente campi nella forma di stringhe separate dal carattere
punto e virgola.
[ tipologieVini.txt ]
Tracciato record:
tipoVino;nomeVitigno;percentuale;nomeVitigno;percentuale;nomeVitigno;percentuale
[ vitigni.txt ]
Tracciato record:
nome vitigno;colore;zona provenienza
[ produzioneVigneto.txt ]
Tracciato record:
anno della vendemmia;nome vigneto;zona di provenienza;nome vitigno;quantità
[ zone.txt ]
Tracciato record:
codice zona;capacità zona
[ caratteristicheVino.txt ]
Tracciato record:
nome vino;anno vendemmia;gradi;indice di degustazione
pag. 4 di 6
Esempio
Supponendo di avere per l'anno 2005 la seguente vendemmia:
Canaiolo: 47L – Ciliegiolo: 80L – Malvasia: 125L – Sangiovese: 260L – Trebbiano: 100L Vermentino: 175L
Otteniamo la seguente distribuzione di vini:
Divino Rosso: 235L
Bacco Bianco: 250L
Tralcio Rosè: 238L
Supponendo di avere la seguente occupazione delle zone:
Zona
1
2
3
4
5
6
7
8
Dimensione
150
200
200
250
200
100
150
150
Occupazione
150
150
0
250
0
80
0
0
Annata
2004
2004
Null
2003
Null
2004
Null
Null
Nome Vino
Divino
Rosso
Bacco
Bianco
Null
Tralcio
Rosè
Null
Bacco
Bianco
Null
Null
Eccedenza
0
0
0
0
0
0
0
0
Zona
1
2
3
4
5
6
7
8
Dimensione
150
Occupazione
150
Annata
2004
Nome Vino
Eccedenza
Si Ottiene:
200-->165 200-->235
150
35
250
200-->220 100-->80 150-->238
200
250
200
2004
2005
2003
Divino
Rosso
Bacco
Bianco
Divino
Rosso
0
0
0
20
150-->62
80
150
88
0
2005
2003
2005
Null
Tralcio
Rosè
Bacco
Bianco
Bacco
Bianco
Tralcio
Rosè
Null
0
30
0
0
0
(--> Diventa)
Estratto del file Confezioni.txt:
Codice;IndiceMedioDegustazione;NomeVino;Annata;NomeVino;Annata;NomeVino;Annata;Prezzo
1;4;Bacco Bianco;2005;Divino Rosso;2005;Tralcio Rosè;2003;21
2;4;Bacco Bianco;2005;Divino Rosso;2005;Tralcio Rosè;2003;21
3;4;Bacco Bianco;2005;Divino Rosso;2005;Tralcio Rosè;2003;21
...
...
...
pag. 5 di 6
Possibile schema di progettazione
Cantina
Vigneto
-nomeCantina: String
-indirizzo: String
-vigneti: elenco<Vigneto>
-vini: elenco<Vino>
appartiene
1..3
possiede
1
+Cantina(nome: String, Indirizzo: String)
+LeggiCantina(nome: String, Indirizzo: String)
+VisualizzaNome(): String
+VisualizzaIndirizzo(): String
+addVigneto(v: Vigneto)
-nomeVigneto: String
-zonaCollocazione: String
-coltivazioni elenco<Vitigno,anno,produzione)
+Operation1()
+OperationN()
coltiva
1
produce
1
contiene
1
Opzione2: contiene i litri di vino prodotti dalle unitaVitate
per ogni tipo di vitigno in ciascun vigneto
è prodotto
1..3
Vino
ColtivaVitigni
-nomeVino: String
-colore: String
-annoVendemmia: int
-quantitaPresente: int
-indiceDegustazione: Int
-gradiVino: int
appartiene
1..*
Zona
-numeroZonaProgressivo: Int
-annoVendemmia: int
-capacitaZona: int
-postiOccupati: Int
-bottiglie: ArrayList<Bottiglia>
-eccedenze: int
-nomeVigneto: String
-nomeVitigno: int
-anno: int
-produzioneVino: Int
+Operation1()
+OperationN()
+Operation1()
+OperationN()
riempie
1
+Operation1()
+OperationN()
è in
1
posizione
1..*
coltivato
1..*
contiene
1..6
posizionata
1
riempita
1..*
Bottiglia
-numeroProgressivo: Int
-vino: Vino
Opzione1: lista
di vitigni associati
alla quantità di litri
di vino prodotti
dalle unitaVitate
ComposizioneVino
-vitigno: Vitigno
-vino: Vino
-percentuale: int
+Operation1()
+OperationN()
contiene
è in
1..3
1
Vitigno
-nomeVitigno: String
-zonaProvenienza: String
-colore: String
+Operation1()
+OperationN()
+Operation1()
+OperationN()
NOTE:
Operation1()..OperationN(): metodi lasciati alla definizione del candidato
pag. 6 di 6
Scarica

seconda prova - Tullio Buzzi