'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Σχετικά έγγραφα
Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Εγγραφών

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Μπλοκ

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης

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

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

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι (ΗΥ120)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Εργαστήριο 9: Αρχεία

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

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

S, (5, -3, 34, -23, 7) ( *, _

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

2η Προγραµµατιστική Εργασία

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

Πίνακες Συμβόλων. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

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

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

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

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

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

Αικατερίνη Καμπάση, PhD. Τμήμα Προστασίας και Συντήρησης Πολιτισμικής Κληρονομιάς Α.Τ.Ε.Ι. Ιονίων Νήσων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Standard Template Library (STL) C++ library

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

i 1 Όσο i <> 100 επανάλαβε i i + 2 Γράψε A[i] Τέλος_επανάληψης

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

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

Μεθόδων Επίλυσης Προβλημάτων

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

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

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

ΘΕΜΑ 1ο. Μονάδες 10. Β. ίνεται το παρακάτω τμήμα αλγορίθμου: Όσο Ι < 10 επανάλαβε Εμφάνισε Ι Ι Ι + 3 Τέλος_επανάληψης ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Δομημένος Προγραμματισμός (ΤΛ1006)

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΘΕΜΑ 1ο. Μονάδες 10. Β. ίνεται το παρακάτω τμήμα αλγορίθμου: Όσο Ι < 10 επανάλαβε Εμφάνισε Ι Ι Ι + 3 Τέλος_επανάληψης ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

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

Δομημένος Προγραμματισμός

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Η βασική συνάρτηση προγράμματος main()

Κατακερματισμός (Hashing)

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Σημειωματάριο Δευτέρας 20 Νοε. 2017

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Να περιγραφεί η δομή επανάληψης Αρχή_επανάληψης Μέχρις_ότου

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Ανάπτυξη και Σχεδίαση Λογισμικού

Οι πράξεις της συνένωσης. Μ.Χατζόπουλος 1

Transcript:

Πληροφορική & Τηλεπικοινωνίες K18 Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2008 Αν. Καθηγητής Δημήτρης Γουνόπουλος Καθηγητής Γιάννης Ιωαννίδης 'Ασκηση 1: Στατικός Κατακερματισμός (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ Εισαγωγή Για την άσκηση αυτή, θα υλοποιήσετε μία μέθοδο προσπέλασης βασισμένη στον στατικό κατακερματισμό που υποστηρίζει την διεπαφή που περιγράφεται παρακάτω. Θα οργανώσετε ένα αρχείο δύο πεδίων σε κάδους σύμφωνα με μία συνάρτηση κατακερματισμού, η οποία θα εφαρμόζεται στο πρώτο από τα πεδία του αρχείου. Το αρχικό μέγεθος κάθε κάδου καθώς και κάθε καινούργια αλυσιδωτή προσθήκη σε περιπτώσεις υπερχείλισης θα αντιστοιχεί σε ένα μπλοκ του αρχείου, μεγέθους BLOCKSIZE = 512 bytes. Κάθε κάδος θα οργανώνεται σαν μία ακολουθία εγγραφών χωρίς καμμία ιδιαίτερη διάταξη. Τα ονόματα όλων των ρουτινών αρχίζουν με το πρόθεμα HT, ώστε να υποδεικνύουν το γεγονός ότι πρόκειται για υλοποίηση κατακερματισμού (κατά το Hash Table. H γλώσσα υλοποίησης είναι η C. Επισήμανση: Η άσκηση αυτή, καθώς και η επόμενη, θα γίνει σε ομάδες των δύο ή τριών φοιτητών. Επαφίεται σε σας να επιλέξετε το μέγεθος της ομάδας σας. Σύντομα θα ανακοινωθεί ο μηχανισμός με τον οποίο θα μπορέσετε να δηλώσετε τις ομάδες σας. Ρουτίνες υλοποίησης κατακερματισμού HT_Init( void HT_Init( void Η ρουτίνα αυτή χρησιμοποιείται για να αρχικοποιήσετε τις όποιες καθολικές (global εσωτερικές δομές δεδομένων αποφασίσετε ότι χρειάζεστε να έχετε για την χρήση του κατακερματισμού. Δεν έχει καμμία παράμετρο εισόδου και δεν παράγει καμμια έξοδο.

HT_CreateIndex( int HT_CreateIndex( char *filename, /* όνομα αρχείου */ char attrtype1, /* τύπος πρώτου πεδίου: 'c' (σειρά χαρακτήρων, 'i' (ακέραιος, 'f' (πραγματικός */ int attrlength1 /* μήκος πρώτου πεδίου: 4 γιά 'i' ή 'f', 1-255 γιά 'c' */ char attrtype2, /* τύπος δεύτερου πεδίου: 'c' (σειρά χαρακτήρων, 'i' (ακέραιος, 'f' (πραγματικός */ int attrlength2 /* μήκος δεύτερου πεδίου: 4 γιά 'i' ή 'f', 1-255 γιά 'c' */ int buckets /* αριθμός κάδων κατακερματισμού */ Η ρουτίνα αυτή δημιουργεί ένα αρχείο με όνομα filename βασισμένο στον κατακερματισμο. Ο τύπος και το μήκος του πρώτου πεδίου (αυτού που χρησιμοποιείται για τη συνάρτηση κατακερματισμού περιγράφονται από την δεύτερη και την τρίτη παράμετρο, αντίστοιχα. Παρόμοια, ο τύπος και το μήκος του δεύτερου πεδίου περιγράφονται από την τέταρτη και την πέμπτη παράμετρο, αντίστοιχα. Τέλος, ο αριθμός των κάδων κατακερματισμού αναφέρεται στην έκτη παράμετρο. Η δουλειά αυτής της ρουτίνας είναι να δημιουργήσει ένα καινούργιο αρχείο και να το αρχικοποιεί έτσι ώστε να αντιπροσωπεύει ένα άδειο αρχείο κατακερματισμού. Η ρουτίνα επιστρέφει HTE_OK εάν επιτύχει, ειδ' αλλοιώς κάποιον κωδικό λάθους. HT_DestroyIndex( int HT_DestroyIndex( char *filename /* όνομα αρχείου */ Η ρουτίνα αυτή καταστρέφει το αρχείο filename, σβήνοντας όλα τα δεδομένα του. Επιστρέφει HTE_OK εάν επιτύχει, ειδ' αλλοιώς κάποιον κωδικό λάθους. HT_OpenIndex( int HT_OpenIndex ( char *filename /* όνομα αρχείου */ Η ρουτίνα αυτή ανοίγει το αρχείο filename. Εάν το αρχείο ανοιχτεί κανονικά, η ρουτίνα επιστρέφει έναν μικρό μη αρνητικό ακέραιο, ο οποίος χρησιμοποιείται για να αναγνωρίζεται το αρχείο (όπως περιγράφουμε παρακάτω. Ειδ' αλλοιώς επιστρέφει κάποιον κωδικό λάθους. Θα πρέπει να κρατάτε στην μνήμη έναν πίνακα για όλα τα ανοιχτά αρχεία. Ο ακέραιος που επιστρέφει η HT_OpenIndex( είναι ο αριθμός της θέσης του πίνακα που αντιστοιχεί στο αρχείο αυτό. Σ' αυτόν τον πίνακα θα κρατάτε ο,τιδήποτε σχετικό κρίνετε ότι πρέπει να είναι άμεσα διαθέσιμο για κάθε ανοιχτό αρχείο (π.χ., γενικές πληροφορίες για το αρχείο, το αναγνωριστικό του αρχείου έτσι όπως έχει ανοιχθεί από το λειτουργικό σύστημα, κτλ. - χωρίς τα παραπάνω να θεωρούνται απαραίτητα. Μπορείτε να υποθέσετε ότι οποιαδήποτε στιγμή δεν θα υπάρχουν περισσότερα από MAXOPENFILES = 20 ανοιχτά αρχεία.

HT_CloseIndex( int HT_CloseIndex ( int filedesc /* αριθμός που αντιστοιχεί στο ανοιχτό αρχείο */ Η ρουτίνα αυτή κλείνει το αρχείο που υποδεικνύεται από την παράμετρό της. Επίσης σβήνει την όλη καταχώρηση που αντιστοιχεί στο αρχείο αυτό στον πίνακα ανοιχτών αρχείων. Επιστρέφει HTE_OK εάν το αρχείο κλείσει επιτυχώς, ειδ' αλλοιώς κάποιον κωδικό λάθους. HT_InsertEntry( int HT_InsertEntry( void *value1 /* τιμή του πεδίου-κλειδιού προς εισαγωγή */ void *value2 /* τιμή του δεύτερου πεδίου της εγγραφής προς εισαγωγή */ Η ρουτίνα αυτή εισάγει το ζευγάρι (value1, value2 στο αρχείο που υποδεικνύεται από την παράμετρο filedesc. Η παράμετρος value1 δείχνει στην τιμή του πεδίου-κλειδιού που εισάγεται στο αρχείο, και η παράμετρος value2 αντιπροσωπεύει το άλλο πεδίο της εγγραφής. Η ρουτίνα επιστρέφει HTE_OK εάν επιτύχει, ειδ' αλλοιώς κάποιον κωδικό λάθους. HT_DeleteEntry( int HT_DeleteEntry( void *value1 /* τιμή του πεδίου-κλειδιού προς απαλοιφή */ void *value2 /* τιμή του δεύτερου πεδίου της εγγραφής προς απαλοιφή */ Η ρουτίνα αυτή σβήνει το ζευγάρι (value1, value2 από το αρχείο που υποδεικνύεται από την παράμετρο filedesc. Επιστρέφει HTE_OK εάν επιτύχει, ειδ' αλλοιώς κάποιον κωδικό λάθους. HT_OpenIndexScan( int HT_OpenIndexScan( int op, /* τελεστής σύγκρισης */ void *value /* τιμή του πεδίου-κλειδιού προς σύγκριση */ Η ρουτίνα αυτή ανοίγει μία σάρωση του αρχείου που υποδεικνύεται από την παράμετρο filedesc. Η σάρωση έχει σκοπό να βρει τις εγγραφές των οποίων οι τιμές στο πεδίο-κλειδί του αρχείου ικανοποιούν τον τελεστή σύγκρισης op σε σχέση με την τιμή που δείχνει η παράμετρος value. Οι διάφοροι τελεστές σύγκρισης κωδικοποιούνται ώς εξής: 1 συμβολίζει EQUAL (δηλαδή, τιμή πεδίου = τιμή της value 2 συμβολίζει NOT EQUAL (δηλαδή, τιμή πεδίου!= τιμή της value

Η ρουτίνα επιστρέφει έναν μή αρνητικό ακέραιο ο οποίος αντιστοιχεί σε μία θέση κάποιου πίνακα που πρέπει να υλοποιήσετε και να κρατάτε ενήμερο σχετικά με όλες τις σαρώσεις αρχείων που είναι ανοιχτές κάθε στιγμή. Πιθανές πληροφορίες που χρειάζεται κανείς να κρατάει για κάθε ανοιχτή σάρωση σ' αυτόν τον πίνακα είναι το αναγνωριστικό της τελευταίας εγγραφής που διαβάστηκε, ο αριθμός που αντιστοιχεί στο ανοιχτό αρχείο που σαρώνεται, κτλ. (Θα πρέπει να σχεδιάσετε το περιεχόμενο κάθε καταχώρησης στον πίνακα αυτό με βάση αυτά που θα δείτε ότι πρέπει να ξέρετε. Μπορείτε να υποθέσετε ότι δεν θα υπάρχουν ποτέ πάνω από MAXSCANS = 20 ταυτόχρονες ανοιχτές σαρώσεις αρχείων. Εαν ο πίνακας σαρώσεων είναι γεμάτος, τότε η ρουτίνα επιστρέφει κάποιον κωδικό λάθους. HT_FindNextEntry( void *HT_FindNextEntry( int scandesc /* αριθμός που αντιστοιχεί στην ανοιχτή σάρωση */ Η ρουτίνα αυτή επιστρέφει την τιμή του δεύτερου πεδίου της επόμενης εγγραφής που ικανοποιεί την συνθήκη που καθορίζεται για την σάρωση που αντιστοιχεί στο scandesc. Επιστρέφει HTE_EOF αν δεν υπάρχουν άλλες εγγραφές που ικανοποιούν την συνθήκη. HT_CloseIndexScan( int HT_CloseIndexScan( int scandesc /* αριθμός που αντιστοιχεί στην ανοιχτή σάρωση */ Η ρουτίνα αυτή τερματίζει μία σάρωση ενός αρχείου και σβήνει την αντίστοιχη καταχώρηση από τον πίνακα ανοιχτών σαρώσεων. HT_PrintError( void HT_PrintError( char *errstring /* κείμενο για εκτύπωση */ Η ρουτίνα τυπώνει το κείμενο που δείχνει η παράμετρος errstring, και μετά τυπώνει το μήνυμα που αντιστοιχεί στο τελευταίο σφάλμα που προέκυψε από οποιαδήποτε από τις ρουτίνες. Για τον σκοπό αυτό, η ρουτίνα αυτή χρησιμοποιεί μία καθολική (global μεταβλητή HT_errno η οποία αποθηκεύει πάντα τον κωδικό του πλέον πρόσφατου σφάλματος. Ο κωδικός αυτός σφάλματος πρέπει πάντα να ενημερώνεται σωστά σε όλες τις άλλες ρουτίνες. Η ρουτίνα αυτή δεν έχει δική της τιμή επιστροφής. Σχόλια για την υλοποίηση Θέλουμε να σχολιάσουμε μερικά σημεία που προέκυψαν στις παραπάνω περιγραφές των ρουτινών, και να προτείνουμε κάποιες ιδέες υλοποίησης. Να επισημάνουμε, πάντως, ότι αυτές παραμένουν μόνο προτάσεις - εσείς μπορείτε να υλοποιήσετε τα πράγματα διαφορετικά. Οι διεπαφές των ρουτινών είνα τα μόνα πράγματα

που δεν μπορείτε να αλλάξετε. Τα αρχεία πρέπει να βασίζονται στον στατικό κατακερματισμό, ένα μπλοκ αρχείου για κάθε ατομικό τμήμα ενός κάδου. Θα πρέπει να υλοποιήσετε πλήρως τους αλγορίθμους αναζήτησης, εισαγωγής, και απαλοιφής που υπάρχουν για τον στατικό κατακερματισμό, συμπεριλαμβανομένης και της υπερχείλισης στη διάρκεια εισαγωγής δεδομένων. Δεν χρειάζεται να υλοποιήσετε κάποια έξυπνη μορφή απαλοιφής εγγραφών. Η υλοποίηση της HT_DeleteEntry( θα πρέπει απλά να σβήνει το υποδεικνυόμενο ζευγάρι από το αντίστοιχο μπλοκ, χωρίς να προχωρεί σε οποιαδήποτε συγχώνευση μπλοκ ενός κάδου που θα φαινόταν λογική, ούτε σε απελευθέρωση μπλοκ που αδειάζουν εντελώς. Θα πρέπει πάντως να μπορείτε να δεχθείτε απαλοιφές εγγραφών κατά την διάρκεια μιάς σάρωσης του αρχείου. Σχολιασμός, Έλεγχος Λαθών, και Γενικό Στυλ Όπως πάντοτε, αναμένεται καλός σχολιασμός του προγράμματος, και εσωτερικός (ανάμεσα στις γραμμές κώδικα και εξωτερικός (στην αρχή κάθε ρουτίνας. Ένας γενικός κανόνας είναι να σχολιάζετε τα προγράμματά σας σαν να πρόκειται να τα δώσετε σε κάποιον άλλον ο οποίος θα τα επεκτείνει και ο οποίος δεν έχει ιδέα για το τι κάνατε όταν τα γράφατε (και δεν μπορεί ούτε να σας βρει να σας ρωτήσει. Επίσης, θα πρέπει να ελέγχετε για διάφορα σφάλματα που μπορούν να προκύψουν και να βεβαιωθειτε ότι ο κώδικάς σας τερματίζει ομαλά, με μηνύματα που έχουν νόημα, σε όλες τις εισόδους που ικανοποιούν την παραπάνω περιγραφή. Διαδικαστικές Λεπτομέρειες Το τί ακριβώς θα παραδόσετε, πού θα βρείτε τα αρχεία με τα οποία θα ελέγξετε τελικά το πρόγραμμά σας, κτλ., θα ανακοινωθεί πολύ σύντομα. Τα προγράμματά σας θα πρέπει να δουλεύουν στα μηχανήματα του τμήματος (είτε στα sun (Unix είτε στα pc (Windows ώστε να μπορούν να ελεγχθούν. Ακόμη και αν δουλέψετε σε δικούς σας υπολογιστές θα πρέπει να βεβαιωθείτε ότι το τελικό αποτέλεσμα δουλεύει και εδώ τοπικά. Η έκδοση της C που θα χρησιμοποιήσετε πρέπει να έχει ακέραιους των 4 bytes και να επιτρέπει αλλαγή ερμηνείας τύπου δεδομένων (type casting.