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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαβλος, Επιμέλεια Μ.Χατζόπουλος Διαφάνεια 14-1

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

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

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 6: Δομές ευρετηρίων για αρχεία

HY150a Φροντιστήριο 3 24/11/2017

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

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

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

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

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

Προγραµµατιστική Εργασία 1 ο Μέρος

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

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

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

Δυναμικός Κατακερματισμός

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

Βάσεις Δεδομένων Ι 6. Ιδιότητες πεδίων. Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

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

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

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

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

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

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

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

scanf() scanf() stdin scanf() printf() int float double %lf float

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

ΠΑΙΓΝΙΑ Παιχνίδια Γενική Θεώρηση μεγιστοποιήσει την πιθανότητά

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

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 1. Βαθμός ΑΜ Εργ1.2 Σχόλια Εργ1.3 Σχόλια (20)

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Επεξεργασία Ερωτήσεων

FAIL PASS PASS οριακά

Πληροφορική 2. Δομές δεδομένων και αρχείων

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Βάσεις Δεδομένων. Εργαστήριο 1. Ηλεκτρονικοί Υπολογιστές ΙI. Ακαδημαϊκό Έτος Διαφάνεια 1. Κάπαρης Αναστάσιος

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Transcript:

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων (Ημερομηνία Παράδοσης: Δευτέρα 5/5/2008, 11:59μμ Εισαγωγή Στο επίπεδο αυτό, θα υλοποιήσετε ρουτίνες που προσφέρουν λειτουργικότητα ενός ευρετηρίου βασισμένου στη δομή των Β+ δένδρων. Αρχιτεκτονικά, το επίπεδο αυτό βρίσκεται παράλληλα με το επίπεδο Αρχείου Εγγραφών και επομένως χρησιμοποιεί τις ρουτίνες του επιπέδου Αρχείου Μπλοκ. Θα χρησιμοποιήσετε ένα αρχείο μπλοκ για να αναπαραστήσετε το Β+ δένδρο, έχοντας ένα μπλοκ από το αρχείο για κόμβο του δένδρου. Ο κώδικας που θα υλοποιήσετε θα υποστηρίζει την έννοια του δευτερεύοντος ευρετηρίου. Δηλαδή, το αρχείο εγγραφών δεν έχει καμμία δομή (επίπεδο HF, ενώ μπορεί να υπάρχει ένας απροσδιόριστος αριθμός από ευρετήρια σε διάφορα (ατομικά πεδία του αρχείου για να βοηθήσουν στη γρήγορη αναζήτηση τιμών σ' αυτά. Τα ονόματα όλων των ρουτινών αρχίζουν με το πρόθεμα AM, ώστε να υποδεικνύουν το γεγονός ότι πρόκειται για υλοποίηση ευρετηρίου (AM=Access Method. Οι συγκεκριμένες ρουτίνες περιγράφονται παρακάτω και θα υλοποιηθούν χρησιμοποιώντας τις ρουτίνες του επιπέδου BF. H γλώσσα υλοποίησης είναι και πάλι η C. Υπενθύμιση: Όλα τα μέρη της εργασίας αυτής θα υλοποιηθούν από ομάδες των δύο ή τριών φοιτητών, οι οποίες εκτός σοβαρών περιπτώσεων πρέπει να είναι οι ίδιες που παρέδωσαν και τα δύο πρώτα μέρη της εργασίας. Αν έχει υπάρξει η αλλαγή, ενημερώστε τον κο Πανταζάρα. Ρουτίνες Υλοποίησης Επιπέδου Ευρετηρίου Β+ Δένδρου AM_Init( void AM_Init( void Η ρουτίνα αυτή χρησιμοποιείται για να αρχικοποιήσετε τις όποιες καθολικές (global εσωτερικές δομές δεδομένων αποφασίσετε ότι χρειάζεστε να έχετε για την υλοποιήσετε το ευρετήριο Β+ δένδρου. Στο κατάλληλο σημείο, προφανώς μπορεί να καλεί και την BF_Init. Δεν έχει καμμία παράμετρο εισόδου και δεν παράγει καμμία έξοδο.

AM_CreateIndex( int AM_CreateIndex( char *filename, /* όνομα αρχείου που ευρετηριάζεται*/ int indexno, /* αύξων αριθμός ευρετηρίου για το αρχείο */ int attrlength /* μέγεθος πεδίου σε μπάιτ: 4 για 'i' ή 'f', 1-255 για 'c' */ Η ρουτίνα αυτή δημιουργεί και αρχικοποιεί ένα δευτερεύον ευρετήριο με όνομα filename.indexno στο αρχείο με όνομα filename. Η παράμετρος indexno πρέπει να έχει μοναδική τιμή για κάθε ευρετήριο που δημιουργείτε στο αρχείο, έτσι ώστε το σύνθετο όνομα του ευρετηρίου να είναι καθολικά μοναδικό για το επίπεδο BF. Ο τύπος και το μήκος των τιμών πάνω στις οποίες θα βασίζεται το ευρετήριο δίνονται από την τρίτη και την τέταρτη παράμετρο, αντίστοιχα. Η ρουτίνα δημιουργεί ένα άδειο Β+ δένδρο, καλώντας στο κατάλληλο σημείο την BF_CreateFile και αρχικοποιώντας το αρχείο που προκύπτει κατάλληλα. Μπορείτε να υποθέσετε ότι όλα τα ευρετήρια ενός αρχείου εγγραφών θα δημιουργούνται πάντα πριν εισαχθούν οποιεσδήποτε εγγραφές σ' αυτά. Η ρουτίνα επιστρέφει AME_OK εάν το καινούργιο ευρετήριο δημιουργηθεί με επιτυχία, ειδ' αλλοιώς κάποιον κωδικό σφάλματος. AM_InsertEntry( int AM_InsertEntry( char *value, /* δείκτης προς την τιμή που εισάγεται */ int recid /* αναγνωριστικό της εγγραφής του αρχείου που έχει την τιμή αυτή */ Η ρουτίνα εισάγει ένα ζευγάρι (*value,recid στο ευρετήριο που αναπαρίσταται από το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Η παράμετρος value δείχνει στην τιμή που εισάγεται ενώ η παράμετρος recid υποδεικνύει την εγγραφή του βασικού αρχείου η οποία περιέχει την τιμή αυτή. Η ρουτίνα επιστρέφει AME_OK αν η εισαγωγή είναι επιτυχής, ειδ' αλλοιώς έναν κωδικό σφάλματος του επιπέδου AM. AM_DeleteEntry( int AM_DeleteEntry( char *value, /* δείκτης προς την τιμή που εισάγεται */ int recid /* αναγνωριστικό της εγγραφής του αρχείου που έχει την τιμή αυτή */ Η ρουτίνα διαγράφει το ζευγάρι (*value,recid από το ευρετήριο που αναπαρίσταται από το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Η ρουτίνα επιστρέφει AME_OK εάν η διαγραφή επιτύχει ή κάποιον κωδικό σφάλματος του επιπέδου AM εάν κάτι δεν λειτουργήσει όπως πρέπει. AM_OpenIndexScan( int AM_OpenIndexScan(

int op, /* τελεστής σύγκρισης */ char *value /* δείκτης προς τιμή για σύγκριση */ Η ρουτίνα αυτή ξεκινά μια σάρωση των ζευγαριών του ευρετηρίου που αναπαρίσταται από το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Η σάρωση θα επιστρέφει τα αναγνωριστικά των εγγραφών (recid οι οποίες έχουν στο πεδίο του ευρετηρίου τιμές (*value που ικανοποιούν την καθορισμένη συνθήκη. Αν η παράμετρος value έχει μηδενικό δείκτη ως τιμή (null, τότε ξεκινά σάρωση όλων των εγγραφών ανεξαρτήτως των τιμών των παραμέτρων attrtype, attrlength, και op. Ειδ' αλλοιώς, ο δείκτης value δείχνει στην τιμή με την οποία τα αντίστοιχα σημεία των εγγραφών πρέπει να συγκριθούν σύμφωνα με τον τελεστή op. Ο μη αρνητικός ακέραιος που επιστρέφεται από τη ρουτίνα αντιπροσωπεύει το αναγνωριστικό της σάρωσης και πρέπει να αντιστοιχεί στη θέση ενός πίνακα που θα διατηρείτε στη μνήμη με πληροφορίες για όλες τις ενεργές σαρώσεις ευρετηρίων. Μπορείτε να υποθέσετε ότι οποιαδήποτε στιγμή δεν θα υπάρχουν περισσότερα από MAXSCANS = 20 ενεργές σαρώσεις ευρετηρίων. Αν ο πίνακας είναι γεμάτος, τότε η ρουτίνα επιστρέφει κάποιον κωδικό σφάλματος του επιπέδου AM. Η παράμετρος op καθορίζει τον τρόπο με τον οποίο η τιμή που δείνχει ο δείκτης value πρέπει να συγκριθεί με τις προσδιορισμένες τιμές από τις εγγραφές. ΟΙ διαφορετικές επιλογές για την τιμή της παραμέτρου op είναι οι εξής: 1 για EQUAL (δηλαδή, attribute = value 2 για LESS THAN (δηλαδή, attribute < value 3 για GREATER THAN (δηλαδή, attribute > value 4 για LESS THAN OR EQUAL (δηλαδή, attribute <= value 5 για GREATER THAN OR EQUAL (δηλαδή, attribute >= value 6 για NOT EQUAL (δηλαδή, attribute!= value AM_FindNextEntry( int AM_FindNextEntry( int scandesc /* αριθμός που αντιστοιχεί σε ενεργή σάρωση ευρετηρίου */ Αν πετύχει, η ρουτίνα αυτή επιστρέφει το αναγνωριστικό (recid της επόμενης εγγραφής που συναντά κατά τη σάρωση ευρετηρίου με αναγνωριστικό σάρωσης scandesc και που ικανοποιεί τη συνθήκη της σάρωσης. Ειδ' αλλοιώς, η ρουτίνα επιστρέφει AME_EOF εάν δεν υπάρχουν άλλες εγγραφές που ικανοποιούν τη συνθήκη, ή κάποιον άλλον κωδικό σφάλματος εάν κάτι δεν λειτουργήσει όπως πρέπει. (Παρατήρηση: Πληροφορίες όπως το αναγνωριστικό της εγγραφής που είχε επιστρέψει η σάρωση την προηγούμενη φορά, το αρχείο ευρετηρίου που είναι ανοιχτό λόγω αυτής της σάρωσης, κτλ., διατηρούνται στον πίνακα με τα απαιτούμενα για κάθε ενεργή σάρωση. Όπως και πριν, εσείς θα αποφασίσετε τα ακριβή περιεχόμενα του πίνακα αυτού σύμφωνα με τις ανάγκες της υλοποίησής σας. AM_CloseIndexScan( int AM_CloseIndexScan( int scandesc /* αριθμός που αντιστοιχεί σε ενεργή σάρωση */ Η ρουτίνα αυτή τερματίζει τη σάρωση ευρετηρίου με αναγνωριστικό σάρωσης scandesc. Αν πετύχει, τότε επιστρέφει AME_OK, ειδ' αλλοιώς, κάποιον κωδικό σφάλματος.

AM_PrintError( void AM_PrintError( char *errstring /* κείμενο για εκτύπωση */ Η ρουτίνα τυπώνει το κείμενο που δείχνει η παράμετρος errstring, και μετά τυπώνει το μήνυμα που αντιστοιχεί στο τελευταίο σφάλμα που προέκυψε από οποιαδήποτε από τις ρουτίνες του επιπέδου AM. Για τον σκοπό αυτό, η ρουτίνα αυτή χρησιμοποιεί μία καθολική (global μεταβλητή AM_errno η οποία αποθηκεύει πάντα τον κωδικό του πλέον πρόσφατου σφάλματος. Ο κωδικός αυτός σφάλματος πρέπει πάντα να ενημερώνεται σωστά σε όλες τις άλλες ρουτίνες. Η ρουτίνα αυτή δεν έχει δική της τιμή επιστροφής. Διαχείριση Σφαλμάτων Επιπέδου Ευρετηρίου Θα πρέπει να δημιουργήσετε μια λίστα με κωδικούς σφαλμάτων του επιπέδου Ευρετηρίου Β+ Δένδρων όπως έγινε και με το επίπεδο Αρχείου Μπλοκ. Σχόλια για την Υλοποίηση Κάθε αρχείο του επιπέδου Ευρετηρίου Β+ Δένδρων θα πρέπει να υλοποιηθεί χρησιμοποιώντας τις ρουτίνες του επιπέδου Αρχείου Μπλοκ που έχετε υλοποιήσει. (Και εδώ, αν δεν νοιώθετε άνετα με την δική σας υλοποίηση μπορείτε να χρησιμοποιήσετε τη δική μας, που πλέον έχει καθαριστεί από τα περισσότερα σφάλματά της. Και πάλι, εσείς θα αποφασίσετε πώς να δομήσετε εσωτερικά κάθε μπλοκ (κεφαλίδα, ζευγάρια τιμής-δείκτη, κτλ., διαφορετικά για τα εσωτερικά μπλοκ και διαφορετικά για τα μπλοκ-φύλλα του δένδρου, κτλ. Τα Β+ δένδρα που θα υλοποιήσετε θα πρέπει να καλύπτουν την περίπτωση που πολλές εγγραφές του βασικού αρχείου έχουν την ίδια τιμή στο πεδίου του ευρετηρίου, δηλαδή πολλά ζευγάρια τιμήδείκτης να έχουν την ίδια τιμή. Μπορείτε όμως να υποθέσετε ότι, για οποιαδήποτε τιμή, τα ζευγάρια με την τιμή αυτή θα είναι λίγα και θα χωρούν άνετα σε ένα μπλοκ. Επίσης, Θα πρέπει να υλοποιήσετε πλήρως τους αλγορίθμους αναζήτησης και εισαγωγής που υπάρχουν για τα Β+ δέντρα, συμπεριλαμβανομένης της διάσπασης κόμβων στη διάρκεια εισαγωγής δεδομένων. Για την απαλοιφή δεδομένων ΔΕΝ χρειάζεται να υλοποιήσετε δανεισμό ή συμπύκνωση μπλοκ αν ένα μπλοκ βρεθεί κάτω από 50% γεμάτο. Απλά η απαλοιφή του κατάλληλου ζευγαριού τιμή-δείκτης αρκεί. Θα πρέπει επίσης να μπορείτε να δεχθείτε απαλοιφές εγγραφών κατά την διάρκεια μιάς σάρωσης ενός ευρετηρίου. Σχολιασμός, Έλεγχος Σφαλμάτων, και Γενική Μορφοποίηση Όπως πάντοτε, αναμένεται καλός σχολιασμός του προγράμματος, και εσωτερικός (ανάμεσα στις γραμμές κώδικα και εξωτερικός (στην αρχή κάθε ρουτίνας. Ένας γενικός κανόνας είναι να σχολιάζετε τα προγράμματά σας σαν να πρόκειται να τα δώσετε σε κάποιον άλλον ο οποίος θα τα επεκτείνει και ο οποίος δεν έχει ιδέα για το τι κάνατε όταν τα γράφατε (και δεν μπορεί ούτε να σας βρει να σας ρωτήσει. Επίσης, θα πρέπει να ελέγχετε για διάφορα σφάλματα που μπορούν να προκύψουν και να βεβαιωθειτε ότι ο κώδικάς σας τερματίζει ομαλά, με μηνύματα που έχουν νόημα, σε όλες τις εισόδους που ικανοποιούν την παραπάνω περιγραφή.

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