an:3 are:6 a:10

Σχετικά έγγραφα
50 Ketseo,Theoni Sarif,Omar 104

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

fall2018/k22/home m1436+at-di.

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

waitpid(), read(), write(), pipe(), mkfifo() κ.α.).

ABC3341, CCD2345, ,... CCDA2345, , ,00E

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εγχειρίδιο Χρήσης για Διαχειριστές. Πλατφόρμα Μεταφόρτωσης και Μετατροπής Βίντεο

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών. Ένα στοιχείο γράφεται ως, όπου κάθε.

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

ΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ

Το Λειτουργικό Σύστημα MS-DOS

Εισαγωγή στο περιβάλλον Code::Blocks

Οδηγός Βήμα-Βήμα για να εγκαταστήσετε τα Windows 7 στον Η/Υ σας

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

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

Εγχειρίδιο Χρήσης για Εκπαιδευτές/Διοικητικούς. Πλατφόρμα Μεταφόρτωσης και Μετατροπής Βίντεο

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Σημειώνουμε ότι τα αρχεία περιλαμβάνουν κανονικά αρχεία, καταλόγους και συνδέσμους (links). Οι αντίστοιχες εντολές είναι οι εξής:

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Python. 1η Ομάδα Ασκήσεων

1. Απαιτήσεις εργασίας

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

Δομές Δεδομένων Εργαστηριακή Άσκηση Γκόγκος Νίκος Α.Μ.: 4973 Έτος: 3 ο gkogkos@ceid.upatras.gr. Εισαγωγικά:

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 18/12/12, 22:00

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012

ΕΓΧΕΙΡΙ ΙΟ Ο ΗΓΙΩΝ. Ηλεκτρονική Υποβολή Α.Π.. Οικοδοµοτεχνικών Έργων

HY-486 Αρχές Κατανεμημένου Υπολογισμού

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/10, 23:59

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Δομές Δεδομένων και Αλγόριθμοι

ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ 1. ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦ.

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εργαστήριο Βάσεων Δεδομένων

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Διαδικτυακά εργαλεία και υπηρεσίες στην καθημερινή ζωή

Οδηγός Χρήστη. Καλώς ήλθατε στο Ηλεκτρονικό Περιβάλλον Μάθησης.

Η διαδικτυακή εφαρμογή ESOG: Εγχειρίδιο χρήσης *

GreekLUG Ελεύθερο Λογισμικό & Λογισμικό Ανοικτού Κώδικα

... s12 s13 s14. Σχήμα1: ΙεραρχίαΔιεργασιώνμε l=3καιβάθος d=3. Οκάθεεργάτης(worker)δουλεύειμετο 1/27του αρχείου των ψήφων.

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Πως δημιουργούμε ένα νέο αρχείο κειμένου; Με τρεις τρόπους:

Χρήση Η/Υ & Διαχείριση Αρχείων

Λύσεις για τις ασκήσεις του lab5

Διαδικασιακός Προγραμματισμός

Τοποθετήστε τη δισκέτα στο drive B και σε περιβάλλον MS-DOS πληκτρολογήστε: B:

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 4/11/2014, 22:00

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Διαχείριση Βάσης Δεδομένων (dbadmin)

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 25/11/12, 22:00

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Κέντρο Επαγγελματικής Κατάρτισης. Σταδίου 5, Σύνταγμα

Εισαγωγή στην Αριθμητική Ανάλυση

Θέματα Υπολογισμού στον Πολιτισμό - Δένδρα. Δένδρα

Προγραμματισμός I (Θ)

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δημιουργία μιας εφαρμογής Java με το NetBeans

Δυναμικά Πολυεπίπεδα Ευρετήρια (Β-δένδρα) Μ.Χατζόπουλος 1

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Transcript:

Άσκηση 1 Προγραμματισμός Συστήματος Προθεσμία: 18 Μαΐου 2014 Σ αυτή την άσκηση θα υλοποιήσετε ένα σύστημα auto-complete κατά τη διάρκεια πληκτρολόγησης. Ο πυρήνας του συστήματος είναι μια δομή trie (απλό δέντρο από προθέματα λέξεων) επαυξημένο με συχνότητες εμφάνισης λέξεων. Συγκεκριμένα θα χρειαστεί να φορτώσετε ένα εξωτερικό λεξικό σε μια δομή trie. Κάθε μονοπάτι από τη ρίζα μέχρι κάποιο κόμβο της δενδρικής αυτής δομής αντιστοιχεί σε ένα πρόθεμα λέξης, κι έτσι τα κοινά προθέματα λέξεων φυλάσσονται μία φορά εξασφαλίζοντας χώρο μνήμης. Θεωρούμε ότι οι λέξεις μας αποτελούνται μόνο από λατινικούς χαρακτήρες και στη δομή αγνοούνται τα κεφαλαία γράμματα, αν και στην έξοδο διατηρούνται όσα κεφαλαία έχει πληκτρολογήσει ο χρήστης, όπως υποδεικνύουν και τα παραδείγματα εκτέλεσης παρακάτω. Περιγραφή Δομής. Ενα trie (βλ. http://en.wikipedia.org/wiki/trie) είναι ουσιαστικά μία δενδρική δομή η οποία συσχετίζει κλειδιά τύπου συμβολοσειράς με τιμές (οποιουδήποτε τύπου), κατ ανάλογο τρόπο με ένα hash-table. Εχει τα εξής χαρακτηριστικά: (i) οι τιμές αποθηκεύονται στα φύλλα, (ii) κάθε ακμή επισημαίνεται με ένα σύμβολο, (iii) τα κλειδιά δεν αποθηκεύονται ξεχωριστά σε έναν κόμβο το καθένα, αλλά το κλειδί που αφορά μία τιμή σε κάποιο φύλλο σχηματίζεται από την συνένωση όλων των (συμβόλων των) ακμών από τη ρίζα μέχρι και το φύλλο αυτό. Ετσι, για οποιοδήποτε υποδέντρο, τα κλειδιά που αποθηκεύει έχουν κοινό πρόθεμα τη συμβολοσειρά που σχηματίζεται από τη ρίζα του trie μέχρι και τη ρίζα του υποδέντρου αυτού. Η ακριβής δομή είναι ένα παραλλαγμένο trie με τις εξής τροποποιήσεις/εξειδικεύσεις: ολόκληρες λέξεις αναπαρίστανται από φύλλα του δέντρου και όχι από εσωτερικούς κόμβους κάθε φύλλο κρατά τη συχνότητα εμφάνισης της λέξης που αντιπροσωπεύει κάθε εσωτερικός κόμβος κρατά τα N (όπου N είναι μια compile-time σταθερά 1 ) πιο συχνά φύλλα του υποδένδρου του. Η δομή θα πρέπει να γυρνά σε σταθερό χρόνο (δηλαδή χωρίς έρευνα ολόκληρου υποδένδρου) τις N πιο συχνές λέξεις για κάθε πρόθεμα. Συμβάσεις. 1. Κάποια συμβολοσειρά μπορεί να είναι και πρόθεμα και ολόκληρη λέξη, αλλά οι δύο της αυτές ιδιότητες αναπαρίστανται από ξεχωριστούς κόμβους του δέντρου (εσωτερικούς έναντι φύλλων). 2. Για όλα τα φύλλα η ακμή από τον πατέρα τους έχει την ειδική τιμή "" αντί κανονικού συμβόλου. 3. Οι αριθμοί στα φύλλα αναπαριστούν τη συχνότητα εμφάνισης της εκάστοτε λέξης. 1 Η σταθερά αυτή θα πρέπει να είναι εύκολα παραμετροποιήσιμη κατά τη μεταγλώττιση. 1

Ακολουθεί ένα παράδειγμα ενός trie με βάση τις παραπάνω συμβάσεις και παραδοχές. t ant:1 n an:3 a r e are:6 a:10 Αυτό το trie αναπαριστά 4 λέξεις (a, an, ant, are) που εμφανίζονται στα φύλλα μαζί με τις συχνότητες εμφάνισής τους. Το trie έχει εσωτερικούς κόμβους που αναπαριστούν τα προθέματα a, an, ant, ar, are. Σημειώστε πως οι λέξεις που εμφανίζονται στα φύλλα εξυπηρετούν απλά την οπτικοποίηση του δέντρου και δεν θα πρέπει στη πράξη να αποθηκεύονται αυτούσιες σε κάποιο κόμβο, καθώς μπορούν να αναπαραχθούν ακολουθώντας το μονοπάτι από τη ρίζα μέχρι και το εκάστοτε φύλλο. Η δομή που θα υλοποιήσετε θα είναι λίγο πιο πολύπλοκη από το παραπάνω απλοποιημένο σχήμα ως προς τα εξής: Κάθε εσωτερικός κόμβος, n, κρατάει τα N φύλλα με τη μεγαλύτερη συχνότητα στο υποδένδρο με ρίζα τον n. Δηλαδή αν N = 2, η ρίζα του παραπάνω δένδρου θα πρέπει να δείχνει (μέσω οποιασδήποτε δομής, της επιλογής σας) στα φύλλα *a:10* και *are:6*, ο εσωτερικός κόμβος *an* θα πρέπει να δείχνει στα φύλλα *an:3* και *ant:1*, κ.ο.κ. Αν φυσικά δεν υπάρχουν N φύλλα στο υποδένδρο, ο κόμβος δείχνει σε όσα υπάρχουν. Κάθε κόμβος χρειάζεται δείκτη στο γονιό του, για ανανέωση της πληροφορίας «πιο συχνών φύλλων στο υποδένδρο». Οταν δηλαδή η συχνότητα ενός φύλλου αλλάξει, αυτή η ανανέωση θα διαδοθεί στο γονιό του και πιθανόν να αλλάξει την πληροφορία των N πιο συχνών λέξεων κάτω από τον γονιό αυτό. Παρόμοια αν η πληροφορία αυτή αλλάξει, θα μεταδοθεί στον γονιό του γονιού, κ.ο.κ., έως ίσως και τη ρίζα του δέντρου. Οι συχνότητες ανανεώνονται κάθε φορά που ολοκληρώνεται η πληκτρολόγηση μίας νέας λέξης από τον χρήστη με οποιοδήποτε τρόπο, αυξάνοντας το μετρητή εμφανίσεων της λέξης αυτής. 2

Λεπτομέρειες Υλοποίησης. Κατά την εκτέλεση του προγράμματος ο χρήστης θα πληκτρολογεί κανονικά κείμενο (το οποίο θεωρούμε στα πλαίσια αυτής της άσκησης ότι θα αποτελείται αυστηρά από λατινικούς χαρακτήρες) ως input του προγράμματος, ωστόσο κάποια πλήκτρα θα έχουν ιδιαίτερη συμπεριφορά. Αυτά είναι τα ακόλουθα: TAB Το πλήκτρο αυτό θα ενεργοποιεί την εμφάνιση των πιθανών λέξεων, οι ο- ποίες ταιριάζουν με την τρέχουσα λέξη-πρόθεμα (αγνοώντας διαφορές λόγω πεζών ή κεφαλαίων γραμμάτων, δηλαδή το Del είναι έγκυρο πρόθεμα της λέξης delete ), και θα τις εμφανίζει στην επόμενη γραμμή, με κενά ανάμεσά τους. Σε περίπτωση που μόνο μία λέξη ταιριάζει, τότε απλά θα συμπληρώνει τη λέξη και η πληκτρολόγηση θα συνεχίζει στην ίδια γραμμή. Το (μέγιστο) πλήθος των λέξεων που εμφανίζονται στη νέα γραμμή θα καθορίζεται από τη σταθερά N και θα πρέπει το πρόγραμμα να είναι εύκολα παραμετροποιήσιμο ως προς αυτή, κατά τη μεταγλώττιση. Η default τιμή αυτής της σταθεράς θα είναι 5. Οι λέξεις που εμφανίζονται θα πρέπει επίσης να είναι αλφαριθμητικά ταξινομημένες. 1... 9 Τα πλήκτρα αυτά θα είναι ενεργά μόνο αφού ο χρήστης έχει πατήσει το πλήκτρο TAB κι έχει εμφανιστεί η γραμμή με τις πιθανές λέξεις για συμπλήρωση. Τότε, πληκτρολογώντας αυτό το νούμερο θα συμπληρώνεται η λέξη στην οποία αυτό αντιστοιχεί (π.χ., με 3 θα διαλέγεται η 3 η λέξη). Αν το νούμερο που εισήχθηκε είναι μεγαλύτερο από τη σταθερά N ή από τις διαθέσιμες λέξεις, τότε δεν θα έχει κανένα αποτέλεσμα. Αν μετά το TAB και την εμφάνιση των πιθανών λέξεων προς συμπλήρωση, ο χρήστης πληκτρολογήσει έναν χαρακτήρα που δεν εμπίπτει στις παραπάνω κατηγορίες, τότε οι λέξεις προς συμπλήρωση αγνοούνται και η πληκτρολόγηση συνεχίζει κανονικά από το σημείο που ήταν (ουσιαστικά αντιγράφοντας την τελευταία γραμμή ως είχε). Η γραμμή συμπλήρωσης θα πρέπει να εκτυπώνεται στο ρεύμα λαθών (stderr), ώστε να μπορεί να διαχωριστεί από την έξοδο του προγράμματος. Command-line Options. εντολών:./typing-assistant [-d PATH] Το πρόγραμμα θα καλείται ως εξής, από τη γραμμή 1. Η επιλογή -d PATH καθορίζει την τοποθεσία του λεξικού, το οποίο διαβάζεται από τον δίσκο. Σε περίπτωση που το όρισμα αυτό παραλείπεται, η default τοποθεσία του λεξικού είναι η "$HOME/.dict". Τα περιεχόμενα του λεξικού έχουν την ακόλουθη μορφή (μία λέξη ανά γραμμή), και δεν είναι απαραίτητα ταξινομημένα: about above abort aborted a b o l i s h... 3

Το πρόγραμμά σας θα πρέπει κατά την εκκίνησή του να διαβάζει αυτό το λεξικό και να το φορτώνει στη μνήμη σε μορφή trie. Επίσης, κατά την έξοδο του προγράμματος, θα πρέπει τα περιεχόμενα του λεξικού στον δίσκο να ανανεώνονται ώστε να προστίθενται τυχόν νέες λέξεις που έχει εισάγει ο χρήστης και δεν περιέχονταν στο λεξικό αρχικά. Οι συχνότητες εμφάνισης των λέξεων, οι οποίες αλλάζουν δυναμικά κατά την εκτέλεση, δεν θα αποθηκεύονται. Διαδικαστικά: Το πρόγραμμά σας θα πρέπει να τρέχει στα μηχανήματα Linux/Unix της σχολής. Υπεύθυνοι για την άσκηση αυτή (ερωτήσεις, αξιολόγηση, βαθμολόγηση, κτλ) είναι όλοι οι βοηθοί. Ονόματα και email θα βρείτε στην ιστοσελίδα του μαθήματος. Για επιπρόσθετες ανακοινώσεις, παρακολουθείτε το forum του μαθήματος στο piazza.com για να δείτε ερωτήσεις/απαντήσεις/διευκρινήσεις που δίνονται σχετικά με την άσκηση. Η παρακολούθηση του φόρουμ στο piazza.com είναι υποχρεωτική. Τι πρέπει να παραδοθεί: 1. Ολη η δουλειά σας σε ένα tar-file που να περιέχει όλα τα source files, header files, Makefile. Προσοχή: φροντίστε να τροποποιήσετε τα δικαιώματα αυτού του αρχείου πριν την υποβολή, π.χ. με την εντολή chmod 755 OnomaEponymoProject1.tar (περισσότερα στη σελίδα του μαθήματος). 2. Μια σύντομη περιγραφή (1 2 σελίδες) για τις επιλογές που κάνατε στο σχεδιασμό της άσκησης, σε μορφή PDF. 3. Οποιαδήποτε πηγή πληροφορίας, συμπεριλαμβανομένου και κώδικα που μπορεί να βρήκατε στο Διαδίκτυο θα πρέπει να αναφερθεί και στον πηγαίο κώδικά σας αλλά και στην παραπάνω αναφορά. Τι θα βαθμολογηθεί: 1. Η συμμόρφωση του κώδικά σας με τις προδιαγραφές της άσκησης. 2. Η οργάνωση και η αναγνωσιμότητα (μαζί με την ύπαρξη σχολίων) του κώδικα. 3. Η χρήση Makefile και η κομματιαστή σύμβολο-μετάφραση (separate compilation). 4. Η αναφορά που θα γράψετε και θα υποβάλετε μαζί με τον πηγαίο κώδικα σε μορφή PDF. Άλλες σημαντικές παρατηρήσεις: 1. Οι εργασίες είναι ατομικές. 2. Οποιος υποβάλλει / δείχνει κώδικα που δεν έχει γραφτεί από την ίδια/τον ίδιο μηδενίζεται στο μάθημα. 3. Αν και αναμένεται να συζητήσετε με φίλους και συνεργάτες το πως θα επιχειρήσετε να δώσετε λύση στο πρόβλημα, αντιγραφή κώδικα (οποιασδήποτε μορφής) είναι κάτι που δεν επιτρέπεται και δεν πρέπει να γίνει. Οποιοσδήποτε βρεθεί αναμεμειγμένος σε αντιγραφή κώδικα απλά παίρνει μηδέν στο μάθημα. Αυτό ισχύει για όλους όσους εμπλέκονται, ανεξάρτητα από το ποιος έδωσε/πήρε κλπ. 4. Το πρόγραμμά σας θα πρέπει να γραφτεί σε C (ή C++ χωρίς όμως STL extensions). 4

Παραδείγματα εκτέλεσης: The towtab > towards towel tower town -- έστω ότι ο χρήστης πληκτρολογεί 3 The tower... The towers of Zenith aspired abotab > abolish abort aborted about above The towers of Zenith aspired abovtab The towers of Zenith aspired above The towers of Zenith aspired ABOVTAB The towers of Zenith aspired ABOVE The towers of Zenith aspired AbovTAB The towers of Zenith aspired Above 5