ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 16 7 Νοεµβρίου, 2006 Γεώργιος Έλληνας Επίκουρος Καθηγητής ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΑ ΘΕΜΑΤΑ ΜΑΣ ΣΗΜΕΡΑ Εισαγωγή στον Προγραµµατισµό Λογικό διάγραµµα (Flowchart) Αρχές Προγραµµατισµού Εισαγωγή στην MATLAB -- Γνωριµία µε την MATLAB -- Πίνακες και διανύσµατα -- Γραφικές παραστάσεις 1
Προγραµµατισµός Είναι η διαδικασία της δηµιουργίας ενός προγράµµατος. Το πρόγραµµα αποτελείται από µια ή περισσότερες εντολές. Η γλώσσα προγραµµατισµού επιλέγεται ανάλογα µε το είδος του προβλήµατος που θέλουµε να επιλύσουµε (υπάρχουν διαφορές µεταξύ γλωσσών στην αποδοτικότητα, µέγεθος προγράµµατος, ταχύτητα και φορητότητα). Ανάπτυξη προγράµµατος Περιγραφή του προβλήµατος Ανάλυση προβλήµατος, καθορισµός στόχων Σχεδίαση της λύσης σε µορφή λογικού διαγράµµατος ή ψευδοκώδικα Κωδικοποίηση σε γλώσσα προγραµµατισµού Έλεγχος/διόρθωση λαθών (debugging) 2
Λογικά διαγράµµατα Χρησιµοποιούνται διάφορα σχήµατα ανάλογα µε το µέρος του κώδικα που αντιπροσωπεύει το σχήµα. Εκτός από αυτά υπάρχουν και άλλα σχήµατα που χρησιµοποιούνται σε λογικά διαγράµµατα! Αρχή/τέλος προγράµµατος ιαδικασία/process Ανάγνωση δεδοµένων/read data Απόφαση/Decision ΠαράδειγµαΙ Βρείτε το άθροισµα και το γινόµενο δύο αριθµών που δίνονται από το χρήστη. Ψευδοκώδικας read a, b sum = a+b prod = a*b print sum, prod Λογικό διάγραµµα Αρχή ιάβασε τους αριθµούς a και b sum = a+b prod = a*b Εµφάνισε στην οθόνη το sum και το prod Τέλος 3
ΠαράδειγµαΙΙ Σχεδιάστε το λογικό διάγραµµα ενός προγράµµατος που να διαβάζει δύο αριθµούς. Το πρόγραµµα πρέπει να υπολογίζει και να τυπώνει το πηλίκο των δύο αριθµών (ο πρώτος δια τον δεύτερο). Πρέπει επίσης να ελέγχει τον δεύτερο αριθµό και σε περίπτωση που είναι µηδέν να τυπώνει ένα µήνυµα προς τον χρήστη. Αρχή ιάβασε τους αριθµούς a και b b=0; q=a/b Τύπωσε το q Λογικό διάγραµµα Τύπωσε: "Ο δεύτερος αριθµός είναι µηδέν. Το πηλίκο δεν ορίζεται." Τέλος Παράδειγµα ΙΙΙ Σχεδιάστε το λογικό διάγραµµα ενός προγράµµατος που να διαβάζει τρεις αριθµούς. Ακολούθως το πρόγραµµα πρέπει να κατατάσσει τους 3 αριθµούς από τον µικρότερο στο µεγαλύτερο και να τους τυπώνει στην οθόνη (αγνοήστε την περίπτωση όπου δύο ή και οι τρεις αριθµοί είναι ίσοι). ιάβασε τους αριθµούς a, b και c a>b; max = b min = a a>c; b>c; OXI OXI Αρχή NAI NAI NAI max = a min = b med = a min = c med = c Λογικό διάγραµµα a>c; OXI max = c med = a NAI b>c; OXI med = c NAI min = c med = b OXI max = c med = b Τύπωσε µε τη σειρά τα min, med, max Τέλος 4
Προγραµµατισµός Περιγραφή του τι πρέπει να γίνει Syntax semantics Πρόγραµµα editor (π.χ. emacs) compiler RUN Machine Language Program Προγραµµατισµός Παράδειγµα (Pascal) program.. (input, output);... var x: real; i: integer; c: char; Variables (µεταβλητές) όνοµα τύπος τιµή integer real character begin.. end 5
Προγραµµατισµός Παράδειγµα Ι (Pascal) program changex; var x: real; begin x:=6.1; x:=7.2; x:=x+1; x:=x-3; end x 6.1 7.2 8.2 5.3 Προγραµµατισµός Παράδειγµα ΙΙ (Pascal) Πρόγραµµα που υπολογίζει το εµβαδόν ενός κύκλου (η ακτίνα του κύκλου δεν αλλάζει): program areaofcircle (output); var radius: real; area: real; begin radius:=6.2; area:=3.14*6.2*6.2; writeln( area is, area); end. 6
Προγραµµατισµός Παράδειγµα ΙΙΙ (Pascal) Πρόγραµµα που υπολογίζει το εµβαδόν ενός κύκλου (η ακτίνα του κύκλου µπορεί να αλλάζει): program areaofcircle (input, output); var radius: real; area: real; begin writeln( enter radius ); Read(radius); area:=3.14*radius*radius; writeln( area is, area); end. Προγραµµατισµός Παράδειγµα ΙVα (Pascal) Πρόγραµµα που χρησιµοποιεί ρουτίνες (procedures) program afewproducts (input, output); var j, n, product, time:integer; begin for time=1 to 3 do begin read(n); product:=1; for j=1 to n product:=product*j; writeln ( product, product); end; end. Μπορεί να είναι ξεχωριστή ρουτίνα 7
Προγραµµατισµός Παράδειγµα ΙVb (Pascal) program afewproductsproc (input, output); var j, n, product, time:integer; procedure multiplier; begin product:=1; for j=1 to n product:=product*j; end; begin {start of main program} for time=1 to 3 do begin read(n); multiplier; writeln ( product, product); end; end. Λογισµικό MATLAB MATLAB: MATrix LABoratory Αρχικά είχε δηµιουργηθεί για µαθήµατα στη θεωρία πινάκων, γραµµικής άλγεβρας και αριθµητικής ανάλυσης (~1970). Το λογισµικό στη σηµερινή του µορφή άρχισε να αναπτύσσεται το 1983. Η εταιρία The MathWorks Inc. δηµιουργήθηκε το 1984 για την ανάπτυξη και πώληση του λογισµικού. Το βασικό στοιχείο δεδοµένων της MATLAB είναι ο πίνακας (και ο οποίος δε χρειάζεται να οριστεί εκ των προτέρων). Χρησιµοποιεί γλώσσα προγραµµατισµού ψηλού επιπέδου. Χρησιµοποιείται για επιστηµονικό και τεχνικό υπολογισµό (οι περισσότεροι χρήστες είναι Μηχανικοί). υνατότητα κατασκευής γραφικών παραστάσεων, λύση πολύπλοκων εξισώσεων και πολύπλοκων αλγορίθµων. 8
Κυρίως παράθυρο MATLAB Workspace Command history Command window Κυρίως παράθυρο MATLAB Workspace: είχνει τις µεταβλητές που έχουν οριστεί. Command history: είχνει τις εντολές που έχουν χρησιµοποιηθεί (σβήνονται µόνο όταν ο χρήστης τις σβήσει). Command window: Κυρίως χώρος εργασίας. Μπορεί ο χρήστης να τρέξει εντολές και να δει τα αποτελέσµατα 9
Τρόποι χρήσης MATLAB (α) Γράφοντας τις εντολές απ ευθείας στο command window. (β) Γράφοντας τις εντολές σε ένα ξεχωριστό παράθυρο (edit window) υπό τη µορφή προγράµµατος. Αναζήτηση βοήθειας Πληκτρολογώντας help και την εντολή για την οποία ζητάς βοήθεια. -- Παράδειγµα: help cos θα δείξει στην οθόνη τι είναι αυτή η συνάρτηση και πως συντάσσεται. help µόνο του δίνει µια λίστα από τα εργαλεία και τα directories της MATLAB. Η εντολή demos ξεκινά ένα πρόγραµµα µε χρήσιµες πληροφορίες και επιδείξεις των διαφόρων εργαλείων της MATLAB. Επιλέγοντας την εντολή Help από το toolbar και ακολούθως MATLAB Help οδηγεί σε αναλυτική βοήθεια για κάθε θέµα που αφορά την MATLAB. Newsgroups: π.χ.comp.soft- sys.matlab Συζήτηση θεµάτων που αφορούν τη MATLAB, επίλυση διάφορων αποριών από τους χρήστες. εν απαντούν σε ερωτήσεις που αφορούν κατ οίκον εργασίες! 10
Ενότητα 1: Γνωριµία µε τη MATLAB (1) Εκκίνηση λογισµικού: Από το Desktop επιλέξετε το εικονίδιο της MATLAB, ή από το Start All Programs MATLAB 6.5 MATLAB 6.5. Το 6.5 είναι η έκδοση (version) του λογισµικού και µπορεί να είναι διαφορετική στον υπολογιστή που θα χρησιµοποιήσετε. Έξοδος από το λογισµικό: Πληκτρολογήστε quit ή exit και πατήστε Enter ή πατήστε το x στην πάνω δεξιά γωνία του παράθυρου. Ενότητα 1: Γνωριµία µε τη MATLAB (2) Μερικές απλές πράξεις: >> a=2 a = 2 >> who Your variables are: a ans b c d e >> b=4 b = 4 >> c=2*b c = 8 >> d=a/b d = 0.5000 >> c/d ans = 16 >> e=ans e = 16 µεταβλητές >> whos Name Size Bytes Class a 1x1 8 double array ans 1x1 8 double array b 1x1 8 double array c 1x1 8 double array d 1x1 8 double array e 1x1 8 double array Grand total is 6 elements using 48 bytes >> clear b e >> who Your variables are: a ans c d 11
Ενότητα 1: Γνωριµία µε τη MATLAB (3) Τελεστές (operators) help ops help plus help paren ( ) ^ *, / +, - <, <=, ==, >, >= &,, ~ Προτεραιότητα τελεστών: (1+2*3)^2 = 49 1+2*3^2 = 19 Πράξεις µε εσωτερικές συναρτήσεις: >> a=pi a = 3.1416 >> b=cos(pi) b = -1 >> d=tan(b) d = -1.5574 >> log(exp(1)) ans = 1 Ενότητα 1: Γνωριµία µε τη MATLAB (4) Πραγµατικοί και µιγαδικοί αριθµοί (real and complex numbers): >> clear all >> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i >> a=1; >> b=1; Αφαιρεί όλες τις µεταβλητές από τη µνήµη >> z=a+b*i z = 1.0000 + 1.0000i >> abs(z) ans = 1.4142 Όταν τοποθετηθεί µετά από µια εντολή τότε κρατά το αποτέλεσµα στη µνήµη χωρίς να το παρουσιάζει στην οθόνη. >> angle(z) ans = 0.7854 >> angle(z)*180/pi ans = 45 12
Ενότητα 1: Παραδείγµατα Υπολογισµός εµβαδού κύκλου Ορισµός µεταβλητής για την ακτίνα >> r = 3; και καθορισµός της τιµής της >> Area = pi*r^2 Ορισµός έκφρασης για το εµβαδόν κύκλου Area = 28.2743 Αποτέλεσµα Ορισµός ανεξάρτητης µεταβλητής και καθορισµός της τιµής της Ορισµός έκφρασης εξαρτηµένης µεταβλητής Αποτέλεσµα Υπολογισµός µαθηµατικής έκφρασης >> x = 2; >> y = 3*x^2+4*x+2 y = 22 Προσοχή: Πρώτα ορίζουµε τις ανεξάρτητες µεταβλητές και ύστερα τις εξαρτηµένες! Η τιµή της µεταβλητής στα αριστερά της έκφρασης µπορεί να υπολογιστεί µόνο όταν είναι γνωστές οι τιµές των µεταβλητών στα δεξιά. Ενότητα 1: Μεταβλητές στην MATLAB εν είναι ανάγκη να ορίζονται οι µεταβλητές πριν χρησιµοποιηθούν. Όταν καθορίσουµε την τιµή της µεταβλητής τότε ορίζεται και η µεταβλητή. Το όνοµα της µεταβλητής πρέπει να αρχίζει από γράµµα και µπορεί να ακολουθείται από γράµµατα, αριθµούς ή κάτω παύλα (underscore). Τα µικρά και τα κεφαλαία γράµµατα είναι διαφορετικά. Οι µεταβλητές A και a είναι διαφορετικές. Αν ορίσουµε µια νέα τιµή σε µια µεταβλητή η προηγούµενη σβήνεται από τη µνήµη. Όλες οι µεταβλητές µεταχειρίζονται από την MATLAB ως πίνακες. 13
Ενότητα 2: Πίνακες και διανύσµατα (1) Arrays (matrices) and vectors Όλες οι µεταβλητές στην MATLAB είναι πίνακες µε διαστάσεις mxn. Ο πίνακας είναι µια συλλογή στοιχείων οργανωµένη σε σειρές (γραµµές) και στήλες. Τα διανύσµατα είναι πίνακες µε τη µια διάσταση τους να είναι 1(mx1, διάνυσµα στήλης ή 1xn, διάνυσµα γραµµής). Οι βαθµωτές µεταβλητές (scalar variables) είναι πίνακες 1x1. Ενότητα 2: ηµιουργία πινάκων και διανυσµάτων Ορισµός διανυσµάτων: Υπάρχουν πολλοί τρόποι: -- A = [1, 2, 3, 4] -- A = [1 2 3 4] -- A = [1: 4] -- A = 1: 4 Για να ορίσουµε ένα διάνυσµα στήλης: Β = [1; 2; 3; 4] ή Β =A Ορισµός πινάκων: C = [1 2; 3 4] => 1 2 C = 3 4 Αποτέλεσµα: Α = [1 2 3 4] Για να αποκτήσουµε πρόσβαση σε συγκεκριµένα στοιχεία των πινάκων απλά τα καλούµε σύµφωνα µε τις συντεταγµένες τους. Παράδειγµα: A(1, 3) = 3, B(2,1) = 2, C(2,1) = 3 14
Ενότητα 2: Πίνακες και διανύσµατα (3) >> x = [1 2 3] x = 1 2 3 >> c = x.*z c = 2 2 0 >> e(1) ans = 4 >> y = [2; 1; 5] y = 2 1 5 >> z = [2 1 0] z = 2 1 0 >> a = x+z a = 3 3 3 >> b=x+y??? Error using ==> + Matrix dimensions must agree. >> d = x*y d = 19 >> e = 2*z e = 4 2 0 >> f = sqrt(c) f = 1.4142 1.4142 0 >> g = y*x g = 2 4 6 1 2 3 5 10 15 >> e(2,1)??? Index exceeds matrix dimensions. >> e(1,2) ans = 2 >> p=g(1,2) p = 4 >> q=g(1, 1:3) q = 2 4 6 Ενότητα 2: Πίνακες και διανύσµατα (4) >> a=1 a = 1 >> a(1,2) = -1 a = 1-1 >> a(2,2) = 2 a = 1-1 0 2 >> d = det(a) d = 2 >> c = [1 2 3; 0 1 0; 1 4 1] c = 1 2 3 0 1 0 1 4 1 >> f = [1 2 3 4] f = 1 2 3 4 >> sum(f) ans = 10 >> sum(c) ans = 2 7 4 >> size(f) ans = 1 4 >> size(c) ans = 3 3 >> g=f' g = 1 2 3 4 15
Ενότητα 2: Πίνακες και διανύσµατα (5) >> x = linspace(0, 10, 5) x = 0 2.5000 5.0000 7.5000 10.0000 >> t=1:10 t = 1 2 3 4 5 6 7 8 9 10 >> a = 0:10:100 a = 0 10 20 30 40 50 60 70 80 90 100 ηµιουργεί ένα διάνυσµα µε αρχική τιµή 0, τελική τιµή 10 και µε 5 στοιχεία χωρισµένα µε ίσα διαστήµατα (αρχική τιµή, τελική τιµή, αριθµός στοιχείων). ηµιουργεί ένα διάνυσµα από το 1 µέχρι το 10 ηµιουργεί ένα διάνυσµα από το 0 µέχρι το 100 σε βήµατα των 10 (όταν ο µεσαίος αριθµός απουσιάζει, τότε εννοείται ότι η αύξηση είναι 1). Ηαύξηση µπορεί να είναι αρνητική (µείωση). π.χ. >> b = 5:-2:-1 b = 5 3 1-1 Εισαγωγή δεδοµένων και εκτύπωση αποτελεσµάτων Αν θέλουµε να ζητήσουµε από τον χρήστη να µας δώσει µια τιµή για κάποια µεταβλητή χρησιµοποιούµε την εντολή input. -- Παράδειγµα: p = input( Insert a number ); Αν θέλουµε να τυπώσουµε στην οθόνη το αποτέλεσµα µιας εντολής/ενός προγράµµατος, χρησιµοποιούµε την εντολή fprintf. -- Παράδειγµα: fprintf( The number is %f, p); 16