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