ΗΜΥ 100 ΕΙΣΑΓΩΓΉ ΣΤΗΝ ΤΕΧΝΟΛΟΓΊΑ Δρ. Στέλιος Τιμοθέου ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ
ΤΑ ΘΕΜΑΤΑ ΜΑΣ ΣΗΜΕΡΑ Εισαγωγή στον Προγραμματισμό Λογικό διάγραμμα (Flowchart) Αρχές Προγραμματισμού Εισαγωγή στην MATLAB -- Γνωριμία με την MATLAB -- Πίνακες και διανύσματα -- Γραφικές παραστάσεις
Προγραμματισμός Είναι η διαδικασία της δημιουργίας ενός προγράμματος. Το πρόγραμμα αποτελείται από μια ή περισσότερες εντολές. Η γλώσσα προγραμματισμού επιλέγεται ανάλογα με το είδος του προβλήματος που θέλουμε να επιλύσουμε (υπάρχουν διαφορές μεταξύ γλωσσών στην αποδοτικότητα, μέγεθος προγράμματος, ταχύτητα και φορητότητα).
Ανάπτυξη προγράμματος Περιγραφή του προβλήματος Ανάλυση προβλήματος, καθορισμός στόχων Σχεδίαση της λύσης σε μορφή λογικού διαγράμματος ή ψευδοκώδικα Κωδικοποίηση σε γλώσσα προγραμματισμού Έλεγχος/διόρθωση λαθών (debugging)
Χρησιμοποιούνται διάφορα σχήματα ανάλογα με το μέρος του κώδικα που αντιπροσωπεύει το σχήμα. Εκτός από αυτά υπάρχουν και άλλα σχήματα που χρησιμοποιούνται σε λογικά διαγράμματα! Αρχή/τέλος προγράμματος Λογικά Διαγράμματα Διαδικασία/process Σύνδεσμος ή Είσοδος/Έξοδος δεδομένων Απόφαση/Decision
Ψευδοκώδικας read a, b, c sum = a+b while sum<c sum = sum+b end print sum Παράδειγμα 1 NO Λογικό διάγραμμα START Read a,b,c sum = a+b Sum<c print sum END YES sum = sum + b
Παράδειγμα 2 START Read Ν N: Integer 0 Ποια πράξη επιτελεί το συγκεκριμένο διάγραμμα ροής; M=0, F=1 is M=N? NO M=M+1 F = F*M YES print F END
Προγραμματιστικές έννοιες Τύποι και μεταβλητές Δομές ελέγχου If else end For loop While loop do...while loop Συναρτήσεις
Τύποι και μεταβλητές Κύριοι τύποι μεταβλητών Character: χαρακτήρες Integer: Ακέραιοι Real: πραγματικοί αριθμοί Επιπλέον χαρακτηριστικά Ακρίβεια-Μέγεθος Arrays: Σειρές Structures: Δομές
Δομές ελέγχου if expression statements else statements end while expression end statements do statements while expression for (Start value; end condition; increase value) end statements;
Ορίσματα εισόδου Ορίσματα εξόδου Συναρτήσεις function [out1, out2,...] = myfun(in1, in2,...) function [mean, stdev] = stat(x) n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); end
Προγραμματισμός editor Περιγραφή του τι πρέπει να γίνει Syntax semantics Πρόγραμμα compiler RUN Machine Language Program
Προγραμματισμός Παράδειγμα (Pascal) program.. (input, output);... var x: real; i: integer; c: char; Variables (μεταβλητές) όνομα τύπος τιμή integer real character begin.. end
Προγραμματισμός Παράδειγμα Ι (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.2
Προγραμματισμός Παράδειγμα ΙΙ (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.
Προγραμματισμός Παράδειγμα ΙΙΙ (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. Μπορεί να είναι ξεχωριστή ρουτίνα
Προγραμματισμός Παράδειγμα Ι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 είναι ο πίνακας (και ο οποίος δε χρειάζεται να οριστεί εκ των προτέρων). Χρησιμοποιεί γλώσσα προγραμματισμού ψηλού επιπέδου. Χρησιμοποιείται για επιστημονικό και τεχνικό υπολογισμό (οι περισσότεροι χρήστες είναι Μηχανικοί). Δυνατότητα κατασκευής γραφικών παραστάσεων, λύση πολύπλοκων εξισώσεων και πολύπλοκων αλγορίθμων.
Κυρίως παράθυρο MATLAB Workspace Command history Command window
Κυρίως παράθυρο MATLAB Workspace: Δείχνει τις μεταβλητές που έχουν οριστεί. Command history: Δείχνει τις εντολές που έχουν χρησιμοποιηθεί (σβήνονται μόνο όταν ο χρήστης τις σβήσει). Command window: Κυρίως χώρος εργασίας. Μπορεί ο χρήστης να τρέξει εντολές και να δει τα αποτελέσματα
Τρόποι χρήσης MATLAB (α) Γράφοντας τις εντολές απ ευθείας στο command window. (β) Γράφοντας τις εντολές σε ένα ξεχωριστό παράθυρο (edit window) υπό τη μορφή προγράμματος.
Αναζήτηση βοήθειας Πληκτρολογώντας help και την εντολή για την οποία ζητάς βοήθεια. -- Παράδειγμα: help cos θα δείξει στην οθόνη τι είναι αυτή η συνάρτηση και πως συντάσσεται. help μόνο του δίνει μια λίστα από τα εργαλεία και τα directories της MATLAB. Η εντολή demos ξεκινά ένα πρόγραμμα με χρήσιμες πληροφορίες και επιδείξεις των διαφόρων εργαλείων της MATLAB. Επιλέγοντας την εντολή Help από το toolbar και ακολούθως MATLAB Help οδηγεί σε αναλυτική βοήθεια για κάθε θέμα που αφορά την MATLAB. Newsgroups: π.χ. comp.soft-sys.matlab Συζήτηση θεμάτων που αφορούν τη MATLAB, επίλυση διάφορων αποριών από τους χρήστες. Δεν απαντούν σε ερωτήσεις που αφορούν κατ οίκον εργασίες!
Ενότητα 1: Γνωριμία με τη MATLAB (1) Εκκίνηση λογισμικού: Από το Desktop επιλέξετε το εικονίδιο της MATLAB, ή από το Start All Programs MATLAB 2010b MATLAB 2010b. Το 2010b είναι η έκδοση (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
Ενότητα 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
>> r = 3; >> Area = pi*r^2 Area = 28.2743 Ενότητα 1: Παραδείγματα Υπολογισμός εμβαδού κύκλου Ορισμός μεταβλητής για την ακτίνα Ορισμός ανεξάρτητης μεταβλητής και καθορισμός της τιμής της Ορισμός έκφρασης εξαρτημένης μεταβλητής Αποτέλεσμα και καθορισμός της τιμής της Ορισμός έκφρασης για το εμβαδόν κύκλου Αποτέλεσμα Υπολογισμός μαθηματικής έκφρασης >> x = 2; >> y = 3*x^2+4*x+2 y = 22 Προσοχή: Πρώτα ορίζουμε τις ανεξάρτητες μεταβλητές και ύστερα τις εξαρτημένες! Η τιμή της μεταβλητής στα αριστερά της έκφρασης μπορεί να υπολογιστεί μόνο όταν είναι γνωστές οι τιμές των μεταβλητών στα δεξιά.
Ενότητα 1: Μεταβλητές στην MATLAB Δεν είναι ανάγκη να ορίζονται οι μεταβλητές πριν χρησιμοποιηθούν. Όταν καθορίσουμε την τιμή της μεταβλητής τότε ορίζεται και η μεταβλητή. Το όνομα της μεταβλητής πρέπει να αρχίζει από γράμμα και μπορεί να ακολουθείται από γράμματα, αριθμούς ή κάτω παύλα (underscore). Τα μικρά και τα κεφαλαία γράμματα είναι διαφορετικά. Οι μεταβλητές A και a είναι διαφορετικές. Αν ορίσουμε μια νέα τιμή σε μια μεταβλητή η προηγούμενη σβήνεται από τη μνήμη. Όλες οι μεταβλητές μεταχειρίζονται από την MATLAB ως πίνακες.
Ενότητα 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 Αποτέλεσμα: Α = [1 2 3 4] Ορισμός πινάκων: C = [1 2; 3 4] => C 1 2 3 4 Για να αποκτήσουμε πρόσβαση σε συγκεκριμένα στοιχεία των πινάκων απλά τα καλούμε σύμφωνα με τις συντεταγμένες τους. Παράδειγμα: A(1, 3) = 3, B(2,1) = 2, C(2,1) = 3
Ενότητα 2: Πίνακες και διανύσματα (3) >> x = [1 2 3] x = 1 2 3 >> 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. >> c = x.*z c = 2 2 0 >> d = x*y 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(1) ans = 4 >> 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
Ενότητα 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);
Παραδείγματα συναρτήσεων (1)
Παραδείγματα συναρτήσεων (2) function [mean, stdev] = stat(x) n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); end [mean, stdev] = stat([12.7 45.4 98.9 26.6 53/1]) mean = 47.3200 stdev = 29.4085
Παραδείγματα συναρτήσεων (3)