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