ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Φορµαρισµένη είσοδος και έξοδος Αλφαριθµητικά Δείκτες Προσοχή: Απαγορεύεται αυστηρά η χρήση goto. Πριν ξεκινήσετε Πηγαίνετε στο φάκελο ce120 και κατασκευάστε µέσα σε αυτόν ένα φάκελο µε όνοµα lab9. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σηµερινό εργαστήριο.
Άσκηση 1 Το πρόγραµµα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab9α.c µέσα στο φάκελο lab9. Προσοχή! Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Γράψτε ένα πρόγραµµα το οποίο διαβάζει από το πληκτρολόγιο αρχικά ένα φυσικό αριθµό και στη συνέχεια διαβάζει διαδοχικά strings µέγιστου µεγέθους STRLEN=50 των οποίων το πλήθος προσδιορίζεται από τον φυσικό αριθµό που διαβάστηκε αρχικά. Τα strings καθώς διαβάζονται τοποθετούνται σε ένα διδιάστατο πίνακα µεγέθους 10 γραµµών και τόσων στηλών ώστε να χωρούν τα strings που διαβάζονται. Τα strings τοποθετούνται µε τη σειρά που διαβάζονται, ένα σε κάθε γραµµή του πίνακα. Τέλος, διαβάζεται ένα επιπλέον string ως συγκολλητικό (glue string) των strings που διαβάστηκαν, παραπάνω. Σκοπός της συγκεκριµένης άσκησης είναι να δηµιουργηθεί ένα νέο string που αποτελείται από τα επιµέρους strings που διαβάστηκαν και αποθηκεύτηκαν στον διδιάστατο πίνακα, µε την σειρά που διαβάστηκαν και αποθηκεύτηκαν. Μεταξύ των επιµέρους strings που ενώνονται θα πρέπει να παρεµβάλλεται το συγκολλητικό string που διαβάστηκε στο τέλος. Το τελικό string µέγιστου µεγέθους CATENATED_LEN=500 χαρακτήρων, αποθηκεύεται σε µονοδιάστατο πίνακα χαρακτήρων ικανού µεγέθους. Για το πρόγραµµα σας θα πρέπει να ορίσετε #define σταθερές για τα παραπάνω µεγέθη. Το πρόγραµµα σας θα πρέπει να δουλεύει ακόµη και εάν οι τιµές των παραπάνω µεγεθών µεταβληθούν. Σηµείωση: Για την ένωση των επιµέρους strings µεταξύ τους απαγορεύεται να χρησιµοποιήσετε τη συνάρτηση strcat. Μπορείτε όµως να χρησιµοποιήσετε τις συναρτήσεις strcpy ή strncpy. Αναλυτικότερα το πρόγραµµα σας πρέπει να κάνει τα εξής: 1. Διαβάζει ένα φυσικό αριθµό από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω µήνυµα: Enter string number: 2. Διαβάζει από το πληκτρολόγιο τόσα strings όσα ορίζονται από το παραπάνω νούµερο που διαβάστηκε, αφού εκτυπώσει το παρακάτω µήνυµα. Στην αρχή κάθε γραµµής εµφανίζεται ο αύξων αριθµός του string που διάβάζεται κάθε φορά. Input strings? 1. XXXXXXXXX 2. XXXXXXXXXXXXX... Ν. XXXXXXXXXXX 3. Διαβάζει ένα string από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω µήνυµα: Enter glue string: 4. Κατασκευάζει και µετά εκτυπώνει το τελικό string, όπως αυτό περιγράφεται παραπάνω.
Δείτε τa παρακάτω αναλυτικά παραδείγµατα εκτέλεσης του προγράµµατος σας.
Άσκηση 2 Το πρόγραµµα που θα γράψετε για την άσκηση 2 πρέπει να το αποθηκεύει σε αρχείο µε όνοµα lab9b.c µέσα στο φάκελο lab9. Καλείστε να φτιάξετε ένα πρόγραµµα σε C το οποίο θα διαβάζει ένα τυχαίο αλφαριθµητικό µέγιστου µεγέθους 100 από το πληκτρολόγιο και ένα µεµονωµένο χαρακτήρα. Στην συνέχεια, το πρόγραµµα σας θα πρέπει να υπολογίζει την ελάχιστη απόσταση µεταξύ δύο εµφανίσεων του ίδιου χαρακτήρα µέσα στο αλφαριθµητικό και να εκτυπώνει την απόσταση αυτή και τους χαρακτήρες που παρεµβάλλονται. Αναλυτικά το πρόγραµµα σας πρέπει να κάνει τα εξής: 1. Διαβάζει ένα αλφαριθµητικό από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω µήνυµα: Enter string: 2. Διαβάζει ένα χαρακτήρα από το πληκτρολόγιο αφού εκτυπώσει το παρακάτω µήνυµα: Enter character: 3. Υπολογίζει την ελάχιστη απόσταση χαρακτήρων µεταξύ δύο εµφανίσεων του παραπάνω χαρακτήρα στο δοθέν αλφαριθµητικό. 4. Εκτυπώνει την ελάχιστη απόσταση που υπολογίστηκε παραπάνω και το τµήµα του αλφαριθµητικού που παρεµβάλλεται µεταξύ των εµφανίσεων αυτών ως εξής: Min distance of character X is N. Characters between are: ΥΥΥΥΥΥ Σηµειώσεις: 1. Για την αποθήκευση των χαρακτήρων που παρεµβάλλονται µεταξύ των δύο πιο κοντινών εµφανίσεων του αλφαριθµητικού µπορείτε να χρησιµοποιήσετε βοηθητικό πίνακα. 2. Για την αναζήτηση ενός χαρακτήρα µέσα σε ένα αλφαριθµητικό µπορείτε να χρησιµοποιήσετε την συνάρτηση strchr, η οποία λαµβάνει ως τυπικές παραµέτρους ένα αλφαριθµητικό και ένα χαρακτήρα και επιστρέφει τη διεύθυνση στην οποία εµφανίζεται για πρώτη φορά ο χαρακτήρας µέσα στο αλφαριθµητικό. Αρχεία άσκησης 2 προς παράδοση: lab9b.c Δείτε τα παρακάτω παραδείγµατα εκτέλεσης του προγράµµατος.
Enter string: AxxxAyyA Enter character: A Min distance of character A is 2. Characters between are:yy Enter string: AxxxAAyyyyA Enter character: A Min distance of character A is 0. Characters between are: Enter string: AxAyyAzzzA Enter character: A Min distance of character A is 1. Characters between are:x Enter string: WalkingAlone,HelloWorld,DarkCoffee,BrownSugar,BlackSabbath Enter character: a Min distance of character a is 2. Characters between are:bb Enter string: WalkingAlone,HelloWorld,DarkCoffee,BrownSugar,BlackSabbath Enter character: o Min distance of character o is 1. Characters between are:w Enter string: WalkingAlone,HelloWorld,DarkCoffee,BrownSugar,BlackSabbath Enter character: k Min distance of character k is 22. Characters between are:coffee,brownsugar,blac
Αποστολή του προγράµµατος για διόρθωση και σχολιασµό Για να στείλετε το πρόγραµµά σας για βαθµολόγηση, ανοίξτε ένα τερµατικό (ή χρησιµοποιήστε αυτό του 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 ΠΡΙΝ ΦΥΓΕΤΕ!!