Politecnico di Milano

Documenti analoghi
Politecnico di Milano

Politecnico di Milano

Politecnico di Milano

Politecnico di Milano

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Politecnico di Milano

Programmazione 1 A.A. 2015/2016

Programmazione II Compitino (Vers. B)

Programmazione II Compitino (Vers. B)

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Laboratorio di Programmazione 1 [Java]

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

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

GESTIONE DEGLI ERRORI

Laboratorio di Programmazione 1 [Java]

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello dell 8 Febbraio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

RIGA COLONNA MATRICOLA

Politecnico di Milano

INFORMATICA ED ELEMENTI DI INFORMATICA MEDICA. MODULO DI INFORMATICA Prof. Stefano Gaburri e Prof. Gianluca Palermo. Prova del 12 Luglio 2010

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Programmazione II Compitino (Vers. A)

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Esercitazione. Docente Ing. Mariateresa Celardo

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Calcolare x n = x x x (n volte)

NOTA: I codici proposti sono solo una delle possibile soluzioni, non sono da intendersi come unica soluzione possibile o corretta

Lezione 6 programmazione in Java

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Esempio: L EURO-CONVERTITORE (1) Scopo

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 25 Gennaio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Algoritmi di Ricerca. Esempi di programmi Java

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

NOTA: I codici proposti sono solo una delle possibile soluzioni, non sono da intendersi come unica soluzione possibile o corretta

Programmazione a oggetti

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Il presente plico contiene 4 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Programmazione II Compitino (Vers. A)

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Studente (Cognome Nome):

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Esercizi di Algoritmi e Strutture Dati

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Prova d Esame Compito A

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Programmazione I. 11 gennaio Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): +f(double x):

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 17 Febbraio 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Algoritmi di Ricerca. Esempi di programmi Java

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 20 Febbraio 2014 COGNOME E NOME

RIGA COLONNA MATRICOLA. Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Lezione 8 Struct e qsort

Implementazione ADT: Alberi

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 21 Luglio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

RIGA COLONNA MATRICOLA

Esercitazione n 2. Obiettivi

Introduzione alla Programmazione in Java attraverso un esempio commentato

Programmazione II Compitino (Vers. A)

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

Politecnico di Milano. Ingegneria del Software a.a. 2008/09. Esercizio 1:... Esercizio 2:... Esercizio 3:...

Eccezioni Precisazioni e approfondimenti

Spazio riservato ai docenti

Progettazione del Software

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

ESERCIZIO 1 (FILE DI TESTO)

Le eccezioni in Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Informatica 3 secondo recupero 13 Settembre 2002

Prima prova intercorso 29 Novembre 2005

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

RIGA COLONNA MATRICOLA

Iterazioni. L istruzione while. while (condition) istruzione

Esercitazione 6. Array

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

Transcript:

Appello 25 settembre 2015 Politecnico di Milano Anno accademico 2014-2015 Ingegneria del Software Cognome: DESIGN AND IMPLEMENTATION OF MOBILE APPLICATIONS 24 / 09 / 2015 Nome: Matricola: LAUREANDO Sezione (segnarne una): Baresi Ghezzi San Pietro Cassani Valerio 817014 valerio.cassani@mail.polimi.it Curci Matteo 823215 matteo.curci@mail.polimi.it Istruzioni 1. La mancata indicazione dei dati anagrafici e della sezione comporta l annullamento del compito. 2. Al termine, consegnare solo i fogli distribuiti utilizzando il retro delle pagine in caso di necessità. Non separare questi fogli. Eventuali fogli di brutta, ecc. non verranno in nessun caso presi in considerazione. È possibile scrivere in matita. 3. È possibile consultare liberamente libri, manuali o appunti. È proibito l uso di ogni dispositivo elettronico (quali calcolatrici tascabili, telefoni cellulari, ecc.). 4. Non è possibile lasciare l aula conservando il tema della prova in corso. 5. Tempo a disposizione: 2h. Esercizio 1: Esercizio 2: Esercizio 3: Esercizio 4:

Esercizio 1 Si consideri la seguente specifica di un tipo di dato astratto gara che rappresenta una gara di atletica leggera (salti e lanci). Alla gara partecipano un numero di atleti fissato nel momento in cui la gara viene creata. Ad ogni atleta corrisponde un numero di pettorale: 1, 2,..., n, dove n è il numero dei partecipanti alla gara. L operazione gareggia(x,ris) indica che l atleta con il numero di pettorale x ha gareggiato ottenendo il risultato ris (per esempio, se si tratta di una gara di salto in alto, ris rappresenta l altezza di salto in cm). L operazione primo() restituisce il numero di pettorale dell atleta in testa al momento in cui l operazione viene eseguita. public class Gara{ // se p <=0 genera l eccezione NonEsisteGara, altrimenti crea //una gara con p partecipanti public Gara(int p) throws NonEsisteGaraException //metodo mutator //se x<0 o x e maggiore del num. dei partecipanti genera l eccezione //AtletaInesistente altrimenti modifica il valore del risultato //ottenuto dall atleta x senza modificare i risultati degli //altri atleti public void gareggia(int x, float result) throws AtletaInesistenteException //metodi observer: //restituisce il vincitore corrente della gara. public /*@ pure @*/ int primo() //restituisce i risultati ottenuti da ogni atleta partecipante alla gara. //Se un atleta non ha ancora ancora gareggiato il suo risultato //e convenzionalmente fissato a -1. public /*@ pure @*/ ArrayList<Float> risultati;b 1. Si specifichino i metodi gareggia e primo in JML. Per completezza specifichiamo anche il costruttore. //@ensures p>0 && risultati().size()==p && //@ (\forall int i; 0<= i && i<p; risultati().get(i)==-1); public Gara(int p) throws NonEsisteGaraException //@ensures 0<x && x<= risultati().size() && //@ risultati().size()== \old(risultati().size() && //@ (\forall int i; 0<= i && i<risultati().size(); //@ i==x-1? risultati().get(i) == result //@ :risultati().get(i) == \old(risultati().get(i)); //@signals (AtletaInesistenteException e) (x<=0 x>risultati().size()) && //@ risultati().equals(\old(risultati().clone())); public void gareggia(int x, float result) throws AtletaInesistenteException //@ensures risultati().get(\result -1) == //@ (\max int i; 0<=i && i<risultati().size(); risultati().get(i));

public /*@ pure @*/ int primo() Si e ipotizzato che primo() un pettorale qualunque quando sia chiamato prima di avere inserito almeno un risultato. 2. Si definisca un implementazione ragionevolmente efficiente per il calcolo del vincitore. Si scrivano pertanto una rep, il suo invariante di rappresentazione e la sua funzione di astrazione. Per semplificare il calcolo del vincitore e utile memorizzare il pettorale dell atleta col migliore risultato. I risultati possono essere memorizzati semplicemente in un array (la cui dimensione non cambia dopo la costruzione). Occorre poi fare attenzione che i pettorali partono da 1 mentre gli indici dell array da 0. private int primo; private float[] ris; //RI: private invariant ris!=null && ris[primo-1] == (\max int i; 0<=i && i<ris.length; ris[i]); //AF: private invariant primo()== primo && ris.equals(risultati().toarray()) 3. Si fornisca un implementazione del costruttore e del metodo gareggia() descrivendo brevemente, per ciascuno di essi, (1) perchè il rep invariant viene effettivamente mantenuto e (2) perchè la loro specifica viene rispettata. public Gara(int p) throws NonEsisteGaraException { if (p<=0) throw new NonEsisteGaraException(); ris = new Float[p-1]; primo=1; Arrays.fill(ris,-1); Il RI e`banalmente vero (ogni elemento dell array ris eìnizializzato a -1 e il primo e il pettorale numero 1, che e un pettorale valido). la specifica e pure banalmente vera: in base alla funzione di astrazione ris corrisponde esattamente a risultati(), e ris ha dimensione p ed e inizializzato interamente a -1. public void gareggia(int x, float result) throws AtletaInesistenteException { if (x<=0 x>= ris.length) throw new AtletaInesistenteException(); ris[x-1] = result; if (result>ris[primo-1]) primo = x; Se RI vale all entrata del metodo allora ris[primo-1] contiene il risultato migliore (ossia massimo). Se result e maggiore del massimo corrente allora il codice garantisce di memorizzare in primo il pettorale x. La specifica vale in quanto il codice memorizzare in ris[x-1] il valore di result e, per la funzione di astrazione, ris[x-1] corrisponde a risultati().get(x-1); tutti gli altri valo9re restano invariati. 4. Si vuole ora trattare un caso leggermente più generale di gara: il vincitore può essere scelto anche come l atleta che ha il punteggio minimo invece che quello con il punteggio massimo (ad esempio quando il punteggio rappresenta il tempo impiegato per una gara di corsa). Si definisca quindi una classe GaraEstesa, che estende la classe Gara. In essa il costruttore riceve un parametro addizionale tipo, il cui valore può essere solo il carattere < o >, per stabilire l ordinamento, che non può essere modificato dopo la costruzione.

public class GaraEstesa extends Gara { public GaraEstesa(int p, char tipo) //restituisce il vincitore corrente della gara secondo l ordinamento. /@override public /*@ pure @*/ int primo() a) Si completi la specifica dei metodi di GaraEstesa, aggiungendo eventualmente tutti e soli i metodi che si ritengono necessari. E necessario aggiungere un metodo puro che restituisca il tipo della gara: public /*@ pure @*/ char tipo(); Specifiche (sotto l ipotesi che i risultati validi siano positivi). //@requires tipo == < tipo == > ; //@ensures p>0 && risultati().size()==p && //@ tipo()==tipo && //@ (\forall int i; 0<= i && i<p; risultati().get(i)==-1); public GaraEstesa(int p, char tipo) throws NonEsisteGaraException; //@ensures risultati().get(\result -1) == //@ (tipo()== >? (\max int i; 0<=i && i<risultati().size(); risultati().get(i)) //@ : (\min int i; 0<=i&&i<risultati().size()&&risultati().get(i)>0; risultati().get(i)); public /*@ pure @*/ int primo() b) La classe GaraEstesa verifica il principio di sostituzione? Giustificare la risposta. NO, in quanto il metodo primo() viola la regola dei metodi: quando il tipo e <, restituisce il concorrente arrivato ultimo, anziche il primo. La postcondizione e pertanto violata.

Esercizio 2 Un impianto industriale coordinata tre bracci meccanici per il confezionamento di caramelle: Ogni robot preleva le caramelle da confezionare da un unico contenitore; Il contenitore è riempito ad intervalli regolari con 10.000 caramelle; Ogni robot può solo prelevare 5 caramelle per volta dal contenitore comune; Ogni robot può gestire confezioni da 5, 10 e 15 caramelle; L accesso al contenitore è consentito solamente a due robot per volta; Si scriva il codice Java delle classi Robot, Controllore e Impianto tenendo presente che: (a) il sistema deve essere progettato per la massima flessibilità, ovvero in futuro il numero di robot e di contenitori della caramelle potrebbero cambiare. Inoltre, in un certo istante, tutti i robot devono gestire confezioni dello stesso tipo. Ad esempio, se un robot è configurato per confezioni da 10 caramelle, anche gli altri devono confezionare allo stesso modo.

Esercizio 3 Si consideri il seguente metodo, in cui ogni istruzione è numerata per comodità: 1 static void esegui(int a, int b) { 2 if (b>= 0 && a>0) { 3 while (b!=0) { 4 if (b >= 3) 5 a++; 6 else a--; 7 b--; ; ; 8 return a; 1. Si scriva la path condition e si sintetizzi un dato di test per percorrere il cammino seguente: 1, 2, 3, 4, 5, 7, 3, 4, 6, 7, 3, 4, 6, 7, 8. b=3 && a>0 (es. b=3 && a = 1) 2. Qual è il numero minimo di dati di test necessari per coprire tutte le condizioni del programma? Il caso trovato nel punto precedente copre gia le condizioni del while e del secondo if (durante le varie iterazioni del ciclo). Basta quindi coprire il caso false del primo if (con due casi di test). i casi di test minimi sono quindi solo 3: 1) b<0 (es- b=-1) 2) b>=0 && a<=0 (es. b=1 && a=0) 3) b=3 && a=1 3. Si sintetizzino i dati di test che soddisfano il requisito di cui al punto (2).

Esercizio 4 Si considerino le seguenti classi Java: public class Albero { public String tostring(){ return "Albero"; public void innesto(albero a) { System.out.println("Albero: " + this + " " + a); public class Arancio extends Albero { public String tostring(){ return "Arancio"; public void innesto(arancio a){ System.out.println("Arancio: " + this + " " + a); public class Melo extends Albero { public String tostring(){ return "Melo"; public void innesto(melo m) { System.out.println("Melo: " + this + " " + m); e si spieghi cosa stamperebbe il seguente metodo main, motivando brevemente le risposte: public class Test { public static void main(string args[]) { Albero a1, a2; Melo m; Arancio a; a1 = new Albero(); a2 = new Arancio(); m = new Melo(); a = new Arancio(); m.innesto(a1); a2.innesto(a1); m.innesto(m); a2 = m; a1 = a; a2.innesto(m); a1.innesto(a);

Albero: Melo Albero Albero: Arancio Albero Melo: Melo Melo Albero: Melo Melo Albero: Arancio Arancio