ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ΕΡΓΑΣΤΗΡΙΟ ΑΠΑΙΤΗΣΕΙΣ ΚΑΙ ΔΙΑΔΙΚΑΣΙΑ ΕΞΕΤΑΣΗΣ Οι σπουδαστές που έχουν ολοκληρώσει με επιτυχία το εργαστήριο του Προγραμματισμού Ι, τυπικά είναι εξοικειωμένοι με: τη χρήση ολοκληρωμένου περιβάλλοντος προγραμματισμού, τη διαδικασία ανάπτυξης απλού προγράμματος από τον αλγόριθμο έως τον τελικό κώδικα, την αντιμετώπιση συντακτικών και λογικών σφαλμάτων, την αποτελεσματική εφαρμογή των εννοιών και μεθόδων της διάλεξης του μαθήματος. Το σκεπτικό λειτουργίας του εργαστηρίου στον Προγραμματισμό ΙΙ δεν εστιάζει μόνο στην επινόηση του αλγορίθμου και την ανάπτυξη του αντίστοιχου προγράμματος αλλά στην εισαγωγή των σπουδαστών στην προβληματική της επίλυσης ενός μεγαλύτερου προβλήματος με βάση τις απαιτήσεις μιας εφαρμογής. Κατά συνέπεια οι σπουδαστές θα πρέπει να αναπτύξουν ικανότητες ώστε να αντιμετωπίζουν μεγαλύτερα προβλήματα, να σχεδιάζουν τους κατάλληλους αλγορίθμους και να «κατασκευάζουν» προγράμματα τα οποία θα καλύπτουν τις απαιτήσεις απλών ή απλοποιημένων εφαρμογών. Κατά συνέπεια το σκεπτικό λειτουργίας του εργαστηρίου επιτρέπει στους σπουδαστές: 1) να ολοκληρώσουν ένα μικρό project δοκιμάζοντας τις δυνατότητες τους στον προγραμματισμό, 2) να αντιληφθούν τα προβλήματα που παρουσιάζονται με την υλοποίηση μιας μικρής εφαρμογής ιδιαίτερα όσον αφορά στην κατανόηση των απαιτήσεων, 3) να δουν τα προβλήματα που παρουσιάζονται στη συνεργασία με άλλους αν βέβαια θελήσουν να εργασθούν ανά δύο, 4) να προσεγγίσουν έστω και σε πρώιμο στάδιο τα ζητήματα που συνδέονται με τη μεθοδολογία ανάπτυξης ενός προγράμματος, 5) να προετοιμαστούν σε κάποιο βαθμό ώστε να είναι σε θέση να αντιληφθούν τη χρησιμότητα του μαθήματος Τεχνολογία Λογισμικού. Με βάση αυτή τη λογική έχει λειτουργήσει το εργαστήριο του μαθήματος μέχρι σήμερα για όλα ανεξαιρέτως τα εξάμηνα. Οι σπουδαστές καλούνται να αναπτύξουν, προσθέτοντας σταδιακά λειτουργικότητα, ένα μικρό project το οποίο η μέχρι τώρα εμπειρία έχει δείξει ότι καταλήγει στην κατασκευή ενός προγράμματος μεγέθους από 500 έως 800 (ή 900) γραμμές πηγαίου κώδικα σε γλώσσα Pascal ή C. Το ακριβές 1
μέγεθος και οι δυνατότητες του προγράμματος εξαρτώνται από τη διάθεση κάθε σπουδαστή να κάνει κάτι παραπάνω από τα απολύτως απαραίτητα. Μια από τις βασικότερες απαιτήσεις του εργαστηρίου είναι η προσωπική εργασία κάθε σπουδαστή. Όσοι σπουδαστές δεν θέλησαν να διαθέσουν προσωπικό χρόνο τελικά δεν παρουσίασαν εργασία. Μέχρι το προηγούμενο εξάμηνο η εξέταση του εργαστηρίου απαιτούσε από κάθε σπουδαστή να παρουσιάσει την εργασία του σε υπολογιστή και να απαντήσει σε ερωτήματα σχετικά με τον πηγαίο κώδικα του προγράμματος και τη λειτουργικότητά του. Η εξέταση αυτή τυπικά διαρκούσε 20 30 λεπτά της ώρας. Θα πρέπει να τονιστεί ότι κατά την εξέταση ελέγχεται ιδιαίτερα κατά πόσον η εργασία είναι έργο αποκλειστικά του κάθε σπουδαστή. Μέχρι το προηγούμενο εξάμηνο ο αριθμός των σπουδαστών που επέλεγαν το μάθημα ήταν όσοι είχαν επιτύχει στον Προγραμματισμό Ι. Με την έναρξη του τρέχοντος εξαμήνου το εργαστήριο του Προγραμματισμού ΙΙ δήλωσε ένας μεγάλος αριθμός σπουδαστών για τους οποίους δεν ισχύουν οι αλυσίδες και παρά το γεγονός ότι αρκετοί από αυτούς ότι δεν έχουν επιτύχει ούτε στο εργαστήριο του Προγραμματισμού Ι. Πέραν του αυτονόητου δικαιώματος, ο λόγος που προβάλλεται, από αρκετούς σπουδαστές, ότι δηλαδή δηλώνουν το εργαστήριο για να κατοχυρώσουν την παρουσία είναι χωρίς νόημα. Από τον τρόπο λειτουργίας του εργαστηρίου είναι προφανές ότι η κατοχύρωση της παρουσίας είναι για το συγκεκριμένο εργαστήριο μια καθαρά γραφειοκρατική υπόθεση επιβεβλημένη από τον κανονισμό λειτουργίας των εργαστηρίων αλλά χωρίς κάποιο ουσιαστικό αντίκρισμα. Ακόμη και αν κάποιος κατοχυρώσει την παρουσία στο εργαστήριο για να είναι στο μέλλον σε θέση να παρουσιάσει μια ολοκληρωμένη εργασία θα πρέπει να είναι σε επαφή με το μάθημα και σε συνεννόηση με τον διδάσκοντα ώστε να αντιμετωπίζονται τα προβλήματα που παρουσιάζονται. Στο εργαστήριο δίνεται ιδιαίτερη έμφαση στην προσωπική εργασία κάθε σπουδαστή. Για την αποτελεσματική λειτουργία και εξέταση στο εργαστήριο Προγραμματισμού ΙΙ, με βάση τα νέα δεδομένα εγγραφής των σπουδαστών προβλέπονται ακόλουθα: Η υλοποίηση μιας εργασίας θα συνεχίσει να είναι το αντικείμενο του έργου των σπουδαστών στο εργαστηρίου. Σε αντίθεση με προηγούμενα εξάμηνα οι εργασίες θα πρέπει να παραδίδονται όχι αργότερα από το τελευταίο μάθημα πριν από την εβδομάδα εξέτασης των εργαστηρίων. Η εξέταση της εργασίας διαφοροποιείται σε σχέση με το παρελθόν. Συγκεκριμένα η εργασία δεν θα παρουσιάζεται από κάθε σπουδαστή αλλά θα ελέγχεται από τον διδάσκοντα χωρίς την παρουσία του σπουδαστή. Κατά συνέπεια οι εργασίες θα πρέπει να περιλαμβάνουν όλες τις απαραίτητες εξηγήσεις και σχόλια ώστε να 2
γίνονται κατανοητές από κάποιον ο οποίος δεν έχει σχέση με την υλοποίησή τους. Ο βαθμός της εργασίας θα αποτελεί το 70% του τελικού βαθμού του εργαστηρίου υπό την προϋπόθεση ότι ο σπουδαστής, θα επιτύχει σε εξέταση στο εργαστήριο η οποία θα συμπληρώνει με 30% τον τελικό βαθμό του εργαστηρίου. Κατά την εξέταση στο εργαστήριο ο κάθε σπουδαστής θα πρέπει στο χρονικό διάστημα της εξέτασης (1 έως 1.5 ώρα) να ετοιμάσει και να επιδείξει ένα τμήμα προγράμματος που θα του ζητηθεί από τον διδάσκοντα. Το θέμα θα καθορίζεται από τον διδάσκοντα και θα αποσκοπεί στο να επιβεβαιώσει τις γνώσεις του σπουδαστή όπως προκύπτουν από την εργασία που έχει παραδώσει. Καμία εργασία δεν θα γίνεται τελικά δεκτή αν ο σπουδαστής δεν απαντήσει με επιτυχία στην εξέταση εργαστηρίου. Σε όσες περιπτώσεις κρίνεται απαραίτητο και για την αποφυγή προβλημάτων ή/και αδικιών ο διδάσκων θα μπορεί να ζητήσει προφορική εξέταση επί της εργασίας του σπουδαστή. Περισσότερες διευκρινίσεις θα δοθούν στα τμήματα των εργαστηρίων του μαθήματος. Για ενημέρωση των σπουδαστών στη συνέχεια δίνεται ως παράδειγμα η εργασία που δόθηκε στο εργαστήριο του Εαρινού Εξαμήνου 2008-2009. 3
Τ.Ε.Ι. ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2008-2009 ΑΣΚΗΣΗ 1 η : ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ ΤΟΥ ΚΑΤΑΛΟΓΟΥ ΑΡΧΕΙΩΝ ΕΝΟΣ DIRECTORY Περιγραφή: Για τη διαχείριση του συστήματος αρχείων (file system) ένα λειτουργικό σύστημα χρησιμοποιεί τη δενδροειδή οργάνωση των αρχείων με χρήση directories και subdirectories του συστήματος UNIX, που είναι αντίστοιχο της οργάνωσης των folders και subfolders που χρησιμοποιούν τα Windows. Σύμφωνα με την οργάνωση αυτή σε κάθε directory το σύστημα διατηρεί πάντα ενημερωμένο «ένα κατάλογο» των αρχείων και των directories (subdirectories) που υπάρχουν στο directory. Ο κατάλογος αυτός περιέχει για κάθε αρχείο ή directory (subdirectory) όλες τις πληροφορίες που είναι χρήσιμες για τη διαχείριση του. Ο κατάλογος αυτός στην περίπτωση που το directory είναι άδειο περιέχει τις περιγραφές για δύο τουλάχιστον στοιχεία, ένα για την περιγραφή του τρέχοντος directory το οποίο συμβολίζεται με '.' και ένα για την περιγραφή του ιεραρχικά ανώτερου (parent directory) που συμβολίζεται με '..'. Κάθε αρχείο, οποιουδήποτε τύπου, ή directory περιγράφεται στον κατάλογο από μια δομή με τις εξής πληροφορίες: τύπος, δηλαδή αρχείο ή directory δικαιώματα πρόσβασης, (read, write, execute) για τον ιδιοκτήτη (user) δικαιώματα πρόσβασης, (read, write, execute) για την ομάδα (group) του ιδιοκτήτη δικαιώματα πρόσβασης, (read, write, execute) για τους άλλους χρήστες (others) εκτός ομάδας του ιδιοκτήτη όνομα αρχείου ή directory μέγεθος, σε πλήθος bytes για τα κοινά αρχεία και πλήθος αρχείων που περιέχει αν πρόκειται για directory ταυτότητα (identity), του χρήστη που το δημιούργησε ημερομηνία δημιουργίας ημερομηνία τελευταίας πρόσβασης πρώτο block του δίσκου όπου υπάρχει το περιεχόμενο του αρχείου ή ο αντίστοιχος κατάλογος αν πρόκειται για directory 4
Δεδομένα Κάθε directory θεωρητικά περιέχει απεριόριστο αριθμό αρχείων και directories (subdirectories). Στα πλαίσια της άσκησης αυτής θα περιορίσουμε τον αριθμό σε Maxfiles. Κατά συνέπεια και ο κατάλογος θα περιέχει Maxfiles εγγραφές. Οι τύποι δεδομένων που θα χρησιμοποιηθούν είναι: const (* Ορισμός σταθερών για τα δικαιώματα πρόσβασης *) RO = 4; (* read_only *) WO = 2; (* write_only *) EO = 1; (* execute_only *) RW = 6; (* read_write *) RE = 5; (* read_execute *) WE = 3; (* write_execute *) RWE = 7; (* read_write_execute *) Maxfiles = ; type (* τύποι δεδομένων *) day_t = 1..31; (* τύπος διάστημα από 1 έως 31 *) month_t = 1..12; (* τύπος διάστημα από 1 έως 12 *) date_t = record day : day_t; mon : month_t; year : integer; end; block_t = integer; filerec = record ftype : char; (* a για κοινό αρχείο, d για directory *) usersr : integer; (* δικαιώματα πρόσβασης του owner *) groupsr:integer; (* δικαιώματα πρόσβασης του group *) othersr : integer; (* δικαιώματα πρόσβασης των άλλων *) fname : string[64]; (* το όνομα του αρχείου *) fsize : real; (*το μέγεθος του αρχείου *) ucid : string[8]; (* κωδικός του owner π.χ. `nikosp` *) cdate : date_t; (* περιγραφή τύπου date_t *) adate : date_t; (* περιγραφή τύπου date_t *) block : block_t; (* πρώτο block στο δίσκο *) end; (* ο τύπος του αρχείου που περιέχει τον κατάλογο ως αρχείο *) catalog_t = file of filerec; 5
Ζητούμενα Το ζητούμενο της άσκησης αυτής είναι να γραφεί ένα πρόγραμμα το οποίο θα εκτελεί τα ακόλουθα: Θα διαβάζει το όνομα του σειριακού αρχείου που θα καταχωρηθεί ο κατάλογος ενός directory. Θα δημιουργεί το σειριακό αρχείο με δύο εγγραφές, μία με τα στοιχεία για το ίδιο το directory και μία με τα στοιχεία για το parent directory. Με χρήση μιας επανάληψης θα συλλέγει από την οθόνη τα στοιχεία που θα πληκτρολογεί ο χρήστης για ένα αριθμό από αρχεία (και subdirectories) και θα τα καταχωρεί στο προηγούμενο σειριακό αρχείο. Τέλος θα προβάλλει στην οθόνη τα στοιχεία όλων των καταχωρημένων αρχείων (και subdirectories) με τον τρόπο που τα προβάλλει η εντολή ls στο UNIX. Το πρόγραμμα μπορεί να γραφεί σε γλώσσα Pascal ή C. Σημαντικές απαιτήσεις Το πρόγραμμα θα κάνει χρήση διαδικασιών και συναρτήσεων με παραμέτρους και θα χρησιμοποιεί το λιγότερο δυνατόν ολικές μεταβλητές. Το πρόγραμμα θα πρέπει να περιέχει σχόλια ώστε να είναι κατανοητή η λειτουργία των διαδικασιών και των συναρτήσεων καθώς και η χρήση των μεταβλητών. Όποια εργασία δεν καλύπτει τις προηγούμενες απαιτήσεις δεν θα γίνεται δεκτή. 6
Τ.Ε.Ι. ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2008-2009 ΑΣΚΗΣΗ 2 η : ΚΑΤΑΛΟΓΟΣ ΑΡΧΕΙΩΝ ΕΝΟΣ DIRECTORY ΔΙΑΓΡΑΦΗ ΑΡΧΕΙΟΥ Περιγραφή: Κατά τη διαγραφή ενός ή περισσοτέρων αρχείων σε ένα directory το λειτουργικό σύστημα ενημερώνει τον κατάλογο αρχείων του directory διαγράφοντας τα στοιχεία του καταλόγου που αντιστοιχούν στο διαγραφέν ή στα διαγραφέντα αρχεία. Τα αρχεία που διαγράφονται επιλέγονται με βάση κάποιο κριτήριο όπως για παράδειγμα το όνομα, η ημερομηνία δημιουργίας, η επέκταση αν υπάρχει κλπ. Σκοπός της άσκησης αυτής είναι να υλοποιηθεί μια διαδικασία διαγραφής στοιχείων ενός καταλόγου τα οποία επιλέγονται με ένα από τα ακόλουθα κριτήρια: όνομα αρχείου, ημερομηνία δημιουργίας. Δεδομένα Τα δεδομένα της άσκησης αυτής είναι τα ίδια με τα δεδομένα της 1 ης άσκησης με βάση την οποία θεωρείται ότι έχει δημιουργηθεί ένα αρχείο καταλόγου. Ζητούμενα Το ζητούμενο της άσκησης αυτής είναι να γραφεί μια διαδικασία η οποία θα εκτελεί τα ακόλουθα: 1. Θα ερωτά τον χρήστη για το κριτήριο με το οποίο θέλει να κάνει τη διαγραφή. 2. Θα διαβάζει την επιλογή του και τα στοιχεία της και θα ελέγχει την εγκυρότητα της. Για τον έλεγχο εγκυρότητας προτείνεται να ληφθούν υπόψη τα ακόλουθα: o η ημερομηνία θα πρέπει να είναι έγκυρη, όσον αφορά τα όρια της ημέρας του μήνα και του έτους, o για την ημερομηνία ο χρήστης δεν μπορεί να δίνει μόνο την ημέρα ή μόνο το μήνα ή μόνο την ημέρα και το μήνα χωρίς να προσδιορίζει το έτος, o ο χρήστης έχει τη δυνατότητα να προσδιορίζει μόνο το έτος ή μόνο το έτος και το μήνα δημιουργίας οπότε η επιλογή του ενδεχόμενα να φορά περισσότερα από ένα αρχεία, 7
o έλεγχος δεν θα έχει το δικαίωμα να δίνει το όνομα του τρέχοντος ή του γονεϊκού (parent) directory 3. Θα εκτελεί τη διαγραφή και θα επιστρέφει στο χρήστη ένα μήνυμα για το ποιο αρχείο ή ποια αρχεία διέγραψε. Δεν θα πρέπει να υπάρχει η δυνατότητα διαγραφής των στοιχείων που αντιστοιχούν στο τρέχον και στο «γονεϊκό» (parent) directory. Προτείνεται οι λειτουργίες 1. και 2. να εκτελούνται από χωριστή διαδικασία η οποία θα καλείται από τη διαδικασία της διαγραφής. Το πρόγραμμα μπορεί να γραφεί σε γλώσσα Pascal ή C. Σημαντικές απαιτήσεις Το πρόγραμμα θα κάνει χρήση διαδικασιών και συναρτήσεων με παραμέτρους και θα χρησιμοποιεί το λιγότερο δυνατόν ολικές μεταβλητές. Το πρόγραμμα θα πρέπει να περιέχει σχόλια ώστε να είναι κατανοητή η λειτουργία των διαδικασιών και των συναρτήσεων καθώς και η χρήση των μεταβλητών. Όποια εργασία δεν καλύπτει τις προηγούμενες απαιτήσεις δεν θα γίνεται δεκτή. 8