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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εκφώνηση άσκησης. Η Κρεμάλα σαν παιχνίδι. Ανάλυση. Μέρος Α Αναφoρά, ανάλυση τακτικής. Υλοποίηση του παιχνιδιού «Κρεμάλα»

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

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

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

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

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

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

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

Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

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

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

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

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

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

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

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

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

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

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

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

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

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

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

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

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

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

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

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

Μ.Π.Σ. «ΠΡΟΗΓΜΕΝΕΣ ΜΕΘΟΔΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΡΟΙΟΝΤΩΝ ΑΠΟ ΞΥΛΟ» Μάθημα: Σχεδίαση και Εφαρμογές Διαδραστικών Συστημάτων. Διδάσκοντας: Α.

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

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

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

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

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

ΕΠΛ Φροντιστήριο 3

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

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

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

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Εισαγωγή στον Προγραμματισμό

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

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

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

1. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ (Ή ΚΑΙ ΑΛΛΟΥ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ) ΑΞΙΟΛΟΓΗΣΗ ΤΩΝ ΜΑΘΗΤΩΝ

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

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

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

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

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

Εισαγωγή στον Προγραμματισμό

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

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

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Σειρά Προβλημάτων 3 Λύσεις

Transcript:

ΕΡΓΑΣΙΑ 4 Παίζοντας Κρεμάλα Ημερομηνία Ανάρτησης: 30/03/2017 Ημερομηνία Παράδοσης: 27/04/2017, 23:59 1. Εισαγωγή Κύριος σκοπός της τελευταίας εργασίας του μαθήματος είναι η εξάσκηση σε αντικείμενα και κατ επέκταση η εμπέδωση βασικών αρχών αφαιρετικότητας δεδομένων (νέοι τύποι δεδομένων, απόκρυψη πληροφοριών, μέθοδοι αναφοράς), καθώς και η περαιτέρω εξάσκηση και εμπέδωση κεντρικών εννοιών αφαιρετικότητας προγράμματος με κυρίαρχη την άρθρωση (πολλαπλές κλάσεις και σχέσεις πελάτη-εξυπηρετητή, πολλαπλές μεθόδους, τόσο στατικές, όσο και αναφοράς, ιδιωτικές/δημόσιες μεθόδους, υπερφόρτωση μεθόδων, ιεραρχική δόμηση). 2. Περιγραφή Για την εργασία αυτή θα εφαρμόσετε την αντικειμενοστραφή μεθοδολογία σχεδιασμού για να κατασκευάσετε ένα πρόγραμμα Hang.java το οποίο παίζει με το χρήστη το γνωστό παιγνίδι της κρεμάλας. Συγκεκριμένα: (i) To πρόγραμμα επιλέγει (με τυχαίο τρόπο) από δεδομένο λεξιλόγιο λέξεων, τη λέξη που χρειάζεται να μαντέψει ο χρήστης, και αρχικά την παρουσιάζει με όλες τις θέσεις κενές. (ii) Ο χρήστης διαδοχικά επιλέγει γράμματα προσπαθώντας να μαντέψει τη λέξη. Κάθε φορά το πρόγραμμα παρουσιάζει τη λέξη με τα ορθά γράμματα που έχει μαντέψει ο χρήστης και τις εναπομένουσες κενές θέσεις. (iii) Η προσπάθεια του χρήστη είναι επιτυχής αν κατορθώσει να μαντέψει τη λέξη με λιγότερα από επτά (7) λανθασμένα γράμματα. Διαφορετικά μόλις φτάσει σε επτά λανθασμένα γράμματα, το πρόγραμμα παρουσιάζει τη λέξη στο χρήστη και τερματίζεται. Αν ο χρήστης κατά λάθος δώσει ξανά ένα από τα γράμματα που έχει ήδη δώσει, απλά του επισημαίνεται αυτό και τίποτα άλλο. (iv) Επιπρόσθετα, ο χρήστης δικαιούται μέχρι δύο βοήθειες από το πρόγραμμα. Υπάρχουν έξι διαφορετικά είδη βοήθειας όπως παρουσιάζονται στην επόμενη Ενότητα 3. Η δυνατότητα αυτή αποτελεί σημαντικό στοιχείο του όλου προγράμματος και αποκλίνει από την standard εκδοχή του προγράμματος της κρεμάλας. Για να ενδείκνυται ο χρήστης να αξιοποιήσει αυτή τη δυνατότητα σημαίνει ότι έχει μαντέψει ορθά τουλάχιστο ένα γράμμα. Οι διαφορετικές βοήθειες που έχει στη διάθεσή του ο χρήστης εξηγούνται στη συνέχεια, και ακολούθως δίνονται κάποια παραδείγματα χρήσης του προγράμματος, ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 1

μέσω των οποίων διαφαίνεται η λειτουργικότητα του προγράμματος, συμπεριλαμβανομένης της αξιοποίησης βοηθειών από το χρήστη. 3. Βοήθειες χρήστη από το πρόγραμμα Όπως ήδη αναφέρθηκε ο χρήστης δικαιούται να ζητήσει μέχρι δύο βοήθειες από το πρόγραμμα. Οι βοήθειες στηρίζονται σε γράμματα που ο χρήστης έχει ήδη μαντέψει ορθά και επομένως στοχεύουν στον εντοπισμό των γραμμάτων που είτε προηγούνται, είτε ακολουθούν, είτε βρίσκονται μεταξύ δύο γραμμάτων, που ήδη υπάρχουν στη λέξη. Συγκεκριμένα υπάρχουν τρεις κατηγορίες βοηθειών, και δύο εκδοχές για την κάθε κατηγορία (B ή b, Α ή a, και M ή m) όπως εξηγείται στη συνέχεια. Καταρχάς ο χρήστης ζητά βοήθεια μέσω του κεφαλαίου γράμματος Η (για Help). Μόλις το πρόγραμμα λάβει αυτό το γράμμα, είτε θα ζητήσει από το χρήστη να προσδιορίσει τη βοήθεια που θέλει, είτε θα του επισημάνει ότι έχει ήδη εξαντλήσει τις δύο βοήθειες που δικαιούται. Στον πίνακα που ακολουθεί παρουσιάζονται οι έξι πιθανές βοήθειες που έχει ο χρήστης στη διάθεσή του με τις αντίστοιχες ερμηνείες τους. Βοήθεια Β <γ> b <γ> Α <γ> a <γ> Μ <γ1> <γ2> m <γ1> <γ2> Ερμηνεία Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές αμέσως πριν το γράμμα <γ> ανάμεσα στο σύνολο των λέξεων του λεξιλογίου. Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές αμέσως πριν το γράμμα <γ> ανάμεσα στις λέξεις του λεξιλογίου που έχουν το ίδιο μήκος με αυτήν που προσπαθεί να μαντέψει ο χρήστης. Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές αμέσως μετά το γράμμα <γ> ανάμεσα στο σύνολο των λέξεων του λεξιλογίου. Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές αμέσως μετά το γράμμα <γ> ανάμεσα στις λέξεις του λεξιλογίου που έχουν το ίδιο μήκος με αυτήν που προσπαθεί να μαντέψει ο χρήστης. Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές μεταξύ των γραμμάτων <γ1> και <γ2> ανάμεσα στο σύνολο των λέξεων του λεξιλογίου. Το γράμμα, πέραν αυτών που έδωσε μέχρις εκείνου του σημείου ο χρήστης, που εμφανίζεται τις περισσότερες φορές μεταξύ των γραμμάτων <γ1> και ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 2

<γ2> ανάμεσα στις λέξεις του λεξιλογίου που έχουν το ίδιο μήκος με αυτήν που προσπαθεί να μαντέψει ο χρήστης. Αν, για κάποιο λόγο, κανένα γράμμα δεν αποτελεί την απάντηση σε κάποια βοήθεια, τότε απλά το πρόγραμμα αναφέρει στο χρήστη ότι δεν μπορεί να του κάνει οποιαδήποτε εισήγηση. Όμως η συγκεκριμένη βοήθεια αφαιρείται από τις δύο που δικαιούται ο χρήστης. 4. Παραδείγματα εκτέλεσης Πιο κάτω δίνονται πέντε παραδείγματα χρήσης του προγράμματος. 1ο Παράδειγμα Εκτέλεσης $ java Hang Dictionary.txt ----------- Give letter: a a-----a---- Give letter: h a-----a---- Give letter: e a---e-a---- Give letter: H Specify aid: m e a Try the letter g ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 3

a---e-a---- Give letter: g agg-ega---- Give letter: r aggrega---- Give letter: t aggregat--- Give letter: i aggregati-- Give letter: o aggregatio- Give letter: n aggregation You have won Στο πιο πάνω παράδειγμα ο χρήστης κατόρθωσε να μαντέψει τη λέξη (aggregation) που επέλεξε τυχαία το πρόγραμμα από το λεξιλόγιο που προσδιόρισε ο χρήστης στη γραμμή εντολής. Συγκεκριμένα ο χρήστης δίνει στη γραμμή εντολής το όνομα του αρχείου κειμένου (Dictionary.txt) που περιέχει το λεξιλόγιο. Τα περιεχόμενα του συγκεκριμένου αρχείου δίνονται στο Παράρτημα Ι, και επίσης το αρχείο σας δίνεται ηλεκτρονικά. Στο ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 4

αρχείο αυτό μπορούν να προστεθούν και άλλες λέξεις, έτσι ώστε να διευρυνθεί το λεξιλόγιο. Όλες οι λέξεις του αρχείου πρέπει να είναι με μικρά γράμματα. Οι επιλογές του χρήστη ως προς τα γράμματα μιας λέξης πρέπει επίσης να δίνονται ως μικρά γράμματα. Αν δοθεί κεφαλαίο ή κάποιος άλλος μη αποδεκτός χαρακτήρας, το πρόγραμμα του το επισημαίνει και τίποτε άλλο (δες παράδειγμα 5 που δίνει ο χρήστης το χαρακτήρα?). Στο παράδειγμα αυτό ο χρήστης έκανε μόνο μια λανθασμένη επιλογή γράμματος, συγκεκριμένα το γράμμα h. Επιπρόσθετα έκανε χρήση μιας βοήθειας. Όταν ο χρήστης επιθυμεί να αξιοποιήσει βοήθεια (δικαιούται μέχρι δύο βοήθειες) εισαγάγει το κεφαλαίο γράμμα Η. Τότε το πρόγραμμα του ζητεί να προσδιορίσει τη βοήθεια που επιθυμεί. Στο παράδειγμα ο χρήσης προσδιόρισε τη βοήθεια που ήθελε με τους τρεις χαρακτήρες m e a. Αυτό σημαίνει ότι ζήτησε από το πρόγραμμα να του πει ποιο γράμμα, εκτός αυτών που ο ίδιος έχει ήδη επιλέξει, εμφανίζεται τις περισσότερες φορές μεταξύ των γραμμάτων e και a, ανάμεσα στις λέξεις του λεξιλογίου που έχουν το ίδιο μήκος (σε αριθμό γραμμάτων) με τη λέξη που ο χρήστης προσπαθεί να μαντέψει. Προφανώς ο χρήστης επέλεξε αυτή τη βοήθεια επειδή τα γράμματα e και a έχουν ήδη εντοπισθεί στη λέξη με ένα άλλο γράμμα μεταξύ τους, άγνωστο κατά το χρονικό σημείο που ο χρήστης ζήτησε την εν λόγω βοήθεια. Σε απάντηση το πρόγραμμα εισηγήθηκε το γράμμα g. Ο χρήστης συμφώνησε με την εισήγηση αυτή και επέλεξε το g, το οποίο τελικά εμφανιζόταν τόσο ανάμεσα στα γράμματα e και a, όσο και δύο άλλες φορές. Η βοήθεια αυτή αποδείχθηκε καθοριστικής σημασίας, αφού επέτρεψε στο χρήστη να μαντέψει επιτυχώς τη λέξη aggregation. 2ο Παράδειγμα Εκτέλεσης $ java Hang Dictionary.txt ----------- Give letter: g ----------- Give letter: e e-e-------e Give letter: H Specify aid: m e e ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 5

Try the letter l e-e-------e Give letter: l ele----l--e Give letter: v ele----l--e Give letter: k ele----l--e Give letter: a ele----l--e Give letter: m ele----l--e Give letter: t ele-t--l-te Give letter: H ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 6

Specify aid: m e t Try the letter c ele-t--l-te Give letter: c elect--l-te Give letter: r electr-l-te Give letter: o electrol-te Give letter: y electrolyte You have won Στο πιο πάνω παράδειγμα, και πάλι ο χρήστης αξιοποιεί τη βοήθεια m και μάλιστα δυο φορές. Την πρώτη φορά σε σχέση με τα γράμματα e και e, και αφού είχαν προηγηθεί τέσσερεις επιλογές λανθασμένων γραμμάτων από μέρους του (που τελικά ήταν και το σύνολο των λανθασμένων γραμμάτων) και τη δεύτερη φορά σε σχέση με τα γράμματα e και t. Και σε αυτό το παράδειγμα, ο χρήστης αξιοποιώντας το μέγιστο αριθμό βοηθειών από το πρόγραμμα που δικαιούταν, κατόρθωσε να μαντέψει ορθά τη λέξη electrolyte. 3ο Παράδειγμα Εκτέλεσης ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 7

$ java Hang Dictionary.txt ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ---------- Give letter: b ---------- Give letter: o -oo------- Give letter: t -oo-----t- Give letter: H Specify aid: B t Try the letter a -oo-----t- Give letter: a -oo----at- Give letter: g ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 8

-oo----at- Give letter: p -oo----at- Give letter: e -oo----ate Give letter: m -oo----ate Give letter: l -oo----ate Give letter: k -oo----ate Give letter: g Letter already given -oo----ate Give letter: k Letter already given ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 9

-oo----ate Give letter: H Specify aid: a o Try the letter n -oo----ate Give letter: n -oo---nate Give letter: h -oo---nate You have lost. The word was coordinate Στο πιο πάνω παράδειγμα ο χρήστης δεν κατόρθωσε να μαντέψει ορθά τη λέξη coordinate παρόλο ότι αξιοποίησε και τις δύο βοήθειες που δικαιούνταν. Τελικά επέλεξε 7 λανθασμένα γράμματα και έτσι η προσπάθειά του τερματίστηκε ανεπιτυχώς. Σε αυτό το παράδειγμα η πρώτη βοήθεια που ζήτησε ο χρήστης διατυπώθηκε ως B t, που σημαίνει ότι ο χρήστης ζήτησε από το πρόγραμμα να του πει ποιο γράμμα, (πέραν αυτών που είχε εισηγηθεί μέχρις εκείνο το σημείο) εμφανίζεται τις περισσότερες φορές αμέσως πριν το γράμμα t ανάμεσα σε όλες τις λέξεις του λεξιλογίου. Το εν λόγω γράμμα ήταν το γράμμα a το οποίο στη συνέχεια το πρόγραμμα εισηγήθηκε στο χρήστη, ο χρήστης υιοθέτησε την εισήγηση αυτή και όντως το γράμμα a εμφανίζεται αμέσως πριν το γράμμα t. Στη συνέχεια, και αφού ο χρήστης επέλεξε κατά λάθος κάποια γράμματα που είχε ήδη επιλέξει, χωρίς τα λάθη αυτά να επηρεάζουν την προσπάθειά του, ζήτησε να αξιοποιήσει και τη δεύτερη βοήθειά του, την οποία διατύπωσε ως a o. Αυτό σήμαινε ότι ήθελε το πρόγραμμα να του πει ποιο γράμμα, (πέραν αυτών που είχε εισηγηθεί μέχρις εκείνο το σημείο) εμφανίζεται τις περισσότερες φορές αμέσως μετά το γράμμα ο ανάμεσα στις λέξεις του λεξιλογίου με το ίδιο μήκος όπως τη λέξη που προσπαθούσε να μαντέψει. Το γράμμα αυτό ήταν το n το οποίο όμως ναι μεν εμφανιζόταν στη συγκεκριμένη λέξη αλλά όχι μετά το γράμμα ο, αλλά πριν το γράμμα a. Αυτό δείχνει ότι οι βοήθειες που ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 10

παρέχει το πρόγραμμα στο χρήστη είναι απλά κατευθυντήριες γραμμές, με άλλα λόγια «ευρετικές» εισηγήσεις (heuristics) και όχι αλάνθαστες τοποθετήσεις. 4ο Παράδειγμα Εκτέλεσης $ java Hang Dictionary.txt --------- Give letter: h --------- Give letter: o --o------ Give letter: e --o------ Give letter: a --oa--a-- Give letter: t --oa--a-t Give letter: H Specify aid: m a t ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 11

Try the letter r --oa--a-t Give letter: r -roa--a-t Give letter: H Specify aid: m a t Try the letter s -roa--a-t Give letter: s -roa--ast Give letter: H You have exhausted your aids -roa--ast Give letter: b broa--ast Give letter: d ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 12

broad-ast Give letter: c broadcast You have won Στο πιο πάνω παράδειγμα ο χρήστης κατόρθωσε να μαντέψει επιτυχώς τη λέξη broadcast, αξιοποιώντας και τις δύο βοήθειές του. Μάλιστα επιδίωξε να ζητήσει και τρίτη βοήθεια, η οποία όμως δεν του επετράπη. Και οι δύο βοήθειες που ζήτησε διατυπώθηκαν ως m a t (βλέπε πιο πάνω για ερμηνεία). Η απάντηση του προγράμματος στην πρώτη βοήθεια ήταν το γράμμα r και στη δεύτερη βοήθεια ήταν το γράμμα s (από τη στιγμή που ο χρήστης μετά την πρώτη βοήθεια επέλεξε το γράμμα r, δεν θα μπορούσε να ήταν και πάλι αυτό το γράμμα η απάντηση στη δεύτερη βοήθειά του αν δεν είχε επιλέξει το r τότε η δεύτερη βοήθειά του θα είχε πάλι το r ως απάντηση). Ο χρήστης επέλεξε και τα δύο γράμματα (r και s) τα οποία όντως εμφανίζονται στη λέξη. Τελικά το r όμως δεν εμφανιζόταν μεταξύ των γραμμάτων a και t, αλλά πριν το γράμμα o, που ήταν και ο λόγος που ο χρήστης στη δεύτερη βοήθεια του ζήτησε και πάλι m a t. Αυτή τη φορά το γράμμα s ήταν όντως μεταξύ των γραμμάτων a και t. 5ο Παράδειγμα Εκτέλεσης $ java Hang Dictionary.txt ------------- Give letter: h ------------- Give letter: o ------o------ Give letter: a ------o--a--- Give letter:? Wrong Letter ------o--a--- ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 13

Give letter: H Specify aid: B o Try the letter i ------o--a--- Give letter: i ------o--a-i- Give letter: H Specify aid: m a i Try the letter t ------o--a-i- Give letter: t ----t-o-tati- Give letter: n ----t-o-tati- Give letter: e e-e-t-o-tati- Give letter: l ele-t-o-tati- Give letter: c elect-o-tatic Give letter: r electro-tatic Give letter: s electrostatic You have won Στο πιο πάνω παράδειγμα, και πάλι ο χρήστης μάντεψε ορθά τη λέξη electrostatic αξιοποιώντας τις δύο βοήθειές του, τις οποίες είχε διατυπώσει ως B o και m a i αντίστοιχα (βλέπε πιο πάνω για ερμηνείες). Στο παράδειγμα αυτό ο χρήστης έδωσε και το μη επιτρεπτό γράμμα? το οποίο απλά του επισημάνθηκε από το πρόγραμμα. ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 14

5. Αντικειμενοστραφής σχεδιασμός ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Το πρόγραμμα Hang.java που χρειάζεται να δημιουργήσετε κάνει χρήση, και επομένως είναι πελάτης, των νέων τύπων δεδομένων HWord (λέξη για το παιγνίδι της κρεμάλας) και Dict (Λεξιλόγιο), που ορίζονται μέσω των αντίστοιχων κλάσεων αντικειμένων, τα περιγράμματα των οποίων δίνονται στα Παραρτήματα ΙΙ και ΙΙΙ αντίστοιχα. Για την εργασία χρειάζεται να ολοκληρώσετε τις κλάσεις αυτές ορίζοντας τις σχετικές μεθόδους αναφοράς και επίσης να κατασκευάσετε το πρόγραμμα Hang.java έτσι ώστε η διασύνδεσή του με το χρήστη να είναι αυτή που διαφαίνεται μέσω των πιο πάνω παραδειγμάτων. Συνολικά, η άσκησή σας θα αποτελείται από 3 java αρχεία: Hang.java, HWord.java και Dict.java και θα χρησιμοποιεί και ένα txt αρχείο: Dictionary.txt Παράδοση Όταν έχετε τελειώσει με τον πηγαίο κώδικα, μεταγλωττίστε το και βεβαιωθείτε ότι τρέχει σωστά. Δημιουργήστε μια λίστα δοκιμής με όνομα userid_erg4.txt όπου userid βάλτε το username που σας δόθηκε από το τμήμα, κάνοντας ένα τρέξιμο του προγράμματός σας. Ακολουθείστε τα πιο κάτω βήματα όταν υποβάλετε την άσκηση σας: 1. Δημιουργείστε ένα κατάλογο με το όνομά σας π.χ., PavlosAntoniou/ χωρίς να αφήνετε κενά στο όνομα του καταλόγου. 2. Βάλτε μέσα στον κατάλογο αυτό όλα τα java αρχεία της εργασίας (Hang.java, HWord.java και Dict.java) και τη λίστα δοκιμής (userid_erg4.txt) που πρέπει να υποβάλετε. 3. Συμπιέστε (zip) τον κατάλογο (και όχι τα αρχεία ξεχωριστά) χρησιμοποιώντας την εντολή zip -c PavlosAntoniou.zip PavlosAntoniou/* 4. Βεβαιωθείτε ότι κάνατε σωστά τα τρία προηγούμενα βήματα 5. Ανεβάστε το συμπιεσμένο αρχείο π.χ., PavlosAntoniou.zip Παραδώστε το αρχείο zip ηλεκτρονικά μέσω του submit assignment κάτω από το Ασκήσεις Εργασία 4 στην ιστοσελίδα του μαθήματος μέχρι τις 27/04/2017 και ώρα 23:59. Μην ανεβάσετε τις εικόνες που παράγει το πρόγραμμά σας. Προσοχή: Το σύστημα ελέγχει το χρόνο παράδοσης εργασιών γι αυτό μην περιμένετε την τελευταία στιγμή να κάνετε submit την εργασία σας. Βαθμολογία Ένα πρόγραμμα για να πάρει όλες τις μονάδες είναι απαραίτητο να: χρησιμοποιεί σχόλια έχει ευθυγραμμισμένο κώδικας χρησιμοποιεί αυτό-επεξηγηματικά ονόματα για τις μεταβλητές δουλεύει σωστά κάνει όλους τους απαραίτητους ελέγχους χρησιμοποιεί μεθόδους (αρθρωτή σχεδίαση) και τις ζητούμενες κλασεις ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 15

Για όλα τα παραπάνω ακολουθήστε τις οδηγίες που περιγράφονται εδώ: http://introcs.cs.princeton.edu/java/11style/. Το αρχείο με το πηγαίο κώδικα πρέπει οπωσδήποτε να περιέχει μια συμπληρωμένη κατάλληλα επικεφαλίδα από σχόλια στην αρχή του αρχείου όπως: /** * Author: Γράψτε εδώ το όνομα σας * Written:../../2017 * Last updated:../../2017 * * Compilation: javac userid_erg3.java * Execution: java userid_erg3 * * Γράψτε εδώ πληροφορίες σχετικά με το τι κάνει * το πρόγραμμα * */ Κριτήρια αξιολόγησης Έγκυρη ανάγνωση αρχείου και επιλογή 10 τυχαίας λέξης Έγκυρη διαδικασία εκτέλεσης παιχνιδιού 45 (εμφάνιση κενών στα μη ευρεθέντα γράμματα, σωστή επανάληψη 7 βημάτων, εκτέλεση βοηθειών, έλεγχος ολοκλήρωσης παιχνιδιού, παρουσίαση τελικής κατάστασης παιχνιδιού δηλαδή αν ο χρήστης κέρδισε ή έχασε) Σωστή υλοποίηση βοηθειών 30 Σχόλια Ονόματα μεταβλητών 15 αρθρωτή σχεδίαση (χρήση μεθόδων) χρήση δοθέντων κλάσεων ΣΥΝΟΛΟ 100 Η εργασία είναι ατομική. Μπορείτε να συζητήσετε για αυτήν με τους συμφοιτητές σας, ωστόσο ποτέ δεν είναι αποδεκτό για σας να δείτε τον κώδικα κάποιου άλλου ή να κάνετε από κοινού τον κώδικα. Φυσικά, αν έχετε οποιεσδήποτε ερωτήσεις σχετικά με την εργασία, είμαστε πάντα στη διάθεσή σας για βοήθεια. Ανίχνευση αντιγραφής θα τιμωρείται με μηδενισμό. Κώδικας που δε μεταγλωττίζει ή δεν τρέχει (crashes) παίρνει αυτόματα βαθμολογία 0. ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 16

Παράρτημα Ι: Dictionary.txt artificial intelligence abbreviation absolute addressing assembler acceleration accommodate accountancy accumulation acknowledgment activation addressability advanced aggregation alphanumeric amplitude binary binding boolean bootstrap breadboard boundary calculation capacity capstan canonical cartesian cartridge coordinate celestial centralization catastrophic characteristic determination diagnostic dialogue digital representation differentiation dimension broadcast interrupt disasembly earphone echo eccentric editing express edge emitter eclipse ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 17

education effective erasable electronic elastic electrolyte electrostatic embedded emission elongation exclusive envelope equipotential equinumerable floppy feature feedback failure factorization frequency figurative flexible floating forbidden foreground forward fragmentation franchising geometry gigacycles golfball graceful grandfather graphics guidelines handling hardware harmonize heliocentric hemisphere hexadecimal hierarchical histogram hologram horizontal housekeeping hybrid hysteresis illuminance identity inaccuracy impedance impenetrable imperfection impossible ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 18

independent index infinite induction information initialize installation instruction Παράρτημα ΙΙ: HWord.java public class HWord { private char[] word; public HWord (int len){ /* Κατασκευάζει μια κενή λέξη μήκους len, η οποία δηλαδή απαρτίζεται αποκλειστικά από το χαρακτήρα - */ public HWord (String s){ /* Κατασκευάζει μια λέξη από το String s */ public int getlen (){ /* Επιστρέφει το μήκος της λέξης */ public boolean includes (char c){ /* Επιστρέφει true αν η λέξη περιλαμβάνει το χαρακτήρα c, διαφορετικά επιστρέφει false */ public boolean sameword (HWord w){ /* Επιστρέφει true αν η λέξη είναι η ίδια με την w, διαφορετικά επιστρέφει false */ public HWord match (char[] ls){ /* Επιστρέφει τη νέα λέξη με όσα γράμματα της λέξης περιλαμβάνονται στον πίνακα ls, και το χαρακτήρα στις υπόλοιπες θέσεις */ public String tostring(){ /* Επιστρέφει την εκτυπώσιμη μορφή της λέξης */ public void letterfreq (int[] fs){ ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 19

/* Ο πίνακας fs αντιστοιχεί στα 26 (μικρά) γράμματα του Αγγλικού αλφαβήτου. Για κάθε γράμμα της λέξης αυξάνεται κατά ένα η σχετική είσοδος του πίνακα fs */ public void letterfreq (int[] fs, int len){ /* Η λειτουργία της letterfreq γίνεται μόνο αν το μήκος της λέξης είναι len */ public void pairfreq (int[][] ps){ /* Οι είσοδοι του δυαδικού πίνακα ps αντιστοιχούν στις δυάδες γραμμάτων του Αγγλικού αλφαβήτου. Για κάθε δυάδα συνεχόμενων γραμμάτων στη λέξη, από τα αριστερά προς τα δεξιά, αυξάνεται κατά ένα η σχετική είσοδος του πίνακα ps */ public void pairfreq (int[][] ps, int len){ /* Η λειτουργία της pairfreq γίνεται μόνο αν το μήκος της λέξης είναι len */ public void triplefreq (int[][][] ts){ /* Οι είσοδοι του τριαδικού πίνακα ts αντιστοιχούν στις τριάδες γραμμάτων του Αγγλικού αλφαβήτου. Για κάθε τριάδα συνεχόμενων γραμμάτων στη λέξη, από τα αριστερά προς τα δεξιά, έστω γ1, γ2, γ3, αυξάνεται κατά ένα η είσοδος [γ1][γ3][γ2] του πίνακα ts */ public void triplefreq (int[][][] ts, int len){ /* Η λειτουργία της triplefreq γίνεται μόνο αν το μήκος της λέξης είναι len */ public static void main (String[] args){ /* Κώδικας για τη δοκιμή της κλάσης */ Παράρτημα ΙΙΙ: Dict.java public class Dict { ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 20

private HWord[] words; /* Οι λέξεις του λεξιλογίου */ private int count = 0; /* Πόσες λέξεις περιλαμβάνει */ private int size = 300; /* Το μέγεθος της συνολικής χωρητικότητας του */ public Dict(String file){ /* Κατασκευάζει λεξιλόγιο από το αρχείο κειμένου με όνομα file */ public String tostring(){ /* Επιστρέφει την εκτυπώσιμη μορφή του λεξιλογίου όπως φαίνεται στο Παράρτημα Ι */ public int getlen(){ /* Επιστρέφει το πλήθος των λέξεων του λεξιλογίου */ public HWord getword(){ /* Επιστρέφει μια τυχαία λέξη από το λεξιλόγιο */ public int[] letterfreq(){ /* Επιστρέφει τον πίνακα των συχνοτήτων των γραμμάτων στο σύνολο των λέξεων του λεξιλογίου */ public int[] letterfreq(int len){ /* Επιστρέφει τον πίνακα των συχνοτήτων των γραμμάτων στο υποσύνολο των λέξεων του λεξιλογίου μήκους len */ public int[][] pairfreq(){ /* Επιστρέφει τον πίνακα των συχνοτήτων των δυάδων γραμμάτων, από τα αριστερά προς τα δεξιά στο σύνολο των λέξεων του λεξιλογίου */ public int[][] pairfreq(int len){ /* Επιστρέφει τον πίνακα των συχνοτήτων των δυάδων γραμμάτων, από τα αριστερά προς τα δεξιά στο υποσύνολο των λέξεων του λεξιλογίου μήκους len */ public int[][][] triplefreq(){ /* Επιστρέφει τον πίνακα των συχνοτήτων, στο σύνολο των λέξεων του λεξιλογίου, των τριάδων γραμμάτων, από τα αριστερά προς τα ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 21

δεξιά, όπου οι τρεις διαστάσεις του πίνακα αντιστοιχούν στο πρώτο γράμμα, στο τρίτο γράμμα και στο δεύτερο γράμμα, δηλαδή στο μεσαίο γράμμα. */ public int[][][] triplefreq(int len){ /* Επιστρέφει τον πίνακα των συχνοτήτων, στο υποσύνολο των λέξεων του λεξιλογίου μήκους len, των τριάδων γραμμάτων, από τα αριστερά προς τα δεξιά, όπου οι τρεις διαστάσεις του πίνακα αντιστοιχούν στο πρώτο γράμμα, στο τρίτο γράμμα και στο δεύτερο γράμμα, δηλαδή στο μεσαίο γράμμα. */ public static void main(string[] args){ /* Κώδικας για τη δοκιμή της κλάσης */ ΕΠΛ131 Εργασία 4. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 22