22Υ103 Εισαγωγή Υπολογιστές I #2 Αλγόριθμοι, Δομές Δεδομένων και Πολυπλοκότητα - Εισαγωγή στον προγραμματισμό με τη γλώσσα Python Εβδομάδες 2-3
Αλγόριθμοι, Δομές Δεδομένων και Πολυπλοκότητα Αλγόριθμος: διαδικασία επίλυσης κάποιου προβλήματος έκφραση ενός αλγορίθμου με ψευδογλώσσα, διάγραμμα ροής και γλώσσα προγραμματισμού οργάνωση δεδομένων Προβλήματα πολυπλοκότητας : καθορισμός προβλημάτων που μπορούν να λυθούν και εκτιμώμενος χρόνος επίλυσης
Αλγόριθμος Ακολουθία εντολών, μέσω της οποίας είναι δυνατή ηακριβής έκφραση μιας βήμα-προς-βήμα διαδικασίας που τερματίζει την εκτέλεσή της μετά την ολοκλήρωση ενός πεπερασμένου αριθμού βημάτων και ηοποία επιτρέπει την επίλυση ενός δεδομένου προβλήματος.
Αλγόριθμος σειριακή εκτέλεση στοιχειωδών βημάτων εισαγωγής δεδομένων (από τον έξω κόσμο) επεξεργασίας των δεδομένων παραγωγής δεδομένων εξόδου
Χρήση βασικών εντολών Για να περιγράψουμε ένα αλγόριθμο χρειαζόμαστε ένα ορισμένο αριθμό στοιχειωδών αλγοριθμικών δομών, (αρχετύπων ήεντολών) που να είναι κοντά στη λειτουργία ενός υπολογιστή.
Βασικές αλγοριθμικές δομές 1. Εκχώρηση τιμής σε μεταβλητή a = 5 2. Εντολές εισόδου/εξόδου a = raw_input() print b 3. Επιλογή if συνθήκη : εντολή, else εντολή 4. Επανάληψη while συνθήκη : εντολή for ι in (0,10) : εντολή
Mεταβλητές Σύμβολα που αντιστοιχούν σε περιοχές της μνήμης και στις οποίες αποθηκεύονται τιμές Χ 5 ΝΑΜΕ Γιώργος YPOLOIPO 12.45 X X + 12.5*Y
Πώς αντιμετωπίζει ηpython τους διαφορετικούς τύπους μεταβλητών: dynamically typed, strongly typed statically typed language Μια γλώσσα που οι τύποι των μεταβλητών καθορίζονται κατά την ώρα της μεταγλώττισης. Είναι απαραίτητη ηδήλωση των μεταβλητών. Η Java και C είναι γλώσσες με στατικούς τύπους dynamically typed language Γλώσσες στις οποίες οτύπος των μεταβλητών αποφασίζεται κατά τη διάρκεια της εκτέλεσης. Οι VBScript και Python είναι τέτοιες γλώσσες strongly typed language Γλώσσες στις οποίες οι τύποι των μεταβλητών επιβάλλονται Οι Java και Python έχουν ισχυρούς τύπους, ένας ακέραιες δεν μπορεί να χρησιμοποιηθεί σαν συμβολοσειρά χωρίς πριν να αλλάξει τύπο. weakly typed language Γλώσσες στις οποίες οι τύποι μπορεί να αγνοηθούν. Εκδόσεις της VBScript έχουν αδύνατους τύπους. Πχ. VBScript, συνένοηση της συμβολοσειράς '12' με τον ακέραιο 3 έχει αποτέλεσμα '123', το οποίο μπορεί να χρησιμοποιηθεί ως 123, χωρίς μετατροπές.
Το πρώτο μας πρόγραμμα Εκκίνηση της Python (IDLE (Python GUI) στο Start menu) Εμφανίζεται το περιβάλλον python shell CNTRL-N για ένα νέο παράθυρο συγγραφής προγράμματος
Το πρώτο πρόγραμμα Ανοίγουμε νέο παράθυρο (File New Window, ή Ctrl + N) Έστω ότι θέλουμε να δημιουργήσουμε ένα πρόγραμμα που ρωτάει τον χρήστη το όνομα του και μετά τον χαιρετάει Γράφουμε τις εντολές του προγράμματος (εντολές εισόδου- εξόδου, έχουμε εντολές επεξεργασίας;) και στη συνέχεια.. Εκτελούμε το πρόγραμμα (Run Run Module, ή F5) you'll be asked to save the program; Θα σώσουμε το πρόγραμμα σαν hello.py Αν χρησιμοποιούμε ελληνικούς χαρακτήρες θα χρειαστεί να δηλώσουμε τη σχετική κωδικοποίηση # -*- coding: cp1253 -*- Ηείσοδος/ έξοδος του προγράμματος θα εμφανιστεί στο python shell
Εντολές εισόδου/ εξόδου Python name= raw_input ("δώσε το όνομα σου: ") print Γεια σου, name - Ποια μεταβλητή χρησιμοποιήσαμε στο πρόγραμμα αυτό;
2 ο παράδειγμα προγράμματος Κατασκευάστε ένα πρόγραμμα που ζητάει από τον χρήστη δύο αριθμούς και τυπώνει το άθροισμα τους (αναπαράσταση του αλγορίθμου με διάγραμμα ροής και την python)
2o πρόγραμμα: το διάγραμμα ροής ΑΡΧΗ Ζήτησε τα X, Y πρόσθεσε X και Y Εμφάνισε το αποτέλεσμα ΤΕΛΟΣ
2o πρόγραμμα: python # -*- coding: cp1253 -*- print "*** Αθροιστής ***" x = raw_input("δώσε τον 1o αριθμό :") y = raw_input("δώσε τον 2o αριθμό :") sum = x + y print "Το άθροισμα είναι: ", sum Μεταβλητές x y sum >>> *** Αθροιστής *** Δώσε τον 1o αριθμό :8 Δώσε τον 2o αριθμό :2 Το άθροισμα είναι: 82 >>> Κάτι δεν πήγε καλά στο πρόγραμμα αυτό (τι;)
Το πρόβλημα των τύπων δεδομένων string (str στην Python) μεταβλητές για συμβολοσειρές χαρακτήρων integer (int στην Python) ακέραιοι floating point (float στην Python) δεκαδικοί αριθμοί Boolean (bool στην Python) λογικές μεταβλητές Μετατροπή τύπου δεδομένων x= float (y); Ζ= int (A); R= str(b)
Το 2 ο πρόγραμμα - ξανά # -*- coding: cp1253 -*- print "*** Αθροιστής ***" x = float (raw_input("δώσε τον 1o αριθμό :")) y = float (raw_input("δώσε τον 2o αριθμό :")) sum = x + y print "Το άθροισμα είναι:", sum >>> *** Αθροιστής *** Δώσε τον 1o αριθμό :10 Δώσε τον 2o αριθμό :20 Το άθροισμα είναι: 30.0
Εκχώρηση τιμής σε μεταβλητήμεταβολή τιμής μεταβλητής weight = 68 σε κιλά place = Πάτρα τόπος γέννησης a = 3 'a έχει την τιμή 3 b = a 5 'b έχει την τιμή -2 c = b * -3 'c έχει την τιμή 6 d = c / 2 'd έχει την τιμή 3 Στην Python δενχρειάζεταιδήλωσητουτύπου μεταβλητής, αλλάοτύπος καθορίζεταιαπότην πρώτηφοράπουθαπάρειημεταβλητήτιμή
Μεταβλητές στην python Τοόνοματωνμεταβλητώνπρέπεινααρχίζειμε γράμμαή _ έλεγχοςτύπουμε type(a) Γίνονταιπράξεις Αριθμητικές (+, -, *, /, **, //, %, <<, >>, &,, ^, ~,<, >, ==,<=, >=,!= ) Αλφαριθμητικές (+, <, >, ==,<=, >=,!= ) Λογικές (not, and, or ) Υποστηρίζονταιπράξειςμεταξύδιαφορετικών τύπωνμεταβλητώνεκτόςτωνμιγαδικών >>> 7.0 / 2 3.5
μεταβλητές Οι μιγαδικοί περιγράφονται είτε με τη μορφή (real+imagj) είτε με τη συνάρτηση complex(real, imag) Για να διαχωριστεί το πραγματικό και το φανταστικό μέρος ενός μιγαδικού z χρησιμοποιούμε τα z.real και z.imag >>> a=1.5+0.5j >>> a.real 1.5 >>> a.imag 0.5
Strings : συμβολοσειρές χαρακτήρων Escape characters >>> text = του είπαν \"γεια\" " >>> print text του είπαν "γεια " >>> title="αγαμέμνων" >>> title[1] '\xe3' >>> print title[1] γ >>> Α 0 γ 1 α 2 μ 3 έ 4 μ 5 ν 6 ω 7 ν 8
συμβολοσειρές χαρακτήρων κ ά τ ω σ τ ο υ ς π έ ρ α 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 b = κάτω στους πέρα b [5:10] = στους slice από 5 μέχρι 10 χωρίς το 10 b [:3] = κατ ; b[ 11:]= πέρα m = b.find( στ ) το m γίνεται 5
συμβολοσειρές S= καλημέρα123 S[3].isdigit() false S[2].isalpha() true
Αλγόριθμοι μέρος Β Διαγράμματα ροής εντολές επιλογής Άσκηση Περιγράψτε τον αλγόριθμο του παιχνιδιού «μάντεψε ένα αριθμό από το 1 στο 100»
Διάγραμμα Ροής : σύμβολα The Process Symbol represents any process, function, or action and is the most frequently used symbol in flowcharting. The Document Symbol is used to represent any type of hard copy input or output (i.e. reports). Offpage Connector Symbols are used to indicate the flow chart continues on another page. Often, the page number is placed in the shape for easy reference. The Input/Output Symbol represents data that is available for input or resulting from processing (i.e. customer database records). The Decision Symbol is a junction where a decision must be made. A single entry may have any number of alternative solutions, but only one can be chosen. The Connector Symbol represents the exit to, or entry from, another part of the same flow chart. It is usually used to break a flow line that will be continued elsewhere. It's a good idea to reference page numbers for easy location of connectors.
Διάγραμμα ροής: παράδειγμα ΑΡΧΗ Διάλεξεένατυχαίοαριθμό Ααπό 1-100 Ρώτησετο χρήστηνα μαντέψειτονμ ΝΑΙ Μ > Α? ΟΧΙ Γράψε "too high" ΝΑΙ γράψε "too low" Μ< Α? ΟΧΙ γράψε «you WON ΤΕΛΟΣ
Εντολή επιλογής ( if) Δυνατότητα επιλογής τιμής if (ΣΥΝΘΗΚΗ) then ΕΠΙΛΟΓΗ-1 else ΕΠΙΛΟΓΗ-2 Παράδειγμα: f(n)= n όταν n>0, διαφορετικά f(n)= 0 if (n 0) then x 0 else x n
if στη PYTHON if συνθήκη: εντολή1 elif συνθήκη: εντολή2 else: εντολή3 1 door = int(raw_input( κάνε την επιλογή σου!")) 2 if epilogh == 1: 3 message = κέρδισες ένα αυτοκίνητο!" 4 elif epilogh == 2: 5 message = «κέρδισες πλυντήριο πιάτων!" 6 else: 7 message = «κέρδισες ένα σαμπουάν!" 8 print message Αν epilogh==2 ποιες γραμμές του προγράμματος θα εκτελεστούν;
Διάφορες δομές ελέγχου 1. if συνθήκη: 2. εντολή1 3. εντολή2 Α 1. if συνθήκη1: 2. εντολή1 3. elif συνθήκη2 : 4. εντολή2 5. εντολή3 1. if συνθήκη: 2. εντολή1 3. else: 4. εντολή2 5. εντολή3 C Β 1. if συνθήκη1: 2. εντολή1 3. elif συνθήκη2: 4. εντολή2 5. else 6. εντολή3 7. εντολή4 D
Άσκηση Να εκφράσετε σε Python τον αλγόριθμο «μάντεψε ένα αριθμό»
Φροντιστηριακή άσκηση Να γράψετε το διάγραμμα ροής και το πρόγραμμα σε Python που βρίσκει την τομή δύο ευθειών που δίδονται από εξισώσεις y=ax+b
Συναρτήσεις -math import math x = math.sqrt(16) #square root (x==4) x = math.pow(2,3) #equivalent to 2 3 (x==8) x = math.ceil(4.3) #rounds up (x==5) x = math.floor(7.8) #rounds down (x==7) x = math.log(34) #log e 34 (x==3.52) x = math.log10(100) #log 10 100 (x==2) x = math.sin(3.14) #angle in radians x = math.cos(math.pi) x = math.tan(math.pi * 2) x = math.asin(-1) #inverse sine x = math.sinh(1) #hyperbolic sine
Άσκηση import math a = float(raw_input( "Δώσε το μήκος AB ")) b = float(raw_input( \ "Δώσε το μήκος AC ")) c = math.sqrt( math.pow(a,2) + / math.pow(b,2) ) print "Μήκος υποτίνουσας:", c
Συναρτήσεις random import random x = random.randint(0,10) #δημιουργεί ένα τυχαίο ακέραιο μεταξύ # 0 και 10 περιλαμβανομένων x = random.random() # δημιουργεί ένα αριθμό κινητής υποδιαστολής >= 0.0 και >= 1.0
Ορισμός συναρτήσεων από το χρήστη def συνάρτηση(παράμετροι): εντολές return τιμή V=(4/3)πr 3 def calcspherevolume(r): volume = (4.0/3.0) * math.pi* math.pow(r,3) return volume x = calcspherevolume(r)
Άσκηση περιγράψτε τη λειτουργία της συνάρτησης def isinteger(string): if string.isdigit(): return True elif string[0] == "-" and \ string[1:].isdigit(): return True else: return False
Άσκηση Να γράψετε μια συνάρτηση που εξετάζει αν μια συμβολοσειρά περιέχει κενούς χαρακτήρες. Σημείωση: κενοί χαρακτήρες μπορεί να είναι spaces (" "), tabs ("\t") και newlines ("\n")