SOLUZIONE: come antenato comune. Fondamenti della Programmazione: Metodi Evoluti - A.A Prova d esame del 24 febbraio 2014

Documenti analoghi
Prova di esame del 19 giugno 2017

Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2013

Prova di esame del 22 luglio 2016

Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 19 luglio 2014

Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2015

OOP L 10a Interfacce e classi interne Java

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

La Ricorsione. Carla Binucci e Walter Didimo

La classe java.lang.object

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Università Ca Foscari Dipartimento di informatica. Programmazione part-time. Esame Ocaml

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Programmazione in Python per la bioinformatica

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Programmazione ad Oggetti

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

PROGRAMMAZIONE 2 Gerarchie di 9pi: implementazioni mul9ple e principio di sos9tuzione

Esercitazione n 2. Obiettivi

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

Tecniche e strumenti per la validazione di codice Java: un esempio applicativo

Esonero del corso di Programmazione a Oggetti

PROGRAMMAZIONE Gerarchie di :pi: implementazioni mul:ple e principio di sos:tuzione

Programmazione ad oggetti

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

ESERCIZIO 1 (STRINGHE)

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Autovalutazione. OO in Java: classi astratte, interfacce, classi interne. Riassunto: cos è la OOP?

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza

PROGRAMMAZIONE 2 4. Java: un modello operazionale

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Esercizio. Strutture Dati

Virtual CPU (Eniac): parte 2

Fondamenti di Informatica T-1

AA Gerarchie di -pi: implementazioni mul-ple e principio di sos-tuzione

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

PROGRAMMAZIONE 2 4. Un modello operazionale per Java

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Programmazione Orientata agli Oggetti

Lezione 13 Programmazione ad Oggetti

Fondamenti di Informatica

Esercizio laboratorio (Java 0) Raccolto stampato nel turno successivo di laboratorio

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

I numeri razionali. Specifica: la sintassi. Specifica: la semantica

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Progettazione Object-Oriented

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

Il TDA List è la versione orientata agli oggetti della struttura dati lista. Una sequenza di nodi

List. Il TDA List. Interfaccia Position. Il TDA Position. Il TDA List 1. Ancora su Position

Fondamenti di Informatica

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

Ereditarietà (ultima)

Ereditarietà (ultima)

Programmazione Concorrente e Distribuita

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

Implementare un'interfaccia

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Programmazione Orientata agli Oggetti

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti

Uguaglianza e copia di oggetti

Basi di Dati: Corso di laboratorio

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Programmazione con Java

Complementi di Algoritmi e Strutture Dati. Soluzioni prova scritta 7 giugno 2017

Corso di Fondamenti di Informatica I

PROGRAMMAZIONE: Le strutture di controllo

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Programmazione C. Puntatori Array come puntatori

Esonero del corso di Programmazione a Oggetti

Domande di Reti Logiche compito del 29/1/2016

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

Esercitazione n 2. Obiettivi

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Cosa sono i Generics?

Il linguaggio C. Puntatori e dintorni

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano

Variabili e Metodi di classe Interfacce e Package File in Java

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Esercizi su Array di Stringhe

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Linguaggio C: Espressioni

Transcript:

Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti sia per ogni affermazione vera che viene marcata che per ogni affermazione falsa che viene lasciata non marcata. Analogamente vengono sottratti 0.5 punti sia per ogni affermazione falsa che viene marcata che per ogni affermazione vera che viene lasciata non marcata. 1. a. Una e esiste solo a tempo di esecuzione (run-time) b. Una funzione non vrebbe modificare alcun oggetto c. Una query è sempre una funzione d. Una procedura non può ritornare valori come risultato della sua esecuzione 2. a. Una e deferred non può ereditare da una e effective b. Una e C non può ereditare da due i differenti B1 e B2, se sia B1 che B2 hanno una stessa e A come antenato comune c. Ad un entità di tipo statico C si può assegnare un oggetto di un tipo che è un antenato di C d. In una e C una feature f ereditata dalla e A può essere ridefinita soltanto se f è deferred in A 3. a. Se un loop non definisce un invariante il programma non compila correttamente b. Se la clausola from del loop è vuota il programma compila correttamente c. Il variante del loop deve essere uguale a 0 po l ultima iterazione d. Se la clausola until del loop è falsa si esce dal loop 4. a. Il variante del loop può anche non decrementare ad ogni iterazione del loop b. Se la clausola until del loop è vuota il programma compila correttamente c. L invariante del loop deve essere vero anche immediatamente prima della prima iterazione d. Il variante del loop ha sempre un valore intero positivo 5. a. Il parametro di una e generica può essere istanziato sia da una e non-generica che da una derivazione di una e generica b. Se C è una e deferred allora non possono esistere nel programma entità di tipo statico C c. La genericità viene usata per parametrizzare una e e l ereditarietà viene usata per specializzare una e d. Un istruzione b.f può dar luogo a tempo di esecuzione (run-time) all esecuzione di differenti feature SOLUZIONE: 1. a. Una e esiste solo a tempo di esecuzione (run-time) b. Una funzione non vrebbe modificare alcun oggetto c. Una query è sempre una funzione d. Una procedura non può ritornare valori come risultato della sua esecuzione 2. a. Una e deferred non può ereditare da una e effective b. Una e C non può ereditare da due i differenti B1 e B2, se sia B1 che B2 hanno una stessa e A come antenato comune c. Ad un entità di tipo statico C si può assegnare un oggetto di un tipo che è un antenato di C d. In una e C una feature f ereditata dalla e A può essere ridefinita soltanto se f è deferred in A Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 1 / 7

3. a. Se un loop non definisce un invariante il programma non compila correttamente b. Se la clausola from del loop è vuota il programma compila correttamente c. Il variante del loop deve essere uguale a 0 po l ultima iterazione d. Se la clausola until del loop è falsa si esce dal loop 4. a. La variante del loop può anche non decrementare ad ogni iterazione del loop b. Se la clausola until del loop è vuota il programma compila correttamente c. L invariante del loop deve essere vero anche immediatamente prima della prima iterazione d. Il variante del loop ha sempre essere un valore intero positivo 5. a. Il parametro di una e generica può essere istanziato sia da una e non-generica che da una derivazione di una e generica b. Se C è una e deferred allora non possono esistere nel programma entità di tipo statico C c. La genericità viene usata per parametrizzare una e e l ereditarietà viene usata per specializzare una e d. Un istruzione b.f può dar luogo a tempo di esecuzione (run-time) all esecuzione di differenti feature Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 2 / 7

Esercizio 2) [10 punti] La e LIST [G] e ELEM [G] realizzano una lista semplice. Il primo elemento della lista viene memorizzato nell attributo first della e LIST [G]. L attributo next della e ELEM [G] dà accesso all elemento successivo della lista. L invocazione di next sull ultimo elemento di una lista ritorna Void. Implementare la feature invert della e LIST [G] che realizza l inversione dell ordine con cui gli elementi sono presenti nella lista. Ad esempio, invertire la lista [1, 3, 2, 9] risulta nella lista [9, 2, 3, 1]. Non devono essere creati nuovi oggetti della e ELEM [G] né modificate le feature esistenti o introtte nuove feature nelle i LIST [G] e ELEM [G]. Non è necessario conoscere altro codice all infuori di quello fornito. LIST [G] first : ELEM [G] -- Il primo elemento di questa lista, oppure Void se questa lista è vuota invert -- Inverti l ordine degli elementi in questa lista -- Ad esempio, invertire la lista [1, 3, 2, 9] risulta nella lista [9, 2, 3, 1] local ELEM [G] next : ELEM [G] -- Dà accesso all elemento successivo a questo. Vale Void se non esiste l elemento successivo. feature -- modifica set_next (an_element : ELEM [G]) -- Assegna an_element come elemento successivo di questo next = an_element Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 3 / 7

SOLUZIONE: LIST [G] invert -- Inverti l ordine degli elementi in questa lista -- Ad esempio, invertire la lista [1, 3, 2, 9] risulta nella lista [9, 2, 3, 1] local old : ELEM [G] punta alla parte di lista ancora da invertire old_first : ELEM [G] -- il primo elemento della parte di lista ancora da invertire rev : ELEM [G] punta alla parte di lista già invertita from old first until old Void loop old_first old old old.next old_first.set_next rev rev old_first count = old count ELEM [G] next : ELEM [G] -- Dà accesso all elemento successivo a questo. Vale Void se non esiste l elemento successivo. feature -- modifica set_next (an_element : ELEM [G]) -- Assegna an_element come elemento successivo di questo next = an_element Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 4 / 7

Esercizio 3) [10 punti] Completare i contratti (pre-condizioni, post-condizioni, invarianti di e) della porzione di e PERSONA sotto presentata che modella un tipo di contratto di matrimonio: 1. Ogni persona ha un nome non vuoto 2. Una persona non può essere sposata a sé stessa 3. Se X è una persona sposata alla persona Y, allora Y è sposata a X 4. Affinché la persona X possa sposare la persona Y, né X né Y devono essere già sposati 5. Non è permesso annullare il contratto di matrimonio Non c è relazione tra il numero di righe vuote ed il numero di contratti da scrivere. Non è permesso cambiare le interfacce né il codice già fornito. Non è necessario conoscere altro codice all infuori di quello fornito. PERSONA feature -- creazione make (a_name : STRING) -- Crea una persona con il nome a_name. name a_name name : STRING -- Il nome di questa persona spouse : PERSON -- Il coniuge di questa persona, se esiste. Altrimenti è Void feature -- stato is_married : BOOLEAN -- Questa persona è sposata? Result (spouse /= Void) feature -- implementazione accept_marriage_with (a_person : PERSON) -- Assegna a questa persona come coniuge a_person, che è già sposata con questa persona Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 5 / 7

marry_with (a_person : PERSON) -- Sposa questa persona con a_person a_person.accept_marriage_with (Current) invariant SOLUZIONE: PERSONA feature -- creazione make (a_name : STRING) -- Crea una persona con il nome a_name. a_name /= Void and then not a_name.is_empty name a_name name = a_name not is_married name : STRING -- Il nome di questa persona spouse : PERSON -- Il coniuge di questa persona, se esiste. Altrimenti è Void feature -- stato is_married : BOOLEAN -- Questa persona è sposata? Result (spouse /= Void) Result = (spouse /= Void) Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 6 / 7

feature -- implementazione accept_marriage_with (a_person : PERSON) -- Assegna a questa persona come coniuge a_person, che è già sposata con questa persona a_person /= Void and then a_person /= Current not is_married a_person.spouse = Current spouse = a_person is_married marry_with (a_person : PERSON) -- Sposa questa persona con a_person a_person /= Void and then a_person /= Current not is_married not a_person.is_married a_person.accept_marriage_with (Current) spouse = a_person is_married invariant a_name /= Void and then not a_name.is_empty spouse /= Current is_married = (spouse /= Void) is_married implies spouse.spouse = Current N.B. Il contratto evidenziato in giallo non è necessario, dal momento che lo stesso contratto è presente tra gli invarianti di e. Non è stato considerato un errore l averlo inserito nella soluzione fornita al compito. Università di Roma Tor Vergata : Corso di Laurea in Matematica Prof. Enrico Nardelli pag. 7 / 7