Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015
1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα: Εισαγωγή στη Γεωμετρία της Χελώνας με / Για να σχεδιάσουμε ένα τετράγωνο πρέπει να τοποθετήσουμε την πένα κάτω, ώστε όταν η χελώνα/γάτα κινείται να αφήνει το ίχνος της. Στη συνέχεια χρειάζεται να κινούμαστε έναν συγκεκριμένο αριθμό βημάτων και να στρίψουμε κάθε φορά στη σωστή κατεύθυνση κατά 90 ο μοίρες. Κώδικας import turtle Επεξήγηση εντολών Προσάρτηση της βιβλιοθήκης γραφικών της χελώνας που θα χρησιμοποιήσουμε franklin = turtle.turtle() franklin.down() franklin.forward(100) franklin.right(90) franklin.forward(100) franklin.right(90) franklin.forward(100) franklin.right(90) franklin.forward(100) franklin.right(90) Δημιουργία μιας χελώνας με όνομα franklin. Ο franklin είναι ένα αντικείμενο τύπου turtle. Κατέβασε την πένα κάτω Φράνκλιν προχώρα μπροστά 100 βήματα Φράνκλιν στρίψε δεξιά 90 μοίρες Φράνκλιν Προχώρα 100 βήματα και στρίψε δεξιά άλλες 3 φορές franklin.up() Φράνκλιν σήκωσε την πένα Παρακάτω φαίνεται η κατασκευή του μισού τετραγώνου σε και Αποτέλεσμα στο Αποτέλεσμα στην import turtle f = turtle.turtle() f.clear() f.down() Όπως φαίνεται παραπάνω οι εντολές είναι ουσιαστικά οι ίδιες απλά στην είναι μεταφρασμένες στα αγγλικά. Επίσης στην χρειάζεται αρχικά να δημιουργήσουμε μια χελώνα (ένα αντικείμενο) με όνομα f, στο οποίο δίνουμε οδηγίες με το όνομά του και την τελεία όπως φαίνεται παραπάνω. Για να σχεδιάσουμε ένα τετράγωνο είναι φανερό ότι πρέπει να προχωράμε 100 βήματα και μετά να στρίβουμε δεξιά και πάλι το ίδιο. Αυτό πρέπει να γίνει 4 φορές, όπως φαίνεται παρακάτω. Όπως βλέπετε υπάρχει μια ομάδα εντολών η οποία επαναλαμβάνεται. Πως θα μπορέσουμε να δώσουμε την εντολή επανάλαβε αυτό 4 φορές. Στην python χρησιμοποιούμε την εντολή for με τον παρακάτω τρόπο: Ευριπίδης Βραχνός 1
2 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Προσέξτε ότι οι εντολές που επαναλαμβάνονται, δηλαδή αυτές που βρίσκονται μέσα στην επανάληψη, πρέπει να βρίσκονται στοιχισμένες δεξιά αλλιώς είναι λάθος. Δομή Ακολουθίας import turtle f = turtle.turtle() f.clear() f.down() Δομή Επανάληψης for times in range(4): Στη συνέχεια θα δείξουμε πως θα κατασκευάσουμε ένα ισόπλευρο τρίγωνο. Σκεφτείτε πρώτα τις παρακάτω ερωτήσεις: Πόσες πλευρές έχει το τρίγωνο; Πόσα βήματα θα χρειαστούν; Πόσες μοίρες θα πρέπει να στρέφεται κάθε φορά η γάτα/χελώνα; Προσοχή!!! Τα παρακάτω είναι τμήματα προγράμματος, και όχι όλο το πρόγραμμα. Σε κάθε περίπτωση θα πρέπει να προσθέσετε τις αντίστοιχες εντολές πριν (import τurtle κλπ) Αποτέλεσμα στο Αποτέλεσμα σε for times in range(3) : franklin.forward( 200 ) franklin.right( 120 ) Ευριπίδης Βραχνός 2
3 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Με τον ίδιο ακριβώς τρόπο μπορούμε να σχεδιάσουμε ένα εξάγωνο. Η δυσκολία που θα αντιμετωπίσουμε είναι πάλι στον υπολογισμό της γωνίας περιστροφής. Επειδή ο σκοπός του μαθήματος δεν είναι η κατανόηση των μαθηματικών εννοιών μπορούμε να πειραματιστούμε όπως πριν με την λογική της δοκιμής λάθους (trial & error) ώστε να ανακαλύψουμε τη σωστή γωνία (σε διαφορετική περίπτωση θέλω απόδειξη). Αποτέλεσμα στο Αποτέλεσμα στην for times in range(6) : franklin.right( 60 ) Ομοίως σκεπτόμαστε για οκτάγωνο Αποτέλεσμα στο Αποτέλεσμα στην for times in range(8) : franklin.right( 45 ) Ερώτηση: Γιατί η γωνία στροφής για εξάγωνο είναι 60 για τετράγωνο 90 για τρίγωνο 120 και για οκτάγωνο 45? Μπορείτε να το αποδείξετε? Μπορείτε να γενικεύσετε για Ν-γωνο? Δοκιμάστε να υλοποιήσετε αντίστοιχο πρόγραμμα για κανονικό δεκάγωνο Ευριπίδης Βραχνός 3
4 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Τώρα θα γενικεύσουμε το πρόβλημα και τη λύση του. Πως συνδέεται το πλήθος των πλευρών του πολυγώνου με τον αριθμό των επαναλήψεων και με τη γωνία στροφής; Προσπαθήστε να συμπληρώσετε τον παρακάτω πίνακα: Σχήμα Αλγόριθμος Αριθμός Πλευρών Αριθμός επαναλήψεων Γωνία Στροφής for times in range(3) : Τρίγωνο franklin.right( 120 ) 3 3 120 Τετράγωνο for times in range(4) : franklin.right( 90 ) 4 4 90 Εξάγωνο for times in range(6) : franklin.right( 60 ) 6 6 60 Οκτάγωνο Ν γωνο Ασκ1. Να δώσετε τις κατάλληλες εντολές ώστε η χελώνα (γάτα) να σχεδιάσει τα παρακάτω σχήματα (Για τον λαβύρινθο δοκιμάστε να κάνετε πρώτα 2-3 στροφές ώστε να βρείτε το πρότυπο που εμφανίζεται στις εντολές και στη συνέχεια προσπαθήστε να γενικεύσετε) Σκάλα Λαβύρινθος Ευριπίδης Βραχνός 4
5 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Αντιστοίχιση χελωνο εντολών της με το Επεξήγηση franklin = turtle.turtle() Δημιούργησε ένα αντικείμενο τύπου turtle με όνομα franklin Προχώρησε προς την κατεύθυνση που είσαι στραμμένος 100 βήματα franklin.right( 90 ) franklin.left( 90 ) franklin.down( ) franklin.up( ) franklin.clear( ) franklin.reset( ) franklin.backward( 100 ) franklin.goto( 0, 0 ) franklin.showturtle( ) Στρίψε δεξιά 90 ο μοίρες Στρίψε αριστερά 90 ο μοίρες Άσε την πένα κάτω ώστε όταν κινήσε να αφήνεις ίχνη Σήκωσε την πένα ώστε όταν κινήσε να μην αφήνεις ίχνη Καθάρισε την οθόνη Μετακινήσου στην αρχή στραμμένος μπροστά Κίνηση προς τα πίσω 100 βήματα Πήγαινε στο σημείο με συντεταγμένες (0, 0) (Προσοχή! Αφήνει ίχνος μόνο αν προηγουμένως έχουμε βάλει την πένα κάτω) Φανερώσου Φράνκλιν: Η χελώνα εμφανίζεται franklin.hideturtle( ) franklin.circle( radius ); franklin.color( blue ) Κρύψου Φράνκλιν: Η χελώνα κρύβεται Φράνκλιν σχεδίασε έναν κύκλο με ακτίνα radius Η πένα παίρνει χρώμα μπλε Ευριπίδης Βραχνός 5
6 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Στη συνέχεια δίνουμε μερικά απλές εντολές σε και, ώστε να φαίνεται η αντιστοιχία. Τι κάνουν? Αυτό θα το ανακαλύψετε εσείς αφού τα εκτελέσετε. answer = raw_input( What is your name? ) print Hello, answer # Υπολογισμός 10 αριθμών Fibonacci f1 = 1 f2 = 1 for i in range(10): f3 = f1 + f2 f1 = f2 f2 = f3 print f2, print # με το, δεν αλλάζει γραμμή # έτσι αλλάζει γραμμή # Υπολογισμός του μεγαλύτερου μεταξύ 2 αριθμών a = input("a = ") b = input("b = ") if a > b : max = a else: max = b print 'maximum = ', max # Αν θέλετε να δείτε τι υπολογίζει θα πρέπει να το # εκτελέσετε sqr = 1 step = 3 for i in range(100): sqr = sqr + step step = step + 2 print sqr, Ευριπίδης Βραχνός 6
7 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Σύντομος Οδηγός της Εκτός από τους γνωστούς τελεστές για πρόσθεση (+), πολλαπλασιασμό (*), αφαίρεση ( 1) υπάρχουν και οι παρακάτω: Αριθμητικός Τελεστής Σύμβολο Παράδειγμα 1 Παράδειγμα 2 Εκθέτης, Υπολογισμός Δύναμης ** >>> 7**2 49 >>> 2**4 16 Υπόλοιπο Ευκλείδειας Διαίρεσης Ακέραιο Πηλίκο Ευκλείδειας Διαίρεσης % >>> 10%3 1 / >>> 19/5 3 >>> 24%5 4 >>> 21/4.0 5.25 Όταν μας ενδιαφέρει η σειρά με την οποία θα εκτελεστούν οι πράξεις και δεν μας καλύπτει η προτεραιότητα των αριθμητικών τελεστών για να είμαστε σίγουροι χρησιμοποιούμε παρενθέσεις >>> 6+10/2 11 >>>(6+10)/2 8 >>> 2+3*5 17 >>>(2+3)*5 25 >>> 6+(8/4)-2*3 2 >>>(6+(8/4)-2)*3 18 Συγκρίσεις, Έλεγχος για Ισότητα >>> x = 7 >>> x * 4 28 >>> x**2 49 >>> x 7 >>> x = x * 4 28 >>> x = 10 >>> y = 2 >>> x == y # Ίσο με False >>> x!= y #Διαφορετικό True >>> y = 10 >>> x == y True >>> x = 10 >>> y = 2 >>> x < y #Μικρότερο από False >>> x <= 10 #Μικρότερο ή ίσο από True >>> x >= 11 False Τα αποτελέσματα των συγκρίσεων είναι λογικές τιμές. Μια σύγκριση ή ισχύει ή δεν ισχύει. Όταν ισχύει λέμε ότι είναι Αληθής (True) και όταν δεν ισχύει λέμε ότι είναι Ψευδής (False). Η δομή επιλογής if else και η δομή πολλαπλής επιλογής if elif else, χρησιμοποιούνται όταν θέλουμε να διακρίνουμε περιπτώσεις Δομή πολλαπλής επιλογής if elif else >>> x = input( Enter a number ) >>> if x == 0: >>> print This number is zero >>> elif x < 0 : >>> print This number is negative >>> else : >>> print This number is positive Δομή επιλογής if else >>> x = input( x = ) >>> y = input( y = ) >>> if x > y: >>> max = x >>> else : >>> max = y >>> print maximum =, max Ευριπίδης Βραχνός 7
8 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Δομές Επανάληψης Δομή επανάληψης for Δομή επανάληψης while Αποτέλεσμα που θα εμφανιστεί στην οθόνη for i in range(1,10,2): print i, i = 1 while i < 20: print i, i = i + 2 1 3 5 7 9 Οι παραπάνω εντολές εμφανίζουν ακριβώς τα ίδια αποτελέσματα. Η μεταβλητή i ξεκινάει από 1 και φτάνει πριν τον αριθμό 10, δηλαδή δεν γίνεται 10. Η μεταβλητή μεταβάλλεται κατά 2. Να σημειώσουμε ότι η range(1, 10, 2) δημιουργεί μια λίστα από τους αριθμούς 1, 3, 5, 7, 9 Λίστες Δημιουργίας λίστας Προσπέλαση σε στοιχείο της λίστας Προσθέτοντας στοιχεία στη λίστα Αναζήτηση στοιχείου σε λίστα >>> a = ['cat','dog'] >>> primes = [2, 3, 5, 7, 11, 13, 17, 19] >>> a[1] 'dog' >>> a.append('bird') >>> a ['cat', 'dog', 'bird'] >>> a.index('dog') 1 Συναρτήσεις Ορισμός Συναρτήσης Κλήση Συνάρτησης def function_name(input): #indented code #(4 spaces or 1 tab) return output function_name(input) Output def circle_area(radius): area = 3.14*(radius**2) return area circle_area(5) 78.5 Δομές Ελέγχου While #initialize test variable while (test is true): #run indented code #increment test variable For for variable in list: print variable If/Else if a < b: #do this indented code else: #do this indented code number = 0 while (number < 5): print number number = number + 1 for number in range(0,5): print variable if 1 < 2: print "Yes" else: print "No" Ευριπίδης Βραχνός 8