ΕΡΓΑΣΤΗΡΙΟ 8 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Στόχοι Φορμαρισμένη είσοδος και έξοδος Πίνακες Αλφαριθμητικά Συναρτήσεις Προσοχή: Απαγορεύεται αυστηρά η χρήση goto. Πριν ξεκινήσετε Πηγαίνετε στο φάκελο ce120 και κατασκευάστε μέσα σε αυτόν ένα φάκελο με όνομα lab8. Μέσα σε αυτό το φάκελο θα αποθηκεύσετε τις απαντήσεις σας για το σημερινό εργαστήριο.
Άσκηση 1 Το πρόγραμμα που θα γράψετε για την άσκηση 1 πρέπει να το αποθηκεύετε σε αρχείο με όνομα lab8a.c μέσα στο φάκελο lab8. Ένας παίκτης του beach-volley θέλει να καρφώσει την μπάλα στην ευθεία του γηπέδου (όχι στην διαγώνιο). Κάθε πλευρά του γηπέδου εκατέρωθεν του φιλέ (δίχτυ που χωρίζει το γήπεδο στη μέση) έχει διαστάσεις 8m x 8m και κάθε ο παίκτης βρίσκεται σε απόσταση Χ πίσω από το φιλέ. Ο παίκτης καρφώνει την μπάλα από ύψος 2.6m ενώ το φιλέ έχει ύψος 2.43m. Θεωρείστε ότι η μπάλα του volley είναι σημειακή. Ο παίκτης μπορεί να δώσει αρχική ταχύτητα στην μπάλα μεταξύ 2m/sec και 30m/sec και μπορεί να βάλει υπό γωνία μεταξύ -50 και +20 μοιρών. Ο παίκτης θέλει η μπάλα να φύγει από το χέρι του με την μέγιστη δυνατή ταχύτητα. Να βρείτε την μέγιστη ταχύτητα με την οποία
πρέπει να χτυπήσει την μπάλα, ώστε αυτή να βρεθεί εντός των ορίων του γηπέδου. Ποια είναι η γωνία βολής για την επιλεγμένη ταχύτητα; Γράψτε τη συνάρτηση pass_net() που λαμβάνει ως τυπικές παραμέτρους την γωνία βολής, την ταχύτητα βολής της μπάλας και την απόσταση του παίκτη από το δίχτυ (φιλέ) και υπολογίζει εάν η μπάλα θα περάσει το δίχτυ ή όχι επιστρέφοντας θετικές ή αρνητικές τιμές αντίστοιχα. Εάν η μπάλα ακουμπήσει στο δίχτυ θεωρούμε ότι δεν περνάει. Γράψτε τη συνάρτηση check_ball() που λαμβάνει ως τυπικές παραμέτρους την γωνία βολής, την ταχύτητα βολής της μπάλας και την απόσταση του παίκτη από το δίχτυ (φιλέ) και υπολογίζει εάν η μπάλα θα χτυπήσει εντός ή εκτός του γηπέδου. Υπενθυμίζεται ότι στο beach-volley εάν η μπάλα χτυπήσει πάνω στην γραμμή, το χτύπημα είναι έγκυρο. Γράψτε ένα πρόγραμμα που χρησιμοποιώντας τις παραπάνω δύο συναρτήσεις να εκτυπώνει την μέγιστη ταχύτητα βολής και την αντίστοιχη γωνία βολής για ένα έγκυρο χτύπημα. Το πρόγραμμα αρχικά εκτυπώνει το μήνυμα: Enter shot distance from net: Εφόσον ο χρήστης δώσει απόσταση μεγαλύτερη του μηδενός και μικρότερη των 15m τότε το πρόγραμμα υπολογίζει την μέγιστη ταχύτητα βολής και την γωνία βολής. Στη συνέχει εκτυπώνει Max Velocity: ΧΧ.ΧΧ m/sec, Angle: ΑΑ.ΑΑ degrees Για να βρείτε τη μέγιστη ταχύτητα συνιστάται να δοκιμάσετε εάν η μπάλα 1. περνάει πάνω από το φιλέ και 2. σκάει εντός του γηπέδου ή πάνω στην γραμμή για όλες τις ταχύτητες βολής και για όλες τις γωνίες βολής. Από τις ταχύτητες που πληρούν τα παραπάνω δύο κριτήρια επιλέξτε την μεγαλύτερη. Για τους υπολογισμούς σας δοκιμάστε να βρείτε τη μέγιστη ταχύτητα χρησιμοποιώντας βήμα ταχύτητας 0.01m/sec και βήμα γωνίας 0.1 μοίρες. Σημείωση (προαιρετικά): Με δεδομένη την απόσταση βολής από το φιλέ, εάν ο αθλητής μπορεί να χτυπήσει την μπάλα με την μέγιστη δυνατή ταχύτητα για δύο ή περισσότερες γωνίες βολής, επιθυμητή γωνία είναι εκείνη για την οποία η μπάλα σκάει στο έδαφος εντός του γηπέδου και πιο κοντά στο δίχτυ (μικρότερη γωνία), ώστε να είναι δυσκολότερη και η απόκρουση των αντιπάλων. Οι βασικές ποσότητες με τις οποίες θα δουλέψετε είναι: v0 : H αρχική ταχύτητα της μπάλας v0x : Η συνιστώσα της αρχικής ταχύτητας στον άξονα x v0y : Η συνιστώσα της αρχικής ταχύτητας στον άξονα y X : Η οριζόντια απόσταση από το φιλέ. Y : Το ύψος από το οποίο γίνεται η βολή (2.6m) Η : Το ύψος του φιλέ (2.43m)
θ : Η γωνία βολής. Θεωρείστε αρνητική τη γωνία βολής εάν ο παίκτης χτυπήσει την μπάλα προς τα κάτω και θετική αν τη χτυπήσει προς τα πάνω. 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 ΠΡΙΝ ΦΥΓΕΤΕ!!