ΕΡΓΑΣΙΑ 2 Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας Εισαγωγή Ημερομηνία Ανάρτησης: 16/02/2017 Ημερομηνία Παράδοσης: 06/03/2017, 23:59 Για την παρούσα άσκηση χρειάζεται να επιλύσετε δύο διαφορετικά προβλήματα, σχεδιάζοντας για το κάθε ένα την αλγοριθμική του λύση και υλοποιώντας την σε Java. Το πρώτο πρόβλημα αφορά το σχεδιασμό με διακριτό τρόπο (discrete figure) των γραφικών παραστάσεων για το ημίτονο και συνημίτονο για δεδομένο πεδίο ορισμού της γωνίας. Το δεύτερο πρόβλημα αφορά τον έλεγχο κατά πόσο δεδομένη συστάδα καρτών τόμπολας όντως ικανοποιεί τους σχετικούς περιορισμούς. Μέρος Α: Σχηματίζοντας γραφικές παραστάσεις για ημίτονο και συνημίτονο Η επίλυση του πρώτου προβλήματος στοχεύει στην αξιοποίηση των αλγοριθμικών δομών της επανάληψης και επιλογής. Δεν είναι απαραίτητο το πρόγραμμά σας να έχει άρθρωση (δηλαδή μεθόδους), με άλλα λόγια μπορεί να απαρτίζεται αποκλειστικά από τη μέθοδο main. Το πρόγραμμά σας πρέπει να λαμβάνει από τη γραμμή εντολών τρεις φυσικούς αριθμούς, έστω α1, α2, και w, όπου α1 και α2 (α1 α2) δίνουν το πεδίο ορισμού για τη γωνία (σε μοίρες) και w δίνει το πλάτος (σε αριθμό χαρακτήρων) του διακριτού πλαισίου εντός του οποίου θα σχηματιστούν παράλληλα οι γραφικές παραστάσεις για το ημίτονο και συνημίτονο. Θα πρέπει να γίνει έλεγχος κατά πόσο το α2 είναι μεγαλύτερο από το α1 και να δίνεται αντίστοιχο μήνυμα λάθους αν προκύπτει παραβίαση του ζητούμενου. Αφού το πεδίο (πραγματικών) τιμών για τις δύο μαθηματικές συναρτήσεις κυμαίνεται στο διάστημα [-1.0, 1.0], εσείς θα πρέπει να το αντιστοιχίσετε στο διακριτό πεδίο τιμών {0, 1,.., w}. Οι γραφικές παραστάσεις θα εκτυπώνονται με δεξιόστροφή περιστροφή 90 ο του x άξονα (βλέπετε παραδείγματα πιο κάτω). Συγκεκριμένα, σχηματίζονται οι γραφικές παραστάσεις για τιμές του x από το α1 μέχρι το α2 με προσαυξήσεις των 10 μοιρών. Η γραφική παράσταση για το ημίτονο παρουσιάζεται με το χαρακτήρα * (αστεράκι) και για το συνημίτονο με το χαρακτήρα ο (κύκλος). Οι μέθοδοι της Java για ημίτονο και συνημίτονο ορίζονται στη βιβλιοθήκη Math. Πιο κάτω δίνονται τρία παραδείγματα χρήσης του προγράμματος. Στο πρώτο παράδειγμα οι γραφικές παραστάσεις αφορούν το πεδίο ορισμού [α1=0, α2=180] με διακριτό πλαίσιο για το σχηματισμό των γραφικών παραστάσεων πλάτους w=50 χαρακτήρων. Στο δεύτερο παράδειγμα, το πεδίο ορισμού είναι το [90, 120] και πάλι με διακριτό πλαίσιο πλάτους 50 χαρακτήρων, ενώ στο τρίτο παράδειγμα το πεδίο ορισμού είναι το [0, 360] και το διακριτό πλαίσιο έχει πλάτος 25 χαρακτήρες. ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 1
Παραδείγματα Εκτέλεσης $ java SinCos 0 180 50 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ x= 0 * o x= 10 * o x= 20 * o x= 30 * o x= 40 * o x= 50 o * x= 60 o * x= 70 o * x= 80 o * x= 90 o * x= 100 o * x= 110 o * x= 120 o * x= 130 o * x= 140 o * x= 150 o * x= 160 o * x= 170 o * x= 180 o * $ java SinCos 90 120 50 x= 90 o * x= 100 o * x= 110 o * x= 120 o * ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 2
$ java SinCos 0 360 25 x= 0 * o x= 10 * o x= 20 * o x= 30 * o x= 40 *o x= 50 o* x= 60 o * x= 70 o * x= 80 o * x= 90 o * x= 100 o * x= 110 o * x= 120 o * x= 130 o * x= 140 o * x= 150 o * x= 160 o * x= 170 o * x= 180 o * x= 190 o * x= 200 o * x= 210 o * x= 220 o* x= 230 *o x= 240 * o x= 250 * o x= 260 * o x= 270 * o x= 280 * o x= 290 * o x= 300 * o x= 310 * o x= 320 * o x= 330 * o x= 340 * o x= 350 * o x= 360 * o ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 3
Μέρος Β: Ελέγχοντας περιορισμούς σε συστάδες καρτών τόμπολας Στο ακόλουθο σχήμα δίνεται ένα παράδειγμα συστάδας καρτών για το γνωστό παιγνίδι της τόμπολας. ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 4
Δομικά, μια συστάδα καρτών αποτελείται από έξι (6) διαφορετικές κάρτες διαστάσεων 3x9. Η κάθε μια από αυτές τις κάρτες ικανοποιεί κάποιους περιορισμούς και επιπρόσθετα η συστάδα στο σύνολό της ικανοποιεί κάποιους άλλους περιορισμούς, όπως εξηγείται στη συνέχεια. Το δεύτερο πρόγραμμα που θα αναπτύξετε λαμβάνει δεδομένα από κάποιο αρχείο κειμένου (μέσω file redirection) την περιγραφή μιας συστάδας καρτών και ελέγχει κατά πόσο ικανοποιεί ή όχι τον κάθε ένα από τους διάφορους περιορισμούς, εκτυπώνοντας για κάθε έλεγχο που κάνει σχετικό μήνυμα (ικανοποίησης ή όχι του συγκεκριμένου περιορισμού). Διεκπεραιώνει, επομένως, όλους τους ελέγχους και δεν σταματά μόλις εντοπίσει ότι κάποιος περιορισμός δεν ικανοποιείται. Παράλληλα με τα μηνύματα που εκτυπώνει, το πρόγραμμα παρουσιάζει οπτικά και την κάθε κάρτα της συστάδας ξεχωριστά, στη μορφή που δεικνύεται στο πιο πάνω σχήμα. Η μέθοδος για την οπτική παρουσίαση της συστάδας καρτών η οποία αξιοποιεί τη βιβλιοθήκη StdDraw σας δίνεται έτοιμη προς χρήση, για να την ενσωματώσετε στο δικό σας πρόγραμμα: public static void visually_display_card(int Card[][], int F){ StdDraw.setXscale(0.0, 45.0); StdDraw.setYscale(0.0, 45.0); StdDraw.clear(Color.WHITE); StdDraw.setPenColor(Color.BLACK); StdDraw.text(20.0, 30.0, "CARD " + F); double y = 26.0, x = 5.0; for (int r = 0; r < 3; r++){ for (int c = 0; c < 9; c++) { if (Card[r][c] == 0) { StdDraw.setPenColor(Color.BLACK); StdDraw.filledSquare(x,y,2.0);} else { StdDraw.setPenColor(Color.RED); StdDraw.filledSquare(x,y,2.0); StdDraw.setPenColor(Color.BLACK); StdDraw.text(x,y,(Card[r][c] + "")); } x = x + 4.0; } x = 5.0; y = y - 4.0; } String file = "card" + F + ".jpg"; StdDraw.save(file); StdDraw.show(2000); } ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 5
Η εν λόγω μέθοδος επίσης αποθηκεύει την κάθε κάρτα σε ξεχωριστό.jpg αρχείο. Επειδή η μέθοδος χρησιμοποιεί χρώματα, στην αρχή του αρχείου σας πρέπει να μπει η εντολή: import java.awt.color; Η επίλυση του δεύτερου προβλήματος αποσκοπεί στην εξάσκηση σε πίνακες, και στη δημιουργία ενός αρθρωτού προγράμματος. Επομένως η διάσπαση του προβλήματος σε υπο-προβλήματα και οι επιμέρους λύσεις τους σε ξεχωριστές μεθόδους, αποτελεί υποχρεωτικό στοιχείο της λύσης σας. Επιπρόσθετα, αποσκοπεί στην απόκτηση εμπειρίας αναφορικά με το μεθοδικό και περιεκτικό σχεδιασμό περιπτώσεων δοκιμής για το πρόγραμμά σας και της εκτέλεσής τους. Εισαγωγή δεδομένων Οι σειρές που απαρτίζουν τις κάρτες μιας συστάδας αναπαρίστανται ως φυσικοί αριθμοί σε κάποιο αρχείο κειμένου, όπου τα κενά της κάθε σειράς (μαύρα κουτιά της κάρτας) υποδηλώνονται από τον αριθμό 0. Για παράδειγμα, η πιο πάνω συστάδα αποθηκεύεται ως ακολούθως: 0 11 20 0 41 54 0 72 0 7 0 23 30 0 56 0 77 0 8 15 0 0 42 0 67 0 86 2 17 0 0 46 0 65 0 85 4 0 0 36 47 0 66 74 0 0 19 22 0 0 57 0 75 90 0 0 25 33 0 51 0 76 82 0 12 0 35 0 59 63 0 88 1 0 29 0 40 0 69 78 0 3 0 24 34 0 0 0 71 84 6 0 0 37 45 0 61 73 0 0 13 26 0 49 55 0 0 89 0 14 0 32 0 52 60 0 81 5 0 27 39 0 0 62 0 87 0 18 28 0 43 53 0 79 0 0 10 0 31 0 50 64 0 80 0 16 21 0 44 58 0 70 0 9 0 0 38 48 0 68 0 83 Οι πρώτες τρεις σειρές αντιπροσωπεύουν την πρώτη κάρτα, οι επόμενες τρεις τη δεύτερη κάρτα, κτλ. Το αρχείο που περιλαμβάνει τα πιο πάνω στοιχεία (Bcard.txt) σας δίνεται επίσης. Τα στοιχεία από το αρχείο εισάγονται σε πίνακα (τριών διαστάσεων [6][3][9]) για τη σχετική επεξεργασία. ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 6
Περιορισμοί Οι περιορισμοί που χρειάζεται να ελεγχθούν ως προς την ικανοποίησή τους είναι οι ακόλουθοι: Σε επίπεδο κάρτας: (i) (ii) (iii) Η κάθε κάρτα περιλαμβάνει ακριβώς 15 αριθμούς. Η κάθε σειρά της κάρτας περιλαμβάνει ακριβώς 5 αριθμούς σε αύξουσα σειρά. Η κάθε στήλη της κάρτας περιλαμβάνει ένα ή δύο αριθμούς. Αν περιλαμβάνει δύο αριθμούς τότε αυτοί να εμφανίζονται στη στήλη σε αύξουσα σειρά. Σε επίπεδο συστάδας: (iv) (v) Περιλαμβάνονται μόνο οι αριθμοί από το 1 ως το 90 και μάλιστα μια φορά ο καθένας. Η πρώτη στήλη της συστάδας περιλαμβάνει, σε οποιαδήποτε σειρά τους αριθμούς από το 1 έως το 9, η δεύτερη στήλη τους αριθμούς από το 10 έως 19, και πάλι σε οποιαδήποτε σειρά, και ούτω καθεξής για τις επόμενες έξι στήλες και η τελευταία στήλη περιλαμβάνει τους αριθμούς 80 έως το 90 και πάλι σε οποιαδήποτε σειρά. Κατ ακρίβεια ο έλεγχος ότι οι πέντε αριθμοί είναι σε αύξουσα σειρά σε σχέση με τον περιορισμό (ii) πλεονάζει διότι καλύπτεται από τον έλεγχο του περιορισμού (v), αλλά να υλοποιηθεί και αυτός ο έλεγχος ως επιπρόσθετη επιβεβαίωση. Πιο κάτω δίνεται ένα παράδειγμα χρήσης του προγράμματος με input από το αρχείο δεδομένων Bcard.txt μέσω file redirection (δηλαδή το standard input που είναι το πληκτρολόγιο επανακατευθύνεται στο συγκεκριμένο αρχείο κειμένου): java BingoCheck < Bcard.txt Checking Card 1 >> Column 1 contains two numbers which is ok >> Column 2 contains two numbers which is ok >> Column 3 contains one number which is ok >> Column 4 contains one number which is ok >> Column 5 contains two numbers which is ok >> Column 6 contains one number which is ok >> Column 7 contains two numbers which is ok ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 7
>> Column 8 contains two numbers which is ok >> Column 9 contains two numbers which is ok Card 1 satisfies the given constraints Checking Card 2 >> Column 1 contains two numbers which is ok >> Column 2 contains two numbers which is ok >> Column 3 contains two numbers which is ok >> Column 4 contains one number which is ok >> Column 5 contains two numbers which is ok >> Column 6 contains two numbers which is ok >> Column 7 contains one number which is ok >> Column 8 contains two numbers which is ok >> Column 9 contains one number which is ok Card 2 satisfies the given constraints Checking Card 3 >> Column 1 contains one number which is ok >> Column 2 contains one number which is ok >> Column 3 contains two numbers which is ok >> Column 4 contains two numbers which is ok >> Column 5 contains one number which is ok >> Column 6 contains two numbers which is ok >> Column 7 contains two numbers which is ok >> Column 8 contains two numbers which is ok >> Column 9 contains two numbers which is ok Card 3 satisfies the given constraints Checking Card 4 ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 8
>> Column 1 contains two numbers which is ok >> Column 2 contains one number which is ok >> Column 3 contains two numbers which is ok >> Column 4 contains two numbers which is ok >> Column 5 contains two numbers which is ok >> Column 6 contains one number which is ok >> Column 7 contains one number which is ok >> Column 8 contains two numbers which is ok >> Column 9 contains two numbers which is ok Card 4 satisfies the given constraints Checking Card 5 >> Column 1 contains one number which is ok >> Column 2 contains two numbers which is ok >> Column 3 contains two numbers which is ok >> Column 4 contains two numbers which is ok >> Column 5 contains one number which is ok >> Column 6 contains two numbers which is ok >> Column 7 contains two numbers which is ok >> Column 8 contains one number which is ok >> Column 9 contains two numbers which is ok Card 5 satisfies the given constraints Checking Card 6 >> Column 1 contains one number which is ok >> Column 2 contains two numbers which is ok >> Column 3 contains one number which is ok >> Column 4 contains two numbers which is ok >> Column 5 contains two numbers which is ok ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 9
>> Column 6 contains two numbers which is ok >> Column 7 contains two numbers which is ok >> Column 8 contains one number which is ok >> Column 9 contains two numbers which is ok Card 6 satisfies the given constraints The Bingo Frame contains all distinct numbers from 1 to 90 >> The numbers are correctly distributed across the columns The Bingo Frame satisfies all constraints Σημειώνεται ότι στο πιο πάνω transcript της εκτέλεσης του προγράμματος δεν φαίνεται η διαδοχική οπτική παρουσίαση της κάθε κάρτας. Η συγκεκριμένη κάρτα ικανοποιεί όλους τους περιορισμούς και επομένως σε κάθε περίπτωση εκτυπώνονται μηνύματα ικανοποίησης. Το πρόγραμμά σας πρέπει επίσης να περιλαμβάνει και μηνύματα λάθους όταν ένας περιορισμός δεν ικανοποιείται. Δοκιμή προγράμματος Για τη δοκιμή του προγράμματός σας σχεδιάστε προσεκτικά ένα σύνολο δοκιμών που να περιλαμβάνει όλες τις κατηγορίες ενδεχομένων. Στη συνέχεια για κάθε περίπτωση δοκιμής τροποποιήστε ανάλογα το περιεχόμενο του αρχείου Bcard.txt, με άλλα λόγια εισαγάγετε λάθη (μη ικανοποίηση περιορισμών) και παρατηρήστε αν το πρόγραμμά σας εντοπίζει ορθά την παραβίαση των συγκεκριμένων περιορισμών. Αν όχι κάνετε την απαιτούμενη αποσφαλμάτωση του προγράμματός σας και τρέξτε ξανά από την αρχή όλες τις περιπτώσεις δοκιμής. Παράδοση Όταν έχετε τελειώσει με τον πηγαίο κώδικα, μεταγλωττίστε το και βεβαιωθείτε ότι τρέχει σωστά. Παραδώστε τα 2 αρχεία πηγαίου κώδικα (userid_sincos_erg2.java και userid_bingocheck_erg2.java) και μια λίστα δοκιμής για κάθε πρόγραμμα (userid_sincos_erg2.txt και userid_bingocheck_erg2.txt) με όλα τα παραδείγματα εκτέλεσης που φαίνονται πιο πάνω ηλεκτρονικά μέσω του submit assignment κάτω από το Ασκήσεις Εργασία 2 στην ιστοσελίδα του μαθήματος μέχρι τις 06/03/2017 και ώρα 23:59. Όπου userid βάλτε το username που σας δόθηκε από το τμήμα. Μην ανεβάσετε τις εικόνες που παράγει το πρόγραμμά σας. Προσοχή: Το σύστημα ελέγχει το χρόνο παράδοσης εργασιών γι αυτό μην περιμένετε την τελευταία στιγμή να κάνετε submit την εργασία σας. ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 10
Βαθμολογία Ένα πρόγραμμα για να πάρει όλες τις μονάδες είναι απαραίτητο να: χρησιμοποιεί σχόλια έχει ευθυγραμμισμένο κώδικας χρησιμοποιεί αυτό-επεξηγηματικά ονόματα για τις μεταβλητές δουλεύει σωστά κάνει όλους τους απαραίτητους ελέγχους χρησιμοποιεί μεθόδους (αρθρωτή σχεδίαση) Για όλα τα παραπάνω ακολουθήστε τις οδηγίες που περιγράφονται εδώ: http://introcs.cs.princeton.edu/java/11style/. Το αρχείο με το πηγαίο κώδικα πρέπει οπωσδήποτε να περιέχει μια συμπληρωμένη κατάλληλα επικεφαλίδα από σχόλια στην αρχή του αρχείου όπως: /** * Author: Γράψτε εδώ το όνομα σας * Written:../../2017 * Last updated:../../2017 * * Compilation: javac userid_erg2.java * Execution: java userid_erg2 * * Γράψτε εδώ πληροφορίες σχετικά με το τι κάνει * το πρόγραμμα * */ Κριτήρια αξιολόγησης Μέρος Α 40 Μέρος Β 50 Σχόλια και ευθυγραμμισμένος κώδικας 10 ΣΥΝΟΛΟ 100 Η εργασία είναι ατομική. Μπορείτε να συζητήσετε για αυτήν με τους συμφοιτητές σας, ωστόσο ποτέ δεν είναι αποδεκτό για σας να δείτε τον κώδικα κάποιου άλλου ή να κάνετε από κοινού τον κώδικα. Φυσικά, αν έχετε οποιεσδήποτε ερωτήσεις σχετικά με την εργασία, είμαστε πάντα στη διάθεσή σας για βοήθεια. Ανίχνευση αντιγραφής θα τιμωρείται με μηδενισμό. Κώδικας που δε μεταγλωττίζει ή δεν τρέχει (crashes) παίρνει αυτόματα βαθμολογία 0. ΕΠΛ131 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 11