ΣΕΤ ΑΣΚΗΣΕΩΝ 1 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2014-2015 Προθεσµία: Τρίτη 4/11/2014, 22:00 Διαβάστε πριν ξεκινήσετε Διαβάστε την εκφώνηση προσεκτικά και σχεδιάστε το πρόγραµµά σας στο χαρτί. Ίσως σας φανεί χρήσιµο και µιλιµετρέ χαρτί (ψάξτε στο google για print graph paper) Για κάθε στάδιο, αποφασίστε τι µεταβλητές θα χρειαστείτε, τι ονόµατα θα τους δώσετε, αν χρειάζονται σταθερές κι αν ναι για ποιες ποσότητες, τι δοµές ελέγχου θα χρησιµοποιήσετε για κάθε λειτουργία και πώς θα κάνετε τους υπολογισµούς που χρειάζονται. Μη διστάζετε να ζητήσετε βοήθεια! Χρησιµοποιήστε κατά προτίµηση το forum προγραµµατισµού (http://courses.inf.uth.gr/coding/?page_id=143) και µόνο αν είναι απαραίτητο email (π.χ. αν πραγµατικά επιβάλλεται να στείλετε κάποιο κοµµάτι κώδικα µαζί µε το µήνυµά σας). Η εργασία αυτή µπορεί να γίνει σε οµάδες µέχρι 2 ατόµων. Δε χρειάζεται να είστε οµάδα µε το ίδιο άτοµο που είστε στο εργαστήριο. Μπορείτε να συζητάτε τις ασκήσεις µε συµφοιτητές σας αλλά δεν επιτρέπεται η ανταλλαγή κώδικα µε οποιονδήποτε τρόπο. Ξεκινήστε νωρίς! Ο προγραµµατισµός είναι πάντα ΠΟΛΥ πιο χρονοβόρος από ότι περιµένετε. Εκπρόθεσµες ασκήσεις δε γίνονται δεκτές. Οι ασκήσεις σας θα βαθµολογηθούν στα παρακάτω (χωρίς ιδιαίτερη σειρά): Ορθότητα Γενική µορφοποίηση προγράµµατος (στοίχιση, ονόµατα µεταβλητών, κτλ.) Σχεδιασµός προγράµµατος και αποτελεσµατική χρήση κατάλληλων δοµών, µεταβλητών, σταθερών κτλ. Συµµόρφωση µε τις προδιαγραφές Αποτελεσµατικά σχόλια, σύµφωνα µε τους κανόνες σχολιασµού του σχετικού φυλλαδίου. Βαθµός δυσκολίας σχεδίου
Άσκηση : ASCII art Θα γράψετε ένα πρόγραµµα το οποίο σχεδιάζει στην οθόνη µια εικόνα κατασκευασµένη µε χρήση χαρακτήρων ASCII, µε διάφορα επαναλαµβανόµενα µοτίβα. Το πρόγραµµά σας πρέπει να ικανοποιεί τις παρακάτω απαιτήσεις: Πρέπει να περιέχει τουλάχιστον µια δοµή επανάληψης while (ή do-while) µε σύνθετη συνθήκη που αποτελείται από 3 ή περισσότερα µέρη. Για παράδειγµα, το πρόγραµµα µπορεί να ελέγχει αν κάποιο µέγεθος είναι άρτιος αριθµός µε συγκεκριµένο εύρος. Πρέπει να περιέχει τουλάχιστον δύο εµφανίσεις δύο εµφωλευµένων loops (π.χ. for... { for...{ }) Πρέπει να περιέχει τουλάχιστον µια εµφάνιση τριών εµφωλευµένων loops (π.χ. for... { for... { for... { }}) Κάθε εντολή printf που συµµετέχει στο σχεδιασµό της εικόνας µπορεί να εκτυπώνει µόνο ένα χαρακτήρα (π.χ. επιτρέπεται το printf("*") αλλά όχι το printf("***") ). Με άλλα λόγια, για όλα τα επαναλαµβανόµενα µοτίβα πρέπει να χρησιµοποιείτε δοµές επανάληψης. Πρέπει να περιέχει µια µεταβλητή που εκφράζει µέγεθος και το πρόγραµµα να είναι γραµµένο µε τέτοιο τρόπο ώστε αν αλλάξει η αρχική τιµή του µεγέθους, να αλλάξει αναλογικά και το µέγεθος της εικόνας που ζωγραφίζετε. Δείτε τα παραδείγµατα πιο κάτω. Το µέγεθος πρέπει να το δίνει ο χρήστης. Μπορείτε να θέσετε λογικούς περιορισµούς στις ιδιότητες του µεγέθους. Για παράδειγµα, αν το πρόγραµµά σας λειτουργεί σωστά µόνο αν το µέγεθος είναι πολλαπλάσιο του 3, ενηµερώστε το χρήστη κι επιβάλετε τον περιορισµό µέσω κατάλληλων ελέγχων. Η εικόνα που θα σχεδιάσετε πρέπει να περιέχει τουλάχιστον ένα σχήµα µε µορφή ρόµβου ή κλεψύδρας, ένα σχήµα τετράγωνο ή ορθογώνιο παραλληλόγραµµο, ένα σχήµα σκακιέρας (δείτε τα παραδείγµατα πιο κάτω). Βάλτε τη φαντασία σας να δουλέψει! Αποφύγετε σχήµατα ίδια µε τα δικά µας. Σκεφτείτε κάτι ξεχωριστό. ΜΗΝ προσπαθήσετε να γράψετε όλο το πρόγραµµα σε ένα βήµα γιατί θα κάνετε λάθη και θα σας πάρει πολύ περισσότερο χρόνο. Υλοποιήστε τα µοτίβα σας ένα-ένα και µην προχωράτε στο επόµενο αν δεν είστε απολύτως σίγουροι ότι λειτουργεί σωστά αυτό που γράψατε. Καλό είναι κάθε φορά που ολοκληρώνετε ένα κοµµάτι να κατασκευάζετε ένα αντίγραφο του αρχείου C, για παράδειγµα µε όνοµα hw1stadio1.c, hw2stadio2.c κτλ, ώστε αν αργότερα κάνετε κάποιο λάθος, να έχετε ακόµη πρόσβαση στο προηγούµενο σωστό κοµµάτι. Εννοείται πως θα παραδώσετε µόνο την τελική έκδοση του προγράµµατος. Δώστε µεγάλη προσοχή στη στοίχιση. Είναι πολύ εύκολο να γίνει λάθος στο πού κλείνει κάποιο άγκιστρο αν δεν προσέξετε. Δώστε καλά ονόµατα στις µεταβλητές σας. Επαναχρησιµοποιήστε τους µετρητές των for loops όπου ενδείκνυται αντί να δηλώνετε καινούργιους. Όλα τα παραδείγµατα που παρουσιάζουµε παρακάτω έγιναν µε ακριβώς 3 µετρητές (i, j, k). Σε καµία περίπτωση δε θέλουµε να δούµε i1, i2, i3, i4 κτλ. Κάθε φορά που υλοποιείτε ένα κοµµάτι, γράψτε σχόλια που να εξηγούν τι ακριβώς σχεδιάζει αυτό το κοµµάτι κώδικα. Θα βοηθήσουν και εσάς, και εµάς στη διόρθωση. Χρησιµοποιήστε σταθερές (π.χ. για το εύρος του µεγέθους) για να είναι πιο ευανάγνωστο το πρόγραµµά σας. Αποθηκεύστε το πρόγραµµά σας σε ένα αρχείο µε όνοµα hw1.c
Παράδειγµα 1 Τα παρακάτω σχήµατα είναι µικρής δυσκολίας. Τα µοτίβα τύπου chevron (///\\\)ικανοποιούν την απαίτηση για παραλληλόγραµµο, το κοµµάτι µε τα = ικανοποιεί την απαίτηση για σχήµα σε µορφή σκακιέρας, και στο κέντρο υπάρχει µια κλεψύδρα. Η διαδικασία που ακολουθήσαµε ήταν η εξής: 1. Σχεδιάσαµε το chevron, αρχικά χρησιµοποιώντας αστεράκια. Όταν βεβαιωθήκαµε ότι εµφανίζεται σωστά, το αλλάξαµε σε \\\ και /// 2. Σχεδιάσαµε τη σκακιέρα. Αρχικά, η σκακιέρα είχε 5 γραµµές. Μετά αποφασίσαµε να µεταβάλλουµε το πλήθος των γραµµών µε βάση το µέγεθος που έδωσε ο χρήστης (δείτε το σχήµα στα δεξιά). 3. Υπολογίσαµε στο χαρτί πόσο πλάτος θα έχει η κλεψύδρα µε βάση το µέγεθος. Από αυτό, υπολογίσαµε πόσες γραµµές θα έχει. Ανάλογα µε το ποια γραµµή σχεδιάζεται (το i στο loop µας) υπολογίσαµε πόσα κενά και πόσα αστεράκια πρέπει να υπάρχουν. 4. Όταν δούλεψε σωστά το πάνω µισό, γράψαµε τον αντίστοιχο κώδικα για το κάτω µισό 5. Προσθέσαµε τις αγκύλες δεξιά κι αριστερά 6. Προσθέσαµε την κάτω σκακιέρα και κάτω chevron. 7. Κάναµε πολλά πειράµατα µε διάφορα µεγέθη.
Παράδειγµα 2 Το παρακάτω σχήµα είναι µεγάλης δυσκολίας. Το σχήµα σχεδιάστηκε από έξω προς τα µέσα. Πρώτα φτιάξαµε τις πάνω και κάτω γραµµές. Ακολούθησε το πάνω µισό του εξωτερικού τετραγώνου. Μετά, υπολογίσαµε τις αποστάσεις για το πάνω µισό του εσωτερικού ρόµβου. Αφού έγινε σωστά αυτό, κατασκευάσαµε και το κάτω κοµµάτι του τετραγώνου και του κόµβου. Ακολούθησε η κατασκευή ενός συµπαγούς παραλληλόγραµµου µέσα στο ρόµβο (πρώτα φτιάξαµε το πάνω µισό και µετά το κάτω). Όταν βεβαιωθήκαµε ότι λειτουργεί αυτό, προσθέσαµε κώδικα που αντικατέστησε µε κενά το εσωτερικό του παραλληλόγραµµου. Τα πιο δύσκολα σηµεία ήταν ο υπολογισµός των αποστάσεων για την κατασκευή του ρόµβου και η κατασκευή του παραλληλόγραµµου.
Πώς να παραδώσετε τη δουλειά σας Πριν παραδώσετε το πρόγραµµά σας, προσθέστε σε σχόλια στην αρχή του αρχείου τα πλήρη ονόµατα και ΑΜ των µελών της οµάδας. Παρακαλούµε να γράφετε τα σχόλια ΜΟΝΟ µε λατινικούς χαρακτήρες. Κατασκευάστε ένα φάκελο µε όνοµα hw1_epwnumo1_am1_epwnumo2_am2 και αντιγράψτε µέσα σε αυτόν το hw1.c Πηγαίνετε στο φάκελο µέσα στον οποίο βρίσκεται το κατασκευάσατε και γράψτε την παρακάτω εντολή: hw1_epwnumo1_am1_epwnumo2_am2 που tar czf hw1_epwnumo1_am1_epwnumo2_am2.tgz hw1_epwnumo1_am1_epwnumo2_am2 Στείλτε email: στη διεύθυνση ce120lab@gmail.com αντίγραφο (CC) στον άλλο µέλος της οµάδας σας θέµα (subject) CE120 hw1 και συνηµµένο αρχείο το hw1_epwnumo1_am1_epwnumo2_am2.tgz