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

Σχετικά έγγραφα
ΕΠΛ131 Αρχές Προγραμματισμού

ΕΡΓΑΣΙΑ 4. Εκλογικό Σύστημα με Μεταφορά και Συσσώρευση Ψήφων. Ημερομηνία Ανάρτησης: 16/04/2018 Ημερομηνία Παράδοσης: 04/05/2018, 09:00

ΕΡΓΑΣΙΑ 3. Παίζοντας Sudoku. Ημερομηνία Ανάρτησης: 16/03/2018 Ημερομηνία Παράδοσης: 03/04/2018, 09:00

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Παίζοντας Τόμπολα. Ημερομηνία Ανάρτησης: 16/03/2017 Ημερομηνία Παράδοσης: 30/03/2017, 23:59

ΕΡΓΑΣΙΑ 1 Ημερομηνία Ανάρτησης: 02/02/2017 Ημερομηνία Παράδοσης: 16/02/2017, 09:00 π.μ. Στόχος Ορισμός

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

ΕΡΓΑΣΙΑ 2 - Παίζοντας Blackjack

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

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

ΕΠΛ131 Αρχές Προγραμματισμού

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

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

ΕΡΓΑΣΙΑ 4. Παίζοντας Κρεμάλα. Ημερομηνία Ανάρτησης: 30/03/2017 Ημερομηνία Παράδοσης: 27/04/2017, 23:59

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές ελέγχου ροής προγράμματος

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

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

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

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

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

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

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

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

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

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

ΕΠΛ131 Αρχές Προγραμματισμού Ι

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

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

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

Βασικά Στοιχεία της Java

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

Mεταβλητές (variables) και Σταθερές (constants)

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

API: Applications Programming Interface

Συλλογές, Στοίβες και Ουρές

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

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

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

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

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

Βασικά Στοιχεία της Java

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

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

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

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

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

B. Ενσωμάτωση Ιθαγενών Μεθόδων

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

ΕΠΛ131 Αρχές Προγραμματισμού

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

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

Στοιχειώδεις Δομές Δεδομένων

Τύποι δεδομένων, τελεστές, μεταβλητές

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

Transcript:

ΕΡΓΑΣΙΑ 4 - Αντικειμενοστραφής Υλοποίηση του Συστήματος Κατανομής Θέσεων σε Προγράμματα Σπουδών Ημερομηνία Ανάθεσης: 16/11/2017 Ημερομηνία Παράδοσης: 30/11/2017 (14 ημέρες) Τελευταία Ώρα Παράδοσης: 9:00 π.μ. Στόχος Στην προηγούμενη εργασία κατασκευάσατε ένα πρόγραμμα για την κατανομή θέσεων σε προγράμματα σπουδών. Για την τελευταία εργασία χρειάζεται να υλοποιήσετε ένα νέο, αντικειμενοστραφές πρόγραμμα για το ίδιο πρόβλημα, και να συγκρίνετε τις δύο προσεγγίσεις. Επισημαίνεται ότι η εργασία αυτή αποτελούσε ερώτηση στην τελική εξέταση του μαθήματος για το Εαρινό Εξάμηνο 2016/17. Όπως θα δείτε σε αυτή την εκδοχή του προγράμματος, τα στοιχεία εισόδου στο αρχείο κειμένου απεικονίζονται με διαφορετικό τρόπο από αυτό που χρησιμοποιήθηκε στην προηγούμενη εργασία. Σύμφωνα με την παρούσα αναπαράσταση, κάθε υποψήφιος επιλέγει ακριβώς πέντε προγράμματα σπουδών τα οποία κατατάσσει σε φθίνουσα σειρά προτίμησης. Κατ επέκταση πρέπει να υπάρχουν τουλάχιστο πέντε προγράμματα σπουδών. Περιγραφή Αντικειμενοστραφούς Συστήματος Κατανομής Θέσεων Οι εμπλεκόμενες κλάσεις είναι ο υποψήφιος (Candidate) και το πρόγραμμα σπουδών (Program) που ορίζονται μερικώς πιο κάτω. Για καλύτερη κατανόηση του όλου συστήματος σας δίνεται πλήρως υλοποιημένη η κλάση-πελάτης EntranceSystem που διευθύνει την εκτέλεση του όλου προγράμματος. Δεν χρειάζεται να αλλάξετε οτιδήποτε μέσα στο δοθέν αρχείο EntranceSystem.java. Ο δικός σας ρόλος είναι να συμπληρώσετε τον κώδικα των κλάσεων Candidate.java και Program.java. Πιο συγκεκριμένα θα πρέπει να υλοποιήσετε ΟΛΕΣ τις ζητούμενες (μη συμπληρωμένες) μεθόδους μέσα στις 2 κλάσεις αυτές. ΜΗΝ ΒΑΛΕΤΕ ΜΕ ΕΛΛΗΝΙΚΑ ΓΡΑΜΜΑΤΑ ΤΑ ΣΧΟΛΙΑ ΣΤΑ ΠΡΟΓΡΑΜΜΑΤΑ ΣΑΣ. Τα πιο κάτω σχόλια (στα ελληνικά) είναι για να ευκολύνουν την κατανόηση του κώδικα. Κλάση-πελάτης EntranceSystem public class EntranceSystem { public static void displaycandallocations(candidate[] cands) { System.out.print("\n\nCANDIDATE ALLOCATIONS\n"); for (int i = 0; i < cands.length; i++) System.out.println(cands[i]); System.out.print("\n\n"); public static void displayprogallocations(program[] progs) { System.out.print("\n\nPROGRAM ALLOCATIONS\n"); for (int i = 0; i < progs.length; i++) System.out.println(progs[i]); ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 1

System.out.print("\n\n"); public static void main(string[] args) { int P = StdIn.readInt(); // number of programs int C = StdIn.readInt(); // number of candidates Program[] progs = new Program[P]; Candidate[] cands = new Candidate[C]; // initialize program objects array for (int i = 0; i < P; i++) { String code = StdIn.readString(); int places = StdIn.readInt(); progs[i] = new Program(code, places, C); // initialize candidate objects array for (int i = 0; i < C; i++) { String Id = StdIn.readString(); double score = StdIn.readDouble(); String[] prefs = new String[5]; for (int j = 0; j < 5; j++) prefs[j] = StdIn.readString(); cands[i] = new Candidate(Id, score, prefs); for (int i = 0; i < C; i++) { cands[i].insertprefs(progs); boolean releasemade; do { releasemade = false; for (int i = 0; i < P; i++) { boolean res = progs[i].requestprefsrelease(progs); releasemade = releasemade res; while (releasemade); for (int i = 0; i < P; i++) progs[i].allocateplaces(); displaycandallocations(cands); displayprogallocations(progs); ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 2

Κλάση Candidate public class Candidate { // η ταυτότητα του υποψηφίου private String id; // ο βαθμός κατάταξής του private double score; // οι προτιμήσεις του υποψηφίου για πέντε προγράμματα σπουδών, // σε φθίνουσα σειρά προτίμησης η κάθε προτίμηση είναι ο // κωδικός του σχετικού προγράμματος σπουδών private String[] preferences; // ποιες προτιμήσεις του υποψηφίου είναι ενεργές // αρχικά είναι όλες ενεργές private boolean[] activeprefs = { true, true, true, true, true ; // αρχικά δεν του έχει δοθεί καμία θέση φοίτησης private boolean allocationmade = false; // όταν πάρει θέση φοίτησης καταχωρείται και ο // κωδικός του συγκεκριμένου προγράμματος private String studyplace; public Candidate(String identity, double s, String[] ps) { id = identity; score = s; preferences = ps; public String getid() { return id; public double getscore() { return score; public boolean hasallocation() { return allocationmade; // Κατανομή θέσης στον υποψήφιο στο πρόγραμμα με κωδικό prog public void makeallocation(string prog) { allocationmade = true; studyplace = prog; // η n-οστή προτίμηση public String getpreference(int n) { return preferences[n - 1]; ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 3

// Μετατροπή προτιμήσεων σε εκτυπώσιμη μορφή public String tostringprefs() { String s = "\ncandidate " + id + " has the following preferences:\n"; for (int i = 0; i < preferences.length; i++) { s = s + "\t>> Program " + preferences[i] + " is choice " + (i + 1) + "\n"; return s; // Μετατροπή υποψηφίου σε εκτυπώσιμη μορφή ΝΑ ΟΡΙΣΘΕΙ public String tostring(){.......... // Καταχώρηση υποψηφίου στον κατάλογο υποψηφίων (μέσω της // μεθόδου αναφοράς insertcandidate του αντικειμένου Program) // για κάθε πρόγραμμα το οποίο συνιστά μια από τις πέντε // προτιμήσεις του υποψηφίου. Το σύνολο των προγραμμάτων // δίνεται στην παράμετρο ps ΝΑ ΟΡΙΣΘΕΙ public void insertprefs (Program[] ps){........... // Το πρόγραμμα με κωδικό prog αποτελεί μια από τις // προτιμήσεις του υποψηφίου για την οποία εξασφαλίζει θέση. // Η εν λόγω θέση μπορεί μόνο να βελτιωθεί. Συνεπώς ο // υποψήφιος απενεργοποιεί την όποια ενεργή, χαμηλότερη, // προτίμησή του και αφαιρεί τον εαυτό του από τους // καταλόγους ενδιαφερόμενων υποψηφίων των σχετικών προγραμμάτων // (μέσω της μεθόδου removecandidate του αντικειμένου Program). // Το σύνολο των προγραμμάτων δίνεται στην παράμετρο ps. // Αν γίνει τουλάχιστο 1 τέτοια «αφαίρεση» του εν λόγω υποψηφίου // η μέθοδος επιστρέφει true, διαφορετικά επιστρέφει false // ΝΑ ΟΡΙΣΘΕΙ public boolean releaseprefsbelow(string prog, Program[] ps){............. ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 4

Κλάση Program public class Program { // ο κωδικός του προγράμματος σπουδών private String code; // ο αριθμός θέσεων φοίτησης στο πρόγραμμα private int places; // το πλήθος των ενδιαφερόμενων υποψηφίων αρχικά 0 private int count = 0; // ο κατάλογος των ενδιαφερόμενων // υποψηφίων για το πρόγραμμα ουσιαστικά οι θυρίδες από το // 0 μέχρι το count-1, ταξινομημένες σε φθίνουσα σειρά των // βαθμών κατάταξης των εν λόγω ενδιαφερόμενων υποψηφίων private Candidate[] cands; // πόσες θέσεις του προγράμματος σπουδών // παραμένουν ελεύθερες μετά την ολοκλήρωση της // κατανομής θέσεων σε όλα τα προγράμματα σπουδών private int freeplaces; public Program(String c, int ps, int cs) { code = c; places = ps; freeplaces = ps; cands = new Candidate[cs]; public String getcode() { return code; public int getplaces() { return places; public int getcount() { return count; public Candidate[] getcands() { return cands; public int getfreeplaces() { return freeplaces; private static int min(int x, int y) { if (x < y) ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 5

else ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ return x; return y; // Μετατροπή καταλόγου υποψηφίων σε εκτυπώσιμη μορφή public String tostringcands() { String s = "The ranked list of candidates is"; for (int i = 0; i < count; i++) { s = s + "\n>> " + cands[i]; return s; // Μετατροπή της κατανομής ενδιαφερόμενων υποψηφίων που πήραν // θέση στο πρόγραμμα σε εκτυπώσιμη μορφή public String tostringallocations() { String s = "The following candidates get a place on the programme"; for (int i = 0; i < min(places, count); i++) { s = s + "\n>> " + cands[i].getid() + " " + cands[i].getscore(); s = s + "\nthe programme has " + freeplaces + " free places"; return s; // Μετατροπή προγράμματος σε εκτυπώσιμη μορφή,όπου παρουσιάζονται // ο αριθμός των θέσεών του, οι υποψήφιοι που πήραν θέση στο // πρόγραμμα και πόσες ελεύθερες θέσεις έχουν μείνει ΝΑ ΟΡΙΣΘΕΙ public String tostring(){........... // Η μέθοδος allocateplaces κατανέμει τις θέσεις του προγράμματος // στους πρώτους σε σειρά ενδιαφερόμενους υποψηφίους (μέσω της // μεθόδου makeallocation του αντικειμένου Candidate) // ΝΑ ΟΡΙΣΘΕΙ public void allocateplaces(){........... // Καταχώρηση υποψηφίου c στον κατάλογο των ενδιαφερόμενων // υποψηφίων του προγράμματος, έτσι ώστε ο κατάλογος να είναι // ταξινομημένος σε φθίνουσα σειρά των βαθμών κατάταξης των // ενδιαφερόμενων υποψηφίων - ΝΑ ΟΡΙΣΘΕΙ public void insertcandidate(candidate c){............ ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 6

// Διαγραφή του υποψηφίου με ταυτότητα identity από τον κατάλογο // των ενδιαφερόμενων υποψηφίων του προγράμματος ΝΑ ΟΡΙΣΘΕΙ public void removecandidate(string identity){.............. // Το πρόγραμμα σπουδών ζητεί από τον κάθε υποψήφιο στον οποίο // διασφαλίζεται θέση φοίτησης στο εν λόγω πρόγραμμα (δηλαδή οι // ενδιαφερόμενοι υποψήφιοι που καταλαμβάνουν πρώτοι σε σειρά το // σχετικό αριθμό θέσεων φοίτησης) να «απελευθερώσει» (μέσω της // μεθόδου releaseprefsbelow του αντικειμένου Candidate)τυχόν // θέσεις χαμηλότερης προτίμησης που κρατεί σε άλλα προγράμματα // σπουδών. Το σύνολο των προγραμμάτων δίνεται στην παράμετρο ps. // Η τιμή εξόδου της μεθόδου επισημαίνει κατά πόσο έχει γίνει // τουλάχιστο μια «απελευθέρωση» θέσης ΝΑ ΟΡΙΣΘΕΙ public boolean requestprefsrelease(program[] ps){........... Παραδείγματα Εκτέλεσης Πιο κάτω φαίνεται το παράδειγμα εκτέλεσης του προγράμματος όταν τα δεδομένα εισόδου δίνονται με ανακατεύθυνση από το αρχείο Cands.txt που φαίνεται πιο κάτω. Αρχείο Cands.txt 7 31 P1 5 P2 4 P3 5 P4 4 P5 5 P6 5 P7 5 C1 16.25 P2 P5 P1 P6 P7 C2 20.0 P4 P5 P2 P7 P6 C3 18.36 P2 P5 P1 P4 P7 C4 19.56 P3 P4 P5 P1 P6 C5 15.78 P5 P2 P1 P3 P6 C6 12.78 P1 P2 P3 P4 P5 C7 15.76 P3 P1 P5 P2 P6 C8 17.50 P4 P5 P3 P7 P1 C9 15.67 P1 P3 P5 P7 P6 C10 19.12 P1 P3 P5 P4 P7 C11 15.45 P1 P2 P3 P4 P5 C12 16.34 P3 P2 P4 P5 P1 C13 19.67 P5 P4 P1 P3 P7 ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 7

C14 18.23 P3 P2 P4 P1 P6 C15 12.80 P1 P5 P3 P4 P7 C16 10.67 P1 P4 P2 P7 P6 C17 17.06 P6 P3 P5 P1 P4 C18 18.56 P7 P5 P2 P3 P1 C19 10.50 P5 P4 P6 P1 P2 C20 19.05 P5 P1 P2 P4 P3 C21 16.45 P4 P3 P2 P1 P6 C22 15.78 P4 P3 P6 P5 P1 C23 12.67 P5 P4 P2 P7 P1 C24 18.23 P3 P4 P2 P1 P5 C25 13.45 P6 P5 P7 P4 P1 C26 16.12 P4 P6 P5 P7 P1 C27 17.23 P4 P3 P5 P2 P1 C28 16.78 P5 P4 P3 P6 P2 C29 13.47 P2 P4 P1 P5 P7 C30 19.30 P1 P3 P5 P4 P6 C31 10.05 P1 P2 P3 P4 P5 $ java EntranceSystem < Cands.txt ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CANDIDATE ALLOCATIONS C1 with score 16.25 has been allocated a place on P2 C2 with score 20.0 has been allocated a place on P4 C3 with score 18.36 has been allocated a place on P2 C4 with score 19.56 has been allocated a place on P3 C5 with score 15.78 has been allocated a place on P5 C6 with score 12.78 has been allocated a place on P2 C7 with score 15.76 has been allocated a place on P1 C8 with score 17.5 has been allocated a place on P4 C9 with score 15.67 has been allocated a place on P1 C10 with score 19.12 has been allocated a place on P1 C11 with score 15.45 has been allocated a place on P1 C12 with score 16.34 has been allocated a place on P3 C13 with score 19.67 has been allocated a place on P5 C14 with score 18.23 has been allocated a place on P3 C15 with score 12.8 has been allocated a place on P5 C16 with score 10.67 has been allocated a place on P7 C17 with score 17.06 has been allocated a place on P6 C18 with score 18.56 has been allocated a place on P7 C19 with score 10.5 has been allocated a place on P6 C20 with score 19.05 has been allocated a place on P5 C21 with score 16.45 has been allocated a place on P4 C22 with score 15.78 has been allocated a place on P3 C23 with score 12.67 has been allocated a place on P7 C24 with score 18.23 has been allocated a place on P3 C25 with score 13.45 has been allocated a place on P6 C26 with score 16.12 has been allocated a place on P6 C27 with score 17.23 has been allocated a place on P4 C28 with score 16.78 has been allocated a place on P5 ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 8

C29 with score 13.47 has been allocated a place on P2 C30 with score 19.3 has been allocated a place on P1 C31 with score 10.05 has not been allocated a place PROGRAM ALLOCATIONS Program P1 has 5 places >> C30 19.3 >> C10 19.12 >> C7 15.76 >> C9 15.67 >> C11 15.45 The programme has 0 free places Program P2 has 4 places >> C3 18.36 >> C1 16.25 >> C29 13.47 >> C6 12.78 The programme has 0 free places Program P3 has 5 places >> C4 19.56 >> C24 18.23 >> C14 18.23 >> C12 16.34 >> C22 15.78 The programme has 0 free places Program P4 has 4 places >> C2 20.0 >> C8 17.5 >> C27 17.23 >> C21 16.45 The programme has 0 free places Program P5 has 5 places >> C13 19.67 >> C20 19.05 >> C28 16.78 >> C5 15.78 >> C15 12.8 The programme has 0 free places Program P6 has 5 places >> C17 17.06 >> C26 16.12 >> C25 13.45 >> C19 10.5 The programme has 1 free places ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 9

Program P7 has 5 places >> C18 18.56 >> C23 12.67 >> C16 10.67 The programme has 2 free places Παράδοση Όταν έχετε τελειώσει με τον πηγαίο κώδικα, μεταγλωττίστε το και βεβαιωθείτε ότι τρέχει σωστά. Δημιουργήστε μια λίστα δοκιμής με όνομα userid_erg4.txt όπου userid βάλτε το username που σας δόθηκε από το τμήμα, κάνοντας ένα τρέξιμο του προγράμματός σας με είσοδο το αρχείο Cands.txt που φαίνεται πιο πάνω. Ακολουθείστε τα πιο κάτω βήματα όταν υποβάλετε την άσκηση σας: 1. Δημιουργείστε ένα κατάλογο με το όνομά σας π.χ., PavlosAntoniou/ χωρίς να αφήνετε κενά στο όνομα του καταλόγου. 2. Βάλτε μέσα στον κατάλογο αυτό ΚΑΙ τα 2 java αρχεία της εργασίας που υλοποιήσατε εσείς (Program.java και Candidate.java) και τη λίστα δοκιμής (userid_erg4.txt) MONO. Δεν χρειάζεται να υποβάλετε το αρχείο EntranceSystem.java διότι σας δόθηκε εξ ολοκλήρου από εμάς και δεν πρέπει να αλλάξετε κάτι μέσα. Δεν χρειάζεται να υποβάλετε ούτε και το αρχείο Cands.txt. 3. Συμπιέστε (zip) τον κατάλογο (και όχι τα αρχεία ξεχωριστά) χρησιμοποιώντας από το terminal την εντολή zip -c PavlosAntoniou.zip PavlosAntoniou/* 4. Βεβαιωθείτε ότι κάνατε σωστά τα τρία προηγούμενα βήματα 5. Ανεβάστε ΜΟΝΟ το συμπιεσμένο αρχείο π.χ., PavlosAntoniou.zip Αν τα πιο πάνω βήματα δεν ακολουθηθούν ευλαβικά υπάρχει κίνδυνος αφαίρεσης βαθμών. Παραδώστε το αρχείο zip ηλεκτρονικά μέσω του submit assignment κάτω από το Ασκήσεις Εργασία 4 στην ιστοσελίδα του μαθήματος μέχρι τις 30/11/2017 και ώρα 09:00. Προσοχή: Το σύστημα ελέγχει το χρόνο παράδοσης εργασιών γι αυτό μην περιμένετε την τελευταία στιγμή να κάνετε submit την εργασία σας. Βαθμολογία Ένα πρόγραμμα για να πάρει όλες τις μονάδες είναι απαραίτητο να: χρησιμοποιεί σχόλια έχει ευθυγραμμισμένο κώδικας χρησιμοποιεί αυτό-επεξηγηματικά ονόματα για τις μεταβλητές δουλεύει σωστά κάνει όλους τους απαραίτητους ελέγχους χρησιμοποιεί μεθόδους (αρθρωτή σχεδίαση) και τις ζητούμενες κλάσεις. Για όλα τα παραπάνω ακολουθήστε τις οδηγίες που περιγράφονται εδώ: http://introcs.cs.princeton.edu/java/11style/ Κάθε αρχείο πηγαίου κώδικα πρέπει οπωσδήποτε να περιέχει μια συμπληρωμένη κατάλληλα επικεφαλίδα από σχόλια στην αρχή του αρχείου όπως: ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 10

/** * Author: Γράψτε εδώ το όνομα σας * Written:../../2017 * Last updated:../../2017 * * Compilation: javac userid_erg4.java * Execution: java userid_erg4 * * Γράψτε εδώ πληροφορίες σχετικά με το τι κάνει * το πρόγραμμα * */ Η εργασία είναι ατομική. Μπορείτε να συζητήσετε για αυτήν με τους συμφοιτητές σας, ωστόσο ποτέ δεν είναι αποδεκτό για σας να δείτε τον κώδικα κάποιου άλλου. Φυσικά, αν έχετε οποιεσδήποτε ερωτήσεις σχετικά με την εργασία, είμαστε πάντα στη διάθεσή σας για βοήθεια. Κώδικας που δε μεταγλωττίζει ή δεν τρέχει (crashes) παίρνει αυτόματα βαθμολογία 0. ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 11