uniroma1
.E*Main.scala
.cognome.nome
. Sulle postazioni del laboratorio sarà /home/studente/Desktop/cognome.nome/
.cognome.nome.zip
(zip -r cognome.nome.zip cognome.nome/
).cognome.nome.zip
.Per maggiori informazioni fate riferimento al regolamento delle esercitazioni.
Si vuole verificare la proprietà di un albero binario che l’elemento contenuto in ogni suo nodo v
sia maggiore
o uguale all’elemento nella radice del sottoalbero sinistro di v
(se non vuoto)
e minore o uguale all’elemento nella radice del sottoalbero destro di v
(se non vuoto).
Scrivere un metodo treeTest
che, dato un albero binario con elementi interi,
restituisce true
se l’albero soddisfa la proprietà, e false
altrimenti.
Scrivere la soluzione nel file E1.scala
e usare il programma di prova E1Main.scala
.
Nota: Per estrarre informazioni sui sottoalberi si suggerisce di usare un match ... case
annidato in quello esterno.
Scrivere un metodo getModel
che, dato un intero n
, restituisce una lista di n
cerchi di cui l’i-esimo cerchio, per i=1..n
, ha x=y=r=0.5*i/n
, dove (x,y)
sono le coordinate del centro e r
è il raggio. L’origine degli assi è nell’angolo inferiore sinistro e il disegno è confinato in uno spazio quadrato di coordinate comprese tra 0.0
e 1.0
. Usare la classe case class Circle(x:Double, y:Double, r:Double) extends Shape
definita in Frame2D.scala
, dove x e y sono le coordinate del centro ed r il raggio.
Scrivere la soluzione nel file E2.scala
e compilarla insieme al modulo grafico Frame2D.scala
e al programma di prova E2Main.scala
.
Nota: su alcune versioni di Java recenti è necessario cambiare l’ultima riga di codice di Frame2D.scala
in
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
. Bisogna altresì importare WindowConstants
da javax.swing
.
Aggiungi alla classe DB
un metodo registiConFilm(p:Film=>Boolean):List[Regista]
che
estrae tutti i registi che hanno diretto almeno un film con la proprietà p
.
case class Film(id:Int, titolo:String, anno:Int)
case class Regista(id:Int, nome:String)
case class DirettoDa(idFilm:Int, idRegista:Int)
case class DB(film:List[Film], registi:List[Regista], regie:List[DirettoDa]) {
def registiConFilm(p:Film=>Boolean):List[Regista] = Nil // da completare...
}
Nota: Se ritenunto utile, è possibile aggiungere alla classe DB
variabili di istanza e metodi privati a piacere.
Scrivere la soluzione nel file E3.scala
e usare il programma di prova E3Main.scala
.
Scrivere un metodo isAnagramOf(a:String, b:String):Boolean
che verifica se a
è un anagramma di b
, cioè
a
può essere ottenuto come permutazione delle lettere di b
. Il test deve essere case sensitive.
Suggerimento: usare il metodo sorted
applicato alle stringhe.
Scrivere la soluzione nel file E4.scala
e usare il programma di prova E4Main.scala
.