ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Αναδροµή Σηµείωση: Απαγορεύονται static και global µεταβλητές. Πριν ξεκινήσετε Πηγαίνετε στο φάκελο ce120 και κατασκευάστε µέσα σε αυτόν ένα φάκελο µε όνοµα lab13. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σηµερινό εργαστήριο.
Άσκηση 1 Το πρόγραµµα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab13a.c µέσα στο φάκελο lab13. Προσοχή! Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Στην άσκηση αυτή θα γράψετε ένα πρόγραµµα το οποίο θα δηµιουργεί τυχαίους φυσικούς αριθµούς από 0 έως 999, τους οποίους αποθηκεύει σε ένα µονοδιάστατο πίνακα µεγέθους Ν. Στη συνέχεια δηµιουργείστε την αναδροµική συνάρτηση arraymax η οποία βρίσκει τον µέγιστο από τους τυχαίους αριθµούς του παραπάνω πίνακα. Το prototype της συνάρτησης arraymax δίνεται παρακάτω: int arraymax(unsigned int pinakas[], int index) ; όπου pinakas[] είναι ο πίνακας και index είναι η τρέχουσα θέση του πίνακα. Η συνάρτηση επιστρέφει το µέγιστο αριθµό από τα περιεχόµενα του πίνακα. Αρχεία άσκησης 1 προς παράδοση: lab13a.c
Δηµιουργία τυχαίων αριθµών από 1 έως Ν Για την δηµιουργία τυχαίων αριθµών χρησιµοποιείστε τις συναρτήσεις srand() και rand(). Η srand() καλείται µία φορά για την αρχικοποίηση της γεννήτριας τυχαίων αριθµών και η rand() καλείται κάθε φορά που θέλουµε να δηµιουργήσουµε ένα τυχαίο αριθµό. Η rand() επιστρέφει τυχαίους αριθµούς µεταξύ 0 και RAND_MAX, όπου RAND_MAX ένας πολύ µεγάλος φυσικός αριθµός η τιµή του οποίου εξαρτάται από την υλοποίηση της εκάστοτε βιβλιοθήκης. Παρακάτω δίνεται ένα παράδειγµα κώδικα που γεµίζει ένα πίνακα ακεραίων µεγέθους 2 στοιχείων µε τυχαίες τιµές από 0 έως 999. #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_NUMBER 1000; int main(int argc, char *argv[]) { int random_numbers[2]; srand (time(null)); random_numbers[0] = rand() % MAX_NUMBER; random_numbers[1] = rand() % MAX_NUMBER; return 0; }
Άσκηση 2 (προαιρετική) Το πρόγραµµα που θα γράψετε για την άσκηση 2 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab13b.c µέσα στο φάκελο lab13. Γράψτε ένα πρόγραµµα το οποίο διαβάζει έναν ακέραιο από την γραµµή εντολών και τον εκτυπώνει σε δυαδική µορφή χρησιµοποιώντας την αναδροµική συνάρτηση της οποίας το prototype δίνεται παρακάτω. void dec2bin(int num, int index); όπου num o αριθµός που εξετάζεται και index ο αριθµός της επανάληψης/αναδροµής. Η συνάρτηση επιστρέφει void και εκτυπώνει την δυαδική µορφή του αριθµού στην οθόνη. Πιο συγκεκριµένα το πρόγραµµα σας θα πρέπει να κάνει τα εξής: 1. Διαβάζει τον αριθµό από την γραµµή εντολών. 2. Εκτυπώνει τα αποτελέσµατα στην παρακάτω µοφή: Decimal format: Binary format: X dddddddddddddddddddddddddddddddd όπου µετά τον χαρακτήρα ':' υπάρχει χαρακτήρας tab και στο τέλος κάθε γραµµής υπάρχει χαρακτήρας αλλαγής γραµµής. Χ είναι ο αριθµός σε δεκαδική µορφή. Προσοχή: Το πρόγραµµα σας θα πρέπει να ελέγχει το µήκος του ακεραίου στην αρχιτεκτονική που εκτελείται (2 ή 4 bytes) και να εκτυπώνει το αντίστοιχο εύρος bits σε δυαδική µορφή. Αρχεία άσκησης 2 προς παράδοση: lab13b.c
Αποστολή του προγράµµατος για διόρθωση και σχολιασµό Για να στείλετε το πρόγραµµά σας για βαθµολόγηση, ανοίξτε ένα τερµατικό (ή χρησιµοποιήστε αυτό του Kate), πηγαίνετε στο φάκελο lab13, και χρησιµοποιήστε την εντολή mkdir για να κατασκευάσετε ένα νέο φάκελο µέσα στο lab13 µε βάση τα ονόµατα των δύο µελών της οµάδας. Για την ακρίβεια, το όνοµα του φακέλου πρέπει να είναι (µε λατινικούς χαρακτήρες) : επώνυµο1_am1_επώνυµο2_αμ2, όπου ΑΜ είναι ο τετραψήφιος αριθµός µητρώου σας. Για παράδειγµα, mkdir doufexi_1234_antonopoulos_5678 Αντιγράψτε τα lab13α.c και lab13b.c µέσα στο νέο φάκελο, όπως παρακάτω: cp -v lab13?.c doufexi_1234_antonopoulos_5678/ Τέλος πακετάρετε και συµπιέστε το φάκελο µε το πρόγραµµά σας. Η εντολή είναι: tar cvzf επώνυµο1_αμ1_επώνυµο2_αμ2.tgz επώνυµο1_αμ1_επώνυµο2_αμ2 Θα πρέπει να δηµιουργηθεί το αρχείο µε όνοµα επώνυµο1_αμ1_επώνυµο2_αμ2.tgz. Αν εµφανιστεί κάποιο µήνυµα λάθους ή δε δηµιουργηθεί το αρχείο, ζητήστε βοήθεια! Στη συνέχεια στείλτε ένα email: στη διεύθυνση: ce120lab@gmail.com µε τίτλο (subject): CE120 lab13 sectionx όπου X είναι ο αριθµός του τµήµατος, πχ section6 για µια οµάδα του τµήµατος 6. CC στο άλλο µέλος της οµάδας σας και στον εαυτό σας συνηµµένο (attached) το αρχείο: επώνυµο1_αμ1_επώνυµο2_αμ2.tgz µέσα στο email γράψτε τα ονόµατα των δύο µελών της οµάδας. Αφού στείλετε το email, επιβεβαιώστε ότι είχε σωστό attachment κι ότι έλαβε αντίγραφο και το άλλο µέλος της οµάδας. Το άλλο µέλος της οµάδας µπορεί να ξεπακετάρει το tgz αρχείο στο δικό του υπολογιστή µε την εντολή tar xvzf επώνυµο1_αμ1_επώνυµο2_αμ2.tgz ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΚΑΝΕΤΕ LOGOUT ΠΡΙΝ ΦΥΓΕΤΕ!!