ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Εξάσκηση στη βασική είσοδο / έξοδο Εξάσκηση στη χρήση µεταβλητών Δυαδικοί τελεστές Φορµαρισµένη έξοδος Πριν ξεκινήσετε Βήµα 1: Ανοίξτε ένα τερµατικό και γράψτε τα παρακάτω : chmod -R go-rwx ~/ce120 (όπου ce120 είναι ο φάκελος του µαθήµατος. Αν είναι διαφορετικό π.χ ce_120 προσαρµόστε ανάλογα) Βήµα 2: Πηγαίνετε στο φάκελο ce120 και κατασκευάστε µέσα σε αυτόν ένα φάκελο µε όνοµα lab3. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σηµερινό εργαστήριο. Βήµα 3: Ανοίξτε το Kate. Αν δεν έχετε κάνει τις ρυθµίσεις για τη στοίχιση, κάντε τις τώρα. Οδηγίες εδώ. Βήµα 4: Κάντε τις ασκήσεις της εβδοµάδας. Σας θυµίζουµε πως η εντολή για να κάνετε compile ένα αρχείο µε όνοµα lab3.c είναι : gcc -g -Wall lab3.c -o lab3. Αν δεν υπάρχουν λάθη, θα δηµιουργηθεί το εκτελέσιµο αρχείο lab3 το οποίο µπορείτε να εκτελέσετε γράφοντας./lab3.
Άσκηση 1 Το πρόγραµµα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab3a.c µέσα στο φάκελο lab3. Προσοχή! Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Γράψτε ένα πρόγραµµα σε C το οποίο διαβάζει έναν ακέραιο αριθµό από την κονσόλα. Εάν ο αριθµός αυτός είναι θετικός τον διαιρεί δια 4. Εάν είναι αρνητικός υπολογίζει το συµπλήρωµα ως προς 2 του αριθµού αυτού. Προσοχή: Η διαίρεση θα πρέπει να γίνει µε κατάλληλο τελεστή σε επίπεδο bits και όχι µε χρήση του τελεστή διαίρεσης (/). Πιο συγκεκριµένα το πρόγραµµα σας θα πρέπει να κάνει τα εξής: 1. Εκτυπώνει στην οθόνη το µήνυµα "Enter integer: ". 2. Διαβάζει τον αριθµό από την κονσόλα. 3. Κάνει τις απαραίτητες πράξεις για να υπολογίσει το πηλίκο δια 4 του αριθµού αυτού και το συµπλήρωµα του ως προς 2. 4. Με χρήση του τελεστή συνθήκης? επιλέγεται το τελικό αποτέλεσµα. 5. Εκτυπώνει τα αποτελέσµατα στην παρακάτω µοφή: Enter integer: XXXXXX Number is : XXXXXX Result is : YYYYΥY όπου ο χαρακτήρας : ακολουθείται από ένα χαρακτήρα tab, XXXXΧΧ είναι o α ακέραιος όπως δόθηκε από τον χρήστη και YYYYYY είναι το αποτέλεσµα όπως υπολογίστηκε από το πρόγραµµα. Ο κάθε αριθµός θα πρέπει να καταλαµβάνει τουλάχιστον 6 ψηφία κατά την εκτύπωση. Εάν είναι µικρότερος από 6 ψηφία τα πρώτα ψηφία δεν θα πρέπει να καταλαµβάνονται από µηδενικά. Στην παρακάτω εικόνα δίνεται ενδεικτική εκτέλεση του προγράµµατος.
Συµπλήρωµα ως προς 2 Με τη µέθοδο του "συµπληρώµατος ως προς 2" οι υπολογιστές µετατρέπουν τους αριθµούς από θετικούς σε αρνητικούς και αντίστροφα. Η µέθοδος συνοψίζεται στα εξής βήµατα για την µετατροπή ενός θετικού αριθµού σε αρνητικό ή ενός αρνητικού αριθµού σε θετικό: 1. Αντιστρέφουµε όλα τα bits του αρχικού αριθµού. 2. Προσθέτουµε την τιµή 1. Γενικές παρατηρήσεις: Παρατηρήστε πως για να λειτουργήσει το πρόγραµµά σας θα χρειαστεί να δηλώσετε κατάλληλες µεταβλητές όχι µόνο για τις ποσότητες που αναφέρουµε πιο πάνω, αλλά πιθανώς και για να αποθηκεύσετε ενδιάµεσα αποτελέσµατα κατά τους υπολογισµούς σας. Φροντίστε οι µεταβλητές σας να έχουν περιγραφικά ονόµατα και κατάλληλο τύπο. Επιπλέον, το πρόγραµµά σας πρέπει να έχει σωστή στοίχιση και χρήσιµα σχόλια. Τα σχόλια πρέπει να ακολουθούν τις αρχές που περιγράφονται στο φυλλάδιο "Πρότυπα σχολιασµού προγραµµάτων". Το πρόγραµµά σας πρέπει να µεταγλωττίζεται χωρίς λάθη ή προειδοποιήσεις και να εκτελείται ακριβώς όπως περιγράφεται πιο πάνω. Αρχεία άσκησης 1 προς παράδοση: lab3a.c
Άσκηση 2 Το πρόγραµµα που θα γράψετε για την άσκηση 2 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab3b.c µέσα στο φάκελο lab3. Γράψτε ένα πρόγραµµα σε C το οποίο διαβάζει έναν µη προσηµασµένο ακέραιο αριθµό από την κονσόλα. Από τον αριθµό που διαβάστηκε αθροίζουµε δύο λιγότερα σηµαντικά bytes µε τα δύο περισσότερο σηµαντικά bytes σαν να ήταν δύο διαφορετικοί µη προσηµασµένοι ακέραιοι και εκτυπώνουµε το αποτέλεσµα. Πιο συγκεκριµένα το πρόγραµµα σας θα πρέπει να κάνει τα εξής: όπου 1. Εκτυπώνει στην οθόνη το µήνυµα "Enter a positive int in hex format: ". 2. Διαβάζει έναν δεκαεξαδικό αριθµό από την κονσόλα. 3. Κάνει τις απαραίτητες πράξεις για να υπολογίσει α) τα 2 λιγότερα σηµαντικά bytes ως έναν ακέραιο αριθµό, b) τα 2 περισσότερο σηµαντικά bytes ως έναν άλλο ακέραιο αριθµό γ) να υπολογίσει το άθροισµα τους. 4. Εκτυπώνει τα αποτελέσµατα στην παρακάτω µορφή: Given number : 0xXXXXXXXX LS 2 bytes are : MS 2 bytes are : 0xΥYYY or yyyyy 0xZZZZ or zzzzz Result is : 0xRRRRR or rrrrrr ο χαρακτήρας : ακολουθείται από ένα χαρακτήρα tab, 0xXXXΧXXXX είναι o ακέραιος όπως δόθηκε από τον χρήστη, µήκους 8 χαρακτήρων. Εάν ο αριθµός έχει µήκος µικρότερο των 8 χαρακτήρων, οι χαρακτήρες που υπολοίπονται να συµπληρώνονται µε µηδενικά. 0xYYYY και yyyyy είναι τα 2 λιγότερο σηµαντικά bytes (LS-Less Significant) σε δεκαεξαδική και δεκαδική µορφή αντίστοιχα, 0xZZZZ και zzzzz είναι τα 2 περισσότερο σηµαντικά bytes σε δεκαεξαδική και δεκαδική µορφή αντίστοιχα και 0xRRRRR και rrrrrr είναι το αποτέλεσµα όπως υπολογίστηκε από το πρόγραµµα σε δεκαεξαδική και δεκαδική µορφή αντίστοιχα. Στην παρακάτω εικόνα δίνονται 3 ενδεικτικές εκτελέσεις του προγράµµατος.
Γενικές παρατηρήσεις: Παρατηρήστε πως για να λειτουργήσει το πρόγραµµά σας θα χρειαστεί να δηλώσετε κατάλληλες µεταβλητές όχι µόνο για τις ποσότητες που αναφέρουµε πιο πάνω, αλλά πιθανώς και για να αποθηκεύσετε ενδιάµεσα αποτελέσµατα κατά τους υπολογισµούς σας. Φροντίστε οι µεταβλητές σας να έχουν περιγραφικά ονόµατα και κατάλληλο τύπο. Επιπλέον, το πρόγραµµά σας πρέπει να έχει σωστή στοίχιση και χρήσιµα σχόλια. Τα σχόλια πρέπει να ακολουθούν τις αρχές που περιγράφονται στο φυλλάδιο "Πρότυπα σχολιασµού προγραµµάτων". Το πρόγραµµά σας πρέπει να µεταγλωττίζεται χωρίς λάθη ή προειδοποιήσεις και να εκτελείται ακριβώς όπως περιγράφεται πιο πάνω. Αρχεία άσκησης 2 προς παράδοση: lab3b.c
Αποστολή του προγράµµατος για διόρθωση και σχολιασµό Για να στείλετε το πρόγραµµά σας για βαθµολόγηση, ανοίξτε ένα τερµατικό (ή χρησιµοποιήστε αυτό του Kate), πηγαίνετε στο φάκελο lab3, και χρησιµοποιήστε την εντολή mkdir για να κατασκευάσετε ένα νέο φάκελο µέσα στο lab3 µε βάση τα ονόµατα των δύο µελών της οµάδας. Για την ακρίβεια, το όνοµα του φακέλου πρέπει να είναι (µε λατινικούς χαρακτήρες) : επώνυµο1_am1_επώνυµο2_αμ2, όπου ΑΜ είναι ο τετραψήφιος αριθµός µητρώου σας. Για παράδειγµα, mkdir doufexi_1234_antonopoulos_5678 Αντιγράψτε τα lab3α.c και lab3b.c µέσα στο νέο φάκελο, όπως παρακάτω: cp -v lab3?.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 lab3 sectionx όπου X είναι ο αριθµός του τµήµατος, πχ section6 για µια οµάδα του τµήµατος 6. CC στο άλλο µέλος της οµάδας σας, και συνηµµένο (attached) το αρχείο: επώνυµο1_αμ1_επώνυµο2_αμ2.tgz µέσα στο email γράψτε τα ονόµατα των δύο µελών της οµάδας. Αφού στείλετε το email, επιβεβαιώστε ότι είχε σωστό attachment κι ότι έλαβε αντίγραφο και το άλλο µέλος της οµάδας. Το άλλο µέλος της οµάδας µπορεί να ξεπακετάρει το tgz αρχείο στο δικό του υπολογιστή µε την εντολή tar xvzf επώνυµο1_αμ1_επώνυµο2_αμ2.tgz ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΚΑΝΕΤΕ LOGOUT ΠΡΙΝ ΦΥΓΕΤΕ!!