Laboratorio di Algoritmi e Strutture Dati



Documenti analoghi
Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Appunti sulla Macchina di Turing. Macchina di Turing

Uff. I. - OLIMPIADI DI PROBLEM SOLVING - Informatica e pensiero algoritmico nella scuola dell'obbligo

Gestione degli appelli e verbalizzazione degli esami online GUIDA DOCENTI. (versione 1.0 del )

Istruzioni modulistica Elenco associazioni professionali

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Uso di base delle funzioni in Microsoft Excel

Registratori di Cassa

prima registrazione del 4 gennaio watch?v=_ursc5we6ny ; seconda registrazione del 4 gennaio

Guida Compilazione Piani di Studio on-line

Prova di Laboratorio di Programmazione

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

Istruzioni per il programma ANDI

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO

Esempi di algoritmi. Lezione III

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web: Prof. G. Quarella prof@quarella.

Raggruppamenti Conti Movimenti

Manuale d uso per la raccolta: Sicurezza degli impianti di utenza a gas - Postcontatore

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Calcolatori Elettronici A a.a. 2008/2009

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Soluzione dell esercizio del 2 Febbraio 2004

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

ISCRIZIONE GARE NUOTO ON LINE ISTRUZIONI OPERATIVE PER LE SOCIETA

SCRUTINIO WEB MANUALE D USO. Scrutinio Web. Manuale d uso - Docente. Versione del Pagina 1 di 12

USO DI EXCEL CLASSE PRIMAI

Gestione Tesi Online

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Prova Finale di Livello Base Compito n.21

ANNO SCOLASTICO

Esercitazione del

DOL. Dealer Application System online. Manuale per l utente

SCRUTINIO ON LINE 2 PERIODO

Università degli Studi di Messina

Funzioni di Trasferimento Movimenti

Funzioni in C. Violetta Lonati

Progettazione e realizzazione di un applicativo Web Annunci Immobiliari

MANUALE DELLA QUALITA Revisione: Sezione 4 SISTEMA DI GESTIONE PER LA QUALITA

Traccia di soluzione dell esercizio del 25/1/2005

Database. Si ringrazia Marco Bertini per le slides

REGOLE PER L ESAME (agg.te settembre 2015)

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

Gestione Risorse Umane Web

SERVIZIO DI SUPPORTO ALLE AZIENDE PER LA RICERCA DI PERSONALE

Il database management system Access

MANUALE ESSE3. Iscrizione alle prove d esame e visione esiti STUDENTI

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

Valutazione della Didattica On-Line

DIPARTIMENTO DI SCIENZE DEL FARMACO. Prenotazione degli Appelli d esame Online. Guida Studenti VOL. Verbalizzazione OnLine.

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Fatturazione elettronica con WebCare

- OLIMPIADI DI PROBLEM SOLVING - Informatica e pensiero algoritmico nella scuola dell'obbligo

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Esercitazione 01: DDL e DML di base

Verbalizzazione e Firma Digitale

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Gli attributi di STUDENTE saranno: Matricola (chiave primaria), Cognome, Nome.

SPORTELLO UNICO DELLE ATTIVITÀ PRODUTTIVE MANUALE OPERATIVO FUNZIONI DI PAGAMENTO ONLINE. Versione 05

ISTRUZIONI OPERATIVE PER L INOLTRO DELLE PRATICHE ON-LINE NUOVA PRATICA

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

Introduzione al corso

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Progettazione di un Database

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A

GUIDA ALLA PRESENTAZIONE ON-LINE DELLE DOMANDE DI PARTECIPAZIONE ALLA SEGUENTE SELEZIONE:

CARTA DEI SERVIZI. Premessa:

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO 20 SETTEMBRE 2012 Tempo a disposizione: 2 ore 30 minuti

Basi di dati 9 febbraio 2010 Compito A

Laboratorio di Algoritmi e Strutture Dati

STAMPA UNIONE DI WORD

Teoria dei Giochi. Anna Torre

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Matematica generale CTF

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

R E G I O N E U M B R I A GIUNTA REGIONALE. Direzione Affari Generali della Presidenza e della Giunta regionale. Servizio Segreteria della Giunta

Infostat-UIF. Istruzioni per l accesso e le autorizzazioni

La progettazione centrata sull utente nei bandi di gara

Product Shipping Cost Guida d'installazione ed Utilizzo

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Breve Guida per l organizzazione di eventi da parte di Associazioni e Gruppi studenteschi riconosciuti in Bocconi Febbraio 2012

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008

per docenti e dirigenti della Scuola trentina a carattere statale Sportello dipendente GUIDA AL SERVIZIO

Corso di Informatica

Regione Campania Procedura di Registrazione degli Operatori Economici e Messaggi di Notifica.

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Errori di una misura e sua rappresentazione

Manuale per i Fornitori

WoWords. Guida all uso: creare ed utilizzare le frasi. In questa guida è descritto come creare ed utilizzare le frasi nel software WoWords.

Guida per l utente al sito WEB RILEVAZIONE DELLE STRUTTURE PER LA PRIMA INFANZIA

LA FORMAZIONE PROFESSIONALE

Guida all utilizzo della Piattaforma per la staffetta di Scrittura Creativa Manuale pratico per docenti e tutor

Scheda operativa Versione rif c00. Libro Inventari

Transcript:

Laboratorio di Algoritmi e Strutture Dati 1 Il problema Docente: V. Lonati Progetto Benefattori 1 valido per gli appelli di febbraio e marzo 2011 Il progetto prende ispirazione de alcuni documenti antichi recentemente ritrovati a Roma. Alcuni storici li considerano risalenti al V secolo e ipotizzano che siano stati scritti da cronisti dell epoca, ma naturalmente altri studiosi li considerano falsi o non attendibili. Nel V secolo, l Impero Romano era nella sua fase di decadenza e a quell epoca, si sa, la ricchezza e il potere erano nelle mani di pochi. Ricchi senatori della Repubblica potevano esercitare il loro potere e sfoggiare la loro ricchezza spudoratamente. Ma talvolta amavano anche mostrarsi generosi e benevoli verso i popolani meno fortunati di loro. Secondo i documenti citati, periodicamente venivano organizzate dall Imperatore delle fastose cene, anche più di una volta a settimana, alle quali partecipavano, oltre all Imperatore stesso, vari senatori (sempre uomini, dato che a quell epoca la politica non era accessibile alle donne) e molte popolane bisognose di aiuto (a quell epoca gli uomini erano considerati il sesso forte e non era dignitoso per loro accettare gesti di beneficenza). L aiuto non consisteva solo nella cena stessa: i benefattori presenti elargivano spesso, a titolo di beneficenza, delle forti somme di denaro ai casi che più muovevano a compassione i loro cuori (secondo la loro specifica sensibilità). La consegna vera e propria delle somme di denaro avveniva secondo un cerimoniale propiziatorio tipico, che qui chiameremo semplicemente festa, durante il quale, fra l altro, i partecipanti si dividevano in coppie, o talvolta anche in gruppetti, in una stanza appositamente approntata nella domus dell Imperatore. Tralasciamo di riportare qui i dettagli a proposito di queste feste, che al giorno d oggi apparirebbero inaccettabili, scandalosi, irrispettosi della dignità delle donne, ma che all epoca pare fossero diventati una sorta di tradizione. 2 Descrizione del progetto Bisogna scrivere un programma che legga da un file una sequenza di istruzioni che rappresentano eventi quali l introduzione di una nuova persona nel gruppo delle cene, l estromissione dallo stesso gruppo di elementi caduti in disgrazia, o l indizione di una cena nella domus dell Imperatore. Il programma deve produrre in output alcuni dati statistici (vedi sotto). Le operazioni da implementare variano a seconda dell appello per il quale avviene la consegna: per l appello del 18 febbraio sono obbligatorie le operazioni specificate nelle Sezioni 2.1 e 2.2; per l appello del 4 marzo sono obbligatorie le operazioni specificate nelle Sezioni 2.1 e 2.3. L implementazione delle operazioni specificate nelle altre sezioni è da considerarsi facoltativa. Si noti che le operazioni richieste sono liberamente implementabili; in particolare, non vanno necessariamente intese come prototipi di funzioni. 1 Si ringraziano il Dott. Marco Tarini e il Prof. Paolo Massazza, cui si deve l idea originale sulla quale si basa questo progetto. 1

2.1 Operazioni di base Invitato (P ) Questa operazione corrisponde all introduzione di una nuova persona nel gruppo delle cene e delle feste. La persona P possiede le seguenti caratteristiche: nome: una stringa (senza spazi), sesso: M oppure F, denaro: intero, in monete d oro, età: intero da 17 a 24, altezza: intero, in cm, peso: intero, in Kg, capelli: numero reale da 0.0 (albini) a 1.0 (corvini), costituzione: numero reale da 0.0 (esile) a 1.0 (procace), presenza: una stringa, costruita sull alfabeto {L,M,E,G,V,S,D}. Se il nuovo invitato è un uomo, allora si tratta di un senatore entrato nelle simpatie dell Imperatore. In questo caso, il dato denaro rappresenta la somma che questa persona di solito corrisponde a chi beneficia della sua generosità (in una singola operazione di donazione), mentre i dati da età a costituzione non si riferiscono ai suoi tratti fisici ma rappresentano i tratti che tendono a stimolare i suoi istinti filantropici. Ad esempio, se età vale 17, significa che l invitato in questione prende particolarmente a cuore i casi delle popolane di 17 anni di età. Se il nuovo invitato è di sesso femminile, allora è una giovane (o giovanissima) donna che è stata individuata tramite appositi meccanismi come bisognosa ed ammessa a partecipare alle cene. In questo caso, il campo denaro rappresenta l entità monetaria del bisogno, e i dati da età a costituzione rappresentano gli effettivi tratti fisici della persona. Il dato presenza descrive i giorni della settimana nei quali il nuovo arrivato o la nuova arrivata è disponibile per le cene (ogni settimana). I giorni della settimana da Lunedì a Domenica sono rappresentati rispettivamente dalle lettere maiuscole L,M,E,G,V,S,D (mercoledì dalla lettera E). Se esiste già un invitato con lo stesso nome, i suoi dati vanno aggiornati. Stampa (nome) Stampa le caratteristiche della persona di nome nome, se questa fa parte del gruppo delle cene. Altrimenti, stampa il messaggio: Non ci sono invitati di nome nome. Estrometti (nome) Questa operazione corrisponde alla caduta in disgrazia della persona di nome nome, che d ora in poi non verrà più invitata alle cene. 2

Nome Sesso Denaro Età Altezza Peso Colore Costituzione Presenze capelli Tizio M 4000 20 170 56 0.7 0.2 LV Domitilla F 1000 17 175 55 0.1 0.8 LV Agrippina F 2000 17 165 50 0.2 0.1 L P ublio M 1000 18 175 55 0.2 0.8 LES T ito M 2000 18 170 50 0.6 0.9 LMES Caio M 1500 20 178 58 0.3 0.1 LV Sempronio M 5000 19 171 52 0.5 0.5 GV T arquinio M 7000 23 180 60 0.8 1.0 MES F abia F 3000 18 170 49 0.3 0.1 V Lucilla F 4000 18 172 58 0.3 0.5 LGD M arcia F 5000 19 171 52 0.2 0.4 LMEV Sulpicia F 1500 20 168 49 0.8 0.2 LEGD T ullia F 2000 23 179 59 0.7 0.6 ED M essalina F 2500 24 181 62 0.9 0.6 EG Tabella 1: Elenco di invitati Stampa () Stampa tutte le persone che fanno parte del gruppo delle cene. Calcola affinità (nome M, nome F ) Questa operazione calcola il grado di affinità tra il senatore di nome nome M e la popolana di nome nome F, se questi sono stati precedentemente inseriti nel gruppo delle cene. Sono più affini fra loro quelle coppie che presentano una minore discrepanza fra i rispettivi valori dei dati denaro, età, altezza, peso, colore capelli, costituzione. Il grado di discrepanza per una coppia è quantificabile con un numero reale calcolato come la somma pesata delle differenze in modulo fra i rispettivi dati. Il peso di ogni addendo è il fattore di importanza del rispettivo dato: dato: denaro età altezza peso colore capelli costituzione importanza: 0.9 10 4 1.0 0.1 0.15 0.5 2.0 (nota: il campo denaro non rappresenta, quindi, un limite alla spesa possibile di un uomo le loro risorse sono praticamente illimitate ma solo quanto questa persona suole elargire come beneficenza ad ogni persona da lui beneficiata). Gli eventuali casi di parità fra coppie ugualmente affini si possono dirimere in maniera arbitraria. Esempio 1 Consideriamo gli invitati di nome Domitilla, Agrippina, Tizio, aventi le caratteristiche definite nella tabella 1. La discrepanza tra Tizio e Domitilla è data da: 4000 1000 0.9 10 4 + 20 17 1.0 + 170 175 0.1 + 56 55 0.15 + 0.7 0.1 0.5 + 0.2 0.8 2 = 5.420 La discrepanza tra Tizio e Agrippina è invece: 4000 2000 0.9 10 4 + 20 17 1.0 + 170 165 0.1 + 56 50 0.15 + 0.7 0.2 0.5 + 0.2 0.1 2 = 5.030 3

Quindi, delle due, la coppia con più affinità è quella tra Tizio e Agrippina. Se non esiste alcun invitato uomo di nome nome M, il programma stampa il messaggio: Non ci sono senatori di nome nome M nelle simpatie dell Imperatore. Similmente, se esiste un invitato uomo di nome nome M, ma non esiste alcuna invitata donna di nome nome F, il programma stampa il messaggio: Non ci sono popolane di nome nome F nelle simpatie dell Imperatore. Festa (giorno, n) Questa operazione riguarda lo svolgimento di una festa. Dopo la cena svoltasi nel giorno giorno, vengono scambiate fra i partecipanti n somme di denaro: per n volte, si trova la coppia più affine di sesso opposto (che ancora non abbia interagito in questa festa) i cui membri siano entrambi presenti il giorno specificato. L uomo scelto aiuta economicamente la ragazza scelta. La filantropia talvolta può richiedere una certa privacy e quindi benefattore e beneficiata si appartano, ma non necessariamente a coppie. Infatti, secondo la regola descritta, può benissimo succedere che un senatore (particolarmente generoso) aiuti più di una popolana, o che una popolana (particolarmente in difficoltà) si faccia aiutare da più di un benefattore. La comitiva si divide in gruppetti, in modo che tutte le coppie benefattore/beneficiato si trovino insieme, e che ciascun gruppo sia il più piccolo possibile. Il risultato di quest operazione è formato da tre numeri: il numero di gruppetti che vengono a formarsi e il numero di benefattori (uomini) e beneficiate (donne) presenti nel gruppetto più numeroso (in caso di parità, quello con più uomini). Nota: ci saranno di solito anche partecipanti alla cena di entrambi i sessi che non partecipano a nessuno scambio di denaro; queste persone, durante la festa in oggetto, rimangono a tavola e non vanno conteggiate in nessun gruppo. Esempio 2 Assumiamo che gli invitati per una festa siano quelli presenti nella tabella 1. Di mercoledì le 6 coppie più affini sono {(T arquinio, T ullia), (T arquinio, M essalina), (T ito, M arcia), (P ublio, M arcia), (T ito, Sulpicia), (P ublio, Sulpicia)}, e le rispettive discrepanze sono 1.550, 2.655, 2.870, 3.010, 3.895, 5.145. I gruppi che si formeranno saranno due, ovvero {P ublio, T ito, Marcia, Sulpicia} e {T arquinio, T ullia, Messalina}. 2.2 Operazioni per l appello del 18 febbraio (consegna entro il 14 febbraio) Scegli giorno (δ, nome 1, nome 2,... nome n ) Questa operazione consente di calcolare in quale giorno invitare le persone di nome nome 1, nome 2,... nome n in modo da massimizzare la somma totale delle elargizioni benefiche. Il calcolo avviene in questo modo: per ogni giorno della settimana, la festa coinvolgerà soltanto coppie formate da un uomo e una donna che abbiano un indice di affinità superiore a δ (ovvero discrepanza inferiore a δ). Per ciascuna di queste coppie si svolgerà il rito propiziatorio e lo scambio benefico, in cui il benefattore elargirà una somma pari alla media aritmetica tra la quantità di denaro che elargisce di solito e la quantità di denaro di cui la beneficiata ha bisogno. Lo svolgimento della festa avviene come descritto per l operazione Festa: gli invitati si divideranno in gruppetti secondo gli stessi criteri. 4

Il risultato dell operazione Scegli giorno è composto dal giorno preferibile, dal numero di monete d oro che verrà scambiato e dal numero di stanze necessarie allo svolgimento dei riti propiziatori (se esiste più di un giorno che massimizza l entità delle elargizioni benefiche, se ne scelga uno arbitrariamente). Esempio 3 Si supponga che gli invitati per una cena siano quelli indicati nella tabella 1 e si consideri inoltre il sottoinsieme di invitati I = {P ublio, T izio, T arquinio, Domitilla, Agrippina, Sulpicia, M essalina}. Se δ è pari a 4,5, l entità massima delle elargizioni benefiche è pari a 5.250 monete e si ottiene di lunedì. In questa occasione i gruppi che si formano sono {P ublio, Domitilla, Agrippina}, {T izio, Sulpicia}, quindi sono 2 le stanze necessarie ad ospitare la festa. 2.3 Operazioni per l appello del 4 marzo (consegna entro il 28 febbraio) Coppie separate (δ, giorno) Questa operazione consente di determinare nel giorno giorno quali coppie uomo/donna, la cui discrepanza sia minore di δ, devono formarsi affinchè sia coinvolto il numero più alto possibile di invitati, a condizione che ogni invitato alla cena possa partecipare al più ad una coppia (ogni coppia occuperà una stanza separata). Il calcolo avviene in questo modo: fissato l elenco dei presenti il giorno giorno, essi individueranno un insieme di possibili scambi tra invitato uomo e invitato donna le cui discrepanza sia minore di δ. Tra queste coppie occorre scegliere quel sottoinsieme (potenzialmente anche tutto l insieme) che massimizza il numero di interazioni garantendo che ogni invitato parteci al più ad una interazione. Il risultato dell operazione Coppie separate è dalle coppie che fanno parte del sottoinsieme scelto. Se esiste più di un sottoinsieme che massimizza le interazioni, si scelga quello che corrisponde alla discrepanza complessiva minore. Esempio 4 Si supponga che gli invitati per una cena siano quelli indicati nella tabella 1. Si fissi lunedì (L) come giorno in cui deve avvenire la cena, e δ = 3. Gli invitati disponibili di lunedì sono {P ublio, T ito, Caio, T izio, Domitilla, Agrippina, Lucilla, M arcia, Sulpicia} e le coppie con discrepanza minore di 3 sono (P ublio, Domitilla), (P ublio, Lucilla), (T ito, Domitilla), (T ito, Lucilla), (T ito, M arcia), (Caio, Sulpicia), (T izio, M arcia), (T izio, Sulpicia). Il sottoinsieme che massimizza le interazioni è formato dalle coppie (P ublio, Domitilla), (T ito, Lucilla), (Caio, Sulpicia), (T izio, M arcia), la cui discrepanza complessiva è 8.82. Da notare che in questo esempio esiste un altro sottoinsieme che massimizza le interazioni, formato dalle coppie (P ublio, Lucilla), (T ito, Domitilla), (Caio, Sulpicia), (T izio, M arcia), la cui discrepanza complessiva è però 9.7 > 8.82. 3 Specifiche di implementazione Il programma deve leggere dallo standard input (stdin) una sequenza di righe (separate da \n), ciascuna delle quali corrisponde a una riga della prima colonna della Tabella 2, dove P una stringa composta da vari elementi separati da un solo spazio, corrispondenti ai dati denaro, età, altezza, peso, colore capelli, costituzione, come definiti nella Sezione 2.1; nome, nome i con i intero, nome M e nome F sono stringhe (senza spazi); giorno è un carattere scelto in L,M,E,G,V,S,D; n 1 è un numero intero, δ 0 è un numero reale. I vari elementi su una riga sono separati da uno o più spazi. Quando una riga è letta, viene eseguita l operazione associata; le operazioni di stampa sono effettuate sullo standard output (stdout), e ogni operazione deve iniziare su una nuova riga. 5

Riga di input Operazione in P Invitato (P ) stampa nome out nome Stampa (nome) Estrometti (nome) invitati Stampa () aff nome M nome F Calcola affinità (nome M, nome F ) festa giorno n Festa (giorno, n) giorno δ nome 1 nome 2... nome n Scegli giorno (δ, nome 1, nome 2,..., nome n ) coppie δ giorno Coppie separate (δ, giorno) f Termina l esecuzione del programma Tabella 2: Specifiche del programma Un invitato P deve essere visualizzato con una sola riga contenente i dati descrittivi di P, nell ordine indicato nella sezione 2.1, separati da un solo spazio. Ad esempio se P si chiama Publio, è maschio, elargisce di solito 50 monete d oro, è libero di lunedì, venerdì, sabato e domenica, preferisce le popolane di 17 anni, alte 175 cm e di peso 48, capelli di tonalità 0.2 e costituzione 0.9, allora P sarà visualizzato così: Publio M 50 17 175 48 0.2 0.9 LVSD L output del comando invitati deve essere visualizzato come ( P 1 P 2. ) dove ogni invitato P t deve essere visualizzato come sopra specificato. L output del comando aff deve essere visualizzato con 3 cifre decimali. L output del comando festa deve essere visualizzato su una sola riga contenente tre numeri, come indicato nella sezione 2.1, separati da un solo spazio. L output del comando giorno deve essere visualizzato su una sola riga contenente una lettera e due numeri, come indicato nella sezione 2.2, separati da un solo spazio. L output del comando coppie deve essere visualizzato come 6

[ C 1 C 2. ] dove ogni coppia C i consiste nel nome del benefattore seguito dal nome della beneficiata, separati da una virgola. Note e suggerimenti 1. La correttezza delle soluzioni è un requisito necessario. Un progetto sarà considerato più o meno valido rispetto all efficienza (tempo di calcolo) nel risolvere le istanze del problema di dimensioni via via crescenti. La sfida consiste nel fornire una soluzione che risolva in tempi ragionevoli le istanze più complesse possibili. 2. Non devono essere presenti vincoli sul numero di persone che fanno parte dell entourage dell Imperatore e sulle loro caratteristiche (se non quelli determinati dal tipo di dato intero). Da quanto riportano i cronisti, la tradizione delle cene è andata consolidandosi nel tempo fino ad includere un numero sempre maggiore di invitati: si valuta che le persone coinvolte fossero migliaia! 3. Per semplicità si suppone che l input sia sempre conforme alle specifiche di Tabella 2, per cui non è necessario controllare la correttezza dell input. Per leggere l input si usino le funzioni standard ANSI C getchar() e/o scanf(). 4. Domanda-trucchetto: è possibile, secondo il candidato, che gli algoritmi e le strutture dati insegnati durante il corso non abbiano alcuna attinenza col progetto assegnato? 5. Ancora più chiaramente: soluzioni basate solo su ricerche lineari e altre tecniche immediate tipicamente NON risolveranno i problemi in maniera efficiente. 6. SEMPRE: ragionare bene sulla carta prima di cominciare a scrivere codice! Strutture dati adeguate vanno identificate correttamente. Mezz ora in più di ragionamento può far risparmiare giornate di implementazione fuori rotta. 4 Esempi di esecuzione 4.1 Per l appello del 18 febbraio Si supponga che le righe di input siano: in Fabia F 3000 18 170 49 0.9 0.1 V in Publio M 1000 18 175 55 0.2 0.8 LES stampa publio stampa Publio in Tito M 2000 18 170 50 0.6 0.9 LMES in Caio M 1500 20 178 58 0.3 0.1 LV aff Tito Caio festa M 2 7

in Aurelio M 5000 24 150 60 0.5 0.5 G in Domitilla F 1000 17 175 55 0.1 0.8 LV in Agrippina F 2000 17 165 50 0.2 0.1 L aff Tito Domitilla aff Caio Domitilla aff Sempronio Domitilla festa V 2 festa L 4 in Sempronio M 5000 19 171 52 0.5 0.5 GV in Aurelio M 3000 18 170 49 0.3 0.1 V in Sulpicia F 1500 20 168 49 0.8 0.2 LEGD in Messalina F 2500 24 181 62 0.9 0.6 EG stampa stampa Aurelio in Tullia F 2000 23 179 59 0.7 0.6 ED in Marcia F 5000 19 171 52 0.2 0.4 LMEV in Tarquinio M 7000 23 180 60 0.8 1.0 MES out Aurelio stampa giorno 4.5 Agrippina Publio Domitilla Tizio Tarquinio Sulpicia Messalina festa E 6 f L output prodotto dal programma deve essere il seguente: Non ci sono invitati di nome publio. Publio M 1000 18 175 55 0.2 0.8 LES Non ci sono popolane di nome Caio nelle simpatie dell Imperatore. 0 0 0 2.790 5.295 Non ci sono senatori di nome Sempronio nelle simpatie dell Imperatore. 1 1 2 1 2 2 ( Agrippina Aurelio Caio Domitilla Fabia Messalina Publio Sempronio Sulpicia Tito ) Aurelio M 3000 18 170 49 0.3 0.1 V ( Agrippina Caio 8

Domitilla Fabia Marcia Messalina Publio Sempronio Sulpicia Tarquinio Tito Tullia ) L 5250 2 2 2 2 4.2 Per l appello del 4 marzo Si supponga che le righe di input siano: in Fabia F 3000 18 170 49 0.9 0.1 V in Publio M 1000 18 175 55 0.2 0.8 LES stampa publio stampa Publio in Tito M 2000 18 170 50 0.6 0.9 LMES in Caio M 1500 20 178 58 0.3 0.1 LV aff Tito Caio coppie 4 M in Domitilla F 1000 17 175 55 0.1 0.8 LV in Agrippina F 2000 17 165 50 0.2 0.1 L aff Tito Domitilla aff Caio Domitilla aff Sempronio Domitilla festa V 2 festa L 4 in Aurelio M 5000 24 150 60 0.5 0.5 G in Sempronio M 5000 19 171 52 0.5 0.5 GV in Aurelio M 3000 18 170 49 0.3 0.1 V in Sulpicia F 1500 20 168 49 0.8 0.2 LEGD in Messalina F 2500 24 181 62 0.9 0.6 EG stampa stampa Aurelio in Tullia F 2000 23 179 59 0.7 0.6 ED in Marcia F 5000 19 171 52 0.2 0.4 LMEV in Tarquinio M 7000 23 180 60 0.8 1.0 MES out Aurelio stampa coppie 3 G festa E 6 f 9

L output prodotto dal programma deve essere il seguente Non ci sono invitati di nome publio. Publio M 1000 18 175 55 0.2 0.8 LES Non ci sono popolane di nome Caio nelle simpatie dell Imperatore. [ ] 2.790 5.295 Non ci sono senatori di nome Sempronio nelle simpatie dell Imperatore. 1 1 2 1 2 2 ( Agrippina Aurelio Caio Domitilla Fabia Messalina Publio Sempronio Sulpicia Tito ) Aurelio M 3000 18 170 49 0.3 0.1 V ( Agrippina Caio Domitilla Fabia Marcia Messalina Publio Sempronio Sulpicia Tarquinio Tito Tullia ) [ Sempronio, Lucilla ] 2 2 2 5 Organizzazione degli appelli e modalità di consegna La realizzazione del progetto è una prova d esame da svolgersi individualmente. I progetti giudicati frutto di copiatura saranno estromessi d ufficio dalla valutazione. 10

Si richiede allo studente di effettuare un adeguato collaudo del proprio progetto su numerosi esempi diversi per verificarne la correttezza. La versione aggiornata del progetto è pubblicata in.pdf sul sito: http://lonati.dsi.unimi.it/algo/. Si consiglia di consultare periodicamente questo sito per eventuali correzioni e/o precisazioni relative al testo del progetto. Per ogni ulteriore chiarimento potete chiedere un appuntamento scrivendo una mail all indirizzo lonati@dsi.unimi.it. Il presente progetto è valido per gli appelli di febbraio e marzo 2011 e deve essere consegnato: entro il 14 febbraio per l appello del 18 febbraio; entro il 28 febbraio per l appello del 4 marzo. Le discussioni dei progetti per i due appelli si svolgeranno in date e luoghi da specificarsi, comunque entro (o in contemporanea a) le date di svolgimento delle prove orali. Il calendario dei colloqui sarà disponibile sulla pagina del corso http://lonati.dsi.unimi.it/algo qualche giorno dopo il termine di consegna del progetto. Il progetto va inviato per posta elettronica all indirizzo lonati@dsi.unimi.it entro le date sopra indicate. Occorre presentare: 1. il codice sorgente (rigorosamente ANSI C, compilabile con gcc); 2. una sintetica relazione (formato pdf o rtf) che illustra le strutture dati utilizzate e le scelte implementative, analizzando il costo delle diverse operazioni richieste dalla specifica. I due o più file (file sorgenti C + relazione) devono essere contenuti in un unico file.zip il cui nome dovrà essere della forma cognome matricola.zip. La relazione e il codice devono riportare nome, cognome e matricola. Una copia cartacea della relazione e del codice deve inoltre essere consegnata alla docente entro le scadenze fissate (lasciandola eventualmente nella sua casella postale presso il dipartimento in via Comelico). Si ricorda infine di presentarsi al colloquio con una copia stampata della relazione e del codice. 11