ΗΜΥ 100 Εισαγωγή στην Τεχνολογία 4 Νοεμβρίου 2008 Στυλιανή Πετρούδη ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ
ΤΑ ΘΕΜΑΤΑ ΜΑΣ ΣΗΜΕΡΑ •Εισαγωγή στον Προγραμματισμό •Λογικό διάγραμμα ( Flowchart) •Αρχές Προγραμματισμού •Εισαγωγή στην MATLAB -- Γνωριμία με την MATLAB -- Πίνακες και διανύσματα -- Γραφικές παραστάσεις
Προγραμματισμός • Είναι η διαδικασία της δημιουργίας ενός προγράμματος. Το πρόγραμμα αποτελείται από μια ή περισσότερες εντολές. • Η γλώσσα προγραμματισμού επιλέγεται ανάλογα με το είδος του προβλήματος που θέλουμε να επιλύσουμε (υπάρχουν διαφορές μεταξύ γλωσσών στην αποδοτικότητα, μέγεθος προγράμματος, ταχύτητα και φορητότητα).
Ανάπτυξη προγράμματος • Περιγραφή του προβλήματος • Ανάλυση προβλήματος, καθορισμός στόχων • Σχεδίαση της λύσης σε μορφή λογικού διαγράμματος ή ψευδοκώδικα • Κωδικοποίηση σε γλώσσα προγραμματισμού • Έλεγχος/διόρθωση λαθών (debugging)
Λογικά διαγράμματα • Χρησιμοποιούνται διάφορα σχήματα ανάλογα με το μέρος του κώδικα που αντιπροσωπεύει το σχήμα. • Εκτός από αυτά υπάρχουν και άλλα σχήματα που χρησιμοποιούνται σε λογικά διαγράμματα! Αρχή/τέλος προγράμματος Ανάγνωση δεδομένων/read data Διαδικασία/process Απόφαση/Decision
Παράδειγμα Ι Βρείτε το άθροισμα και το γινόμενο δύο αριθμών που δίνονται από το χρήστη. Λογικό διάγραμμα Ψευδοκώδικας read a, b sum = a+b prod = a*b print sum, prod
Παράδειγμα ΙΙ Σχεδιάστε το λογικό διάγραμμα ενός προγράμματος που να διαβάζει δύο αριθμούς. Το πρόγραμμα πρέπει να υπολογίζει και να τυπώνει το πηλίκο των δύο αριθμών (ο πρώτος δια τον δεύτερο). Πρέπει επίσης να ελέγχει τον δεύτερο αριθμό και σε περίπτωση που είναι μηδέν να τυπώνει ένα μήνυμα προς τον χρήστη. Λογικό διάγραμμα
Παράδειγμα ΙΙΙ Σχεδιάστε το λογικό διάγραμμα ενός προγράμματος που να διαβάζει τρεις αριθμούς. Ακολούθως το πρόγραμμα πρέπει να κατατάσσει τους 3 αριθμούς από τον μικρότερο στο μεγαλύτερο και να τους τυπώνει στην οθόνη (αγνοήστε την περίπτωση όπου δύο ή και οι τρεις αριθμοί είναι ίσοι). Λογικό διάγραμμα
Προγραμματισμός Περιγραφή του τι πρέπει να γίνει Πρόγραμμα Syntax semantics compiler RUN Machine Language Program editor (π.χ. emacs)
Προγραμματισμός – Παράδειγμα (Pascal) program ….. (input, output);. var x: real; i: integer; c: char; begin. end Variables (μεταβλητές) όνομα τύπος τιμή integer real character
Προγραμματισμός – Παράδειγμα Ι (Pascal) program changex; var x: real; begin x:=6.1; x:=7.2; x:=x+1; x:=x-3; end x
Προγραμματισμός – Παράδειγμα ΙΙ (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). • Το λογισμικό στη σημερινή του μορφή άρχισε να αναπτύσσεται το Η εταιρία 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 R2007a→ MATLAB 7.4. Το 7.4 είναι η έκδοση (version) του λογισμικού και μπορεί να είναι διαφορετική στον υπολογιστή που θα χρησιμοποιήσετε. • Έξοδος από το λογισμικό: Πληκτρολογήστε “quit” ή “exit” και πατήστε “Enter” ή πατήστε το “x” στην πάνω δεξιά γωνία του παράθυρου.
Ενότητα 1: Γνωριμία με τη MATLAB (2) • Μερικές απλές πράξεις: >> a=2 a = 2 >> b=4 b = 4 >> c=2*b c = 8 >> d=a/b d = >> c/d ans = 16 >> e=ans e = 16 >> who Your variables are: a ans b c d e >> 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 μεταβλητές
• Τελεστές (operators) help ops help plus help paren Ενότητα 1: Γνωριμία με τη MATLAB (3) ( ) ^ *, / +, -, >= &, |, ~ • Προτεραιότητα τελεστών: (1+2*3)^2 = *3^2 = 19 • Πράξεις με εσωτερικές συναρτήσεις: >> a=pi a = >> b=cos(pi) b = -1 >> d=tan(b) d = >> log(exp(1)) ans = 1
>> clear all >> i ans = i >> j ans = i >> a=1; >> b=1; >> z=a+b*i z = i >> abs(z) ans = >> angle(z) ans = >> angle(z)*180/pi ans = 45 • Πραγματικοί και μιγαδικοί αριθμοί (real and complex numbers): Ενότητα 1: Γνωριμία με τη MATLAB (4) Αφαιρεί όλες τις μεταβλητές από τη μνήμη Όταν τοποθετηθεί μετά από μια εντολή τότε κρατά το αποτέλεσμα στη μνήμη χωρίς να το παρουσιάζει στην οθόνη.
Ενότητα 1: Παραδείγματα >> r = 3; >> Area = pi*r^2 Area = Υπολογισμός εμβαδού κύκλου Ορισμός μεταβλητής για την ακτίνα και καθορισμός της τιμής της Ορισμός έκφρασης για το εμβαδόν κύκλου Αποτέλεσμα >> 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 = [ ] -- A = [1: 4] -- A = 1: 4 Αποτέλεσμα: Α = [ ] Για να ορίσουμε ένα διάνυσμα στήλης: Β = [1; 2; 3; 4] ή Β = A’ Ορισμός πινάκων: C = [1 2; 3 4] => Για να αποκτήσουμε πρόσβαση σε συγκεκριμένα στοιχεία των πινάκων απλά τα καλούμε σύμφωνα με τις συντεταγμένες τους. Παράδειγμα: A(1, 3) = 3, B(2,1) = 2, C(2,1) = 3
Ενότητα 2: Πίνακες και διανύσματα (3) >> x = [1 2 3] x = >> y = [2; 1; 5] y = >> z = [2 1 0] z = >> a = x+z a = >> b=x+y ??? Error using ==> + Matrix dimensions must agree. >> c = x.*z c = >> d = x*y d = 19 >> e = 2*z e = >> f = sqrt(c) f = >> g = y*x g = >> 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 = >> d = det(a) d = 2 >> c = [1 2 3; 0 1 0; 1 4 1] c = >> f = [ ] f = >> sum(f) ans = 10 >> sum(c) ans = >> size(f) ans = 1 4 >> size(c) ans = 3 3 >> g=f' g =
Ενότητα 2: Πίνακες και διανύσματα (5) >> x = linspace(0, 10, 5) x = >> t=1:10 t = >> a = 0:10:100 a = Δημιουργεί ένα διάνυσμα με αρχική τιμή 0, τελική τιμή 10 και με 5 στοιχεία χωρισμένα με ίσα διαστήματα (αρχική τιμή, τελική τιμή, αριθμός στοιχείων). Δημιουργεί ένα διάνυσμα από το 1 μέχρι το 10 Δημιουργεί ένα διάνυσμα από το 0 μέχρι το 100 σε βήματα των 10 (όταν ο μεσαίος αριθμός απουσιάζει, τότε εννοείται ότι η αύξηση είναι 1). Η αύξηση μπορεί να είναι αρνητική (μείωση). π.χ. >> b = 5:-2:-1 b =
Εισαγωγή δεδομένων και εκτύπωση αποτελεσμάτων • Αν θέλουμε να ζητήσουμε από τον χρήστη να μας δώσει μια τιμή για κάποια μεταβλητή χρησιμοποιούμε την εντολή ‘input’. -- Παράδειγμα: p = input(‘Insert a number ’); • Αν θέλουμε να τυπώσουμε στην οθόνη το αποτέλεσμα μιας εντολής/ενός προγράμματος, χρησιμοποιούμε την εντολή ‘fprintf’. -- Παράδειγμα: fprintf(‘The number is %f’, p);