ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 2 Σεπτεµβρίου 2005

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

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

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

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

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

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

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

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

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

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

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

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

The Simply Typed Lambda Calculus

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Section 8.3 Trigonometric Equations

Επαναληπτικό φύλλο εργασίας 07/04/2009

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

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

EE512: Error Control Coding

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Instruction Execution Times

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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

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

2 Composition. Invertible Mappings

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

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

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

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

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

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

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

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

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

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

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

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

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

ιαδικτυακές Εφαρµογές

The challenges of non-stable predicates

UNIVERSITY OF CAMBRIDGE INTERNATIONAL EXAMINATIONS International General Certificate of Secondary Education

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

8. Μέθοδοι (Methods)

Wrapper Classes, Abstract Classes and Interfaces

Strain gauge and rosettes

Advanced Subsidiary Unit 1: Understanding and Written Response

the total number of electrons passing through the lamp.

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

derivation of the Laplacian from rectangular to spherical coordinates

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Every set of first-order formulas is equivalent to an independent set

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

ΙΚΤΥΩΤΟ ΜΟΝΤΕΛΟ (Network Model) Μαθ. # 15

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

Potential Dividers. 46 minutes. 46 marks. Page 1 of 11

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

8. Το μοντέλο συμβάντων του AWT

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

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

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

Δυναμική μνήμη με πίνακες και λίστες

Nowhere-zero flows Let be a digraph, Abelian group. A Γ-circulation in is a mapping : such that, where, and : tail in X, head in

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

Homework 8 Model Solution Section

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

Lecture 2: Dirac notation and a review of linear algebra Read Sakurai chapter 1, Baym chatper 3

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

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

Week. 6: Java Collections

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

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

ΕΡΓΑΣΙΑ 4 - Αντικειμενοστραφής Υλοποίηση του Συστήματος Κατανομής Θέσεων σε Προγράμματα Σπουδών

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

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

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Transcript:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Ονοµατεπώνυµο: Αριθµός Μητρώου: Άσκηση 1 (10 µονάδες) Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 2 Σεπτεµβρίου 2005 Σας δίνονται οι παρακάτω δηλώσεις δύο διεπαφών (IK και IM) και τριών κλάσεων (A, B, και C) Java, οι οποίες υλοποιούν κάποιες από τις προηγούµενες διεπαφές: public interface IK abstract public void k(); public interface IM abstract public void m(); public class A implements IK, IM public void k() System.out.println("A:k"); public void m() System.out.println("A:m"); public class B implements IM public void k() System.out.println("B:k"); public void m() System.out.println("B:m"); public class C extends B implements IK public void k() System.out.println("C:k"); 1.1 (5 µονάδες) Ποιες από τις παρακάτω εντολές, που εµπλέκουν αναφορές σε διεπαφές (interface references), θεωρούνται σαν λάθη από τον µεταφραστή της Java (compile-time errors); Υπογραµµίστε τις λάθος εντολές και δικαιολογήστε σύντοµα την απάντησή σας. IK t; // interface reference t = new A(); t = new B(); t = new C(); t.k(); t.m(); To make use of interfaces, Java introduces interface references, which are like object references, except that an interface reference of type I is allowed to point to objects of any type C such that the class C implements the interface I. For example, the interface reference t of type IK (introduced above) is

allowed to point to an object of type A or C but not of type B, even though B happens to contain a method k(): IK t; t = new A(); // LEGAL t = new B(); // ILLEGAL t = new C(); // LEGAL t.k(); // LEGAL (regardless of dynamic type of t) t.m(); // ILLEGAL (regardless of dynamic type of t) 1.2 (5 µονάδες) Τι θα τυπωθεί µετά την εκτέλεση του παρακάτω κώδικα, που εµπλέκει κλήσεις σε µεθόδους διεπαφών (interface method call), όταν η µεταβλητή x==1; ικαιολογήστε σύντοµα την απάντησή σας. IK ik; // interface reference B b; // object reference if (x==1) b = new B(); ik = new A(); else b = new C(); ik = new C(); b.k(); // virtual method call ik.k(); // interface method call Compiling Java interfaces boils down to supporting a new kind of method call, named interface method call. This call is like the (non-static) virtual method call, except that the object on which you invoke a method comes from an interface reference, as opposed to an object reference. When x==1, the program outputs B:k A:k Άσκηση 2 (20 µονάδες) Η παρακάτω κλάση Pen φιλοδοξεί να ζωγραφίζει σε µια συσκευή (device) γραφικής παράστασης, χρησιµοποιώντας αυθαίρετο πλάτος και ύψος εικονοκυττάρων (pixel). Κάθε στιγµιότυπο της κλάσης χρησιµοποιεί ένα σηµείο (point) για να γνωρίζει την ακριβή της θέση στη συσκευή γραφικής παράστασης. Η κλάση PenDriver προορίζεται να χρησιµοποιεί την Pen, αλλά όταν εκτελέσουµε την κύρια µέθοδό της εκτυπώνεται µόνο "pen[030 ] @ (10.30)". Υπάρχουν τουλάχιστον τέσσερα λογικά λάθη στον ακόλουθο κώδικα. Βάλτε σε έναν κύκλο τις λάθος εντολές και προτείνετε κατάλληλες διορθώσεις τους. /** Represents a point in the graphical plane. */ public class Point int x; int y; /** Default constructor. */ Point(int x, int y) this.x = x; this.y = y;

public String tostring () return "(" + x + "," + y + ")"; /**Represents a pen that has width&height in pixels.*/ public class Pen extends Point static int width; /** Each pen knows its width. */ static int height; /** Each pen knows its height. */ Point loc; /** Each pen knows its location. */ /** Constructor is given initial (w,h) values. */ public Pen(int w, int h) super (w,h); /* Return string for object, like "pen[3x7] @ point (10,30)" */ public String tostring() return "pen[" + width + x + height + "] @ "+loc; public class PenDriver public static void main(string[] args) /** Construct Pen to be 3x7 @ point (10,30) */ Pen p = new Pen (3,7); p.loc = new Point (10,30); System.out.println (p); 1. [8 points] In Pen class, the use of 'static' with width and height is inappropriate. This would enforce all Pen objects to have the same width and height, and the intent of the programmer is clearly to have this information associated with each Pen object. 2. [4 points] If Pen extends Point, then it shouldn't have a loc field, since this information would be inherited as (x,y) from Point 3. [4 points] If Pen extends Point, then the constructor taking (w,h) should not simply call super; rather, it should set width and height as appropriate. 4. [4 points] In the Pen class, the tostring() implementation has variable x referenced when it should be the string "x" or the character 'x'. The only reason this code works is because (miraculously) the Pen class inherits instance variable 'x' from Point. Άσκηση 3 (10 µονάδες) H Java ορίζει την διεπαφή Comparable ως ακολούθως: interface Comparable int compareto(object); όπου η κλήση x.compareto(y) πρέπει να επιστρέφει -1 εάν το x είναι µικρότερο από το y, 0 εάν είναι ίσα και 1 στην αντίθετη περίπτωση. Ορίστε την κλάση MyArray, που υλοποιεί την διεπαφή Comparable, της οποίας τα αντικείµενα συµπεριφέρονται σαν πίνακες ακεραίων. Τα στιγµιότυπα της MyArray θα πρέπει να συγκρίνονται χρησιµοποιώντας το άθροισµα των στοιχείων τους. Για παράδειγµα:

//create an array and initialize the elements int[] a = new int[] 1,2,3,4; int[] b = new int[] -1,2,-3,4,-5; //the elements of m1 are those of a MyArray m1 = new MyArray(a); //the elements of m2 are those of b MyArray m2 = new MyArray(b); //prints 1, since 1+2+3+4 > -1+2-3+4-5 System.out.println(m1.compareTo(m2)); Υλοποιήστε την µέθοδο compareto() της κλάσης MyArray, έτσι ώστε ο παραπάνω κώδικας να δουλεύει σωστά. class MyArray implements Comparable private int[] a; MyArray(int[] b) a = b; public int compareto(object o) MyArray other = (MyArray) o; int mysum = 0; int othersum = 0; for(int i=0; i<a.length;i++) mysum = mysum + a[i]; for(int i=0; i<other.a.length;i++) othersum = othersum + other.a[i]; if (mysum < othersum) return -1; else if (mysum == othersum) return 0; else return 1; Άσκηση 4 (25 µονάδες) Μια ταξινοµηµένη ακολουθία αγγλικών λέξεων πρόκειται να υποβληθεί σε επεξεργασία από ένα πρόγραµµα Java. Το πρόγραµµα θα πρέπει να υποστηρίζει διάφορες λειτουργίες, όπως η ανάκτηση µιας λέξης από µια συγκεκριµένη θέση της ακολουθίας, η αφαίρεση µια λέξης και προσθήκη µιας νέας λέξης. Σε κάθε λειτουργία η ακολουθία θα πρέπει να διατηρείται πάντα ταξινοµηµένη. 4.1 (8 µονάδες) Χρησιµοποιώντας κατάλληλα γραφήµατα, εξηγήστε πώς ένας πίνακας µια συνδεδεµένη λίστα θα µπορούσαν να χρησιµοποιηθούν ως δοµή δεδοµένων για να αποθηκεύσουν µια ταξινοµηµένη ακολουθία λέξεων. The following illustration shows how the sequence of words (cat, dog, emu, frog, llama, pig, tiger) would be stored using an array data structure.

Using a linked list data structure instead. 4.2 (9 µονάδες) Συγκρίνετε την αποδοτικότητα των δύο προηγούµενων υλοποιήσεων µιας ταξινοµηµένης ακολουθίας αγγλικών λέξεων, σχετικά µε τις λειτουργίες που ανακτούν, που αφαιρούν και που προσθέτουν µια λέξη. Operation Array Structure Linked List Structure Retrieve word at given position Most efficient O(1) operation, since direct access structure Remove a word Add a word Least efficient O(n) operation, since words above the one removed must be shifted down Least efficient O(n) operation, since words above the one inserted must be shifted up Least efficient O(n) operation, since sequential access structure Most efficient, since although accessing the word may be O(n), the actual deletion is O(1), merely requiring the adjustment of one link Most efficient, since although accessing the position of the word may be O(n), the actual insertion is O(1), merely requiring the creation of a node and the adjustment of two links 4.3 (8 µονάδες) Για κάθε µια από τις προηγούµενες υλοποιήσεις, γράψτε τα τµήµατα του κώδικα της Java που απαιτούνται για να βρίσκουµε την θέση µιας δεδοµένης λέξης W σε µια ακολουθία, ή 1 εάν η λέξη δεν είναι εκεί (υποθέστε ότι η πρώτη λέξη βρίσκεται στην θέση 0). ηλώστε οποιεσδήποτε επιπλέον υποθέσεις κάνετε κατά την υλοποίησή σας. Σηµείωση: εν απαιτείται η πλήρη υλοποίηση των µεθόδων.

For the array representation, assuming name of array is a. int ordpos = -1; for (int i=0; i<size; i++) if (w.equals(a[i])) ordpos = i; break; For the linked list representation, assuming SLLNode has fields Object element and SLLNode succ. int ordpos = -1, count = 0; for (SLLNode n = first; n!=null; n = n.succ) if (w.equals(n.element)) ordpos = count; break; else count++; Άσκηση 5 (20 µονάδες) Πολλά παιχνίδια υπολογιστών χρησιµοποιούν ένα ζάρι (die) για να παράγουν έναν τυχαίο ακέραιο µεταξύ του 1 και του 6 συµπεριλαµβανοµένου. Ένα ζάρι είναι ουσιαστικά ένας κύβος, όπου στην κάθε επιφάνειά του εµφανίζεται ένας από τους πρώτους έξι ακέραιους αριθµούς. Όταν περιστρέφεται καταλήγει να στηριχτεί σε µία από αυτές τις επιφάνειες: ο αριθµός που εµφανίζεται στην πάνω επιφάνεια από αυτήν που στηρίζεται είναι το αποτέλεσµα µιας ζαριάς. 5.1 (10 µονάδες) ώστε το συµβόλαιο του ΑΤ Ζάρι (Die) µε τις υπογραφές, τις εκ των προτέρων και εκ των υστέρων συνθήκες κάθε λειτουργίας καθώς και τις αµετάβλητες συνθήκες (περιορίστε την προδιαγραφή σας µόνο σε εκείνες τις λειτουργίας που είναι απαραίτητες). For a die ADT we essentially need operations to create a new die, read the current value of the die, and throw the die. Optionally we may include a cheat operation, to set the die to a given value, but this is not necessary (and won t be included here). Specification Associated ADTs: Integer Operations: Create: Die Value: Die Integer Throw: Die Die Invariants: For every d, 0 Value(d) 6 For every d, Value(d) and Value(Throw(d)) must be independent 5.2 (10 µονάδες) Γράψτε µια κλάση Java, η οποία υλοποιεί το συµβόλαιο του ΑΤ Ζάρι (Die). Σηµείωση: Xρησιµοποιήστε την java.util.random.

// Implementation of a die ADT public class Die private int facevalue; private java.util.random randomsequence; public Die() // constructor randomsequence = new java.util.random(); facevalue = randomsequence.nextint(6) + 1; public int value() // returns face value return facevalue; public void throw() // throws this die facevalue = randomsequence.nextint(6) + 1; Άσκηση 6 (20 µονάδες) Ο κώδικας Java της άσκησης σκιαγραφεί την υλοποίηση ενός applet, που προορίζεται να εµφανίσει ένα χρονόµετρο (Stopwatch) χρησιµοποιώντας µια κλάση ρολόι (Clock), που χειρίζεται τις ώρες, τα λεπτά και τα δευτερόλεπτα. Το χρονόµετρο παρουσιάζει µια συµβολοσειρά της µορφής ώρες:λεπτά:δευτερόλεπτα στο applet στη θέση (10, 20). Το χρονόµετρο θα πρέπει να υλοποιεί την ακόλουθη συµπεριφορά: 1) Ο χρόνος πρέπει να ενηµερώνεται κάθε δευτερόλεπτο κατά την διάρκεια ενεργοποίησης του χρονοµέτρου. 2) Το χρονόµετρο θα πρέπει να ενεργοποιείται όταν το ποντίκι φεύγει από το applet. 3) Το χρονόµετρο θα πρέπει να απενεργοποιείται όταν το ποντίκι µπαίνει στο applet. 4) Το χρονόµετρο θα πρέπει να επαναρυθµίζεται στον χρόνο 00:00:00 όταν το ποντίκι πατιέται µέσα στο applet. Η κλάση Ρολόι καθορίζεται ως εξής: public class Clock // Private instance variables not shown // Creates a Clock initialized to 00:00:00 public Clock() // implementation not shown // Increases the time by a second, wrapping if necessary public void tick() // implementation not shown // Sets the clock to the time specified by hour, minutes, and seconds. public void set(int hours, int minutes, int seconds) // implementation not shown

//Returns the time as hours:minutes:seconds public String tostring() // implementation not shown Γράψτε τον απαραίτητο κώδικα των µεθόδων της κλάσης Stopwatch, ώστε το applet να συµπεριφέρεται όπως περιγράφτηκε προηγουµένως (συµπληρώστε µόνο το σώµα των µεθόδων που σας δίνονται στην συνέχεια). import java.awt.*; import java.applet.applet; import javax.swing.timer; import java.awt.event.*; public class Stopwatch extends Applet implements MouseListener, ActionListener Clock sw; // Holds the stopwatch object Timer timer; // A timer that should respond every second. public void init() sw = new Clock(); addmouselistener(this); timer = new Timer(DELAY, this); public void paint(graphics page) page.drawstring(sw.tostring(), 10, 20); public void actionperformed(actionevent event) sw.tick(); repaint(); public void mouseclicked(mouseevent event) sw.set(0, 0, 0); repaint(); public void mouseexited(mouseevent event) timer.start();

public void mouseentered(mouseevent event) timer.stop(); public void mousepressed(mouseevent event) public void mousereleased(mouseevent event)