ΕΡΓΑΣΤΗΡΙΟ 2 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2012-2013 Στόχοι Τελεστές, σταθερές Πριν ξεκινήσετε Βήµα 1: Πηγαίνετε στο φάκελο ce120 και κατασκευάστε µέσα σε αυτόν ένα φάκελο µε όνοµα lab2. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σηµερινό εργαστήριο. Βήµα 2: Ανοίξτε το Kate. Αν δεν έχετε κάνει τις ρυθµίσεις για τη στοίχιση, κάντε τις τώρα. Οδηγίες εδώ. Βήµα 3: Κάντε τις ασκήσεις της εβδοµάδας. Σας θυµίζουµε πως η εντολή για να κάνετε compile ένα αρχείο µε όνοµα lab2.c είναι : gcc -g -Wall lab2.c -o lab2 και αν δεν υπάρχουν λάθη, θα δηµιουργηθεί το εκτελέσιµο αρχείο lab2 το οποίο µπορείτε να τρέξετε γράφοντας./lab2 1
Άσκηση 1 Το πρόγραµµα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab2a.c µέσα στο φάκελο lab2. Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Εκτοξεύουµε ένα πυροτέχνηµα κατακόρυφα προς τα πάνω και θέλουµε να γνωρίζουµε σε ποιο ύψος θα εκραγεί, δεδοµένης της αρχικής του ταχύτητας και του χρόνου που παίρνει από την εκτόξευση µέχρι την έκρηξη ( δηλαδή τη διάρκεια του φιτιλιού). Γράψτε ένα πρόγραµµα το οποίο: Εκτυπώνει το µήνυµα "Enter time: " και διαβάζει από το πληκτρολόγιο σε πόσα δευτερόλεπτα θα εκραγεί το πυροτέχνηµα. Εκτυπώνει το µήνυµα "Enter velocity: " και διαβάζει από το πληκτρολόγιο την αρχική ταχύτητα εκτόξευσης, σε m/sec. Υπολογίζει την απόσταση που θα διανύσει σε αυτό το χρόνο, δεδοµένης της αρχικής ταχύτητας και τις διάρκειας της "πτήσης". Ο τύπος για τον υπολογισµό της απόστασης είναι S=v t 1 2 g t2 όπου S η απόσταση, v η αρχική ταχύτητα, t η διάρκεια και g η σταθερά επιτάχυνσης της βαρύτητας, η οποία έχει την τιµή -9.8m/sec 2. Εκτυπώνει το µήνυµα "Height: X.YZ m" όπου X.YZ η απόσταση που υπολογίστηκε στο προηγούµενο βήµα. Πρέπει να εµφανίζονται ακριβώς 2 δεκαδικά ψηφία. Προσοχή: Οι µεταβλητές σας δεν πρέπει να λέγονται S, v, t κτλ, αλλά να έχουν περιγραφικά ονόµατα. Τόσο ο χρόνος όσο και η ταχύτητα είναι πραγµατικοί αριθµοί. Για µεγαλύτερη ακρίβεια, χρησιµοποιήστε τύπο double (αριθµός κινητής υποδιαστολής διπλής ακρίβειας) Παράδειγµα εκτέλεσης: 2
Άσκηση 2 Το πρόγραµµα που θα γράψετε για την άσκηση 2 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab2b.c µέσα στο φάκελο lab2. Διαβάστε όλη την εκφώνηση της άσκησης πριν αρχίσετε να γράφετε κώδικα! Γράψτε ένα πρόγραµµα το οποίο διαβάζει από το πληκτρολόγιο ένα αριθµό ηµερών και βρίσκει µε πόσα χρόνια, µήνες, εβδοµάδες και ηµέρες είναι ισοδύναµο. Υποθέστε ότι ένας χρόνος αποτελείται από 365 ηµέρες, κι ένας µήνας από 30 ηµέρες. Για την ακρίβεια, το πρόγραµµα πρέπει να λειτουργεί ως εξής: Εκτυπώνει το µήνυµα "Enter total days: " και διαβάζει το συνολικό πλήθος ηµερών Υπολογίζει σε πόσα έτη, µήνες, εβδοµάδες και ηµέρες αντιστοιχεί Εκτυπώνει το µήνυµα "T days = Y years + M months + W weeks + D days" ακολουθούµενο από ένα χαρακτήρα αλλαγής γραµµής, όπου T: συνολικό πλήθος ηµερών, Y: έτη, Μ: µήνες, W: εβδοµάδες, D: υπόλοιπες µέρες. Προσοχή: Οι µεταβλητές σας δεν πρέπει να λέγονται D, M, T κτλ, αλλά να έχουν περιγραφικά ονόµατα. Παραδείγµατα εκτέλεσης: 3
Συµπληρωµατικές ασκήσεις Εάν έχετε χρόνο, ξεκινήστε να κάνετε και τις παρακάτω ασκήσεις, οι οποίες είναι πιο προχωρηµένες. Αν δεν έχετε χρόνο να τις κάνετε στο εργαστήριο, τότε προχωρήστε στην ενότητα "Αποστολή ασκήσεων". Άσκηση 3 Το πρόγραµµα που θα γράψετε για την άσκηση 3 πρέπει να το αποθηκεύσετε σε αρχείο µε όνοµα lab2c.c µέσα στο φάκελο lab2. Γράψτε ένα πρόγραµµα το οποίο διαβάζει από το πληκτρολόγιο την τιµή ενός προϊόντος και χρησιµοποιεί τον τελεστή? : για να υπολογίσει την τελική τιµή του µετά από έκπτωση. Η έκπτωση γίνεται ως εξής: Αν η τιµή είναι µικρότερη από 100 ευρώ, τότε η έκπτωση είναι 10% Αν η τιµή είναι µεγαλύτερη ή ίση των 100 ευρώ και µικρότερη των 500, τότε η έκπτωση είναι 25% Αν η τιµή είναι µεγαλύτερη ή ίση των 500 ευρώ, τότε η έκπτωση είναι 40% Το πρόγραµµα πρέπει να εκτυπώνει την τελική τιµή του προϊόντος (µε δύο δεκαδικά ψηφία) µετά την έκπτωση. Παραλλαγή: Μπορείτε να σκεφτείτε ένα τρόπο να κάνετε την άσκηση χωρίς τον τελεστή?: αλλά χρησιµοποιώντας µόνο λογικούς και αριθµητικούς τελεστές? Παραδείγµατα εκτέλεσης: 4
Άσκηση 4 Κατεβάστε από τη σελίδα του εργαστηρίου το αρχείο lab2d.c και αποθηκεύστε το µέσα στο φάκελο lab2. Το πρόγραµµα που σας δίνουµε διαβάζει έναν ακέραιο αριθµό από το πληκτρολόγιο και χρησιµοποιεί µια συνάρτηση µε όνοµα printbits για να τον εκτυπώσει στην οθόνη σε δυαδική µορφή. Προσθέστε κώδικα στο σηµείο που προσδιορίζουµε έτσι ώστε το πρόγραµµα να: Διαβάζει από το πληκτρολόγιο έναν ακέραιο (ας τον πούµε θέση) Αλλάζει το bit του αρχικού αριθµού που βρίσκεται στη δεδοµένη θέση (ξεκινώντας το µέτρηµα από δεξιά) σε 1. Εκτυπώνει ξανά τον αριθµό σε δυαδική µορφή (ο οποίος τώρα πια θα έχει ένα bit διαφορά από πριν) Βοήθεια: Θα χρειαστεί να κατασκευάσετε ένα νέο βοηθητικό αριθµό ο οποίος θα έχει µηδενικά ή άσους σε στρατηγικά σηµεία, ώστε αν µετά κάνετε µια πράξη σε επίπεδο bit ανάµεσα στον αρχικό και το βοηθητικό αριθµό, να αλλάξει το bit που σας ενδιαφέρει. Θυµηθείτε ότι 0 & 0 1 0 0 0 0 & 1 0 0 1 1 1 & 1 1 1 1 1 κι ότι µπορείτε να χρησιµοποιήσετε τους τελεστές ολίσθησης για να "κατασκευάσετε" κατάλληλο βοηθητικό αριθµό. Για παράδειγµα αν ξεκινήσετε από τον (δυαδικό) αριθµό 00...0001 και κάνετε αριστερή ολίσθηση 2 θέσεις, τότε θα αποκτήσετε το 00...0100 Παράδειγµα εκτέλεσης: 5
Αποστολή του προγράµµατος για διόρθωση και σχολιασµό Η αποστολή γίνεται από τον οδηγό. Για να στείλετε το πρόγραµµά σας για βαθµολόγηση, ανοίξτε ένα τερµατικό (ή χρησιµοποιήστε αυτό του Kate), πηγαίνετε στο φάκελο lab2, και χρησιµοποιήστε την εντολή mkdir για να κατασκευάσετε ένα νέο φάκελο µε βάση τα ονόµατα των δύο µελών της οµάδας. Για την ακρίβεια, το όνοµα του φακέλου πρέπει να είναι (µε λατινικούς χαρακτήρες) : επώνυµο1_am1_επώνυµο2_αμ2 Για παράδειγµα, mkdir doufexi_1234_antonopoulos_5678 ΑΜ είναι ο τετραψήφιος αριθµός µητρώου σας. Αντιγράψτε το lab2a.c µέσα στο νέο φάκελο (cp lab2a.c doufexi_1234_antonopoulos_5678) Αντιγράψτε το lab2b.c µέσα στο νέο φάκελο (cp lab2b.c doufexi_1234_antonopoulos_5678) Τέλος πακετάρετε και συµπιέστε το φάκελο µε το πρόγραµµά σας. Η εντολή είναι tar czvf επώνυµο1_αμ1_επώνυµο2_αμ2.tgz επώνυµο1_αμ1_επώνυµο2_αμ2 Θα πρέπει να δηµιουργηθεί το αρχείο µε όνοµα επώνυµο1_αμ1_επώνυµο2_αμ2.tgz Αν εµφανιστεί κάποιο µήνυµα λάθους, ζητήστε βοήθεια! Στείλτε ένα email στη διεύθυνση: ce120lab@gmail.com CC στον πλοηγό, µε τίτλο (subject): CE120 lab2 συνηµµένο (attached) το αρχείο: επώνυµο1_αμ1_επώνυµο2_αμ2.tgz Αφού στείλετε το email, επιβεβαιώστε ότι είχε σωστό attachment κι ότι έλαβε αντίγραφο και ο πλοηγός. Ο πλοηγός µπορεί να ξεπακετάρει το tgz αρχείο στο δικό του υπολογιστή από τερµατικό, µε την εντολή tar xzf επώνυµο1_αμ1_επώνυµο2_αμ2.tgz ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΚΑΝΕΤΕ ΚΑΙ ΟΙ ΔΥΟ LOGOUT ΠΡΙΝ ΦΥΓΕΤΕ!! 6