Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 29 Αυγούστου 2011

Σχετικά έγγραφα
Week 7: Java Collection Classes

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

(C) 2010 Pearson Education, Inc. All rights reserved.

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Δομές Δεδομένων & Αλγόριθμοι

EE512: Error Control Coding

Week. 6: Java Collections

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Βασικές Έννοιες Δοµών Δεδοµένων

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

The Simply Typed Lambda Calculus

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

Wrapper Classes, Abstract Classes and Interfaces

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

DESIGN OF MACHINERY SOLUTION MANUAL h in h 4 0.

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

public class ArrayStack implements Stack {

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

ΗΥ252 Πρόοδος 3 εκεµβρίου 2011 Σελίδα 1 από 8. Βασίλης Χριστοφίδης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Approximation of distance between locations on earth given by latitude and longitude

Section 8.3 Trigonometric Equations

Homework 3 Solutions

Αντικειμενοστρεφής Προγραμματισμός

(Διαφάνειες Νίκου Βιδάκη)

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικειμενοστρεφής Προγραμματισμός

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

derivation of the Laplacian from rectangular to spherical coordinates

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Γενικοί Τύποι. 13 Ιανουαρίου 2011 Αντικειμενοστρεφής Προγραμματισμός στη Java 32

2 Composition. Invertible Mappings

CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

Διδάσκων: Παναγιώτης Ανδρέου

Αντικειµενοστρεφής Προγραµµατισµός

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

ω ω ω ω ω ω+2 ω ω+2 + ω ω ω ω+2 + ω ω+1 ω ω+2 2 ω ω ω ω ω ω ω ω+1 ω ω2 ω ω2 + ω ω ω2 + ω ω ω ω2 + ω ω+1 ω ω2 + ω ω+1 + ω ω ω ω2 + ω

Βασικά της γλώσσας JAVA

Block Ciphers Modes. Ramki Thurimella

Instruction Execution Times

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

C.S. 430 Assignment 6, Sample Solutions

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

ANSWERSHEET (TOPIC = DIFFERENTIAL CALCULUS) COLLECTION #2. h 0 h h 0 h h 0 ( ) g k = g 0 + g 1 + g g 2009 =?

Προγραμματισμός ΙΙ (Java) 3. Διαχείριση πολλαπλών αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

Finite Field Problems: Solutions

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

The challenges of non-stable predicates

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

public class ArrayQueue implements Queue {

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Τµήµα Πληροφορικής. Υλοποίηση LRU Cache ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ - ΕΡΓΑΣΙΑ 4. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Γενικά περί Caching

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Inverse trigonometric functions & General Solution of Trigonometric Equations

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 29 Αυγούστου 2011 Θέμα 1 Θέμα 2 Θέμα 3 Θέμα 4 Θέμα 5 Θέμα 6 Θέμα 7 Σύνολο /15 /10 /20 /20 /10 /20 /10 /105 Ονοµατεπώνυµο: Αριθµός Μητρώου: Άσκηση 1 (15 µονάδες) // Κατανόηση κώδικα Java Υποδείξτε την σωστή απάντηση στα παρακάτω υποερωτήµατα από την λίστα των απαντήσεων που σας δίνεται. Κάθε σωστή απάντηση βαθµολογείται µε πέντε (5) µονάδες, µια ερώτηση χωρίς απάντηση παίρνει µηδέν (0) µονάδες ενώ για κάθε λάθος απάντηση επιβαρύνεστε µε δύο (2) µονάδες. α) Ποια είναι η τιµή της στατικής µεταβλητής x µετά από την δηµιουργία ενός δεύτερου αντικειµένου της κλάσης XX; class XX { static { x+=2; static int x=-1; public XX() { x*=3; A. 3 B. 18 C. -9 D. 9 E. Κανένα από τα παραπάνω D. 9 β) Τι θα τυπωθεί στην στάνταρ έξοδο µετά την εκτέλεση του παρακάτω προγράµµατος Java; class X { int xpto() {return 5; class Y extends X { int xpto(){return 10; void test(){ X x = (X) this; System.out.print(this.xpto()); System.out.print(x.xpto()); System.out.print(((X)this).xpto()); System.out.print(super.xpto()); public static void main(string[] args){

new Y().test(); A. 5 5 5 10 B. 10 10 10 5 C. 10 10 5 5 D. 10 5 5 10 E. Κανένα από τα παραπάνω B. 10 10 10 5 γ) Τι θα τυπωθεί στην στάνταρ έξοδο µετά την κλήση της µεθόδου foo(); public static void foo(){ try { System.out.print(1); return; catch (Throwable e) { System.out.print(2); finally { System.out.print(3); A. 12 B. 123 C. 13 D. 1 E. Κανένα από τα παραπάνω C. 13 Άσκηση 2 (7+3 µονάδες) //Χειρισµός Εισόδου/Εξόδου& Συµβολοσειρών Συµπληρώστε την υλοποίηση της παρακάτω µεθόδου η οποία διαβάζει µια ροή εισόδου BufferedReader (ή εναλλακτικά Scanner) και εκτυπώνει στην στάνταρ έξοδο όλες τις γραµµές του αρχείου εισόδου που αρχίζουν µε µια δοσµένη συµβολοσειρά. Για παράδειγµα, εάν το αρχείο εισόδου περιέχει τις παρακάτω γραµµές: GOOD: Ice cream BAD: Flat tire GOOD: Winning the lottery is NOT BAD BAD Out of gas Bad is not the same as BAD Η εκτέλεση της µεθόδου printlinesstartingwith(f, BAD ) θα εκτυπώσει: BAD: Flat tire BAD Out of gas Η υλοποίηση σας θα πρέπει να βασιστεί στην αναζήτηση και τον χειρισµό συµβολοσειρών που προσφέρει η κλάση String. Μπορείτε να χρησιµοποιήσετε µεθόδους σαν την startswith(), substring() και indexof(). Ένας απλός βρόγχος που συγκρίνει ατοµικούς χαρακτήρες δεν συνιστά πλήρη απάντηση. Ο σωστός χειρισµός των εξαιρέσεων θα βαθµολογηθεί µε τρεις (3) επιπλέον µονάδες.

Print on System.out all of the lines from file in * that begin with str. * @param in the input file * @param str the string we are looking for at the start * of each input line void printlinesstartingwith(bufferedreader in, String str) { try { String line = in.readline(); while (line!= null) { if (line.startswith(str)) { System.out.println(line); line = in.readline(); catch (IOException e) { Two other ways to check for whether str appears at the beginning of the line is 1) if (line.indexof(str) == 0) 2) if (line.length() >= str.length() && line.substring(0, str.length()).equals(str))... Note: in real code it is a bad idea to catch an exception and do nothing, as in the above code. For the test it s enough that you demonstrated that you understood how to use a try-catch block to handle an exception. Άσκηση 3 (20 µονάδες) // Χειρισµός Πινάκων Υλοποιήστε µια µέθοδο double getaveragedropfourlowest (double [] grade) που υπολογίζει τον µέσο όρο ενός πίνακα (array) βαθµών, αφού πρώτα απαλειφούν οι τέσσερεις (4) µικρότερες βαθµολογίες. Για κάτι τέτοιο, θα πρέπει επίσης να υλοποιήσετε µια βοηθητική µέθοδο double[] dropmin(double [] grade) η οποία υπολογίζει και διαγράφει την ελάχιστη τιµή του πίνακα που δίνεται σαν όρισµα. Για παράδειγµα, µετά την ακόλουθη κλήση της µεθόδου ο επιστρεφόµενος µέσος όρος θα είναι 90.0: double[] grade = {100,0,0,0,5,80,90; grade = getaveragedropfourlowest(grade); Σηµείωση: Υποθέστε ότι ο πίνακας που δίνουµε σαν όρισµα της µεθόδου έχει τουλάχιστον πέντε βαθµούς (grades.length >= 5). Returns the average after dropping the lowest * 4 grades. public double getaveragedropfourlowest (double [] grades){ grades =dropmin(grades); grades =dropmin(grades); grades =dropmin(grades); grades =dropmin(grades);

double sum = 0; for (double i : grades){ sum += i; return sum / grades.length; // 8 points Returns an array identical to grades but * without the lowest number in grades dropped. * if there are more than one minimum we only drop * the first one. * @param grades the array of grades * @return a new array of size 1 less than grades. public double[] dropmin(double[] grade) { double minval = grade[0]; int minvalindex = 0; for (int i = 1; i < grade.length; i++) { if (grade[i] < minval) { minval = grade[i]; minvalindex = i; double[] result = new double[grade.length - 1] // copy values until minvalindex for (int i = 0; i < minvalindex; i++) { result[i] = grade[i]; // copy values after minvalindex for (int i=minvalindex + 1; i < grade.length i++) { result[i-1] = grade[i]; return result; // 12 points Άσκηση 4 (20 µονάδες) Χειρισµός Πλαισίου Συλλογών Αντικειµένων Για κάθε µια από τις παρακάτω περιπτώσεις, γράψτε τον ακριβή τύπο της πιο αποδοτικής συλλογής δεδοµένων που χρειαζόµαστε για την αποθήκευση των δεδοµένων. Μπορείτε να χρησιµοποιήσετε οποιοδήποτε συνδυασµό των γενικών εκδόσεων (generic) των διεπαφών συλλογών Map, Set, και List. Χρησιµοποιήστε τους γενικούς τύπους που ταιριάζουν περισσότερο στα δεδοµένα (π.χ. Room, Card, Phone, κλπ.) του κάθε ερωτήµατος (π.χ. List<Artist>) καθώς και φωλιασµένους (nested) τύπους συλλογών (π.χ. List<Set<String>>). Μπορείτε να υποθέσετε ότι όλες οι κλάσεις που αναπαριστούν τα δεδοµένα (π.χ. Room, Card, Phone, κλπ.) κάθε ερωτήµατος είναι ήδη ορισµένες και ότι όλες υλοποιούν κατάλληλα τις µεθόδους equals() and hashcode() ώστε τα αντικείµενά τους να αποθηκεύονται σε σύνολα (Set) ή κλειδιά (key) απεικονίσεων (Map). Κάθε σωστή απάντηση βαθµολογείται µε πέντε (5) µονάδες, µια ερώτηση χωρίς απάντηση παίρνει µηδέν (0) µονάδες ενώ για κάθε λάθος απάντηση επιβαρύνεστε µε δύο (2) µονάδες.

α) Σε ένα ηλεκτρονικό παιχνίδι δράσης θέλουµε να αναπαραστήσουµε τα δωµάτια (Room) στα οποία οδηγεί κάθε δυνατή κατεύθυνση (που έχει τη µορφή συµβολοσειράς). ( ιευκρίνιση: Κάθε κατεύθυνση οδηγεί σε ένα το πολύ δωµάτιο) i. Map<Room, String> ii. Map<String, Set<Room>> iii.map<string, Room> iv.set<string> iii β) Σε ένα ηλεκτρονικό παιχνίδι πασιέντζας χρησιµοποιούµε δεκατρείς (13) στοίβες τραπουλόχαρτων (Card), κάθε µία από τις οποίες έχει τέσσερα (4) τραπουλόχαρτα. Η διάταξη των στοιβών καθώς και των τραπουλόχαρτων σε κάθε στοίβα είναι σηµαντική για το παιχνίδι. i. Set<Set<Card>> ii. Map<Card, List<Card>> iii.list<card> iv.list<list<card>> iv γ) Σε ένα ηλεκτρονικό βιβλίο διευθύνσεων µας ενδιαφέρει να βρίσκουµε γρήγορα τούς αριθµούς τηλεφώνων καθώς και τις αντίστοιχες διευθύνσεις (String) δίνοντας το ονοµατεπώνυµο του κατόχου τους (String). i. Map<Set<String>, Phone> ii. Map<String, Map<String, Phone> iii. Map<Phone, Map<String, String>> iv. Map<String, Map<Phone, String>> iv δ) Η αναζήτηση του ονόµατος ενός µουσικού κοµµατιού µε βάση την διάρκεια της εγγραφής του στον οπτικό δίσκο (CD) είναι µια λειτουργία που χρησιµοποιείται ευρέως από µουσικές εφαρµογές (πχ. itunes). Μοιάζει παράξενο αλλά η γνώση της διάρκειας εγγραφής µαζί µε την σειρά αποθήκευσης (πχ. <147 sec, 2>) όλων των κοµµατιών είναι αρκετή για την ταυτοποίηση σχεδόν οποιοιδήποτε CD! εδοµένων µάλιστα των διαφορετικών ονοµάτων του ίδιου κοµµατιού (πχ. για την εγχώρια ή διεθνή αγορά) ορισµένα CD καταγράφονται µε πολλαπλά ονόµατα. Υποδείξτε την δοµή εκείνη που για κάθε CD διατηρεί τον χρόνο και τη σειρά εκτέλεσης των τραγουδιών, καθώς και το σύνολο των διαφορετικών ονοµάτων που µπορεί να φέρει ένα τραγούδι, ενώ παράλληλα εξυπηρετεί τις ανάγκες αναζήτησης. i. Map<Integer, List<List<String>>> ii. Map<List<Integer>, Set<String>> iii. List<Map<Integer, String>> iv. Map<Integer, Map<Integer, String>> ii

Άσκηση 5 (10 µονάδες) // Βασική λειτουργικότητα Αντικειµένων Σας δίνεται η ακόλουθη (µη ολοκληρωµένη) δήλωση της κλάσης Record: public class Record implements Comparable<Record> { int i; String s; java.util.date d; long l; public int compareto(record other) {... Υλοποιήστε την µέθοδο σύγκρισης int compareto() της κλάσης έτσι ώστε αντικείµενα τύπου Record να µπορούν να χρησιµοποιηθούν σε διατεταγµένες συλλογές δεδοµένων στην Java (πχ. TreeSet). Η επιθυµητή διάταξη θα πρέπει να είναι αύξουσα λεξικογραφική µε βάση την σειρά ορισµού των πεδίων της κλάσης (δηλ. πρώτα το i, µετά το s, µετά το d, και τέλος το l). Σηµείωση: Θυµηθείτε ότι η µέθοδος compareto(other) πρέπει να επιστρέφει έναν αρνητικό ακέραιο, µηδέν, ή θετικό ακέραιο εάν το αντικείµενο this είναι µικρότερο, ίσο ή µεγαλύτερο από το other αντίστοιχα. public int compareto(record r) { if (i < r.i) return -1; if (i > r.i) return 1; int strcompare = s.compareto(r.s); if (strcompare!= 0) return strcompare; int datecompare = d.compareto(r.d); if (datecompare!= 0) return datecompare; if (l < r.l) return -1; if (l > r.l) return 1; return 0; Άσκηση 6 (20 µονάδες) // Αφαιρετικοί Τύποι εδοµένων Μας ενδιαφέρει ένας Αφαιρετικός Τύπος εδοµένων (ΑΤ ) που αναπαριστά έντρα των οποίων οι εσωτερικοί κόµβοι έχουν σαν ετικέτα (label) έναν ακέραιο αριθµό ενώ τα παιδιά τους συνιστούν µια λίστα υπο-δέντρων. Ως συνήθως, ένα φύλο του δέντρου είναι ένας κόµβος χωρίς παιδιά (δηλ. µόνο µε µια ετικέτα). Στην συνέχεια σας δίνεται η προδιαγραφή του ΑΤ έντρο (Tree) καθώς και του ΑΤ Λίστα (List) ακεραίων και ενδρικός Κόµβος (TreeNode) στους οποίους βασίζεται. Syntax: ADT List createlist: -> List //create an empty list add : List, Int -> List //add a new integer in the list ADT Tree createtree : Int, TreeNode -> Tree //create an elementary // tree with a integer label and a Tree //node (i.e. its list of sub-trees) getleaves : Tree -> List //get the integer labels of //all Tree leaves in a new list

addleaves : Tree, List -> List //add the integer labels //of all Tree leaves to the //list given as argument loop : TreeNode, List -> List //get the integer labels of //the sub-trees of a Tree Node //to the list given as argument treenode : Tree, TreeNode -> TreeNode //get the sub-trees //of a Tree to the Tree Node given as //argument (i.e. a list of sub-trees) ADT TreeNode emptynode: -> TreeNode//create an empty list of sub-trees Semantics: var T : Tree var I : Int var L : List var N : TreeNode getleaves(t) = addleaves(t, emptylist) addleaves(createtree(i, emptynode), L) = add(l, I) addleaves(createtree(i, N), L)=loop(N, L) if N!=emptynode loop(emptynode, L) = L loop(treenode(t, N), L) = loop(n, addleaves(t, L)) (α) (13 µονάδες) ώστε τις υλοποιητικές κλάσεις Java των ΑΤ έντρο (Tree) και ενδρικός Κόµβος (TreeNode) χρησιµοποιώντας ένα διάνυσµα ακεραίων (ArrayList<Integer>) για την υλοποίηση της λίστας των ετικετών ενός κόµβου και µιας συνδεδεµένης λίστας για την υλοποίηση της λίστας των υπο-δένδρων ενός δενδρικού κόµβου. Εκτός από τις µεθόδους κατασκευής των αντικειµένων των δύο κλάσεων, υλοποιήστε την µέθοδο getleaves() και την βοηθητική της addleaves(). εν απαιτείται η υλοποίηση των υπολοίπων µεθόδων της κλάσης Tree. import java.util.arraylist; * Trees with integer internal labels and lists of * subtrees. The {@link TreeNode list of subtrees * is implemented as a linked list. *@author <ahref="mailto:christop@csd.uoc.gr">vc</a> public class Tree { // attributes: 2 point private int value; //The internal label of the tree. private TreeNode subtrees; //A linked list of trees. * Creates a new <code>tree</code> instance. * @param i an <code>int</code> value * @param n a <code>treenode</code> value public Tree(int i, TreeNode n) { value = i; subtrees = n; // 1 point * Return a list of all the leaves in the tree. * A leaf is a tree with an empty list of subtrees. * @return an ArrayList containing all the leaves

* of the tree public ArrayList<Integer> getleaves() { // add all the leaves to the empty list return addleaves(new ArrayList<Integer>()); // 2 points * Add all the leaves of the tree to a given list * @param v the ArrayList to add the leaves to * @return the ArrayList with all the leaves added private ArrayList<Integer> addleaves(arraylist<integer> v) { // add all leaves to the ArrayList if (subtrees == null) { // then this tree is a leaf: add the internal label v.addelement(value); // otherwise, get the leaves from all the subtrees else { //used to traverse the linked list of subtrees TreeNode n = subtrees; while(n!=null){//not at the end of the list // so add the leaves from the current node n.thetree.addleaves(v); // move on to the next node n = n.next; // all leaves have been added to v return v; // 5 points * Minimal linked-list implementation of TreeNode. As * a linked list, a TreeNode is a node, whose fields store: *<ul> *<li>a Tree (the "value" at the node), and the </li> *<li> next TreeNode (a pointer to the next node in the list). </li> *</ul> class TreeNode { // attributes: 2 point private Tree thetree;//the tree at this node. private TreeNode next; // The next node. * Constructor: * tree to store at current node, and the remainder * of the list. TreeNode(Tree t, TreeNode n) { thetree = t; next = n; // 1 points

(β) (7 µονάδες) Σχολιάστε σύντοµα γιατί η υλοποίηση της addleaves() που δώσατε στο προηγούµενο ερώτηµα είναι σύµφωνη µε την σηµασιολογία της µεθόδου που προβλέπεται στην προδιαγραφή του ΑΤ Tree. The if-clause in addleaves() adds the internal label to the list if the Tree is a leaf (the subtrees field is null), which corresponds to the equation: addleaves(createtree(i, emptynode), L) = add(l, I) The else-clause implements the loop operation: var N : TreeNode addleaves(createtree(i, N), L) = loop(n, L) if N!=emptynode While the variable N is not null, the leaves of f.thetree are added to the ArrayList, corresponding to the equation loop(treenode(t, N), L) = loop(n, addleaves(t, L)) Finally, when N is null, the ArrayList is returned, corresponding to the equation loop(emptynode, L) = L Άσκηση 7 (10 µονάδες) // Θεωρία Αντικειµενοστρεφούς Προγραµµατισµού (α) (5 µονάδες) Τι είναι µια αφαιρετική κλάση (abstract class) και που είναι χρήσιµη; An abstract class is a class where some of the methods are declared abstract, with no method bodies. A subclass of an abstract class can fill in some of these abstract methods with concrete method bodies; if it fills in all of the abstract methods, then it is a concrete class and it can be instantiated using new. Abstract classes are used to declare methods that are common to a whole group of concrete classes but implemented differently by each one (this is similar to how interfaces are used) while also providing implementations of some methods that are shared among this whole group of classes. β) (5 µονάδες) Για ποιους λόγους θα χρησιµοποιούσατε µια διεπαφή Java (interface) στην σχεδίαση µιας ιεραρχίας κλάσεων; In general, the base class in a class hierarchy has two main purposes. First, it defines the common interface for using the set of classes. Second, because subclasses inherit methods, the base class is the proper place to implement code that will be common to all subclasses. Although the base class does specify the interface, it also includes implementation information that is of no interest to clients. The usual practice is to use a Java Interface to specify the interface, and then have the base class implement that interface. Client code is typically written to the Java Interface. This not only simplifies the task of writing client code, but the resulting code is more flexible because it will also work with different implementations of the Interface.

Constructor Summary Class ArrayList ArrayList() Constructs an empty list with an initial capacity of ten. ArrayList(Collection<? extends E> c) Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator. ArrayList(int initialcapacity) Constructs an empty list with the specified initial capacity. Method Summary boolean add(e e) Appends the specified element to the end of this list. void add(int index, E element) Inserts the specified element at the specified position in this list. boolean addall(collection<? extends E> c) Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's Iterator. boolean addall(int index, Collection<? extends E> c) Inserts all of the elements in the specified collection into this list, starting at the specified position. void clear() Removes all of the elements from this list. Object clone() Returns a shallow copy of this ArrayList instance. boolean contains(object o) Returns true if this list contains the specified element. void ensurecapacity(int mincapacity) Increases the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument. E get(int index) Returns the element at the specified position in this list. int indexof(object o) Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element. boolean isempty() Returns true if this list contains no elements. int lastindexof(object o) Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element. E remove(int index) Removes the element at the specified position in this list. boolean remove(object o) Removes the first occurrence of the specified element from this list, if it is present. protected void removerange(int fromindex, int toindex) Removes from this list all of the elements whose index is between fromindex, inclusive, and toindex, exclusive. E set(int index, E element) Replaces the element at the specified position in this list with the specified element. int size() Returns the number of elements in this list. Object[] toarray() Returns an array containing all of the elements in this list in proper sequence (from first to last element). <T> T[] toarray(t[] a) Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. void trimtosize() Trims the capacity of this ArrayList instance to be the list's current size.