Sei sulla pagina 1di 1

Corso di Laurea in Ingegneria Informatica (DM 270)

Programmazione orientata agli oggetti


Appello del 20-07-2009 Allievi Informatici
Cognome:

Nome:

Matricola:

Corso:

Durata:

3.5 ore

Esercizio 1. Sia n=9 il numero di bit di una rappresentazione di numeri interi per complementi a due. Specificare:
a) lintervallo di definizione degli interi ammessi
b) la rappresentazione dei numeri i1=114 e i2=231, i3=47
c) i dettagli delle operazioni i1+i2 e i2i3 specificando eventuali situazioni di trabocco.
Esercizio 2. Dato il numero reale r10=237.73 mostrare la corrispondente rappresentazione in bit del numero secondo il
formato IEEE 754 a singola precisione. Fornire inoltre la rappresentazione esadecimale della stringa di bit ottenuta.
Esercizio 3. Scrivere in assembler RASP un programma che legga da input un array A di 10 interi e visualizzi su output
rispettivamente il massimo ed il submassimo di A. Si consiglia di esprimere preliminarmente il programma in Java.
Esercizio 4. Su un file di tipo testo, diciamolo f1, sono presenti, uno per linea, numeri di targa automobilistici e numeri di
telefono. Un numero di targa consiste, come noto, da due lettere maiuscole seguite da tre cifre seguite da altre due
lettere maiuscole, mentre un numero di telefono costituito da un prefisso lungo al massimo tre cifre, quindi il carattere
spazio o e quindi il numero vero e proprio che pu essere lungo al massimo 7 cifre. Si deve scrivere un programma
Java che generi a partire da f1 due file di tipo testo, diciamoli f2 ed f3, di cui f2 destinato a contenere i soli numeri di
targa, f3 i soli numeri di telefono. Il programma deve far uso delle espressioni regolari.
Esercizio 5. Con riferimento ad una classe ListaConcatenata<T> che implementa una lista concatenata semplice a
puntatori espliciti mostrare due versioni, rispettivamente ricorsiva ed iterativa, del metodo void purge(T e) che elimina
dalla lista tutti i duplicati di e tranne uno.
Esercizio 6. Con riferimento ad una struttura dati del tipo albero binario di caratteri a puntatori espliciti, implementare
a) un metodo costruttore che riceve una stringa s e provvede a costruire lalbero, con la mediazione di un metodo privato
e ricorsivo Nodo build(String s), distribuendo i caratteri di s sui nodi dellalbero con tecnica logaritmica. Si divide in due
parti s, diciamo s1 ed s2 le due parti, meno il carattere centrale x che diviene la radice dellalbero. La costruzione
continua distribuendo, ricorsivamente, sul sottoalbero sinistro i caratteri di s1 e sul sottoalbero destro i caratteri di s2,
sempre con la stessa tecnica
b) il metodo void visitaFrontiera() che visualizza su output il contenuto delle sole foglie dellalbero, rispettivamente da
sinistra a destra.
Esercizio 7. Si considerano polinomi a valore reale (double), con gradi interi non negativi e coefficienti interi, in due
variabili (reali) x ed y. Definire uninterfaccia Monomio comparabile e dotata (almeno) dei seguenti metodi: int getCoeff(),
int getGradoX(), int getGradoY(), Monomio add( Monomio m ), Monomio mul( Monomio m ), Monomio mul( int s ),
Monomio derivataX() derivata prima rispetto alla x, Monomio derivataY() derivata prima rispetto alla y. Il confronto tra
monomi quello usuale della matematica (grado x decrescente, grado y crescente).
Quindi sviluppare una classe MonomioXY che implementa Monomio e fornisca in pi i metodi equals(), hashCode()
e toString(). La classe MonomioXY deve sollevare quando richiesto eventuali eccezioni.
Successivamente progettare uninterfaccia Polinomio iterabile, che definisce i metodi fondamentali per elaborare
polinomi in due variabili, i cui monomi sono ordinati per grado x decrescente e grado y crescente. I metodi previsti sono:
void add(Monomio m) che aggiunge m al polinomio this, Polinomio add( Polinomio p ) che costruisce e ritorna il
polinomio somma tra this e p, Polinomio mul(Polinomio p) che costruisce e ritorna il polinomio prodotto tra this e p,
Polinomio mul(int s) che costruisce e ritorna il polinomio che si ottiene moltiplicando per lo scalare s tutti i monomi di this,
Polinomio derivataX(), Polinomio derivataY() che costruiscono e ritornano rispettivamente il polinomio derivata prima
rispetto alla x e alla y, double valore(double x, double y) che ritorna il valore del polinomio valutato nel punto x,y
specificato.
A partire dalla interfaccia Polinomio, sviluppare:
una classe astratta PolinomioAstratto che implementa Polinomio e concretizza quanti pi metodi possibile, tra
cui il metodo toString()
una classe concreta PolinomioConcatenato che estende PolinomioAstratto e memorizza i monomi su una lista
concatenata a puntatori espliciti
una classe concreta PolinomioMap che estende PolinomioAstratto e memorizza i monomi su una HashMap.
una classe Main col metodo main() che crea due polinomi e mostra su output i polinomi ottenuti applicando le
varie operazioni ammissibili.

Potrebbero piacerti anche