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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές δεδομένων (2) Αλγόριθμοι

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

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

Εργαστήριο 5. Εαρινό Εξάμηνο

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

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

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

Εργαστηριακή Άσκηση 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

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

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

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

Προγραμματισμός Δομές Δεδομένων

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Διδάσκων: Παναγιώτης Ανδρέου

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Επεξεργασία Αρχείων Κειµένου

Διάλεξη 18η: Διαχείρηση Αρχείων

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

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

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

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

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

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

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

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

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

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

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

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

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

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

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

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

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Διάλεξη 19η: Δομές δεδομένων

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

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

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

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

Φροντιστήριο 4 Σκελετοί Λύσεων

Transcript:

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2013 2014 M. Χατζόπουλος Προθεσμία: 19/01/2015 Σκοπός της εργασίας είναι η κατανόηση της εσωτερικής λειτουργίας των Συστημάτων Βάσεων Δεδομένων ως προς τη διαχείριση σε επίπεδο μπλοκ (block) αλλά και σε επίπεδο εγγραφών. Επίσης, αφορά μια βασική λειτουργία που πραγματοποιείται συχνά στις βάσεις δεδομένων, που είναι η συγχώνευση ταξινομημένων αρχείων (join). Στα πλαίσια της εργασίας αυτής καλείστε να υλοποιήσετε συναρτήσεις με συγκεκριμένη λειτουργικότητα, ώστε να συγχωνεύονται δυαδικά αρχεία εγγραφών. Πιο συγκεκριμένα, θα υλοποιήσετε ένα πλήθος συναρτήσεων ώστε δοθέντων των ονομάτων δύο αρχείων (αρχεία προέλευσης), του τελεστή της συνθήκης και των πεδίων στα οποία εφαρμόζεται η συνθήκη, να δημιουργείται ένα νέο αρχείο (αρχείο προορισμού), όπου θα τοποθετούνται οι εγγραφές των αρχείων που ικανοποιούν την δοθήσα συνθήκη. Η συνάρτηση αναλόγως με τον τελεστή της συνθήκης που δίνεται σαν όρισμα, θα κάνει την συγχώνευση (join) είτε με merge-sort, είτε με nested-loops. Πιο συγκεκριμένα, όταν ο τελεστής είναι η ισότητα ( = ), τα αρχεία θα πρέπει να είναι ταξινομημένα ως προς τα πεδία που δίνονται ως όρισμα και το αποτέλεσμα της συνάρτησης θα είναι η συγχώνευση τους με merge-sort. Όταν τελεστής της συνθήκης είναι κάποια ανισότητα ( > ή < ), η συγχώνευση των εγγραφών των δύο αρχείων θα γίνεται με nested-loops. Η ζητούμενη λειτουργικότητα πρέπει να υλοποιηθεί πάνω από το επίπεδο διαχείρισης μπλοκ (block), το οποίο σας δίνεται έτοιμο. Θα δίνονται δύο αρχεία προς συγχώνευση, το ένα θα έχει εγγραφές που εννοιολογικά θα αντιστοιχούν στο Employee και το άλλο εγγραφές που αντιστοιχούν στο Salary. typedef struct{ int id, char name[15], char surname[20], char status[1], int department int daysoff, int prevyears; }Employee; typedef struct{ int id, int salary, char section[1], int floor }Salary; Στον πίνακα Employee το id είναι πρωτεύον κλειδί και ξένο κλειδί στον πίνακα Salary. Οι εγγραφές μέσα στα αρχεία είναι αποθηκευμένες ως ακολουθίες από bytes, η μία μετά την άλλη. Τα πεδία κάθε εγγραφής έχουν τη σειρά που δίνεται προηγουμένως και τους αντίστοιχους τύπους δεδομένων. Κατά συνέπεια, οφείλετε να διαχειρίζεστε τα πεδία με τις κατάλληλες συναρτήσεις που σας δίνονται από τη C / C++.

Ακολουθούν κάποιες ενδεικτικές εγγραφές, που μπορεί να υπάρχουν στα αρχεία εισόδου. Τα εισαγωγικά ( ) δεν υπάρχουν στην πραγματική εγγραφή. εμφανίζονται εδώ, για να δηλώσουμε ότι πρόκειται για συμβολοσειρά. Employee: {15, Maria, Papadopoulou, S,2,10,6} {4, Panos, Politis, S,3,15,7} {300, Yannis, Stratakis, M,8,11,5} Salary: {15,2500, A,1} {4,2000, C,7} {300,1500, C,3} Παράδειγμα 1: Aν κάνουμε join για Employee.id = Salary.id, το αποτέλεσμα που περιμένουμε είναι η συγχώνευση των εγγραφών με ίδιο id στα δύο αρχεία. Επομένως για τις παραπάνω εγγραφές, η έξοδος της συγχώνευσης (join) θα είναι: Employee.id = Salary.id : {15, Maria, Papadopoulou, S,2,10,6,2500, A,1} {4, Panos, Politis, S,3,15,7,2000, C,7} {300, Yannis, Stratakis, M,8,11,5,1500, C,3} Παράδειγμα 2: Aν κάνουμε join για Employee.department < Salary.floor, το αποτέλεσμα που περιμένουμε είναι η συγχώνευση των εγγραφών με του αρχείου Employee με department μικρότερο από το floor στο αρχείο Salary. Επομένως για τις παραπάνω εγγραφές, η έξοδος της συγχώνευσης (join) θα είναι: Employee.department < Salary.floor : {15, Maria, Papadopoulou, S,2,10,6,4,2000, C,7} {15, Maria, Papadopoulou, S,2,10,6,300,1500, C,3} {4, Panos, Politis, S,3,15,7,4,2000, C,7} Συναρτήσεις BF (Block File) Στη συνέχεια, περιγράφονται οι συναρτήσεις που αφορούν το επίπεδο από block, πάνω στο οποίο θα βασιστείτε για την υλοποίηση των συναρτήσεων που ζητούνται. Η υλοποίηση των συναρτήσεων αυτών θα δοθεί έτοιμη με τη μορφή βιβλιοθήκης. Στο αρχείο κεφαλίδας BF.h που θα σας δοθεί υπάρχουν τα πρωτότυπα των συναρτήσεων μαζί με σχόλια για το πώς δουλεύουν και το μέγεθος ενός μπλοκ που είναι BF_BLOCK_SIZE, ίσο με 1024 bytes. Θα δοθεί επίσης και μία ενδεικτική main() που δείχνει πως μπορείτε να χρησιμοποιήσετε το επίπεδο BF. void BF_Init() Με τη συνάρτηση BF_Init πραγματοποιείται η αρχικοποίηση του επιπέδου BF. int BF_CreateFile( char* filename /* όνομα αρχείου */ )

Η συνάρτηση BF_CreateFile δημιουργεί ένα αρχείο με όνομα filename το οποίο αποτελείται από block. Αν το αρχείο υπάρχει ήδη το παλιό αρχείο διαγράφεται. Σε περίπτωση επιτυχούς εκτέλεσης της συνάρτησης επιστρέφεται 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_OpenFile( char* filename /* όνομα αρχείου */ ) Η συνάρτηση BF_OpenFile ανοίγει ένα υπάρχον αρχείο από block με όνομα filename. Σε περίπτωση επιτυχίας, επιστρέφεται το αναγνωριστικό του αρχείου, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_CloseFile( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση BF_CloseFile κλείνει το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_GetBlockCounter( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση Get_BlockCounter δέχεται ως όρισμα τον αναγνωριστικό αριθμό filedesc ενός ανοιχτού αρχείου από block και βρίσκει τον αριθμό των διαθέσιμων block του, τον οποίο και επιστρέφει σε περίπτωση επιτυχούς εκτέλεσης. Σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_AllocateBlock( int filedesc /* αναγνωριστικό αρχείου block */ ) Με τη συνάρτηση BF_AllocateBlock δεσμεύεται ένα καινούριο block για το αρχείο με αναγνωριστικό αριθμό filedesc. Το νέο block αρχικοποιείται με μηδενικά και δεσμεύεται πάντα στο τέλος του αρχείου, οπότε ο αριθμός του block είναι BF_GetBlockCounter(fileDesc) - 1. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_ReadBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber, /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ void** block /* δείκτης στα δεδομένα του block (αναφορά) */ ) Η συνάρτηση BF_ReadBlock βρίσκει το block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Η μεταβλητή block αποτελεί ένα δείκτη στα δεδομένα του block, το οποίο θα πρέπει να έχει δεσμευτεί. Σε περίπτωση επιτυχίας, επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError.

int BF_WriteBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ ) Η συνάρτηση BF_WriteBlock γράφει στο δίσκο το δεσμευμένο block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχίας, επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. void BF_PrintError( char* message /* μήνυμα προς εκτύπωση */ ) Η συνάρτηση BF_PrintError βοηθά στην εκτύπωση των σφαλμάτων που δύναται να υπάρξουν με την κλήση συναρτήσεων του επιπέδου αρχείου block. Εκτυπώνεται στο stderr το message ακολουθούμενο από μια περιγραφή του πιο πρόσφατου σφάλματος. Συναρτήσεις Sorted Στη συνέχεια, περιγράφονται οι συναρτήσεις που καλείστε να υλοποιήσετε στα πλαίσια της εργασίας αυτής. int Sorted_CreateFile( char *filename /* όνομα αρχείου */ ) Η συνάρτηση Sorted_CreateFile χρησιμοποιείται για τη δημιουργία και κατάλληλη αρχικοποίηση ενός άδειου αρχείου με όνομα filename. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. int Sorted_OpenFile( char *filename /* όνομα αρχείου */ ) Η συνάρτηση Sorted_OpenFile ανοίγει το αρχείο με όνομα filename και διαβάζει από το πρώτο μπλοκ την πληροφορία που αφορά το αρχείο. Επιστρέφει τον αναγνωριστικό αριθμό ανοίγματος αρχείου, όπως αυτός επιστράφηκε από το επίπεδο διαχείρισης μπλοκ ή -1 σε περίπτωση σφάλματος. int Sorted_CloseFile( int filedesc /* αναγνωριστικός αριθμός ανοίγματος αρχείου */ ) Η συνάρτηση Sorted_CloseFile κλείνει το αρχείο που προσδιορίζεται από τον αναγνωριστικό αριθμό ανοίγματος filedesc. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. int Sorted_InsertEntry ( int filedesc, /* αναγνωριστικός αριθμός ανοίγματος αρχείου */ void* ptr, /* δείκτης που προσδιορίζει την εγγραφή */ int length /* το μέγεθος της εγγραφής */)

Η συνάρτηση Sorted_InsertEntry χρησιμοποιείται για την εισαγωγή μιας εγγραφής στο αρχείο BF. Ο αναγνωριστικός αριθμός ανοίγματος του αρχείου δίνεται με την filedesc ενώ το μέγεθος της εγγραφής και η εγγραφή προς εισαγωγή προσδιορίζονται από το length και τον δείκτη ptr. Η εγγραφή εισάγεται στο τέλος του αρχείου. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. int Sorted_sortFile( const char* filename, /* όνομα αρχείου προς ταξινόμηση */ int fieldno /* αύξων αριθμός πεδίου */) Η συνάρτηση Sorted_sortFiles ταξινομεί (sort) ένα BF αρχείο με όνομα filename ως προς το πεδίο που προσδιορίζεται από το fieldno. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. Πιο συγκεκριμένα, η λειτουργικότητα που πρέπει να υλοποιηθεί είναι η ακόλουθη: 1. Να δημιουργείται ένα νέο αρχείο επιπέδου BF, με όνομα <filename>,sorted,<fieldno>. Για παράδειγμα, αν τα ορίσματα έχουν τιμές filename = A, fieldno = 2, τότε το αρχείο που πρέπει να δημιουργηθεί, θα έχει όνομα ΑSorted2. 2. Να διαβάζονται εγγραφές από τo αρχείo filename και να εισάγονται στο νέο αρχείο ταξινομημένες ως προς το πεδίο υπ' αριθμό fieldno. Οι εγγραφές θα είναι είτε τύπου Salary, είτε τύπου Employee, δηλαδή κάθε αρχείο θα περιέχει μόνο ένα είδος εγγραφών. void Sorted_GetAllEntries( int filedesc, /* αναγνωριστικός αριθμός ανοίγματος αρχείου */ char* fieldname, /* όνομα του πεδίου για το οποίο γίνεται ο έλεγχος */ void *value /* τιμή του πεδίου προς σύγκριση */ ) Η συνάρτηση αυτή χρησιμοποιείται για την εκτύπωση όλων των εγγραφών που υπάρχουν στο ταξινομημένο αρχείο οι οποίες έχουν τιμή στο πεδίο με όνομα fieldname ίση με value. Το filedesc είναι ο αναγνωριστικός αριθμός ανοίγματος του αρχείου, όπως αυτός έχει επιστραφεί από το επίπεδο διαχείρισης μπλοκ. Η παράμετρος fieldname μπορεί να παίρνει μία από τις εξής τιμές: id, name, surname, αναφερόμενη στα αντίστοιχα πεδία μιας εγγραφής. Για κάθε εγγραφή που βρίσκεται μέσα στο αρχείο και έχει τιμή ίση με value στο πεδίο με όνομα fieldname, εκτυπώνονται τα περιεχόμενά της (συμπεριλαμβανομένου και του πεδίου-κλειδιού). Αν η παράμετρος value είναι NULL, τότε εκτυπώνονται όλες οι εγγραφές του αρχείου. Στο τέλος της συνάρτησης, να εκτυπώνεται επίσης το πλήθος των μπλοκ που διαβάστηκαν. Στην περίπτωση που το value δεν είναι NULL, πρέπει να ψάχνετε για εγγραφές με την τιμή αυτή πραγματοποιώντας δυαδική αναζήτηση στο αρχείο. int Sorted_checkSortedFile( const char* file, /* όνομα αρχείου */ int fieldno /* αύξων αριθμός πεδίου */) Η συνάρτηση Sorted_checkSortedFile ελέγχει άν το ταξινομημένο αρχείο με όνομα την τιμή που δίνεται στο όρισμα είναι ταξινομημένο με βάση το πεδιο υπ' αριθμό fieldno. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος.

int Sorted_mergeFiles( const char* file1, /* όνομα 1ου αρχείου προς συγχώνευση */ const char* file2, /* όνομα 2ου αρχείου προς συγχώνευση */ const char* operator, /* ο τελεστής που εφαρμόζεται μεταξύ των τιμών των δύο πεδίων*/ int fieldno1, /* αύξων αριθμός πεδίου 1ου αρχείου*/ int fieldno2 /* αύξων αριθμός πεδίου 2ου αρχείου*/) Η συνάρτηση Sorted_mergeFiles θα ελέγχει τί τύπου είναι ο τελεστής που εφαρμόζεται στα πεδία των αρχείων. Αν ο τελεστής είναι =, τότε θα καλείται η συνάρτηση Sorted_joinSortMerge, ενώ αν ο τελεστής είναι > ή <, θα καλείται η συνάρτηση Sorted_nestedLoops. int Sorted_joinSortMerge( const char* file1, /* όνομα 1ου αρχείου προς συγχώνευση */ const char* file2, /* όνομα 2ου αρχείου προς συγχώνευση */ int fieldno1, /* αύξων αριθμός πεδίου 1ου αρχείου*/ int fieldno2 /* αύξων αριθμός πεδίου 2ου αρχείου*/) Η συνάρτηση Sorted_joinSortMerge συγχωνεύει ταξινομημένα τα δύο BF αρχεία, τα ονόματα των οποίων δίνονται ως ορίσματα. Για τη συγχώνευση τους, το 1ο αρχείο πρέπει να είναι ταξινομημένο ως προς fieldno1, και το 2ο ως προς fieldno2 αντίστοιχα. Ο έλεγχος για το αν είναι σωστά ταξινομημένα τα αρχεία θα πρέπει να γίνεται εσωτερικά στη συνάρτηση από εσάς. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. Υπενθυμίζεται ότι το ένα πεδίο του ενός πίνακα πρέπει να μην περιέχει διπλότυπα. Πιο συγκεκριμένα, η λειτουργικότητα που πρέπει να υλοποιηθεί είναι η ακόλουθη: 1. Να δημιουργείται ένα νέο αρχείο επιπέδου BF, με όνομα τη συνένωση των τιμών των ορισμάτων <file1>,<file2>,<fieldno1>, =,<fieldno2>. Για παράδειγμα, αν τα ορίσματα έχουν τιμές file1 = A, file2 = B, fieldno1 = 2, fieldno2 = 5, τότε το αρχείο που πρέπει να δημιουργηθεί, θα έχει όνομα ΑΒ2=5. 2. Να διαβάζονται εγγραφές από τα αρχεία file1 και file2 και να εισάγεται στο νέο αρχείο η συγχώνευση τους όταν οι τιμές για τα πεδία που ελέξχουμε είναι ίσες. Η υλοποίηση της συγχώνευσης πρέπει να γίνει με βάση τον αλγόριθμο, sort-merge. 3. Για παράδειγμα, η συνάρτηση αυτή θα καλείται όταν θέλουμε να βρούμε την συγχώνευση των εγγραφών από τα δύο αρχεία, για τις οποίες να ισχύει: Employee.id = Salary.id. int Sorted_nestedLoops( const char* file1, /* όνομα 1ου αρχείου προς συγχώνευση */ const char* file2, /* όνομα 2ου αρχείου προς συγχώνευση */ int fieldno1, /* αύξων αριθμός πεδίου 1ου αρχείου*/ int fieldno2 /* αύξων αριθμός πεδίου 2ου αρχείου*/)

Η συνάρτηση Sorted_nestedLoops συγχωνεύει δύο BF αρχεία, τα ονόματα των οποίων δίνονται ως ορίσματα. Η συνάρτηση επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση σφάλματος. Πιο συγκεκριμένα, η λειτουργικότητα που πρέπει να υλοποιηθεί είναι η ακόλουθη: 1. Να δημιουργείται ένα νέο αρχείο επιπέδου BF, με όνομα τη συνένωση των τιμών των ορισμάτων <file1>,<file2>,<fieldno1>, >,<fieldno2>. Για παράδειγμα, αν τα ορίσματα έχουν τιμές file1 = A, file2 = B, fieldno1 = 2, fieldno2 = 5, τότε το αρχείο που πρέπει να δημιουργηθεί, θα έχει όνομα ΑΒ2>5. 2. Να διαβάζονται εγγραφές από τα αρχεία file1 και file2 και να εισάγεται στο νέο αρχείο η συγχώνευση τους όταν οι τιμές για τα πεδία που ελέξχουμε είναι άνισες. Η υλοποίηση της Συγχώνευσης πρέπει να γίνει με nested loops. 3. Για παράδειγμα, η συνάρτηση αυτή θα καλείται όταν θέλουμε να βρούμε την συγχώνευση των εγγραφών από τα δύο αρχεία, για τις οποίες να ισχύει: Employee.dept < Salary.floor. Παράδοση εργασίας Ομαδική (από 1 έως και 3 άτομα) C / C++ Περιβάλλον υλοποίησης: Linux (gcc 4.3+) ή Windows (Visual Studio 2008). Η επιλογή έγινε με βάση τα διαθέσιμα εργαλεία ανάπτυξης που υπάρχουν στη σχολή. Παραδοτέα: Τα αρχεία πηγαίου κώδικα (sources) και τα αντίστοιχα αρχεία κεφαλίδας (headers) καθώς και αρχείο readme με περιγραφή / σχόλια πάνω στην υλοποίησή σας. Προθεσμία Παράδοσης: 19/01/2015