ΗΜΥ 100 Εισαγωγή στην Τεχνολογία Διάλεξη 5

Download Report

Transcript ΗΜΥ 100 Εισαγωγή στην Τεχνολογία Διάλεξη 5

ΗΜΥ 100
Εισαγωγή στην Τεχνολογία
Στυλιανή Πετρούδη
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ
ΤΑ ΘΕΜΑΤΑ ΜΑΣ ΣΗΜΕΡΑ
•Εισαγωγή στον Προγραμματισμό
•Λογικό διάγραμμα (Flowchart)
•Αρχές Προγραμματισμού
•Εισαγωγή στην MATLAB
-- Γνωριμία με την MATLAB
-- Πίνακες και διανύσματα
-- Γραφικές παραστάσεις
Προγραμματισμός
• Είναι η διαδικασία της δημιουργίας ενός προγράμματος.
Το πρόγραμμα αποτελείται από μια ή περισσότερες
εντολές.
• Η γλώσσα προγραμματισμού επιλέγεται ανάλογα με το
είδος του προβλήματος που θέλουμε να επιλύσουμε
(υπάρχουν διαφορές μεταξύ γλωσσών στην
αποδοτικότητα, μέγεθος προγράμματος, ταχύτητα και
φορητότητα).
Ανάπτυξη προγράμματος
• Περιγραφή του προβλήματος
• Ανάλυση προβλήματος, καθορισμός στόχων
• Σχεδίαση της λύσης σε μορφή λογικού διαγράμματος ή
ψευδοκώδικα
• Κωδικοποίηση σε γλώσσα προγραμματισμού
• Έλεγχος/διόρθωση λαθών (debugging)
Λογικά διαγράμματα
• Χρησιμοποιούνται διάφορα σχήματα ανάλογα με το μέρος
του κώδικα που αντιπροσωπεύει το σχήμα.
• Εκτός από αυτά υπάρχουν και άλλα σχήματα που
χρησιμοποιούνται σε λογικά διαγράμματα!
Αρχή/τέλος προγράμματος
Ανάγνωση δεδομένων/read data
Διαδικασία/process
Απόφαση/Decision
Παράδειγμα Ι
Βρείτε το άθροισμα και το
γινόμενο δύο αριθμών που
δίνονται από το χρήστη.
Ψευδοκώδικας
read a, b
sum = a+b
prod = a*b
print sum, prod
Λογικό διάγραμμα
Αρχή
Διάβασε τους
αριθμούς a και b
sum = a+b
prod = a*b
Εμφάνισε στην οθόνη
το sum και το prod
Τέλος
Παράδειγμα ΙΙ
Σχεδιάστε το λογικό διάγραμμα
ενός προγράμματος που να
διαβάζει δύο αριθμούς. Το
πρόγραμμα πρέπει να
υπολογίζει και να τυπώνει το
πηλίκο των δύο αριθμών (ο
πρώτος δια τον δεύτερο).
Πρέπει επίσης να ελέγχει τον
δεύτερο αριθμό και σε
περίπτωση που είναι μηδέν να
τυπώνει ένα μήνυμα προς τον
χρήστη.
Λογικό διάγραμμα
Αρχή
Διάβασε τους
αριθμούς a και b
b=0;
q=a/b
Τύπωσε το q
Τέλος
Τύπωσε: "Ο δεύτερος αριθμός είναι
μηδέν. Το πηλίκο δεν ορίζεται."
Παράδειγμα ΙΙΙ
Σχεδιάστε το λογικό διάγραμμα
ενός προγράμματος που να
διαβάζει τρεις αριθμούς.
Ακολούθως το πρόγραμμα
πρέπει να κατατάσσει τους 3
αριθμούς από τον μικρότερο
στο μεγαλύτερο και να τους
τυπώνει στην οθόνη (αγνοήστε
την περίπτωση όπου δύο ή και
οι τρεις αριθμοί είναι ίσοι).
Λογικό διάγραμμα
Αρχή
Διάβασε τους
αριθμούς a, b και c
a>b;
NAI
max = a
min = b
OXI
OXI
max = c
med = a
max = b
min = a
a>c;
a>c;
NAI
med = a
min = c
NAI
med = c
NAI
b>c;
NAI
OXI
med = c
OXI
b>c;
OXI
max = c
med = b
Τύπωσε με τη σειρά
τα min, med, max
Τέλος
min = c
med = b
Προγραμματισμός
editor
(π.χ. emacs)
Περιγραφή του τι
πρέπει να γίνει
Syntax
semantics
Πρόγραμμα
compiler
RUN
Machine
Language
Program
Προγραμματισμός – Παράδειγμα (Pascal)
program ….. (input, output);
.
.
.
var
x: real;
i: integer;
c: char;
begin
.
.
end
Variables (μεταβλητές)
όνομα τύπος τιμή
integer real character
Προγραμματισμός – Παράδειγμα Ι (Pascal)
program changex;
var
x: real;
x
begin
x:=6.1;
x:=7.2;
x:=x+1;
x:=x-3;
end
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 6.5 →
MATLAB 6.5.
Το 6.5 είναι η έκδοση (version) του λογισμικού και
μπορεί να είναι διαφορετική στον υπολογιστή που θα
χρησιμοποιήσετε.
• Έξοδος από το λογισμικό:
Πληκτρολογήστε “quit” ή “exit” και πατήστε “Enter”
ή πατήστε το “x” στην πάνω δεξιά γωνία του
παράθυρου.
Ενότητα 1: Γνωριμία με τη MATLAB (2)
• Μερικές απλές πράξεις:
>> who
Your variables are:
a ans b c d e
>> a=2
a= 2
>> 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
Αφαιρεί όλες τις μεταβλητές από τη μνήμη
Όταν τοποθετηθεί μετά από μια εντολή
τότε κρατά το αποτέλεσμα στη μνήμη
χωρίς να το παρουσιάζει στην οθόνη.
Ενότητα 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
ως πίνακες.
Ενότητα 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]
Για να ορίσουμε ένα διάνυσμα στήλης:
Β = [1; 2; 3; 4] ή Β = A’
Ορισμός πινάκων:
1 2
C = [1 2; 3 4]
=> C  

3 4
Για να αποκτήσουμε πρόσβαση σε συγκεκριμένα στοιχεία των
πινάκων απλά τα καλούμε σύμφωνα με τις συντεταγμένες τους.
Παράδειγμα: A(1, 3) = 3, B(2,1) = 2, C(2,1) = 3
Ενότητα 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=
>> d = x*y
d=
19
>> e(2,1)
??? Index exceeds matrix
dimensions.
>> e = 2*z
e=
4 2 0
>> e(1,2)
ans =
2
>> f = sqrt(c)
f=
1.4142 1.4142
>> p=g(1,2)
p=
4
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.
>> g = y*x
g=
2 4 6
1 2 3
5 10 15
0
>> 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
>> size(f)
ans =
1 4
>> f = [1 2 3 4]
f=
1 2 3 4
>> size(c)
ans =
3 3
>> sum(f)
ans =
10
>> g=f'
g=
1
2
3
4
>> sum(c)
ans =
2 7 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
>> a = 0:10:100
a=
0 10 20 30
5
6
7
8
9 10
Δημιουργεί ένα διάνυσμα με
αρχική τιμή 0, τελική τιμή 10 και
με 5 στοιχεία χωρισμένα με ίσα
διαστήματα (αρχική τιμή, τελική
τιμή, αριθμός στοιχείων).
Δημιουργεί ένα διάνυσμα από το
1 μέχρι το 10
40 50 60 70 80 90 100
Δημιουργεί ένα διάνυσμα από το 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);