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

Documenti analoghi
Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Programmazione I - Preparazione A.A. 2010/2011

Preparazione allo Scritto di Programmazione

Preparazione allo Scritto di Programmazione

Programmazione. preparazione allo scritto. Informatica / Comunicazione Digitale 19 gennaio 2016

Programmazione II Compitino (Vers. A)

Programmazione. Cognome... Nome... Matricola... Compitino del 24 novembre 2008

Programmazione II Compitino (Vers. B)

Programmazione. Cognome... Nome... Matricola... Compitino del 24 novembre 2011

Note ed esercizi aggiuntivi

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

Note ed esercizi aggiuntivi

Programmazione II Compitino (Vers. B)

//riferimento a una sequenza di oggetti della classe Importo

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

Programmazione II Compitino (Vers. A)

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Soluzione del primo compitino

Programmazione Preparazione al II Compitino

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

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

Lezione 4 Casting, stringhe e caratteri, operatori relazionali, espressioni e variabili booleane

Programma... Autoboxing / unboxing Array Classe Rettangolo / classe Quadrato / Gerarchia e ereditarietà. Laboratorio di Programmazione - Esercitazio 1

Array. Walter Didimo

Laboratorio di Programmazione I Compitino (Vers. C)

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Sommario. I Uso degli oggetti 39

Esercitazione n 2. Obiettivi

Array di array. E' possibile creare strutture a matrice (2D, 3D,..., ND), esempio: double [ ][ ] entrate = new double [NANNI][NMESI];

Esercitazione n 2. Obiettivi

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

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Programmazione II Compitino (Vers. A)

Tecniche iterative. Walter Didimo

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

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

Programmazione. 23 novembre 2016

Fondamenti di Informatica T-1

E18 Esercizi su ereditarietà e polimorfismo

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie

Compitino del 24 novembre 2008: soluzione

17 - Ereditarietà, tipi e gerarchie

Programmazione. 20 novembre 2017

Programmazione. 23 novembre 2016

Ereditarietà: concetti di base

Note ed esercizi aggiuntivi

COGNOME NOME MATRICOLA DATA

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Programmazione Preparazione al II Compitino

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

Confrontare valori 1

Metodi statici. Dichiarazione e chiamata di metodi statici

Array. Definizione e utilizzo di vettori

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

14 - Metodi e Costruttori

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

COGNOME NOME MATRICOLA DATA

System.out.println("Inserire il cognome del cliente " + k + " : "); cognome = in.readstring();

Oggetti e dati primitivi 1

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

Esercitazione n 2. Obiettivi

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Metodi statci. Dichiarazione e chiamata di metodi statci

E9 Esercizi sul Capitolo 9 Array

E17 Esercizi sugli Array in Java

Soluzione del primo compitino

Gestore di Stringhe 1

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

Note ed esercizi aggiuntivi

Stringhe. Walter Didimo

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Oggi. La programmazione strutturata - III. Sequenza e selezione. Dove siamo. Iterazione: while e do/while. Raffinamenti successivi.

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione a oggetti

Le basi del linguaggio Java

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Introduzione a Java e all'ambiente di sviluppo

import public static boolean int boolean false boolean false boolean false boolean false true false

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Prova d Esame Compito A

Transcript:

Programmazione I 11 gennaio 2012 Matricola:........................................................................ Cognome:........................................................................ Nome:........................................................................... 1. Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): A B +f(double x): +f(string x): +f(double x): +f(char x): C +f(double x): +f(string x): D +f(char x): +f( x): e ipotizzate che tutte le classi abbiano un costruttore pubblico senza argomenti e il solo metodo f(...). Assumete le seguenti definizioni e inizializzazioni: A a = new B(); A b = new C(); A d = new D(); Per ciascuna delle seguenti invocazioni di metodo, dire se essa è consentita e in caso affermativo indicare il nome della classe che contiene il metodo che verrà effettivamente eseguito: d.tostring(): Object: tostring() a.f( 3 + 3 ): b.f( 3 + "3.0" ): b.f( 3 + 3.0 ): B: f(double) ERRORE C: f(double) 1

2. Sia la seguente definizione di variabili: x = 1; y = 2; Dite quale sarà il contenuto di x e y dopo l esecuzione degli assegnamenti indicati: Assegnamento x y y = ( x *= y ) + ( ( x < y )? ++x : y++ ) 2 4 x = ( java.charat( - -y ) == java.charat( y = y + 2*x ) )? ++x : ( x += y ) 2 3 3. Sia la seguente definizione di variabili: x = 1; y = 2; boolean b = ( x >= ( x = y ) ); Dite quale sarà il valore di verità delle seguenti espressioni booleane e quale sarà il contenuto delle variabili x e y dopo la valutazione delle espressioni indicate: Espressione Valore di verità x y x < y ( b & ( x++ > y++ ) ) false 3 3 ( x >= y && b ) x++ == y++ true 3 3 ( x >= y & b ) x++ == y++ true 3 3 4. Considerate il seguente frammento di programma: String s = aababbb ; t = s.length(), x, k; x = k = 0; while ( x < t/2 ) if ( s.charat( x ) == s.charat( t - 1 - x++ ) ) k++; Quale sarà il valore di k dopo la sua esecuzione? k: 1 2

5. Una stringa è detta corretta se e solo se: è formata unicamente da lettere, il numero delle lettere maiuscole supera quello delle lettere minuscole. Ad esempio, le stringhe, ALAbb, AGHTR sono corrette mentre 1ABAna, abaa non lo sono; la stringa nulla è corretta. (a) Scrivete il metodo statico public static boolean corretta( String s ) che restituisce true se e solo se s è corretta. (b) Usate tale metodo nella scrittura di un programma (è sufficiente il corpo del main) che: acquisisca dall utente un brano il cui inserimento viene terminato dalla stringa nulla, visualizzi successivamente le righe del brano che sono stringhe corrette, stampando dopo ognuna di esse il numero delle lettere maiuscole che la compongono. [Suggerimento: utile per memorizzare il brano potrebbe essere la classe generica Sequenza del package prog.utili; ricordiamo che per aggiungere oggetti ad una sequenza si utilizza il metodo add, mentre per scorrere la sequenza si utilizza il costrutto foreach.] public s t a t i c boolean c o r r e t t a ( S t r i n g s ) { M = m = 0 ; for ( i = 0 ; i < s. l e n g t h ( ) ; i++ ) { i f ( Character. isuppercase ( s. charat ( i ) ) ) M++; i f ( Character. islowercase ( s. charat ( i ) ) ) m++; return M + m == s. l e n g t h ( ) && M > m; Nella stesura della classe contenente il metodo statico ed il corpo del main qui sotto va specificata la direttiva di importazione import prog.utili.sequenza al fine di poter utilizzare la classe generica Sequenza Sequenza<String > B = new Sequenza<String >(); S t r i n g s ; k ; out. p r i n t l n ( " Inserisci il brano:" ) ; while ( ( s = i n. readline ( ) ). l e n g t h ( ) > 0 ) B. add ( s ) ; for ( S t r i n g x : B ) i f ( c o r r e t t a ( x ) ) { k = 0 ; for ( i = 0 ; i < x. l e n g t h ( ) ; i++ ) i f ( Character. isuppercase ( x. charat ( i ) ) k++; out. p r i n t l n ( x+" contenente "+k+" lettere maiuscole " ) ; 3

6. Attenzione!! Per questo esercizio è richiesta la scrittura completa del codice del programma. Scrivete il programma CercaFrazione che legga dall utente un insieme B di m frazioni o rettangoli e un insieme S di n eri, dove m ed n vengono acquisiti A LINEA DI COMANDO. Se m ed n non sono entrambi positivi, il programma deve arrestarsi immediatamente emettendo un opportuno messaggio d errore. Successivamente, il programma deve stampare: le frazioni in B minori di ogni ero in S e i rettangoli in B la cui area supera ogni ero in S. import prog. i o. ; class CercaFrazione { public s t a t i c void main ( S t r i n g [ ] a r g s ) { m = I n t e g e r. p a r s e I n t ( a r g s [ 0 ] ) ; n = I n t e g e r. p a r s e I n t ( a r g s [ 1 ] ) ; i f ( m <= 0 n <= 0 ) out. p r i n t l n ( " Parametri errati" ) ; { ConsoleInputManager i n = new ConsoleInputManager ( ) ; ConsoleOutputManager i n = new ConsoleOutputManager ( ) ; Object [ ] B = new Object [m] ; [ ] S = new [ n ] ; char r ; for ( i = 0 ; i < m; i++ ) { do { r = i n. readchar ( " Frazione (f) o Rettangolo (r):" ) ; while ( r!= f && r!= r ) ; i f ( r == f ) B[ i ] = new Frazione ( i n. r e a d I n t ( "Num:" ), i n. r e a d I n t ( "Den:" ) ) ; B[ i ] = new Rettangolo ( i n. readdouble ( "Base:" ), i n. readdouble ( " Altezza :" ) ) ; posmin = posmax = 1; for ( i = 0 ; i < n ; i++ ) { S [ i ] = i n. r e a d I n t ( ) ; i f ( posmin == 1 S [ i ] < S [ posmin ] ) posmin = i ; i f ( posmax == 1 S [ i ] > S [ posmax ] ) posmax = i ; for ( i = 0 ; i < m; i++ ) i f ( B[ i ] i n s t a n c e o f Frazione ) { Frazione f = ( Frazione ) B[ i ] ; i f ( f. isminore ( new Frazione ( S [ posmin ] ) ) out. p r i n t l n ( f ) ; for ( i = 0 ; i < m; i++ ) i f ( B[ i ] i n s t a n c e o f Rettangolo ) { Rettangolo t = ( Rettangolo ) B[ i ] ; i f ( t. getarea ( ) > S [ posmax ] ) out. p r i n t l n ( t ) ; 4

7. Definite la classe Cittadino i cui oggetti rappresentano cittadini. Ogni cittadino è caratterizzato da nome, cognome, cittadinanza, codice fiscale, parametri di tipo String. La classe deve avere: l ovvio costruttore con 4 argomenti; un costruttore con 3 argomenti in cui si assume che la cittadinanza sia Italia (la cittadinanza viene espressa tramite lo stato di appartenenza); i metodi getnome, getcognome, getcitt, getcf dall ovvio significato; il metodo setcitt che assegna all oggetto che lo invoca la cittadidanza passata come argomento (attenzione al prototipo di questo metodo!); i metodi tostring e equals dall ovvio significato (attenzione alla costruzione del metodo equals!). La classe Cittadino va inoltre estesa da una classe Diplomatico i cui oggetti rappresentano appartenenti a corpi diplomatici. Oltre ai parametri che caratterizzano un cittadino, un diplomatico deve possedere l anno (tipo ) in cui ha preso servizio presso il corpo di appartenenza. La classe Diplomatico, oltre ovviamente al costruttore, deve anche avere: i metodi tostring, equals, getanno dall ovvio significato; un metodo public boolean piuvecchio( Diplomatico d ) che restituisce true se la presa di servizio del diplomatico che invoca il metodo è anteriore a quella del diplomatico passato come argomento, false altrimenti. class C i t t a d i n o { private S t r i n g nome, cognome, c i t t, c f ; public C i t t a d i n o ( S t r i n g n, S t r i n g c, S t r i n g ct, S t r i n g cd ) { nome = n ; cognome = c ; c i t t = c t ; c f = cd ; public C i t t a d i n o ( S t r i n g n, S t r i n g c, S t r i n g cd ) { this ( n, c, "Italia", cd ) ; public S t r i n g getnome ( ) { return nome ; // in modo analogo s i r e a l i z z a n o g l i a l t r i metodi g e t public void s e t C i t t ( S t r i n g ct ) { c i t t = c t ; public S t r i n g t o S t r i n g ( ) { return nome+" "+cognome+" "+c i t t+" "+c f ; public boolean e q u a l s ( Object o ) { i f ( o instanceof C i t t a i n o ) { C i t t a d i n o c = ( C i t t a d i n o ) o ; return nome. e q u a l s ( c. nome) && cognome. e q u a l s ( c. cognome ) && c i t t. e q u a l s ( c. c i t t ) && cd. e q u a l s ( c. cd ) ; return f a l s e ; La specifica della classe Diplomatico è alla pagina seguente 5

class Diplomatico extends C i t t a d i n o { private anno ; public Diplomatico ( S t r i n g n, S t r i n g c, S t r i n g ct, S t r i n g cd, a ) { super ( n, c, ct, cd ) ; anno = a ; public S t r i n g t o S t r i n g ( ) { return super. t o S t r i n g ()+" "+anno ; public boolean e q u a l s ( Object o ) { i f ( o instanceof Diplomatico ) { Diplomatico d = ( Diplomatico ) o ; return super. e q u a l s ( d ) && anno == d. anno ; return f a l s e ; 6

8. Sfruttando la gerarchia all esercizio precedente, scrivete un programma (è sufficiente il corpo del main) che operi come segue: legga un ero positivo che rappresenta la dimensione di un array A entro cui inserire cittadini; riempia tale array con cittadini o diplomatici chiesti all utente; stampi il diplomatico con la più vecchia presa di servizio (se non sono stati inseriti diplomatici, il programma deve dare opportuna comunicazione); stampi il numero di cittadini non diplomatici la cui cittadinanza è identica a quella del primo elemento inserito in A. C i t t a d i n o [ ] A = new C i t t a d i n o [ i n. r e a d I n t ( "Quanti: " ) ] ; t, annomin = 1; S t r i n g a, b, c, d ; for ( i = 0 ; i < A. l e n g t h ; i++ ) { a = i n. readline ( "Nome: " ) ; b = i n. readline ( " Cognome : " ) ; c = i n. readline ( " Cittadinanza : " ) ; d = i n. readline ( "Codice Fiscale : " ) ; i f ( i n. readsino ( " Diplomatico (s/n)? " ) ) { t = i n. r e a d I n t ( "Anno:" ) ; i f ( annomin == 1 t < annomin ) annomin = t ; A[ i ] = new Diplomatico ( a, b, c, d, t ) ; A[ i ] = new C i t t a d i n o ( a, b, c, d ) ; i f ( annomin == 1 ) out. p r i n t l n ( "Non sono stati inseriti diplomatici " ) ; for ( i = 0 ; i < A. l e n g t h ; i++ ) i f ( A[ i ] instanceof Diplomatico && ( ( Diplomatico ) A[ i ] ). getanno ( ) == annomin ) out. p r i n t l n ( A[ i ] ) ; t = 0 ; for ( i = 0 ; i < A. l e n g t h ; i++ ) i f (! (A[ i ] instanceof Diplomatico ) && A[ i ]. g e t C i t t ( ) == A [ 1 ]. g e t C i t t ( ) ) t++; out. p r i n t l n ( t ) ; 7