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

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Progetto Prestiti Laboratorio di Algoritmi

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Progetto: Dama. 1 - Descrizione. 2 - Regole del gioco. Appello di febbraio 2003

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Progetto Prestiti Laboratorio di Algoritmi

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2014

Laboratorio di Algoritmi e Strutture Dati

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2017

IMPOSTAZIONI SITO. Figura 1. Figura 2. CSI Area Portale Pagina 1

Laboratorio di Algoritmi e Strutture Dati

Guida all utilizzo dell Area web riservata ai docenti

Laboratorio di Algoritmi e Strutture Dati

Dati aggregati. Violetta Lonati

Registro Lezioni e Diario Docenti

Laboratorio di Algoritmi e Strutture Dati

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

UNIVERSITÀ DEGLI STUDI DI TORINO

Seconda Università degli Studi di Napoli

Procedura rilevamento frequenza e valutazione della didattica (versione approvata CCL del 18 Luglio 2016)

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

Nuove procedure di iscrizione e verbalizzazione degli esami per gli studenti

Prima prova intercorso 29 Novembre 2005

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

MANUALE PER I DOCENTI: GESTIONE APPELLI E VERBALIZZAZIONE ESAMI ORALI ONLINE

Vademecum dello studente

EasyCourse/EasyTest Descrizione file Excel di input

Learning Agreement Uniweb DOCENTE

PROCEDURA ISCRIZIONE APPELLI D ESAME ON-LINE

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO I.2015

Indicazioni su come preparare la relazione su un esperienza di laboratorio

Programmazione di base

Programmazione di base

PROCEDURA ISCRIZIONE APPELLI D ESAME ON-LINE

Guida alla gestione degli appelli d esame

Digitare l indirizzo ed entrare nella pagina web

Laboratorio di Reti, Corsi A e B. Text-Twist. Progetto di Fine Corso A.A. 2016/17

Espressione di chiamata di funzione

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Esercitazione 05. Sommario. Packet Filtering [ ICMP ] Esercitazione Descrizione generale. Angelo Di Iorio

Gestione Tesi Online

Prova Finale. Algoritmi e Strutture Dati 2016 / 2017

Istruzioni per il caricamento di un file CSV. Avvertenze generali. Struttura e formato del file CSV

Corso Programmazione

Basi di dati 8 novembre 2010 Prova parziale Compito A

Compilazione on-line del Piano di Studio

Esercitazione Programmare Liste

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione:

Gestione Esami: verbalizzazione online con firma digitale

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

La gestione delle Prove Parziali in UniTn

Indicazioni su come preparare la relazione su un esperienza di laboratorio

UNIVERSITÀ DEGLI STUDI DI BERGAMO. Presentazione dei piani di studio per l anno accademico 2008/09

Registri Associazioni Lombardia. Manuale per la manutenzione dei requisiti delle associazioni iscritte al Registro Associazioni Lombardia

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

UNIVERSITÀ DEGLI STUDI DI TORINO

UNIVERSITÀ DEGLI STUDI DI BERGAMO

LINGUE TEDESCA, FRANCESE E SPAGNOLA LIVELLO B1

AVVERTENZE ISTRUZIONI PER LA COMPILAZIONE DELLA DOMANDA ONLINE. PASSO 1. Registrazione ad Almalaurea e presentazione domanda di laurea on line

MANUALE REGISTRO ELETTRONICO DOCENTI ANNO SCOLASTICO 2014/2015 I.T.E. SCARPELLINI - FOLIGNO

Procedura per la richiesta di Borse di Studio

Algoritmi e Strutture Dati

Stringhe e allocazione dinamica della memoria

Principi di Progettazione del Software a.a " Introduzione al corso! Prof. Luca Mainetti! Università del Salento!

Guida pratica per gli studenti

Principi di Progettazione del Software a.a Introduzione al corso Prof. Luca Mainetti Università del Salento

Guida Studenti (versione 1.0 del )

Guida all utilizzo del. Sistema Tirocini. A cura del. A7_STES-Ψ_IO_ManualeBDTirocini01 Guida utilizzo Sistema Tirocini Rev. 1 Emissione: 18/10/2010

E-CLUB GUIDA PER L'USO

Principi di Progettazione del Software a.a Introduzione al corso Prof. Luca Mainetti Università del Salento

Realizzare un business plan con Excel 2003

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.

REGOLAMENTO LAUREE (Deliberato dal Consiglio della Scuola del 16 marzo 2017)

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

CORSI DI LAUREA MAGISTRALE

Procedure iscrizione esami studenti

Uso di base dell ordinamento di dati in Microsoft Excel

Laboratorio di Alfabetizzazione Informatica - Simulazione d esame 29 aprile 2013

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 19 Febbraio Attenzione:

Laboratorio di Algoritmi e Strutture Dati

UNIVERSITÀ DEGLI STUDI DI BRESCIA Servizi ICT 04/10/2016 Manuale Esse3 Gestione appelli e verbalizzazione on-line Docenti Verbalizzazione

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

File e puntatori a file

Metodo di Quine-McCluskey. Algoritmo. Sommario. Sommario. M. Favalli

Macchine di Turing. Francesco Paoli. Istituzioni di logica, Francesco Paoli (Istituzioni di logica, ) Macchine di Turing 1 / 29

PIANO CARRIERA Help&Faq

Ma il programma in Fig. 8.2 del libro? Stampa hello, world, dato un input n se e solo se l equazione

Laboratorio di Algoritmi e Strutture Dati

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Corso di Laurea Ingegneria Informatica

Transcript:

Il problema Laboratorio di Algoritmi e Strutture Dati Docenti: M. Torelli, S. Aguzzoli Appello del 22 gennaio 2007 Progetto Templi Consegna entro l 11 febbraio 2007 In una regione lontana si erigono templi votivi per le divinità venerate dagli indigeni. Un tempio è costituito da un certo numero di piani, ciascun piano è formato da un unico blocco. Quando un tempio è costruito, può essere dedicato a una divinità. Formalmente, sia A l alfabeto {a, b,..., z}. Un blocco è una tripla b = (σ b, p(b), r(b)), dove: - σ b è una stringa su A che denota il nome del blocco. - p(b) è un intero positivo che denota il peso del blocco. - r(b) è un intero positivo che denota la resistenza del blocco. La resistenza di un blocco indica il peso complessivo che un blocco è in grado di reggere. Un tempio è una coppia T = (σ T, P T ) dove: - σ T è una stringa su A che denota il nome del tempio. - P T è una successione di blocchi P T = (b 1, b 2,..., b k ) tale che, per ogni 1 i k, b i è il blocco che forma il piano i del tempio. Perché il tempio non collassi, ogni blocco deve essere in grado di sopportare il peso complessivo dei blocchi nei piani soprastanti, quindi, per ogni i {1, 2,..., k 1}, deve valere: r(b i ) k j = i+1 p(b j ). L altezza di T è il numero k dei piani che lo compongono. Quando un tempio viene costruito a partire da un insieme di blocchi B, viene costruito il tempio che ha altezza massima fra tutti i templi costruibili usando i blocchi in B (ogni blocco può essere usato al massimo una volta). Nel caso esista più di una soluzione, ne viene scelta una. Esempio 1 Supponiamo di avere a disposizione i blocchi a, b, c, d ed e, i cui pesi e resistenze sono descritti nella tabella sottostante. 1

Blocco Peso Resistenza a 10 31 b 20 17 c 8 1 d 16 1 e 2 35 Consideriamo l insieme dei blocchi B 1 = {a, b}. L altezza massima di un tempio costruibile da B 1 è 2. È infatti possibile costruire i templi T 1 = (σ 1, (a, b)) T 2 = (σ 2, (b, a)) Ad esempio, T 1 è un tempio di nome σ 1 formato dai piani a (primo piano) e b (secondo piano). Sia B 2 = {c, d, e}. I templi costruibili da B 2 hanno altezza massima 2 e sono: T 3 = (σ 3, (e, c)) T 4 = (σ 4, (e, d)) Infine, se l insieme dei blocchi è {a, b, c, d, e}, l altezza massima è 4 e sono costruibili due templi: T 5 = (σ 5, (a, b, e, c)) T 5 = (σ 5, (a, e, b, c)) Una divinità D è una coppia D = (σ D, B D ), dove: - σ D è una stringa finita su A che denota il nome della divinità. - B D è un insieme finito di stringhe su A tale che, per ogni β B D, β è il nome di un blocco. B D può anche essere l insieme vuoto. Diciamo che la divinità D protegge un tempio T se esiste β B D tale che β è il nome di un blocco che è un piano di T. Fra le divinità è definita una gerarchia descritta da una relazione d ordinamento stretto <. Questo significa che < deve verificare le seguenti proprietà degli ordinamenti stretti: (P1). Per ogni divinità D 1 e D 2, se D 1 < D 2, allora non vale D 2 < D 1. (P2). Per ogni divinità D 1, D 2 e D 3, se D 1 < D 2 e D 2 < D 3, allora D 1 < D 3. La gerarchia fra le divinità è stabilita dall utente e il programma deve controllare che le asserzioni del tipo D 1 < D 2 inserite dall utente non violino le proprietà scritte sopra. Esempio 2 Supponiamo che la relazione fra divinità sia così definita: nettuno < mercurio mercurio < giunone mercurio < minerva mercurio < venere saturno < venere marte < minerva minerva < giove venere < giove nettuno < urano urano < giove 2

In questa situazione l utente non può aggiungere a < l asserzione minerva < nettuno. Infatti, per la proprietà (P2) si ha che nettuno < minerva, quindi per (P1) non può valere minerva < nettuno. È possibile invece inserire ad esempio minerva < venere, così come nettuno < marte, saturno < nettuno, giove < giunone, ecc. Per dedicare un tempio T = (σ T, P T ) a una divinità, evitando di creare discordie, gli indigeni seguono la seguente regola: Sia D l insieme delle divinità che proteggono T. - Se in D esiste una divinità D M superiore alle altre rispetto all ordinamento < (ossia: per ogni divinità D D, se D D M allora D < D M ), allora T viene dedicato a D M. - Se in in D non esiste la divinità massima, T non viene dedicato. Esempio 3 Supponiamo che la gerarchia sia quella descritta all inizio dell Esempio 2 e che le associazioni siano: Divinità Blocchi giove giunone marte mercurio minerva nettuno saturno urano venere b, e d c, e a e a, e a b Le divinità che proteggono il tempio T 1 (dell Esempio 1) sono giove, mercurio, nettuno, saturno e venere. Essendo la divinità massima giove, il tempio T 1 viene dedicato a giove (stesso discorso per T 2 ). Analogamente, il tempio T 3, protetto da giove, marte, minerva e nettuno, viene dedicato a giove. Il tempio T 4 è invece protetto da giove, giunone, marte, minerva e nettuno. Poiché non esiste una divinità superiore alle altre, il tempio non viene dedicato. Infine, i templi T 5 e T 6 sono dedicati a giove. Si richiede di implementare una struttura dati efficiente che permetta di eseguire le operazioni seguenti. - blocco (α, p, r) Definisce un nuovo blocco di nome α, peso p e resistenza r. Se esiste già un blocco di nome α non compie alcuna operazione. - tempio (α, β 1,..., β n ) Se esiste già un tempio di nome α non compie alcuna operazione. Se per qualche β i (con 1 i n) non esiste alcun blocco di nome β i non compie alcuna operazione. Altrimenti, per ogni 1 i n, 3

sia b i il blocco di nome β i (assumiamo che i nomi siano tutti distinti fra loro). Viene costruito un tempio di altezza massima fra quelli costruibili con l insieme dei blocchi {b 1,..., b n } e viene stampata su una nuova linea il messaggio α k dove k è l altezza del tempio. - elimina (α) Distrugge, se esiste, il tempio di nome α, altrimenti non compie alcuna operazione. - divinità (α, β) Se non esiste alcun blocco di nome β non compie alcuna operazione. Altrimenti, viene aggiunto β all insieme dei blocchi B D della divinità di nome α. - minore (α, β) Stabilisce che la divinità di nome α è minore della divinità di nome β (α < β), se questo non viola le condizioni (P1) e (P2) su < precedenti. In caso contrario, viene stampato il messaggio non e possibile porre α < β - dedica (α) Se non esiste alcun tempio di nome α oppure se il tempio di nome α è già stato dedicato a una divinità non compie alcuna operazione. Altrimenti, si dedica il tempio di nome α nel modo descritto. Se il tempio viene dedicato a una divinità di nome σ viene stampato il messaggio α e stato dedicato a σ altrimenti viene stampato il messaggio non e possibile dedicare α - stampa (α) Se non esiste alcun tempio di nome α non compie alcuna operazione. descrizione del tempio di nome α nel modo descritto nell apposita sezione. Altrimenti stampa la Si noti che le operazioni richieste sono liberamente implementabili; in particolare, non vanno necessariamente intese come prototipi di funzioni. 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 1, dove α, β, β 1,..., β n sono stringhe finite di lunghezza arbitraria sull alfabeto {a, b,..., z}, n, p e r sono interi positivi. I vari elementi sulla 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. 4

Riga di input Operazione b α p r blocco (α, p, r) t α β 1 β n tempio (α, β 1,..., β n ) e α elimina (α) d α β divinità (α, β) m α β minore (α, β) D α s α f dedica (α) stampa (α) Termina l esecuzione del programma Tabella 1: Specifiche del programma Note 1. Non devono essere presenti vincoli sul numero di elementi, divinità, templi, elementi associati a divinità, pesi, resistenze (se non quelli determinati dal tipo di dato intero). Non si richiede anzi si sconsiglia l uso di grafica, se non per test personali: in modo particolare, non si usi conio.h e neppure clrscr(). 2. Per semplicità si suppone che l input sia sempre conforme alle specifiche di Tabella 1, per cui non è necessario controllare la correttezza dell input. Per leggere l input si usino le funzioni standard ANSI C getchar() e/o scanf(). 3. Formato per la visualizzazione di un tempio Sia T = (α, (b 1,..., b k )) il tempio da visualizzare, e sia β i il nome del blocco b i, per ogni 1 i k. Se il tempio è dedicato a una divinità D, sia σ il nome di D, altrimenti σ è la stringa nulla. Allora l output deve apparire nel seguente formato: (α k σ β k β k 1. β 2 β 1 ) Esempio nell ordine specificato. Si supponga che le righe di input siano: 5

b argento 4 5 b bronzo 7 4 b corallo 3 20 b diamante 50 15 b zinco 10 20 b pietra 3 4 b granito 5 3 b marmo 1 8 b faggio 20 8 b noce 7 1 b rovere 1 5 t atene argento noce e atene t atene argento bronzo corallo t sparta zinco argento diamante t corinto diamante zinco corallo bronzo t delo diamante zinco argento corallo bronzo s delo t rodi marmo granito pietra t tebe noce rovere faggio m eos poseidon m eos apollo m cronos apollo m cronos zeus m gea zeus m gea eos m gea cronos m gea urano m selene cronos m selene zeus m apollo selene d apollo argento d apollo marmo d apollo pietra d cronos faggio d eos zinco d gea corallo d gea noce d gea granito d selene rovere d selene pietra d poseidon bronzo d urano noce d zeus diamante d zeus zinco D atene D sparta D delo D rodi 6

D tebe s rodi m apollo zeus m cronos urano D atene D sparta D delo D tebe f L output prodotto dal programma deve essere: atene 1 atene 3 sparta 3 corinto 3 delo 4 (delo 4 argento bronzo corallo diamante ) rodi 3 tebe 3 non e possibile porre apollo < selene non e possibile dedicare atene non e possibile dedicare sparta non e possibile dedicare delo rodi e stato dedicato a apollo non e possibile dedicare tebe (rodi 3 apollo pietra granito marmo ) non e possibile dedicare atene sparta e stato dedicato a zeus non e possibile dedicare delo tebe e stato dedicato a urano Presentazione del progetto Il progetto deve essere inviato per posta elettronica all indirizzo aguzzoli@dsi.unimi.it entro l 11 febbraio 2007 (incluso). 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 analizza il costo delle diverse operazioni richieste dalla specifica. 7

I due o più file (file sorgenti C + relazione) devono essere contenuti in un unico file.zip il cui nome dovrà essere cognome.zip. La relazione e il codice devono riportare il vostro nome, cognome e matricola. Una copia cartacea della relazione e del codice deve inoltre essere consegnata al dr. Aguzzoli entro il 12 febbraio 2007 (lasciandola eventualmente nella sua casella postale presso il dipartimento in via Comelico). Si ricorda infine di presentarsi alla prova orale con una copia stampata della relazione e del codice. La discussione del progetto e l esame orale di Algoritmi e Strutture Dati si svolgeranno indicativamente nei giorni 15 febbraio, 20 febbraio, 23 febbraio. Alla consegna del progetto, indicare nel testo della e-mail la data in cui si preferisce sostenere la prova orale; nei limiti del possibile si cercherà di tener conto di tali indicazioni (se non si hanno preferenze, non dare alcuna indicazione). Il calendario degli esami orali sarà disponibile sulla pagina del corso qualche giorno dopo il termine di consegna del progetto. Per ogni ulteriore chiarimento: E-mail: aguzzoli@dsi.unimi.it Ricevimento: il mercoledì, ore 15-16, stanza S204. Avvisi La versione aggiornata del progetto è pubblicata in.pdf sul sito: http://homes.dsi.unimi.it/ aguzzoli/algo.htm. Si consiglia di consultare periodicamente questo sito per eventuali correzioni e/o precisazioni relative al testo del progetto. Si richiede allo studente di effettuare un adeguato collaudo del proprio progetto su numerosi esempi diversi per verificarne la correttezza e valutarne le prestazioni. La realizzazione del progetto è una prova d esame da svolgersi individualmente. I progetti giudicati frutto di collaborazioni saranno estromessi d ufficio dalla valutazione. 8