ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Φορμαρισμένη είσοδος και έξοδος Αλφαριθμητικά Δείκτες Προσοχή: Απαγορεύεται αυστηρά η χρήση goto. Πριν ξεκινήσετε Πηγαίνετε στο φάκελο ce120 και κατασκευάστε μέσα σε αυτόν ένα φάκελο με όνομα lab9. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σημερινό εργαστήριο.
Άσκηση 1 Το πρόγραμμα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύσετε σε αρχείο με όνομα lab9α.c μέσα στο φάκελο lab9. Προσοχή! Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Γράψτε ένα πρόγραμμα το οποίο διαβάζει από το πληκτρολόγιο ένα string μεγέθους έως STRLEN=300 χαρακτήρων και το αποθηκεύει σε ένα μονοδιάστατο πίνακα χαρακτήρων. Στη συνέχεια διαβάζει από το πληκτρολόγιο ένα άλλο string μεγέθους έως DELIMITER_LEN=5 χαρακτήρων και το αποθηκεύει και αυτό σε άλλο μονοδιάστατο πίνακα. Το πρόγραμμα αρχικοποιεί ένα διδιάστατο πίνακα μεγέθους (NROWS/2)xSTRLEN (NROWS=20). Το πρόγραμμα που θα γράψετε διαχωρίζει το αρχικό string που διάβασε σε επιμέρους strings τα οποία αποθηκεύει στον διδιάστατο πίνακα (ένα σε κάθε γραμμή), χρησιμοποιώντας ως διαχωριστικό (delimiter) μεταξύ τους το δεύτερο string που διάβασε. Το πρόγραμμα στο τέλος τυπώνει με τη σειρά τις γραμμές του διδιάστατου πίνακα που έχουν περιεχόμενο. Αναλυτικότερα το πρόγραμμα σας πρέπει να κάνει τα εξής: 1. Διαβάζει ένα string από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω μήνυμα: Enter string: 2. Διαβάζει το 2ο string από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω μήνυμα: Enter delimiter: 3. Εκτυπώνει τα περιεχόμενα του διδιάστατου πίνακα αφού εκτυπώσει το παρακάτω μήνυμα ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. Για κάθε γραμμή του πίνακα που εκτυπώνεται αναφέρεται στην αρχή της γραμμής ο αύξων αριθμός της γραμμής ξεκινώντας την αρίθμηση από το 1.: Splitted String is: 1. 2.... Ν. Δείτε το παράδειγμα εκτέλεσης του προγράμματος στην επόμενη σελίδα.
Άσκηση 2 Το πρόγραμμα που θα γράψετε για την άσκηση 2 πρέπει να το αποθηκεύει σε αρχείο με όνομα lab9b.c μέσα στο φάκελο lab9. Σας δίνεται ο σκελετός ενός προγράμματος calculator για αλφαριθμητικά, ανάλογο με αυτό του 7ου εργαστηρίου στο αρχείο lab9b_thu_skeleton.c. Πριν ξεκινήσετε, αντιγράψτε το αρχείο στον φάκελο lab9 και μετονομάστε το σε lab9b.c. Οι βασικές πράξεις που θα πρέπει να κάνει ο συγκεκριμένος calculator είναι η επιστροφή του Ν-οστού χαρακτήρα ενός string, η ένωση δύο αλφαριθμητικών και η αντιγραφή του ενός αλφαριθμητικού στο άλλο. Αναλυτικά το πρόγραμμα σας θα πρέπει να δημιουργεί δύο μονοδιάστατους πίνακες χαρακτήρων ιδίου μεγέθους (π.χ. STRLEN=30 θέσεων) και να κάνει τα εξής: 1. Εκτυπώνει το παρακάτω μήνυμα: Enter string operation ** catenate OR copy OR quit (to exit) ** Operation: 2. Εάν ο χρήστης γράψει quit το πρόγραμμα τερματίζει. Σε κάθε άλλη περίπτωση επιστρέφει στο βήμα 1. 3. Εάν ο χρήστης γράψει catenate τότε ζητούνται διαδοχικά τα αλφαριθμητικά που θα ενωθούν: Enter string 1: XXXXXXXXX Enter string 2: YYYYYYYYYΥY Το αποτέλεσμα είναι η ένωση των δύο παραπάνω αλφαριθμητικών ως εξής: catenated string: XXXXXXXXXYYYYYYYYYΥY Εάν η ένωση είναι αδύνατη λόγω μεγέθους του τελικού αλφαριθμητικού το πρόγραμμα θα πρέπει να επιστρέψει Unable to catenate strings! ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. 4. Εάν ο χρήστης γράψει copy τότε ζητούνται διαδοχικά τα αλφαριθμητικά που θα αντιγραφούν Enter string 1: XXXXXXXXXΧΧΧΧΧ Enter string 2: YYYYYYYYYΥY Το αποτέλεσμα είναι η αντιγραφή του string 2 sto string 1. Εάν το string 2 είναι μικρότερου μήκους από το string 1 θα πρέπει οι χαρακτήρες του string 1 που είναι σε θέσεις μεγαλύτερες του μήκους του string 2 να παραμείνουν στο τελικό string, ως εξής: copied string: YYYYYYYYYΥYΧΧΧ 5. Εάν ο χρήστης δεν επιλέξει τίποτα από τα παραπάνω εκτυπώνει το μήνυμα Unrecognizable command. Try again!
ακολουθούμενο από χαρακτήρα αλλαγής γραμμής και επιστρέφει στο βήμα 1. Παρατηρήσεις 1. Απαγορεύεται η χρήση πινάκων οπουδήποτε εκτός από την αρχικοποίηση τους. Σε όλες τις άλλες περιπτώσεις καλείστε να χρησιμοποιήσετε δείκτες. 2. Απαγορεύεται η χρήση των συναρτήσεων strcmp, strcpy, strncpy, strcat. Καλείστε να υλοποιήσετε την λειτουργικότητα των συναρτήσεων αυτών μέσα στον κώδικα σας, όπου αυτό απαιτείται. Δεν σας ζητείται να φτιάξετε τις συναρτήσεις αυτές. 3. Καλείστε να υλοποιήσετε την συνάρτηση int my_strlen(char *str) και να την χρησιμοποιήσετε όπου απαιτείται. Η συνάρτηση υλοποιεί την λειτουργικότητα της int strlen(char *str), της standard βιβλιοθήκης της C. 4. Καλείστε να υλοποιήσετε και στη συνέχει ανα χρησιμοποιήσετε την συνάρτηση int my_strlen(char *str), η οποία επιστρέφει τον αριθμό των χαρακτήρων ενός string. Αρχεία άσκησης 2 προς παράδοση: lab9b.c Δείτε το παρακάτω παράδειγμα εκτέλεσης του προγράμματος.
Αποστολή του προγράμματος για διόρθωση και σχολιασμό Για να στείλετε το πρόγραμμά σας για βαθμολόγηση, ανοίξτε ένα τερματικό (ή χρησιμοποιήστε αυτό του Kate), πηγαίνετε στο φάκελο lab9, και χρησιμοποιήστε την εντολή mkdir για να κατασκευάσετε ένα νέο φάκελο μέσα στο lab9 με βάση τα ονόματα των δύο μελών της ομάδας. Για την ακρίβεια, το όνομα του φακέλου πρέπει να είναι (με λατινικούς χαρακτήρες) : επώνυμο1_am1_επώνυμο2_αμ2, όπου ΑΜ είναι ο τετραψήφιος αριθμός μητρώου σας. Για παράδειγμα, mkdir doufexi_1234_antonopoulos_5678 Αντιγράψτε τα lab9α.c και lab9b.c μέσα στο νέο φάκελο, όπως παρακάτω: cp -v lab9?.c doufexi_1234_antonopoulos_5678/ Tέλος, πακετάρετε και συμπιέστε το φάκελο με το πρόγραμμά σας. Η εντολή είναι: tar cvzf επώνυμο1_αμ1_επώνυμο2_αμ2.tgz επώνυμο1_αμ1_επώνυμο2_αμ2 Θα πρέπει να δημιουργηθεί το αρχείο με όνομα επώνυμο1_αμ1_επώνυμο2_αμ2.tgz. Αν εμφανιστεί κάποιο μήνυμα λάθους ή δε δημιουργηθεί το αρχείο, ζητήστε βοήθεια! Στη συνέχεια στείλτε ένα email: στη διεύθυνση: ce120lab@gmail.com με τίτλο (subject): CE120 lab9 sectionx όπου X είναι ο αριθμός του τμήματος, πχ section6 για μια ομάδα του τμήματος 6. CC στο άλλο μέλος της ομάδας σας και στον εαυτό σας συνημμένο (attached) το αρχείο: επώνυμο1_αμ1_επώνυμο2_αμ2.tgz μέσα στο email γράψτε τα ονόματα των δύο μελών της ομάδας. Αφού στείλετε το email, επιβεβαιώστε ότι είχε σωστό attachment κι ότι έλαβε αντίγραφο και το άλλο μέλος της ομάδας. Το άλλο μέλος της ομάδας μπορεί να ξεπακετάρει το tgz αρχείο στο δικό του υπολογιστή με την εντολή tar xvzf επώνυμο1_αμ1_επώνυμο2_αμ2.tgz ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΚΑΝΕΤΕ LOGOUT ΠΡΙΝ ΦΥΓΕΤΕ!!