Corso di Laurea Ingegneria Informatica
Fondamenti di Informatica
Prova Intermedia
Marzo 2011
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
1
Modalità della Prova Intermedia
 La Prova Intermedia di Fondamenti di Informatica è
costituita da tre parti
 la prima parte con domande a risposta chiusa
 la seconda e la terza parte con domande a risposta aperta
relative alla parte teorica del programma del corso ed
esercizi di programmazione
 Ciascuna delle parti ha inciso per 10/30 sulla
votazione finale
 La prova è stata superata (con almeno 18/30) se la
votazione riportata in ciascuna delle tre parti è
stata non inferiore a 6/10, ma comunque la
seconda e la terza parte sono state considerate se
e solo se la votazione della prima parte è risultata
non inferiore a 6/10
http://www.dia.uniroma3.it/~java/fondinf/
Presentazione Corso
2
Alcune statistiche
Durante il primo semestre gli studenti attivi
nel corso sono stati circa 290, tra
immatricolati e “ripetenti”
Gli ammessi alla Prova Intermedia circa 180
I presenti alla Prova circa 150
Gli studenti promossi sono stati circa 84
(poco più del 50% dei presenti)
http://www.dia.uniroma3.it/~java/fondinf/
Presentazione Corso
3
Domanda A4
Definire la classe Punto per istanziare oggetti che rappresentano punti sul piano
cartesiano, con opportuni costruttori e metodi d’istanza tra cui un metodo con
prototipo String toString() per la sua descrizione.
Definire la classe Rombo per istanziare
oggetti che rappresentano rombi sul piano
cartesiano con le diagonali parallele agli
assi cartesiani, con il punto vb vertice
basso, con il punto va vertice alto, con la
lunghezza diag1 della diagonale che non
passa per va e vb e con opportuni
costruttori e metodi d’istanza tra cui un
metodo
con
prototipo
boolean
equals(Rombo r) per la verifica di
uguaglianza.
Definire un metodo con prototipo boolean
VerificaQuadrato(Rombo r)
per
verificare se un rombo è un quadrato.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
4
Classe Punto . . .
class Punto{
// Ascissa del punto
private double x;
// Ordinata del punto
private double y;
// Costruttore della Classe Punto
public Punto(double x, double y){
this.x=x;
this.y=y;
}
// Restituisce la coordinata x del punto
public double getX(){
return x;
} // . . . Segue . . .
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
5
. . . Classe Punto
// . . . Segue . . .
// Restituisce la coordinata y del punto
public double getY(){
return y;}
// Verifica se questo punto è uguale al punto p
public boolean equals(Punto p){
// pre != null
return((this.getX()==p.getX())&&
(this.getY()==p.getY()) ); }
// Produce la descrizione testuale dell'oggetto
public String toString(){
return "( X= "+this.getX() +
", Y= " +this.getY()+")"; }}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
6
Classe Rombo . . .
class Rombo {
/*variabili d'istanza*/
/* Vertice in basso mediante variabile di tipo "Punto" */
private Punto vb;
/* Vertice in alto mediante variabile di tipo "Punto" */
private Punto va;
// Lunghezza della diagonale che non passa per va e vb
private double diag1;
/*Costruttore per creare un nuovo Rombo*/
public Rombo (Punto p1, Punto p2, double d){
this.va = p1;
this.vb = p2;
this.diag1 = d;}
… segue …
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
7
. . . Classe Rombo
// Restituisce il vertice in basso
public Punto getVb(){
return this.vb;}
// Restituisce il vertice in alto
public Punto getVa(){
return this.va;}
// Restituisce la lunghezza della diagonale
public double getDiagonale(){
return this.diag1;}
… segue …
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
8
. . . Classe Rombo
// Verifica se questo rombo è uguale al rombo r
public boolean equals(Rombo r){
// pre != null
return (this.getVa().equals(r.getVa()) &&
this.getVb().equals(r.getVb())
&&(this.getDiagonale()==r.getDiagonale())); }
// Calcola una descrizione testuale del Rombo
public String toString() {
return "Rombo con il punto vertice in basso di
coordinate " + this.getVb().toString() + "con il
vertice in alto di coordinate " +
this.getVa().toString() + "e la lunghezza della
diagonale che non passa per questi due vertici
uguale a " + this.getDiagonale(); }
} // end class
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
9
Classe applicazione VerificaQuadrato . .
class VerificaQuadrato{
public static void main(String[] args){
Punto p1,p2;
Rombo r;
//creo i punti del rombo r
p1 = new Punto(3,8);
p2 = new Punto(3,1);
r = new Rombo(p1,p2,7);
System.out.println("il rombo descritto da\n" +
r.toString() + "\ne' un quadrato? "+
verificaQuadrato(r));
}
public static boolean verificaQuadrato(Rombo r){
return r.getVa().getY()r.getVb().getY()==r.getDiagonale();
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
10
Domanda B4
Definire la classe Punto per istanziare oggetti che rappresentano punti sul piano
cartesiano, con opportuni costruttori e metodi d’istanza tra cui un metodo con
prototipo String toString() per la sua descrizione.
Definire la classe Parallelogramma per
istanziare
oggetti
che
rappresentano
parallelogrammi sul piano cartesiano con la
base parallela all’asse x, con i punti vbs
vertice in basso a sinistra, vad vertice in alto a
destra, con base lunghezza della base e con
opportuni costruttori e metodi d’istanza tra cui
un
metodo
con
prototipo
boolean
equals(Parallelogramma p) per la
verifica di uguaglianza.
Definire un metodo con prototipo boolean
VerificaRettangolo(Parallelogramma
p) per verificare se un parallelogramma è un
rettangolo.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
11
Classe Parallelogramma . . .
class Parallelogramma {
/*variabili d'istanza*/
/* Vertice in basso a sinistra mediante variabile di
tipo "Punto" */
private Punto vbs;
/* Vertice in alto a destra mediante variabile di tipo
"Punto" */
private Punto vad;
// Lunghezza della base del parallelogramma
private double base;
/*Costruttore per creare un nuovo quadrato*/
public Parallelogramma(Punto p1, Punto p2, double b){
this.vbs = p1;
this.vad = p2;
this.base = b;
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
12
. . . Classe Parallelogramma…
// Restituisce il vertice in basso a sinistra
public Punto getVbs(){
return this.vbs;}
// Restituisce il vertice in alto a destra
public Punto getVad(){
return this.vad;}
// Restituisce la lunghezza della base
public double getBase(){
return this.base;}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
13
. . . Classe Parallelogramma
// Verifica se questo quadrato è uguale al quadrato q
public boolean equals(Parallelogramma p){
// pre != null
return (this.getVbs().equals(p.getVbs()) &&
this.getVad().equals(p.getVad())
&&(this.getBase()==p.getBase())); }
// Calcola una descrizione testuale del Parallelogram
public String toString() {
return "Parallelogramma con il vertice in basso a
sinistra di coordinate " +
this.getVbs().toString() + "\n il vertice in alto
a destra di coordinate " +
this.getVad().toString() +"\n e la lunghezza
della base uguale a " + this.getBase(); }
} // end class
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
14
Classe applicazione VerificaQuadrato . . .
class VerificaQuadrato{
public static void main(String[] args){
Punto v1,v2;
Parallelogramma p;
//creo i punti del parallelogramma r
v1 = new Punto(6,3);
v2 = new Punto(3,1);
p = new Parallelogramma(v1,v2,5);
System.out.println("il parallelogramma descritto
da\n" + p.toString() + "\ne' un quadrato? "+
verificaQuadrato(p));
}
public static boolean
verificaQuadrato(Parallelogramma p){
return
p.getVbs().getX()+p.getBase()==p.getVad().getX();
}
15
} http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
Domanda A5 – 1
Scrivere un metodo che verifichi se una stringa,
non nulla e non vuota, sia una sequenza
costituita da tutti caratteri alternati lettera
maiuscola e lettera minuscola dell’alfabeto
inglese, a partire da un primo carattere lettera
maiuscola.
Nel commento iniziale del metodo proposto
indicare di che tipo di verifica si tratta.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
16
Risposta A5 – 1 . . .
/* Verifica universale */
public static boolean tutteAlternate(String s){
// pre: s non nulla e non vuota
int i;
boolean alternanza;
alternanza = true;
char primo,app;
// primo carattere della stringa
primo = s.charAt(0);
i = 1;
. . . Segue . . .
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
17
. . . Risposta A5 – 1 . . .
. . . Segue . . .
if (primo >=‘A' && primo <=‘Z') //e' una maiuscola
while (i<s.length() && alternanza){
app = s.charAt(i);
// gli indici dispari devono contenere minuscole
if (i%2==1)
if (!(app >=‘a' && app <= ‘z'))
alternanza = false;
// gli indici pari devono contenere maiuscole
if (i%2==0)
if (!(app >=‘A' && app <= ‘Z'))
alternanza = false;
i++;
}
else
alternanza = false;
return alternanza;
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
18
Domanda A5 – 2
Scrivere un metodo che verifichi se un array
non nullo e non vuoto di stringhe, non nulle e
non vuote, contenga almeno una stringa che
gode della proprieta’ di cui al precedente
metodo.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
19
Risposta A5 – 2
public static boolean almenoUnaTutteAletrnate(String[] a){
int i;
boolean trovata;
//true se ho trovato una stringa con lettere e cifre
/* verifica esistenziale */
trovata=false;
i = 0;
while (i<a.length && !trovata){
if(tutteAlternate(a[i]))
trovata = true;
i++;
}
return trovata;
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
20
Domanda B5 – 1
Scrivere un metodo che verifichi se una stringa,
non nulla e non vuota, sia una sequenza di
caratteri in cui sia presente almeno una coppia
di caratteri adiacenti.
Nel commento iniziale del metodo proposto
indicare di che tipo di verifica si tratta.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
21
Risposta B5 – 1 . . .
/* Verifica esistenziale */
public static boolean dueAdiacenti(String s){
// pre: s non nulla e non vuota
int i;
boolean adiacenti;
adiacenti = false;
char prec,succ;
// primo carattere della
//stringa
prec = s.charAt(0);
i = 1;
… segue …
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
22
… Risposta B5 – 1
while (i<s.length() && !adiacenti){
succ = s.charAt(i);
if (prec >='0' && prec <='9')
//se prec e' una cifra
if (succ>='0' && succ<='9')
//se anche succ e' una cifra
adiacenti = true;
prec=succ;
i++;
}
return adiacenti;
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
23
Domanda B5 – 2
Scrivere un metodo che verifichi se un array,
non nullo e non vuoto, di stringhe, non nulle e
non vuote, sia costituito da tutte stringhe che
godono della proprieta’ di cui al precedente
metodo.
Nel commento iniziale del metodo proposto
indicare di che tipo di verifica si tratta.
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
24
Risposta B5 – 2 . . .
/*verifica universale */
public static boolean tutteAdiacenti(String[] a){
int i;
boolean trovata;
trovata=true;
i = 0;
while (i<a.length && trovata){
if(!dueAdiacenti(a[i]))
trovata = false;
i++;
}
return trovata;
}
http://www.dia.uniroma3.it/~java/fondinf/
Prova Intermedia
25