University Logo

Università
di Padova

Diploma in Ingegneria Informatica
Corso di Fondamenti di Informatica 2
2 Moduli

A.A. 2001/2002

Versione 1.0 27/09/2001

Obiettivi ed esercizi di verifica


N.B. Le soluzioni in Java di alcuni degli esercizi di verifica si trovano nel package FI2.Examples.

Esercizi di verifica della settimana 1
Obiettivi:
Esercizi di verifica della settimana 2
Obiettivi:

Pagina principale Torna alla pagina principale


Esercizi settimana 1

Esercizio 1.1

Si progetti in UML un sistema di classi che descriva un anno di corso del diploma. Il sistema deve includere le seguenti entità:

Includere le relazioni che definiscono la frequenza di uno studente, l'insegnamento dei docenti, ipotizzando che un docente locale possa insegnare al massimo in due corsi, il materiale da sviluppare negli incontri-seminari, la valutazione degli studenti. Studiare i tipi di dati più opportuni per gli attributi.
Completare successivamente il progetto con alcuni metodi pubblici ragionevoli per il dominio del problema.
Trasformare il diagramma per passare all'implementazione Java e ricavare lo scheletro delle classi.

Esercizio 1.2

Realizzare una classe Bits che gestisce sequenze di 32 bit, singolarmente manipolabili, attraverso una rappresentazione interna con un valore intero. A tale scopo si implementino i seguenti metodi pubblici:

Esercizio 1.3

Definire una classe Square che memorizza quadrati di numeri interi. Prevedere nella classe:

Esercizio 1.4

Realizzare una classe Biglietto che rappresenta un biglietto di autobus urbano a tariffa unica. La classe include:

L'inizializzazione dei membri statici deve avvenire in un blocco statico. Definire successivamente la classe Carnet le cui istanze corrispondono ad un carnet di 10 biglietti venduti ad un prezzo scontato del 10%. Il carnet è memorizzato in un array interno alla classe. Definire i seguenti metodi:

Indice Torna all'indice


Esercizi settimana 2

Esercizio 2.1

Si realizzi la classe Cruci che rappresenta un cruciverba. La classe ha un costruttore che riceve i parametri n numero delle righe, m numero delle colonne, e un array di coppie di coordinate che rappresenta l'insieme delle caselle nere. Una coppia è rappresentata da un oggetto di classe Coppia, opportunamente definita. Cruci fornisce i seguenti servizi:

Esercizio 2.2

Si modifichi la classe Bits dell'esercizio 1.2 nella classe EBits in modo da renderla estendibile, e la si estenda con la classe SBits avente le seguenti caratteristiche:

Esercizio 2.3

Si definisca l'interfaccia SuFigura che rappresenta le azioni comuni su una figura geometrica, e precisamente i metodi:

Si definisca quindi una classe astratta Figura che implementa in parte SuFigura e che memorizza la posizione del centro della figura (oggetto di classe PointE) e realizza il solo metodo move.

Dalla classe Figura si derivino le classi Poligono e Cerchio. La classe Poligono memorizza il numero dei lati e i vertici, questi ultimi in un array di oggetti di classe PointE che esprimono le componenti cartesiane dei vettori che collegano il centro del poligono (un punto interno, mediano di una diagonale; si assuma il poligono convesso) e i vertici stessi; implementa inoltre tutti i metodi non ereditati (una versione semplificata show stampa su STDOUT le posizioni del centro e dei vertici) e il metodo perim che calcola il perimetro. La classe Cerchio memorizza il raggio del cerchio (il centro coincide con il centro geometrico) e implementa i metodi non ereditati (si noti che rot è in questo caso un'operazione nulla; una versione semplificata show stampa su STDOUT le posizioni del centro e il raggio) e i metodi perim che calcola il perimetro e area che calcola l'area.

Dalla classe Poligono si derivino le classi Rettangolo e Triangolo. La classe Rettangolo ridefinisce il metodo perim per tener conto dell'eguale lunghezza di due lati opposti, e implementa il metodo area. La classe Triangolo definisce il metodo area applicando la formula di Erone (area=sqrt(p*(p-a)*(p-b)*(p-c)) p semiperimetro).

Dalla classe Rettangolo si derivi la classe Quadrato che ridefinisce sia il metodo perim che area per tener conto della eguaglianza dei lati.

Esercizio 2.4

Si consideri la seguente interfaccia:

public interface FormattedOutput
{
    public String out(String format);
}
Il metodo out restituisce in una stringa una rappresentazione formattata del valore (principale) contenuto nell'oggetto che implementa l'interfaccia. La stringa format descrive le modalità di composizione della stringa di output secondo una convenzione derivata da quella utilizzata dalla funzione printf del linguaggio C e precisamente:

simbolo opzionale significato
- si allineamento a sinistra
numero si minimo numero di caratteri che forma la stringa di output:
se i caratteri significativi sono meno, vengono aggiunti spazi
a destra o a sinistra a seconda dell'allineamento
. [punto] si separa il numero precedente dal seguente
numero si nel caso di una stringa, è il massimo numero di caratteri da
rappresentare in output; nel caso di un numero, la precisione
(numero massimo di cifre per un intero, numero di decimali
per un floating point)
carattere di
conversione
no d intero decimale
o intero ottale: la stringa di output ha uno 0 iniziale obbligatorio
x intero esadecimale: la stringa di output ha un prefisso 0x obbligatorio
c singolo carattere
s stringa: o l'intera stringa oggetto oppure un suo prefisso lungo quanto la precisione, se specificata
f float rappresentato come [-]mmm.nnnn ove i decimali sono in numero pari alla precisione (6 se non indicata); per i complessi il formato è valido per ciascuna delle due componenenti ovvero [-]mmm.nnnn±mmm.nnnnj
e floating rappresentato come [-]m.nnnnnne[±]xx (decimali come sopra)

Tenendo presente che le classi wrapper di Java non sono estendibili, definire, con i metodi strettamente necessari, le seguenti classi wrapper che implementano l'interfaccia FormattedOutput:

In ciascuna classe il metodo out deve sollevare un'eccezione se la stringa di formato è illegale.

Definire infine infine la classe Format che implementa il metodo statico:

public static String out(String formatStr, FormattedOutput[] values);
che riceve nel parametro formatStr una stringa contenente sequenze di caratteri normali (compresi spazi) alternate a stringhe di formato precedute dal carattere speciale % (il carattere normale % viene rappresentato con %%). Ad esempio:
Il valore calcolato è: %3.5d (float=%e)
Nel parametro values il metodo riceve un array di oggetti FormattedOutput (cioè che implementano quell'interfaccia). Il metodo restituisce una stringa che è ricavata dalla stringa formatStr sostituendo nell'ordine ad ogni sottostringa di formato la stringa formattata prodotta dal metodo out applicato ai successivi oggetti dell'array values. Valutare cosa fare nel caso non vi sia una corrispondenza in numero tra sottostringhe di formato e oggetti nell'array (più strighe e meno oggetti, o viceversa). La classe Format contiene anche un metodo main di collaudo.

Indice Torna all'indice


Pagina principale Torna alla pagina principale