Μάθημα: Προγραμματισμός Η/Υ ΙI (Θεωρία) Εαρινό 2005-06 Εισηγητής: Παναγιώτης Αδαμίδης Δευτέρα 2 Οκτωβρίου 2006 Β Εξεταστική ΘΕΜΑ 1 (3 μονάδες) 1. Εξηγείστε γιατί συμφωνείτε ή διαφωνείτε με τις παρακάτω προτάσεις; «Δεν είναι δυνατό να υπερβούμε (override) μεθόδους static» «Μέθοδοι static δεν είναι δυνατό να δηλωθούν και ως final.»; «Οι τοπικές μεταβλητές δεν μπορούν να δηλωθούν final.» «Μία abstract τάξη δεν μπορεί να είναι και final.» 2. Εξηγείστε την έξοδο του παρακάτω προγράμματος: class Base { class Derived extends Base { public class Exam1_2 { public static void method(base b) { System.out.println("In the base method..."); public static void method(derived d) { System.out.println("In the derived method..."); public static void test(base b) { if (b instanceof Derived) System.out.print("Derived: "); else System.out.print("Base: "); method(b); public static void main(string args[]) { Base b = new Base(); Derived d = new Derived(); System.out.println("test calls."); test(b); test(d); 3. Αιτιολογείστε το αποτέλεσμα της μεταγλώττισης και εκτέλεσης του παρακάτω προγράμματος. Αν θεωρείτε ότι υπάρχουν λάθη μεταγλώττισης, προτείνετε διόρθωση των λαθών (όχι αφαίρεσή τους από τον κώδικα) και εξηγείστε την έξοδο. class Equipment { Equipment(){ public void meth(){system.out.println ("Some Equipment."); class ElecEquip extends Equipment { ElecEquip(){ public void meth() { System.out.println ("Electronic equipment."); class Computer extends ElecEquip{ Computer(){
public void meth() { System.out.println ("Data processing "); class Notebook extends Computer{ Notebook() { public void meth() { System.out.println ("Portable computer."); public class Exam1_3 { public static void main(string args[]){ Object obj = new Equipment (); Equipment eqp = new ElecEquip (); ElecEquip eleq = new Computer(); Computer comp = new Notebook(); eqp.meth(); eleq.meth(); comp.meth(); obj.meth(); obj=eqp; obj.meth(); eqp=comp; eqp.meth(); ΘΕΜΑ 2 (3 μονάδες) 1. Ταξινομήστε σε αύξουσα σειρά τον πίνακα: «10, 1, 19, 4, 8, 15, 7» με τις μεθόδους: bubble sort, ταξινόμηση με εισαγωγή (insertion sort), ταξινόμηση με επιλογή (selection sort), και γρήγορη ταξινόμηση (quicksort) εμφανίζοντας τους αριθμούς μετά από κάθε πέρασμα. Προσοχή: ΟΧΙ κώδικας 1.6μον. 2. Εξηγείστε την έξοδο του παρακάτω προγράμματος: class Exam2_2 { public static void main(string[] args) { ClassX obj1 = new ClassX(); ClassY obj2 = new ClassY(obj1); obj2.meth(2); class ClassX { public void meth(int x) { System.out.println(x+2); 1.4 μον. class ClassY { private ClassX xx; ClassY(ClassX who) { xx=who; public void meth(int x) { if (x < 5) { meth(++x); xx.meth(x); meth(++x); System.out.println(x);
ΘΕΜΑ 3 (4 μονάδες) Στο Παράρτημα δίνεται η περιγραφή της άσκησης της προηγούμενης εξεταστικής περιόδου, καθώς και μία ενδεικτική υλοποίηση των τάξεων Melos, Spoudastis, Dokimos και Taktikos. Προσθέστε την τάξη Epitimos η οποία περιγράφει ένα επίτημο μέλος. Το επίτημο μέλος δεν πληρώνει συνδρομή και λαμβάνει μόνο το επίσημο περιοδικό του συλλόγου. Ένα «επίτημο μέλος» δεν έχει δικαίωμα να ψηφίζει και να θέτει υποψηφιότητα σε όλες τις επιτροπές του συλλόγου. Να γραφεί πρόγραμμα διαχείρισης του Συλλόγου με μέγιστο αριθμό μελών 200. Θα πρέπει να δίνονται οι δυνατότητες: α) Εγγραφής ενός νέου μέλους: Το νέο μέλος μπορεί να ανήκει σε οποιαδήποτε κατηγορία. Προσοχή: Κατά την εισαγωγή των στοιχείων του νέου μέλους το ποσό της ετήσιας συνδρομής δεν δίνεται από το πληκτρολόγιο αλλά υπολογίζεται. Το έτος εγγραφής δίνεται από το πληκτρολόγιο. Με δεδομένο ότι ο Σύλλογος ιδρύθηκε το 1980, εάν δοθεί λανθασμένο έτος εγγραφής (πριν το 1980 ή μετά το 2006) τότε να προκαλείται η εξαίρεση IllegalArgumentException. β) Εμφάνιση των στοιχείων όλων των μελών: Για κάθε μέλος εμφανίζονται τα εξής: Όνομα (μεταβλητή), κατηγορία μέλους(κλάση), έτος εγγραφής (μεταβλητή), αριθμός ετών που είναι μέλος (μέθοδος), ποσό ετήσιας συνδρομής (μεταβλητή) όταν δεν είναι μηδενική. Επιπλέον για: o τα μέλη σπουδαστές, η σχολή η οποία φοιτούν o τα τακτικά μέλη, οι τίτλοι των 2 ακόμη περιοδικών που λαμβάνουν γ) Μεταβολής των στοιχείων ενός μέλους: Για όλα τα μέλη δίνεται η δυνατότητα μεταβολής των στοιχείων: Όνομα και Έτος Εγγραφής στο Σύλλογο. Ειδικότερα για τα μέλη σπουδαστές δίνεται και η δυνατότητα μεταβολής της σχολής φοίτησης ενώ για τα τακτικά μέλη δίνεται επίσης και η δυνατότητα μεταβολής των περιοδικών που λαμβάνουν. Αρχικά δίνεται το όνομα του μέλους του οποίου τα στοιχεία θα μεταβληθούν. Εάν το μέλος βρεθεί συνεχίζουμε με την μεταβολή των στοιχείων, αλλιώς εμφανίζεται το μήνυμα «Δεν υπάρχει μέλος με όνομα <ΟΝΟΜΑ>». Τα νέα στοιχεία εισάγονται από το πληκτρολόγιο. Η Διαχείριση θα πρέπει να γίνεται μέσω της χρήσης μενού, π.χ. ********Programma diaxeirisis Syllogoy******** 1.Eggrafi neou melous 2.Emfanisi stoixeiwn olwn twn melwn 3. Metaboli stoixeiwn enos melous 0.Exodos... ----------------------------------------------- Epilogi:_ Yπόοδειξη: Φτιάξτε μια τάξη "Syllogos" που έχει ένα πίνακα τύπου Melos και τουλάχιστον τις μεθόδους για την εισαγωγή νέου μέλους, εμφάνιση στοιχείων των μελών και μεταβολή των στοιχείων ενός μέλους. Διάρκεια εξέτασης: 2 ώρες Τα θέματα μπορείτε να τα πάρετε Κ Α Λ Η Ε Π Ι Τ Υ Χ Ι Α
Προγραμματισμός Η/Υ ΙΙ Εαρινό Εξάμηνο 2005-06 Β Εξεταστική ΠΑΡΑΡΤΗΜΑ Εκφώνηση 3 ου Θέματος, Α Εξεταστικής, Εαρ. 2005-06 Ένας επιστημονικός και επαγγελματικός σύλλογος προσφέρει στα μέλη του διάφορες υπηρεσίες. Ο Σύλλογος εκδίδει ένα επίσημο περιοδικό και ακόμη 5 περιοδικά σε εξειδικευμένες επιστημονικές περιοχές. Ο Σύλλογος έχει μέλη τα οποία ανήκουν στις παρακάτω κατηγορίες: α) Μέλος σπουδαστής, β) δόκιμο μέλος, και γ) τακτικό μέλος. Ένα «σπουδαστικό μέλος» πρέπει να είναι εγγεγραμμένο σε κάποιο πρόγραμμα σπουδών, πληρώνει συνδρομή 10, λαμβάνει το επίσημο περιοδικό του συλλόγου, αλλά δεν έχει δικαίωμα να ψηφίζει ή να θέτει υποψηφιότητα στις επιτροπές του συλλόγου. Το μέλος μπορεί να παραμείνει σε αυτή την κατηγορία για 8 έτη. Μετά θα πρέπει να γίνει δόκιμο μέλος ή να διαγραφεί. Ένα «δόκιμο μέλος» πρέπει να έχει πτυχίο ή σημαντική επαγγελματική εμπειρία σε κάποια από τα επιστημονικά πεδία του συλλόγου, πληρώνει το 50% της ετήσιας συνδρομής του τακτικού μέλους, λαμβάνει το επίσημο περιοδικό του συλλόγου, έχει δικαίωμα να ψηφίζει αλλά δεν μπορεί να θέτει υποψηφιότητα στις επιτροπές του συλλόγου. Μετά από 5 έτη παραμονής σε αυτή τη κατηγορία αιτείται την μετάβασή του στην επόμενη βαθμίδα του τακτικού μέλους. Ένα «τακτικό μέλος» έχει δικαίωμα να ψηφίζει και να θέτει υποψηφιότητα σε όλες τις επιτροπές του συλλόγου. Λαμβάνει το επίσημο περιοδικό του συλλόγου και ακόμη 2 περιοδικά από τα υπόλοιπα 5 περιοδικά του συλλόγου. Η ετήσια συνδρομή του υπολογίζεται ανάλογα με τα έτη που είναι μέλος του συλλόγου. Η βασική συνδρομή είναι 20. Για κάθε πλήρη διετία από τότε που έγινε τακτικό μέλος, η συνδρομή αυξάνεται κατά 2 σύμφωνα με τον τύπο: Συνδρομή = 20 + (Έτη/2) * 2 Προσοχή η συνδρομή για κάθε κατηγορία υπολογίζεται ή τίθεται μόνο με τον τρόπο που λέει η εκφώνηση. Να γραφεί πρόγραμμα διαχείρισης του Συλλόγου με μέγιστο αριθμό μελών 200. Θα πρέπει να δίνονται οι δυνατότητες: α) Εγγραφής ενός νέου μέλους: Το νέο μέλος μπορεί να ανήκει σε οποιαδήποτε κατηγορία. Προσοχή: Κατά την εισαγωγή των στοιχείων του νέου μέλους το ποσό της ετήσιας συνδρομής δεν δίνεται από το πληκτρολόγιο και το έτος έναρξης τίθεται επίσης αυτόματα και όχι από το πληκτρολόγιο. Την τιμή του τρέχοντος έτους μπορούμε να την πάρουμε με χρήση της κλάσης Calendar αφού δημιουργήσουμε ένα αντικείμενο (πχ το rightnow), ως εξής: Calendar rightnow = Calendar.getInstance(); int year = rightnow.get(calendar.year); β) Εμφάνιση των στοιχείων όλων των μελών: Για κάθε μέλος εμφανίζονται τα εξής: Όνομα (μεταβλητή), Κατηγορία μέλους(κλάση), Έτος εγγραφής (μεταβλητή), Αριθμός ετών που είναι μέλος (μέθοδος), Ποσό ετήσιας συνδρομής (μεταβλητή) Επιπλέον για: o τα μέλη σπουδαστές, η σχολή η οποία φοιτούν o τα τακτικά μέλη, οι τίτλοι των 2 ακόμη περιοδικών που λαμβάνουν
γ) Εμφάνιση μελών προς διαγραφή: Εμφανίζει τα μέλη (σπουδαστές και δόκιμα μέλη) τα οποία έχουν ξεπεράσει το χρονικό όριο παραμονής στην αντίστοιχη κατηγορία. Η Διαχείριση θα πρέπει να γίνεται μέσω της χρήσης μενού, π.χ. ********Programma diaxeirisis Syllogoy******** 1.Eggrafi neou melous 2.Emfanisi stoixeion olon ton melwn 3. Emfanisi stoixeiwn twn melwn pros diagrafi 0.Exodos... ----------------------------------------------- Epilogi:_ Επιπλέον υποδείξεις: 1. Φτιάξτε μια κλάση Melos με χαρακτηριστικά: Όνομα, Έτος Εγγραφής στο Σύλλογο, Ποσό ετήσιας συνδρομής. 2. Οι κλάσεις Spoudastis, Dokimos και Taktikos επεκτείνουν την κλάση Melos με νέα χαρακτηριστικά η/και μεθόδους όπου χρειάζονται. 2. Φτιάξτε μια τάξη "Syllogos" που έχει ένα πίνακα τύπου Melos και μεθόδους για την εισαγωγή νέου μέλους, εμφάνιση στοιχείων των μελών και εμφάνιση των στοιχείων των μελών προς διαγραφή. Ενδεικτική ανάπτυξη των τάξεων Melos, Spoudastis, Dokimos και Taktikos import java.io.*; import java.util.calendar; abstract class Melos { private String onoma; private int EE; private double syndromi; public String getonoma() { return onoma; public void setonoma(string n) { onoma = n; public int getee() { return EE; public void setee() { Calendar rightnow = Calendar.getInstance(); EE=rightNow.get(Calendar.YEAR); public int years() { Calendar rightnow = Calendar.getInstance(); int curyear = rightnow.get(calendar.year); return (curyear - EE); public void setee(int etos) { EE = etos; public double getsyndromi() { return syndromi; abstract public void setsyndromi(); Διάρκεια εξέτασης: 2 ώρες Τα θέματα μπορείτε να τα πάρετε Κ Α Λ Η Ε Π Ι Τ Υ Χ Ι Α
public void setsyndromi(double syn) { syndromi = syn; public Melos() { setsyndromi(); setee(); public Melos(String n, int etos) { onoma = n; EE = etos; public Melos(String n, int etos, double syn) { onoma = n; EE = etos; syndromi = syn; String s = "Onoma: " + onoma + "\tetos eggrafis: " + EE; s+="\tposo Syndromis: " + syndromi; // class Melos class Spoudastis extends Melos { private String sxoli; public String getsxoli() { return sxoli; public void setsxoli(string n) { sxoli = n; public void setsyndromi(){ setsyndromi(10); public Spoudastis() { public Spoudastis(String n, int etos, String sx) { super(n, etos); setsyndromi(10); sxoli = sx; String s = "Katigoria melous: Spoudastis\n"; s+=super.tostring(); s+="\nsxoli: " + sxoli; // class Spoudastis class Dokimos extends Melos { public void setsyndromi(){ int dieties = years()/2; double synd = 0.5*(20+dieties*2); setsyndromi(synd); String s = "Katigoria melous: Dokimos\n"; s+=super.tostring();
// class Dokimos class Taktikos extends Melos { private String journal1, journal2; public String getjournal1() { return journal1; public void setjournal1(string journal) { journal1 = journal; public String getjournal2() { return journal2; public void setjournal2(string journal) { journal2 = journal; public void setsyndromi(){ int dieties = years()/2; double synd = 20+dieties*2; setsyndromi(synd); public Taktikos() { public Taktikos(String n, int etos, String j1, String j2) { super(n, etos); journal1=j1; journal2=j2; String s = "Katigoria melous: Taktikos\n"; s+=super.tostring(); s+="\nperiodiko 1: " + journal1; s+="\tperiodiko 2: " + journal2; // class Taktikos Διάρκεια εξέτασης: 2 ώρες Τα θέματα μπορείτε να τα πάρετε Κ Α Λ Η Ε Π Ι Τ Υ Χ Ι Α