Professional Documents
Culture Documents
Plh24 Exams2 Ενδεικτικεσ Απαντησεισ v1.0
Plh24 Exams2 Ενδεικτικεσ Απαντησεισ v1.0
Plh24 Exams2 Ενδεικτικεσ Απαντησεισ v1.0
Περιεχόμενα
1. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΜΕΤΑΓΛΩΤΤΙΣΤΩΝ ........................................................... 3
1.1 1η Άσκηση μεταγλωττιστές ................................................................................................... 3
1.2 2η Άσκηση μεταγλωττιστές ................................................................................................... 4
1.3 3η Άσκηση μεταγλωττιστές ................................................................................................... 6
2. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ UML ................................................................................. 8
2.1 1η Άσκηση UML ..................................................................................................................... 8
2.2 2η Άσκηση UML ..................................................................................................................... 9
2.3 3η Άσκηση UML ................................................................................................................... 10
3. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ JAVA ................................................................................................. 12
3.1 1η Άσκηση Java .................................................................................................................... 12
3.2 2η Άσκηση Java .................................................................................................................... 15
3.3 3η Άσκηση Java .................................................................................................................... 16
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.
Απάντηση
Κώδικας Java
private void Α(){
if ("a".equals(token)){
token = lex();
Y();
}
else if ("b".equals(token)){
token = lex();
A();
X();
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
}
else error(...);
}
Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.
Απάντηση
Με απαλοιφή αριστερής διαδρομής έχουμε:
S --> c S A
A --> b A | b c A | ε
Με παραγοντοποίηση:
S --> c S A
A --> b Β | ε
Β --> A | c A
Ο κώδικας Java:
else A();
}
Για την κλήση του λεκτικού αναλυτή να θεωρήσετε δεδομένη τη μέθοδο private String lex() η οποία
κάθε φορά που καλείται επιστρέφει το επόμενο τερματικό σύμβολο της προς αναγνώρισης
συμβολοσειράς. Θεωρήστε ότι η πρώτη κλήση της μεθόδου έχει πραγματοποιηθεί και η
επιστρεφόμενη τιμή είναι αποθηκευμένη στην μεταβλητή token.
Θεωρήστε επίσης δεδομένη την private void error() για τη διαχείριση των σφαλμάτων.
Απάντηση
Με απαλοιφή αριστερής διαδρομής έχουμε:
S --> c b S A | c A
A --> a A | c A | ε
Με παραγοντοποίηση:
S --> c B
B --> b S A | A
A --> a A | c A | ε
Ο κώδικας Java:
if ("b".equals(token)){
token = lex();
S();
A();
}
else A();
}
Απάντηση
Σχεδιάστε ένα διάγραμμα κλάσεων που να απεικονίζει τις πληροφορίες που δίνονται στη συνέχεια
αναφορικά με ένα πληροφοριακό σύστημα που υποστηρίζει τη λειτουργία ενός ιδιωτικού σχο-
λείου. Στις κλάσεις που θα προσδιορίσετε να προσθέσετε (όπου είναι δυνατό) τα κατάλληλα πεδία
(με τον τύπο που εξυπηρετεί καλύτερα το ρόλο τους) και μεθόδους (παραλείποντας τις παραμέ-
τρους και τον τύπο επιστροφής που αυτές μπορεί να έχουν).
«Οι εργαζόμενοι του σχολείου διακρίνονται σε διδάσκοντες (με υποκατηγορίες τους δάσκαλους,
τους γυμναστές και τους καθηγητές ξένης γλώσσας) και σε οδηγούς λεωφορείου. Επιπλέον υπάρ-
χει και ένας Διευθυντής. Τα κοινά στοιχεία που κρατάει το σύστημα για όλους τους εργαζόμενους
περιλαμβάνουν το ονοματεπώνυμο, τον ΑΜΚΑ και την ημερομηνία πρόσληψης. Για τους οδηγούς
διατηρεί επιπρόσθετα τον αριθμό διπλώματος οδήγησης, ενώ για τους διδάσκοντες ένα σύντομο
βιογραφικό σημείωμα. Σε κάθε δάσκαλο ανατίθεται ένα τμήμα. Εκτός από το δάσκαλο κάθε τμήμα
έχει ένα γυμναστή και δύο καθηγητές ξένης γλώσσας (γυμναστές και καθηγητές ξένων γλωσσών
διδάσκουν σε πολλά τμήματα). Δεν μπορούμε να έχουμε στο σύστημα εργαζόμενο που δεν ανήκει
σε κάποια από τις κατηγορίες που προαναφέρθηκαν, ούτε διδάσκοντα που δεν ανήκει σε συγκε-
κριμένη υποκατηγορία.
Κάθε τμήμα απαρτίζεται από έως και 16 μαθητές για τους οποίους το σύστημα αποθηκεύει ονο-
ματεπώνυμο και ΑΚΜΑ καθώς και το αν υπάρχουν αδέλφια του που φοιτούν στο σχολείο. Κάθε
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
μαθητής εγγράφεται σε ένα τμήμα και επίσης έχει έναν κηδεμόνα. Για τον κηδεμόνα το σύστημα
διατηρεί το ονοματεπώνυμο του, το ΑΦΜ και πληροφορίες για τα δίδακτρα που καλύπτει (το
ποσό των διδάκτρων ανά μαθητή του οποίου καλύπτει τα έξοδα, την ημερομηνία πληρωμής και
το χρονικό διάστημα).
Κάθε μαθητής χρησιμοποιεί ένα λεωφορείο για την μετακίνησή του προς και από το σχολείο. Για
το λεωφορείο το σύστημα κρατάει τον αριθμό κυκλοφορίας, την ημερομηνία του τελευταίου ser-
vice και τα km που έχει διανύσει από το τελευταίο service (κάθε φορά που ολοκληρώνεται ένα
δρομολόγιο ενημερώνεται κατάλληλα η τιμή). Κάθε λεωφορείο χρησιμοποιείται από πολλούς ο-
δηγούς που εκτελούν συγκεκριμένα δρομολόγια με αυτό. Κάθε δρομολόγιο χαρακτηρίζεται από
την αφετηρία, τον προορισμό του, την ημερομηνία και την ώρα αναχώρησης. Τέλος, σε κάθε λε-
ωφορείο μπορούν να επιβαίνουν έως 24 μαθητές.»
Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Director (σκηνοθέτης) περιλαμβάνει το όνομα και το επώνυμο του σκηνοθέτη. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί σκηνοθέτες με ονοματεπώνυμο και η κλήση της μεθόδου
“toString()” της κλάσης να εκτυπώνει:
π.χ. Director: Firstname=Steven, Lastname=Spielberg
Το όνομα και το επώνυμο του κάθε σκηνοθέτη να είναι read-only.
Η κλάση Movie (ταινία) περιλαμβάνει το όνομα του σκηνοθέτη της ταινίας, τον τίτλο της ταινίας και
το έτος παραγωγής της ταινίας. Το πεδία της κάθε ταινίας είναι read-only (μόνο για ανάγνωση, δεν
τροποποιούνται μετά την αρχικοποίησή τους). Επίσης, οι ταινίες μπορεί να είναι είτε Action, είτε
Comedy και θα πρέπει να υλοποιηθούν αντίστοιχα ως υποκλάσεις. Οι υποκλάσεις θα πρέπει να
διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ. Movie: Director= Steven Spielberg, Title=Hook, Year=1991, Category= Αction
Τέλος θα υλοποιήσετε την κλάση VideoStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας ταινιών. Η εν λόγω λίστα ταινιών, θα αρχικοποιείται στον κατασκευαστή (Constructor) της
κλάσης, με μερικές ταινίες της επιλογής σας (3 ταινίες).
Η κλάση VideoStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση ταινίας ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων ταινίας
(υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό μήνυμα.
2. Έξοδος από το πρόγραμμα.
Απάντηση
}
}
return "Action";
}
}
Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Author (συγγραφέας) περιλαμβάνει το όνομα και το επώνυμο του συγγραφέα. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί συγγραφείς με ονοματεπώνυμο και η κλήση της μεθόδου
“toString()” της κλάσης να εκτυπώνει:
π.χ. Author: Firstname=Stephen, Lastname=King
Το όνομα και το επώνυμο του κάθε συγγραφέα να είναι read-only.
Η κλάση Book (βιβλίο) περιλαμβάνει το όνομα του συγγραφέα του βιβλίου, τον τίτλο του βιβλίου
και το έτος έκδοσης του βιβλίου. Το πεδία του κάθε βιβλίου είναι επίσης read-only (μόνο για
ανάγνωση, δεν τροποποιούνται μετά την αρχικοποίησή τους). Επίσης ένα βιβλίο μπορεί να είναι
είτε Novel είτε Mystery και θα πρέπει να υλοποιηθούν αντίστοιχα οι υποκλάσεις. Οι υποκλάσεις θα
πρέπει να διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ.Book: Author= Stephen King, Title=It, Year=1986, Category= Mystery
Τέλος θα υλοποιήσετε την κλάση BookStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας βιβλίων. Η εν λόγω λίστα βιβλίων, θα αρχικοποιείται στον κατασκευαστή (Constructor) της
κλάσης, με μερικά βιβλία της επιλογής σας (3 βιβλία).
Η κλάση BookStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση βιβλίου ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων βιβλίου
(υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό μήνυμα.
2. Έξοδος από το πρόγραμμα
Απάντηση
Η απάντηση είναι ίδια με αυτή της άσκησης 1 με απλή αλλαγή των ονομάτων των κλάσεων.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2021-2022
Β’ ΕΞΕΤΑΣΤΙΚΗ
Γράψτε τον κώδικα μιας εφαρμογής JAVA, η οποία θα ικανοποιεί τις παρακάτω απαιτήσεις:
Η κλάση Singer (τραγουδιστής) περιλαμβάνει το όνομα και το επώνυμο του τραγουδιστή. Είναι
ημιτελής και πρέπει να τη συμπληρώσετε, χωρίς να μεταβάλλετε τα υπάρχοντα πεδία, ώστε να μην
έχει λάθη μεταγλώττισης, να δημιουργεί τραγουδιστές με ονοματεπώνυμο και η κλήση της
μεθόδου “toString()” της κλάσης να εκτυπώνει:
π.χ. Signer: Firstname=Michael, Lastname=Jackson
Το όνομα και το επώνυμο του κάθε τραγουδιστή να είναι read-only.
Η κλάση Song (τραγούδι) περιλαμβάνει το όνομα του τραγουδιστή, τον τίτλο του τραγουδιού και
το έτος κυκλοφορίας του τραγουδιού. Τα πεδία του κάθε τραγουδιού είναι read-only (μόνο για
ανάγνωση και δεν τροποποιούνται μετά την αρχικοποίησή τους). Επίσης, τα τραγούδια μπορεί να
είναι είτε Pop, είτε Rock και θα πρέπει να υλοποιηθούν αντίστοιχα ως υποκλάσεις. Οι υποκλάσεις
θα πρέπει να διαθέτουν μέθοδο “toString()” που να εκτυπώνει:
π.χ. Song: Singer= Michael Jackson, Title=Billie Jean, Year=1982, Category=Pop
Τέλος θα υλοποιήσετε την κλάση SongStore, η οποία θα είναι υπεύθυνη για τη διατήρηση μιας
λίστας τραγουδιών. Η εν λόγω λίστα τραγουδιών, θα αρχικοποιείται στον κατασκευαστή
(Constructor) της κλάσης, με μερικά τραγούδια της επιλογής σας (3 τραγούδια).
Η κλάση SongStore θα διαθέτει μέθοδο main (για την εκτέλεση του προγράμματος), με τις εξής
επιλογές για τον χρήστη (υποθέτουμε ότι θα δώσει σωστές επιλογές):
1. Αναζήτηση τραγουδιού ανά τίτλο (πλήρης ταύτιση τίτλου) και εκτύπωση στοιχείων τρα-
γουδιού (υποθέτουμε ότι οι τίτλοι είναι μοναδικοί). Αν δεν υπάρχει βγαίνει το σχετικό
μήνυμα.
Έξοδος από το πρόγραμμα
Απάντηση
Η απάντηση είναι ίδια με αυτή της άσκησης 1 με απλή αλλαγή των ονομάτων των κλάσεων