Professional Documents
Culture Documents
PLH24 Exams2 ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ
PLH24 Exams2 ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ
Περιεχόμενα
1. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΜΕΤΑΓΛΩΤΤΙΣΤΩΝ ........................................................... 3
1.1 1η Άσκηση μεταγλωττιστές................................................................................................... 3
1.2 2η Άσκηση μεταγλωττιστές ................................................................................................... 6
1.3 3η Άσκηση μεταγλωττιστές ................................................................................................... 9
2. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ UML ............................................................................... 12
2.1 1η Άσκηση UML ................................................................................................................... 12
2.2 2η Άσκηση UML ................................................................................................................... 15
2.3 3η Άσκηση UML ................................................................................................................... 18
3. ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ JAVA ................................................................................................. 22
3.1 1η Άσκηση Java .................................................................................................................... 22
3.2 2η Άσκηση Java .................................................................................................................... 26
3.3 3η Άσκηση Java .................................................................................................................... 29
4.1 4η Άσκηση Java .................................................................................................................... 33
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
(compilers_essay.1a.q)
Ως αρχικό σύμβολο θεωρήστε το σύμβολο S. Τα τερματικά σύμβολα της γραμματικής είναι τα (
) x y z + και -.
Ερώτημα 1: Να συμπληρώσετε έναν πίνακα σαν τον παρακάτω για τα σύνολα First και Follow των
μη-τερματικών συμβόλων της γραμματικής. Στην απάντησή σας πρέπει, επίσης, να φαίνονται ανα-
λυτικά τα βήματα που κάνατε για να καταλήξετε στα σύνολα αυτά.
(compilers_essay.1b.q)
Ερώτημα 2: Να υπολογίσετε τον πίνακα ανίχνευσης του μοντέλου LL(1) ανίχνευσης για την γραμ-
ματική τεκμηριώνοντας τις επιλογές σας. Να αξιοποιήσετε την αρίθμηση των κανόνων της γραμ-
ματικής για τη συμπλήρωση του πίνακα.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Ερώτημα 1
ΣΥΝΟΛΑ First
Για τον υπολογισμό των συνόλων First χρησιμοποιούμε τον αλγόριθμο:
Διακρίνουμε τις εξής περιπτώσεις για την προτασιακή μορφή :
1.εάν είναι ένα γραμματικό σύμβολο ή , τότε
εάν είναι ένα τερματικό a, τότε First() = First(a) = {a}
εάν είναι το , τότε First() = First() = {}
ΣΥΝΟΛΑ Follow
Για τον υπολογισμό των συνόλων Follow χρησιμοποιούμε τον αλγόριθμο:
Έστω G=(S, N, T, P), A N και $ το τέλος μιας συμβολοσειράς
1. εάν Α = S, τότε $ Follow(Α)
2. p P, και Α περιλαμβάνεται στο δεξί μέρος του p με τη μορφή:
Β → γΑδ
i. εάν δ αρχίζει από τερματικό σύμβολο c, τότε c Follow(Α)
ii. εάν δ αρχίζει από μη-τερματικό σύμβολο, τότε προσθέτουμε το First(δ) –
{}
iii. εάν δ= ή δ * , τότε προσθέτουμε το Follow(B)
Το Α εμφανίζεται στο δεξί μέλος των κανόνων (1) και (7) ακολουθούμενο από ένα τερματικό
σύμβολο, άρα:
Follow(A) = {)} + {z} = { ), z }
Το B εμφανίζεται στο δεξί μέλος των κανόνων (4) και (5) ακολουθούμενο από
ε (άρα Follow(A) Follow(Β)) και ένα τερματικό σύμβολο, αντίστοιχα:
Follow(Β) = Follow(A) + {y} = { ), z, y }
Έτσι, έχουμε:
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
First Follow
S x( +-)yz$
A +-yε )z
B -ε )yz
Ερώτημα 2
(1) S à ( S A )
Ισχύει ότι First(( S A )) = { ( } , άρα προσθέτουμε τον κανόνα (1) στη θέση Μ[S, (] του πίνακα.
(2) S à x
Ισχύει ότι First(x) = { x } , άρα προσθέτουμε τον κανόνα (2) στη θέση Μ[S, x] του πίνακα.
(3) A à ε
Ισχύει ότι First(ε) = { ε }, οπότε χρησιμοποιούμε το σύνολο Follow(A) και προσθέτουμε τον κανόνα
(3) στις θέσεις Μ[Α, z] και Μ[Α, )] του πίνακα.
(4) Α à + S B
Ισχύει ότι First(+ S B) = { + } , άρα προσθέτουμε τον κανόνα (4) στη θέση Μ[A, +] του πίνακα.
(5) Α à B y
Ισχύει ότι First(B y) = { -, y } , άρα προσθέτουμε τον κανόνα (5) στις θέσεις Μ[Α, -] και Μ[Α, y] του
πίνακα.
(6) B à ε
Ισχύει ότι First(ε) = { ε }, οπότε χρησιμοποιούμε το σύνολο Follow(Β) και προσθέτουμε τον κανόνα
(6) στις θέσεις Μ[Β, y], Μ[B, z] και Μ[B, )] του πίνακα.
(7) B à - S A z
Ισχύει ότι First(- S A z) = { - } , άρα προσθέτουμε τον κανόνα (7) στη θέση Μ[B, -] του πίνακα.
Έτσι, έχουμε:
x y z + - ( ) $
S 2 - - - - 1 - -
A - 5 3 4 5 - 3 -
B - 6 6 - 7 - 6 -
Page Break
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
(compilers_essay.2a.q)
Ως αρχικό σύμβολο θεωρήστε το σύμβολο F. Τα τερματικά σύμβολα της γραμματικής είναι τα id *
( ) και ,.
Ερώτημα 1: Να συμπληρώσετε έναν πίνακα σαν τον παρακάτω για τα σύνολα First και Follow των
μη-τερματικών συμβόλων της γραμματικής. Στην απάντησή σας πρέπει, επίσης, να φαίνονται ανα-
λυτικά τα βήματα που κάνατε για να καταλήξετε στα σύνολα αυτά.
(compilers_essay.2b.q)
Ερώτημα 2: Να υπολογίσετε τον πίνακα ανίχνευσης του μοντέλου LL(1) ανίχνευσης για την γραμ-
ματική. Να αξιοποιήσετε την αρίθμηση των κανόνων της γραμματικής για τη συμπλήρωση του πί-
νακα.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Ερώτημα 1
ΣΥΝΟΛΑ First
Για τον υπολογισμό των συνόλων First χρησιμοποιούμε τον αλγόριθμο:
Διακρίνουμε τις εξής περιπτώσεις για την προτασιακή μορφή :
1.εάν είναι ένα γραμματικό σύμβολο ή , τότε
εάν είναι ένα τερματικό a, τότε First() = First(a) = {a}
εάν είναι το , τότε First() = First() = {}
ΣΥΝΟΛΑ Follow
Για τον υπολογισμό των συνόλων Follow χρησιμοποιούμε τον αλγόριθμο:
Έστω G=(S, N, T, P), A N και $ το τέλος μιας συμβολοσειράς
1. εάν Α = S, τότε $ Follow(Α)
2. p P, και Α περιλαμβάνεται στο δεξί μέρος του p με τη μορφή:
Β → γΑδ
i. εάν δ αρχίζει από τερματικό σύμβολο c, τότε c Follow(Α)
ii. εάν δ αρχίζει από μη-τερματικό σύμβολο, τότε προσθέτουμε το First(δ) –
{}
iii. εάν δ= ή δ * , τότε προσθέτουμε το Follow(B)
Το T εμφανίζεται στο δεξί μέλος των κανόνων (1), (5) και (7) ακολουθούμενο από ένα τερ-
ματικό σύμβολο, άρα:
Follow(T) = {id}
Το X εμφανίζεται στο δεξί μέλος των κανόνων (2) και (3) ακολουθούμενο από ε:
Follow(X) = Follow(T) = { id }
Το A εμφανίζεται στο δεξί μέλος του κανόνα (1) ακολουθούμενο από τερματικό σύμβολο:
Follow(Α) = { ) }
Το Ζ εμφανίζεται στο δεξί μέλος των κανόνων (5) και (7) ακολουθούμενο από ε:
Follow(Ζ) = Follow(Α) = { ) }
Έτσι, έχουμε:
First Follow
F id $
T id id
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
X ε * id
A ε id )
Z ε , )
Ερώτημα 2
(1) F à T id (A)
Ισχύει ότι First(T id (A)) = { id } , άρα προσθέτουμε τον κανόνα (1) στη θέση Μ[F, id] του πίνακα.
(2) T à id X
Ισχύει ότι First(id X) = { id } , άρα προσθέτουμε τον κανόνα (2) στη θέση Μ[T, id] του πίνακα.
(3) X à *X
Ισχύει ότι First(*X) = { * }, άρα προσθέτουμε τον κανόνα (3) στη θέση Μ[X, *] του πίνακα.
(4) X à ε
Ισχύει ότι First(ε) = { ε }, οπότε χρησιμοποιούμε το σύνολο Follow(Χ) και προσθέτουμε τον κανόνα
(4) στη θέση Μ[Χ, id] του πίνακα.
(5) Α à T id Z
Ισχύει ότι First(T id Z) = { id } , άρα προσθέτουμε τον κανόνα (5) στη θέση Μ[A, id] του πίνακα.
(6) A à ε
Ισχύει ότι First(ε) = { ε }, οπότε χρησιμοποιούμε το σύνολο Follow(A) και προσθέτουμε τον κανόνα
(6) στη θέση Μ[A, )] του πίνακα.
(7) Z à , T id Z
Ισχύει ότι First(, T id Z) = { , } , άρα προσθέτουμε τον κανόνα (7) στη θέση Μ[Z, ,] του πίνακα.
(8) Z à ε
Ισχύει ότι First(ε) = { ε }, οπότε χρησιμοποιούμε το σύνολο Follow(Z) και προσθέτουμε τον κανόνα
(8) στη θέση Μ[Z, )] του πίνακα.
Έτσι, έχουμε:
id * ( ) , $
F 1 - - - - -
T 2 - - - - -
X 4 3 - - - -
A 5 - - 6 - -
Z - - - 8 7 -
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
(compilers_essay.3a.q)
Ως αρχικό σύμβολο θεωρήστε το σύμβολο GMPL. Τα τερματικά σύμβολα της γραμματικής είναι
τα start end fwd bwd ver hor και free.
Ερώτημα 1: Να συμπληρώσετε έναν πίνακα σαν τον παρακάτω για τα σύνολα First και Follow των
μη-τερματικών συμβόλων της γραμματικής. Στην απάντησή σας πρέπει, επίσης, να φαίνονται ανα-
λυτικά τα βήματα που κάνατε για να καταλήξετε στα σύνολα αυτά.
(compilers_essay.3b.q)
Ερώτημα 2: Να υπολογίσετε τον πίνακα ανίχνευσης του μοντέλου LL(1) ανίχνευσης για την γραμ-
ματική. Να αξιοποιήσετε την αρίθμηση των κανόνων της γραμματικής για τη συμπλήρωση του πί-
νακα.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Ερώτημα 1
ΣΥΝΟΛΑ First
Για τον υπολογισμό των συνόλων First χρησιμοποιούμε τον αλγόριθμο:
Διακρίνουμε τις εξής περιπτώσεις για την προτασιακή μορφή :
1.εάν είναι ένα γραμματικό σύμβολο ή , τότε
εάν είναι ένα τερματικό a, τότε First() = First(a) = {a}
εάν είναι το , τότε First() = First() = {}
ΣΥΝΟΛΑ Follow
Για τον υπολογισμό των συνόλων Follow χρησιμοποιούμε τον αλγόριθμο:
Έστω G=(S, N, T, P), A N και $ το τέλος μιας συμβολοσειράς
1. εάν Α = S, τότε $ Follow(Α)
2. p P, και Α περιλαμβάνεται στο δεξί μέρος του p με τη μορφή:
Β → γΑδ
i. εάν δ αρχίζει από τερματικό σύμβολο c, τότε c Follow(Α)
ii. εάν δ αρχίζει από μη-τερματικό σύμβολο, τότε προσθέτουμε το First(δ) –
{}
iii. εάν δ= ή δ * , τότε προσθέτουμε το Follow(B)
Το CLIP εμφανίζεται στο δεξί μέλος των κανόνων (1) και (6) ακολουθούμενο από ένα τερμα-
τικό σύμβολο, άρα:
Follow(CLIP) = {end} + {free} = { end, free }
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Το SUFF εμφανίζεται στο δεξί μέλος των κανόνων (3) και (4) ακολουθούμενο από ένα τερμα-
τικό σύμβολο και από ε (άρα Follow(CLIP) Follow(SUFF)), αντίστοιχα:
Follow(SUFF) = {hor} + Follow(CLIP) = { hor, end, free }
Έτσι, έχουμε:
First Follow
GMPL ver start $ fwd bwd end free hor
CLIP fwd bwd hor ε end free
SUFF bwd ε end free hor
Ερώτημα 2
Δημιουργήστε διάγραμμα κλάσεων από τον παρακάτω κώδικα Java. Αγνοήστε τις κλάσεις
συστήματος.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Δημιουργήστε διάγραμμα κλάσεων από τον παρακάτω κώδικα Java. Αγνοήστε τις κλάσεις
συστήματος.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Δημιουργήστε διάγραμμα κλάσεων από τον παρακάτω κώδικα Java. Αγνοήστε τις κλάσεις
συστήματος.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Μια εφαρμογή διαχειρίζεται αρχεία και φακέλους ενός μέσου αποθήκευσης Η/Υ. Συγκεκριμένα τόσο τα αρ-
χεία όσο και οι φάκελοι αποτελούν στοιχεία αρχειοθέτησης. Κάθε στοιχείο αρχειοθέτησης (αρχείο ή φάκε-
λος) εκτός από τον αρχικό φάκελο (root) μπορεί ανήκει σε κάποιο άλλο στοιχείο αρχειοθέτησης (φάκελος).
Ένας φάκελος μπορεί να περιέχει ένα σύνολο από στοιχεία αρχειοθέτησης (αρχεία και φακέλους).
Δίνεται η κλάση ArchiveElement η οποία αναφέρεται στα στοιχεία αρχειοθέτησης
α) Υλοποιήστε τον κατασκευαστή ArchiveElement(String name, ArchiveElement parent) στην κλάση Ar-
chiveElement. O κατασκευαστής θα πρέπει επιπλέον:
1. Να υλοποιεί έλεγχο ότι το αντικείμενο parent είναι φάκελος και όχι αρχείο. Σε περίπτωση που το
αντικείμενο είναι αρχείο να προκαλείται εξαίρεση.
2. Να ενημερώνεται το πεδίο elems του φακέλου στον οποίο θα ανήκει το στοιχείο αρχειοθέτησης
που δημιουργεί ο κατασκευαστής.
β) Στο σημείο Α της κλάσης ArchiveFile δημιουργήστε τα παρακάτω στοιχεία αρχειοθέτησης:
• Φάκελο με όνομα Tmp που είναι ο αρχικός φάκελος.
• Φάκελο με όνομα Backup που ανήκει στο φάκελο Tmp.
• Αρχείο με όνομα Note1.txt που έχει μέγεθος 45.2 και ανήκει στο φάκελο Tmp.
• Αρχείο με όνομα Note2.txt που έχει μέγεθος 32.6 και ανήκει στο φάκελο Backup.
• Αρχείο με όνομα Note3.txt που έχει μέγεθος 12.2 και ανήκει στο φάκελο Backup.
γ) Υλοποιήστε τη μέθοδο getSize(), η οποία θα επιστρέφει το μέγεθος ενός αρχείου ή ενός φακέλου. Το μέ-
γεθος ενός φακέλου υπολογίζεται ως το άθροισμα των μεγεθών των στοιχείων αρχειοθέτησης που περιέ-
χει.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Ερώτημα Α
ΚΛΑΣΗ ArchiveElement
ΚΛΑΣΗ Folder
ΚΛΑΣΗ File
Ερώτημα Β
ΚΛΑΣΗ ArchiveFile
Ερώτημα Γ
ΚΛΑΣΗ ArchiveElement
ΚΛΑΣΗ Folder
ΚΛΑΣΗ File
Μια εφαρμογή διαχειρίζεται αρχεία τραγουδιών και λίστες αρχείων τραγουδιών. Συγκεκριμένα τόσο τα αρ-
χεία τραγουδιών όσο και οι λίστες αποτελούν στοιχεία αρχειοθέτησης. Κάθε στοιχείο αρχειοθέτησης (τρα-
γούδι ή λίστα) μπορεί να ανήκει σε κάποιο άλλο στοιχείο αρχειοθέτησης (λίστα). Μια λίστα μπορεί να πε-
ριέχει ένα σύνολο από στοιχεία αρχειοθέτησης (τραγούδια και λίστες).
Δίνεται η κλάση ArciveElement η οποία αναφέρεται στα στοιχεία αρχειοθέτησης.
α) Υλοποιήστε τον κατασκευαστή ArchiveElement(String name, ArchiveElement parent) στην κλάση Ar-
chiveElement. O κατασκευαστής θα πρέπει επιπλέον:
1. Να υλοποιεί έλεγχο ότι το αντικείμενο parent είναι λίστα τραγουδιών και όχι αρχείο τραγουδιού.
Σε περίπτωση που το αντικείμενο είναι αρχείο τραγουδιού να προκαλείται εξαίρεση.
2. Να ενημερώνεται το πεδίο elems της λίστας τραγουδιών στην οποία θα ανήκει το στοιχείο αρ-
χειοθέτησης που δημιουργεί ο κατασκευαστής.
β) Στο σημείο Α της κλάσης ArchiveFile δημιουργήστε τα παρακάτω στοιχεία αρχειοθέτησης:
• Λίστα τραγουδιών με όνομα «Νησιώτικα 1».
• Λίστα τραγουδιών με όνομα «Νησιώτικα 2» που περιέχεται στη λίστα τραγουδιών «Νησιώτικα 1».
• Αρχείο τραγουδιού με τίτλο «Λυγαριά», έχει διάρκεια 125 sec και ανήκει στη λίστα «Νησιώτικα 1».
• Αρχείο τραγουδιού με τίτλο «Ικαριώτικο», έχει διάρκεια 205 sec και ανήκει στη λίστα «Νησιώτικα 2».
• Αρχείο τραγουδιού με τίτλο «Λυγαριά», έχει διάρκεια 125 sec και ανήκει στη λίστα «Νησιώτικα 2».
γ) Υλοποιήστε τη μέθοδο getDuration(), η οποία θα επιστρέφει τη διάρκεια ενός αρχείου τραγουδιού ή μιας
λίστας τραγουδιών. Η διάρκεια μια λίστας τραγουδιών υπολογίζεται ως το άθροισμα των διαρκειών των
στοιχείων αρχειοθέτησης που περιέχει.
Απάντηση
Ερώτημα Α
ΚΛΑΣΗ ArchiveElement
ΚΛΑΣΗ SongList
ΚΛΑΣΗ SongFile
Ερώτημα Β
ΚΛΑΣΗ ArchiveFile
Ερώτημα Γ
ΚΛΑΣΗ ArchiveElement
ΚΛΑΣΗ SongList
ΚΛΑΣΗ SongFile
Φτιάξτε μια εφαρμογή η οποία να ελέγχει αν ο αριθμός μιας κάρτας είναι σωστός ή όχι. Το σύστημα θα
υποστηρίζει δύο είδη καρτών, τις πιστωτικές και τις χρεωστικές.
Ο κωδικός μιας κάρτας αποτελείται από 10 ψηφία.
Α) Για την πιστωτική κάρτα ο έλεγχος γίνεται ως εξής:
1) Το τελευταίο ψηφίο είναι το ψηφίο ελέγχου και αφαιρείται
2) Τα υπόλοιπα ψηφία αντιστρέφονται
3) Τα νούμερα στις μονές θέσεις διπλασιάζονται. Αν το νούμερο έχει δύο ψηφία τα αθροίζουμε
ώστε να προκύψει ένα ψηφίο
4) Προσθέτουμε όλα τα ψηφία
5) Αφαιρούμε από το 10 το τελευταίο ψηφίο του αριθμού του βήματος 4
Παράδειγμα
Ο αριθμός κάρτας είναι 1234567897
Βήμα 1 --> 123456789
Βήμα 2 --> 987654321
Βήμα 3 --> 9*2 --> 18--> 1+8=9
7*2-->14 --> 1+4=5
5*2-->10 -->1+0=1
3*2--> 6
1*2-->2
Ο αριθμός γίνεται 9 8 5 6 1 4 6 2 2
Βήμα 4 --> Προσθέτουμε τους αριθμούς
9+8+5+6+1+4+6+2+2 =43
Βήμα 5 --> 10-3 = 7 (κρατάμε το 3 από τον αριθμό 43)
Ο αριθμός 7 είναι ίδιος με το ψηφίο ελέγχου άρα ο αριθμός της κάρτας είναι σωστός.
Β) Για τη χρεωστική κάρτα θα γίνεται ο ίδιος έλεγχος και ελέγχουμε επίσης αν το νούμερο CSV (ένα τριψή-
φιο νούμερο που βρίσκεται στο πίσω μέρος της κάρτας) είναι ίδιο με τα 3 πρώτα ψηφία της κάρτας. Το
CVC θα δίνεται κατά την κατασκευή του αντικειμένου.
Θα πρέπει να δημιουργηθεί πρόγραμμα το οποίο υλοποιεί τις παρακάτω κλάσεις μαζί με τις απαιτούμενες
μεθόδους:
a) Card b) CreditCard c) DebitCard και d) CheckCard που περιέχει τη μέθοδο main.
Η εφαρμογή θα υλοποιεί τον παραπάνω αλγόριθμο και θα δημιουργεί 4 κάρτες
• δύο πιστωτικές, μια με σωστό νούμερο και μια με λανθασμένο και
• δύο χρεωστικές, μία με σωστό νούμερο και μια με λανθασμένο
Στη συνέχεια, να καλείται μέθοδος η οποία θα τυπώνεται το είδος της κάρτας, το νούμερο της κάρτας και
αν είναι σωστό ή λανθασμένο.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Κλάση CheckCard
Κλάση Card
package checkcard;
long cardNumber;
boolean cardType; // true for credit card false for debit
long num=cardNumber;
// get check digit
int check=(int)(num%10);
int sum=0;
if (next>9)
next=(next%10) + (next/10);
}
}
Κλάση CreditCard
package checkcard;
@Override
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Κλάση DebitCard
package checkcard;
@Override
public boolean validateCard() {
boolean firstCheckResult;
boolean secondCheckResult;
firstCheckResult=super.validateCard();
@Override
public String toString()
{
if (validateCard())
return getCardTypeS()+"Card with number :" + getCardNumber()+"
and CVC number "+this.cvcNum+" is Correct";
else
return getCardTypeS()+"Card with number :" + getCardNumber()+"
and CVC number "+this.cvcNum+" is NOT Correct";
}
}
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Απάντηση
Κλάση GenerateCard
package GenerateCards;
import java.util.Date;
SimpleCard sCard1;
sCard1 = new SimpleCard("PANOS FITSILIS", new Date(2022,12,31));
System.out.println(sCard1.toString());
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Κλάση Card
package GenerateCards;
import java.util.Date;
import java.util.Random;
String cardNumber;
String ownerName;
Date expireDate;
boolean cardType; // true for sumple card false for business card
int sum=0;
if (next>9)
next=(next%10) + (next/10);
return finalCardNumber;
}
}
}
Κλάση SimpleCard
package GenerateCards;
import java.util.Date;
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ ΠΛΗ24 «ΣΧΕΔΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ»
ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ: 2020-2021
Κλάση BusinessCard
package GenerateCards;
import java.util.Date;
@Override
public String generateCardNumber() {
return "E"+super.generateCardNumber();
}
}