ΕΡΓΑΣΤΗΡΙΟ 8 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Φορμαρισμένη είσοδος και έξοδος Πίνακες Αλφαριθμητικά Συναρτήσεις Προσοχή: Απαγορεύεται αυστηρά η χρήση goto. Πριν ξεκινήσετε Πηγαίνετε στο φάκελο ce120 και κατασκευάστε μέσα σε αυτόν ένα φάκελο με όνομα lab8. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σημερινό εργαστήριο.
Άσκηση 1 Το πρόγραμμα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύετε σε αρχείο με όνομα lab8a.c μέσα στο φάκελο lab8. Ένας παίκτης του μπάσκετ σουτάρει τρίποντο από ύψος Υ (jump shoot). Η απόσταση της γραμμής το τριπόντου από την βάση της στεφάνης είναι 6.75m. Η στεφάνη (ή καλάθι) βρίσκεται σε ύψος 3.05m και έχει διάμετρο 0.45m. Θεωρείστε ότι η μπάλα του μπάσκετ είναι σημειακή, δηλ δεν έχει όγκο. Να υλοποιηθεί συνάρτηση check_3points_shot() η οποία λαμβάνει ως τυπικές παραμέτρους την ταχύτητα με την οποία σουτάρει ο παίκτης, την γωνία βολής και το ύψος από το οποίο γίνεται η βολή και υπολογίζει εάν θα μπει η μπάλα στο καλάθι. H ταχύτητα δίνεται σε m/sec και μπορεί να πάρει δεκαδικές τιμές, ενώ η γωνία βολής σε μοίρες και επίσης μπορεί να πάρει δεκαδικές τιμές. Η συνάρτηση θα πρέπει να επιστρέφει αρνητική τιμή (π.χ. -1) εάν η μπάλα δεν φτάνει στο καλάθι, θετική τιμή (π.χ. 1) εάν φτάνει και περνάει την στεφάνη (π.χ. χτυπάει στο ταμπλό) ή μηδέν (0) εάν μπαίνει μέσα στο καλάθι. Χρησιμοποιώντας τη συνάρτηση check_3points_shot() να γράψετε ένα πρόγραμμα που να διαβάζει το ύψος Υ από το οποίο βάλλεται η μπάλα (μεταξύ 1.6m και 2.6m) και να υπολογίζει και να εκτυπώνει την ελάχιστη ταχύτητα με την οποία θα πρέπει να σουτάρει ο παίκτης για να μπει η μπάλα στο καλάθι. Για την ταχύτητα που υπολογίσατε να τυπώνετε και την αντίστοιχη γωνία βολής. Θεωρήστε γωνία βολής μεταξύ 20 και 80 μοιρών και ταχύτητα μεταξύ 2m/sec και 25m/sec. Για να επιλύσετε το πρόβλημα συνιστάται να ακολουθήσετε τα παρακάτω βήματα: 1. Για να βρείτε την ελάχιστη ταχύτητα μπορείτε να δοκιμάσετε εάν μπαίνει η μπάλα στο καλάθι για όλες τις ταχύτητες βολής και για όλες τις γωνίες βολής που δίνονται παραπάνω. Για τις
δοκιμές σας χρησιμοποιήστε βήμα μεταβολής της ταχύτητας 0.01m/sec και βήμα μεταβολής της γωνίας 0.1 μοίρες. 2. Για να βρείτε εάν μπαίνει η μπάλα στο καλάθι για κάθε ταχύτητα και γωνία βολής που δοκιμάζετε θα πρέπει να εξετάσετε εάν φθάνει ακριβώς το ύψος της στεφάνης (3.05m) ή ελάχιστα υψηλότερα (<0.001m) σε μία τουλάχιστον από τις επιτρεπτές θέσεις. Επιτρεπτές είναι οι θέσεις που μπαίνει η μπάλα μέσα στην στεφάνη, με δεδομένη την διάμετρο της (0.45m). Εξετάσετε μία-μία τις θέσεις αυτές με βήμα 1cm (0.01m). Θεωρούμε ότι η μπάλα είναι σημειακή. Σας δίνεται η επιτάχυνση της βαρύτητας g=9.8m/sec 2 και η σταθερά π=3.14159. Αναλυτικά το πρόγραμμα σας πρέπει να κάνει τα εξής: Εκτυπώνει το μήνυμα Enter shot height: Εάν το ύψος που δόθηκε είναι μεταξύ 1.6m και 2.6m προχωρά στους υπολογισμούς. Διαφορετικά εκτυπώνει το μήνυμα Unacceptable shot height! παραπάνω μήνυμα ξανά μέχρι να δοθεί αποδεκτή τιμή: Εκτυπώνει το μήνυμα: Minimum Velocity: ΧΧ.ΧΧ m/sec, Angle: ΑΑ.ΑΑ degrees Οι βασικές ποσότητες με τις οποίες θα δουλέψετε είναι: v0 : H αρχική ταχύτητα της μπάλας v0x : Η συνιστώσα της αρχικής ταχύτητας στον άξονα x
v0y : Η συνιστώσα της αρχικής ταχύτητας στον άξονα y X : Η οριζόντια απόσταση από την γραμμή του τριπόντου μέχρι την βάση της στεφάνης (6.75m). Y : Το ύψος από το οποίο γίνεται η βολή Η : Το ύψος της μπασκέτας (3.05m) θ : Η γωνία βολής t : Ο χρόνος από την αρχή της βολής μέχρι το τέρμα. Θα χρειαστείτε τις παρακάτω εξισώσεις: Για να μετατρέψετε τις μοίρες σε radians (που είναι η μονάδα που χρησιμοποιούν οι τριγωνομετρικές συναρτήσεις), πολλαπλασιάζετε τις μοίρες με π/180. Για το π, χρησιμοποιείστε την τιμή 3.14159. Για να υπολογίσετε τις συνιστώσες της ταχύτητας: v0x = v0 * cos(θ) και v0y = v0 * sin(θ) x = v0x * t y = v0y * t - 0.5 * g * t 2 όπου g είναι η επιτάχυνση της βαρύτητας κι έχει τιμή 9.8m/sec 2. Για περισσότερες πληροφορίες αναφορικά με τον τρόπο χρήστης των συναρτήσεων ημιτόνου (sin()), συνημιτόνου (cos()) μπορείτε να ανατρέξετε στην εκφώνηση του 4ου εργαστηρίου. Δείτε το παρακάτω παράδειγμα εκτέλεσης του προγράμματος:
Αποστολή του προγράμματος για διόρθωση και σχολιασμό Για να στείλετε το πρόγραμμά σας για βαθμολόγηση, ανοίξτε ένα τερματικό (ή χρησιμοποιήστε αυτό του Kate), πηγαίνετε στο φάκελο lab8, και χρησιμοποιήστε την εντολή mkdir για να κατασκευάσετε ένα νέο φάκελο μέσα στο lab8 με βάση τα ονόματα των δύο μελών της ομάδας. Για την ακρίβεια, το όνομα του φακέλου πρέπει να είναι (με λατινικούς χαρακτήρες) : επώνυμο1_am1_επώνυμο2_αμ2, όπου ΑΜ είναι ο τετραψήφιος αριθμός μητρώου σας. Για παράδειγμα, mkdir doufexi_1234_antonopoulos_5678 Αντιγράψτε τα lab8α.c και lab8b.c μέσα στο νέο φάκελο, όπως παρακάτω: cp -v lab8?.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 lab8 sectionx όπου X είναι ο αριθμός του τμήματος, πχ section6 για μια ομάδα του τμήματος 6. CC στο άλλο μέλος της ομάδας σας και στον εαυτό σας συνημμένο (attached) το αρχείο: επώνυμο1_αμ1_επώνυμο2_αμ2.tgz μέσα στο email γράψτε τα ονόματα των δύο μελών της ομάδας. Αφού στείλετε το email, επιβεβαιώστε ότι είχε σωστό attachment κι ότι έλαβε αντίγραφο και το άλλο μέλος της ομάδας. Το άλλο μέλος της ομάδας μπορεί να ξεπακετάρει το tgz αρχείο στο δικό του υπολογιστή με την εντολή tar xvzf επώνυμο1_αμ1_επώνυμο2_αμ2.tgz ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΚΑΝΕΤΕ LOGOUT ΠΡΙΝ ΦΥΓΕΤΕ!!