Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
Ι. Κ. Δημητρίου
5η Διάλεξη
Μια δυναμική και θεμελιώδης δυνατότητα
όλων των γλωσσών προγραμματισμού
είναι η ικανότητα να συγκρίνουν ποσότητες
ώστε να αποφασίζουν για τον τρόπο
υπολογισμού. Μ’ άλλα λόγια, ένα είδος
διακλάδωσης μπορεί να διευθετηθεί να
λάβει χώρα μόνον αν κάποιες συνθήκες
ικανοποιούνται.
Συνδυαζόμενη η διακλάδωση με μια επανάληψη,
είναι πιθανώς η πλέον σπουδαία και μοναδική
πρόοδος εφ’ όλων των μαθημάτων και αξίζει
σημαντική προσπάθεια.
6
ΣΧΕΔΙΑΣΜΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
(Software engineering)
Γενική προσέγγιση
7
Πώς σχεδιάζεται ένα πρόγραμμα
8
Σχεδιασμός Προγράμματος
1. Προσδιορισμός προβλήματος
2. Ανάλυση προβλήματος
3. Σχεδιασμός μεθόδου επίλυσης (ανάπτυξη αλγόριθμου) του προβλήματος
4. Κωδικοποίηση του αλγόριθμου σε μια γλώσσα προγραμματισμού (υλοποίηση προγράμματος)
5. Δοκιμή του προγράμματος
9
Πώς αναπτύσσεται ένα πρόγραμμα
10
Στη συνέχεια αναπτύσσομε τα
προγράμματα με συγκεκριμένες τεχνικές
που υλοποιούνται από όλες τις γλώσσες
προγραμματισμού, αλλά με μικρές
διαφοροποιήσεις.
Μια δομικά άρτια τεχνική είναι ο
«δομημένος προγραμματισμός» →
Ανάπτυξη Προγράμματος
11
Δομημένος (structured) προγραμματισμός
Είναι ένα προγραμματιστικό στυλ που
χρησιμοποιεί τρεις κανόνες – δομές ή
βασικά στοιχεία ελέγχου βάσει των οποίων
θα πρέπει να φτιάχνονται τα προγράμματα
(Dijkstra) →:
• Εντολή επεξεργασίας (processing) →
• Έλεγχος συνθήκης if-then-else →
• Ελεγχόμενη επανάληψη εντολών (While,
Repeat-Until, for-next) →
12
Born 11 May 1930
Rotterdam, Netherlands
Died 6 August 2002 (aged 72)
Nuenen, Netherlands
Fields
Computing science
Theoretical computer science
Institutions
Mathematisch Centrum
Eindhoven University of Technology
Burroughs Corporation
The University of Texas at Austin
Alma mater
Leiden University
(B.S., M.S.)
University of Amsterdam
(Ph.D.) Thesis Communication with an
Automatic Computer (1959)
Doctoral advisor Adriaan van Wijngaarden
13
Εντολή επεξεργασίας
Πρόκειται για Black box εντολή,
είτε απλή (πχ τετραγώνισε τον X)
είτε σύνθετη (πχ υπολόγισε τον τόκο από την αποταμίευση κεφαλαίου)
14
Δομή απόφασης
Αποφάσεις λαμβάνονται επί των τρεχουσών
τιμών των δεδομένων:
1. If (συνθήκη αληθής) then …
If «ο λογαριασμός του πελάτη είναι
αρνητικός» then «ενημέρωσε το
διευθυντή».
2. If (συνθήκη αληθής) then … else …
If «ο καιρός είναι καλός» then «πάμε
παραλία» else «πάμε σινεμά»
15
Δομές επανάληψης (looping, loop)
Οι λύσεις πολλών προβλημάτων απαιτούν την επανάληψη μιας διαδικασίας για κάποιο αριθμό φορών:
• For k=1 to 100
…εντολές
endFor k
• While (συνθήκη αληθής)
…εντολές
endWhile
• Repeat
…εντολές
Until (συνθήκη αληθής)
ΔΟΜΗ if-then-else
• Εντολή if – then – else με παραδείγματα και
• Επίλυση ασκήσεων
• Σχεσιακοί τελεστές (relational operators)
• Λογικοί τελεστές (λογική άλγεβρα)
• Συναρτήσεις αποφάσεων στην Python
Λαμβάνοντας ΑΠΟΦΑΣΕΙΣ
Ισχυρή δυνατότητα των γλωσσών προγραμματισμού: ΣΥΓΚΡΙΣΕΙΣ
Αριθμητική έκφραση «είναι» παράσταση με αριθμούς, μεταβλητές και τελεστές +, , *, /, **
Πχ x2 – y–2 + 3*log(x4) – sin(y/3)
Οι συγκρίσεις γίνονται μεταξύ αριθμητικών εκφράσεων
Μια σύγκριση δημιουργεί μια σχεσιακή έκφραση(relational expression)
Σχεσιακή έκφραση ή συνθήκη:
Α**2 > 10*Β
Είναι είτε Αληθής (True) είτε Ψευδής (False)
Γενική μορφή σχεσιακής έκφρασης
Αριθμητική
έκφραση
Σχεσιακός
τελεστής →
Αριθμητική
έκφραση
Σχεσιακοί τελεστές
Τελεστής σε Python Μαθηματικός ισοδύναμος
< <
> >
== =
!=
<=
>=
Σχεσιακές εκφράσεις (συγκρίσεις)
Έκφραση Μαθηματική ισοδύναμη
b*b < 4*a*c b2 < 4ac
K == J k = j
Temp >= 32.0 Temp 32.0
A >= 0 a 0
(I+j) != 3 (I+j) 3
X*X-Y*Y <= 3 x2-y2 3
Το αποτέλεσμα μιας σχεσιακής έκφρασης
είναι είτε True είτε False.
Παραδείγματα
Έκφραση είναι
10 < 10 False
10 == 10 True
6 >= 5 True
A == B True αν Α ισούται με Β,
ειδάλλως False
b2 - 4ac < 0
b2 - 4ac == 0 True είναι μόνο μία εξ αυτών
b2 - 4ac > 0
Ορισμός
If συνθήκη αληθής then
εκτελούνται εντολές
Endif
Αν δεν ισχύει η συνθήκη, αγνοούνται οι
εντολές (μετά το then).
1. Η δομή if-then
Ορισμός
if συνθήκη αληθής:
εκτελούνται εντολές
εντολές
Endif
Αν δεν ισχύει η συνθήκη, αγνοούνται οι
εντολές (μετά το then).
1. Η δομή if-then στην Python
Στοίχιση εντολών
Α=8
Β=5
C=3
if Β^2-4*Α*C < 0:
print (“migadikes rizes”) #εντολή
Πράγματι Β^2-4*Α*C = 5^2-4*8*3=25-
96=-71 άρα τυπώνει «migadikes rizes»
Παράδειγμα 1
Παράδειγμα 2
Δίνεται ακέραιος ariQmos: 1 ariQmos 99.
Ελέγχομε αν η μεταβλητή ariQmos έχει
μονοψήφια ή διψήφια τιμή:
If ariQmos < 10:
print (“Μονοψήφιος”)
If ariQmos > 9:
print (“Διψήφιος”)
Αυτά τα if μπορούν να
γραφούν σε μία
σύνθετη εντολή if με
χρήση του else →
Παράδειγμα 3, συνέχεια του Παραδείγματος 2
Έστω 1 ariQmos 99.
Ελέγχομε αν η μεταβλητή ariQmos έχει
μονοψήφια ή διψήφια τιμή:
if ariQmos < 10:
print (“Μονοψήφιος”)
else:
print (“Διψήφιος”)
Ορισμός
If (συνθήκη αληθής) then
‘ εκτελούνται εντολές
else ‘ άρα η ανωτέρω συνθήκη είναι ψευδής
‘ εκτελούνται εντολές
Endif
2. Η δομή if-then-else
Παράδειγμα 4: Πρόγραμμα 3Ο χρήστης εισάγει δύο αριθμούς από το
πληκτρολόγιο και το πρόγραμμα τυπώνει την
ανισότητα που ικανοποιούν.
Δίνονται αριθμοί a και b
If a > b Then
Print a; " > "; b
Else
Print a; " <= "; b
End If
Python ?
if a > b:
print (a, " > “, b)
else:
print (a, " <= “, b)
Ορισμός
If (συνθήκη 1 αληθής) then
‘ εκτελούνται εντολές
Εlse
If (συνθήκη 2 αληθής) then
‘ εκτελούνται εντολές
Εlse
‘ εκτελούνται εντολές
Endif
Endif
3. Η ένθετη δομή if-then-else
Ορισμός
If (συνθήκη 1 αληθής) then
‘ εκτελούνται εντολές
ΕlseIf (συνθήκη 2 αληθής) then
‘ εκτελούνται εντολές
Εlse
‘ εκτελούνται εντολές
Endif
4. Η ένθετη δομή ElseIf
Ορισμός
if συνθήκη 1 αληθής:
‘ εντολές
elif συνθήκη 2 αληθής:
‘ εντολές
else:
‘ εντολές
4. Η ένθετη δομή ElseIf σε Python
Το γράψιμο με ένθετα if-then-elseif απαιτεί
εμπειρία, αλλά θεωρείται δείγμα υψηλής
τεχνικής.
Παράδειγμα 5:
Ζητείται η επίλυση της εξίσωσης αx+b=0
Αλγόριθμος:
αν a0 τότε x = -b/a
αν a=0 τότε
αν b=0, αόριστη
διαφορετικά (b 0), αδύνατη
Αλγόριθμος – διάγραμμα ροής
Τέλος
a 0
x = - b/a
αόριστη
αδύνατη
b 0
Αρχή
NAI
OXI
NAI
OXI
Υλοποίηση σε Python:
Το πρόγραμμα χρησιμοποιεί την ένθετη(εγκλωβισμένη) if-then-elseif -…- endif
If a != 0:
x=-b/a
elif b != 0:
print (“adynati”)
else:
print (“aoristi”)
Κι άλλα παραδείγματα με if-then-else
.
Παράδειγμα: άρτιος ή περιττός
Έλεγχος αν o 6 είναι άρτιος
int(6 / 2) * 2 = 3 * 2 = 6, άρα ο 6 είναι
άρτιος
Έλεγχος αν o 5 είναι περιττός
int(5 / 2) * 2 = 2 * 2 = 4 διάφορος 5, άρα 5
περιττός
>>> x=3
>>> if x%2 == 0:
... print ('x is even')
... else:
... print ('x is odd')
...
x is odd
άρτιος ή περιττός
Έλεγχος αν o i είναι άρτιος ή περιττός
if i == int(i/2)*2:
print (“Άρτιος”)
else:
print (“Περιττός”)
>>> x=3
>>> if x%2 == 0:
... print ('x is even')
... else:
... print ('x is odd')
...
x is odd
Επειδή οι πραγματικοί αριθμοί δεν κρατώνται με πλήρη ακρίβεια στον υπολογιστή, ΠΡΟΣΟΧΗ να μην χρησιμοποιούνται οι σχεσιακοί τελεστές = και ≠ σε αριθμητικές συγκρίσεις που εμπλέκουν μη ακέραιους αριθμούς.
Για να εξετάσομε αν οι πραγματικοί αριθμοί Χ1 και Χ2 είναι (προσεγγιστικά) ίσοι, συνιστάται η χρήση μιας συνθήκης ή έκφρασης της μορφής
abs(X1-X2) < tol
όπου, πχ. tol = 0.5Ε-4 δηλ. tol = 0.510-4
Σύγκριση πραγματικών αριθμών
Παράδειγμα: Έλεγχος ισότητας
πραγματικών αριθμών (με ποια ακρίβεια;)
Α = 1 / 82 [A=0.01219512]
Β = Α * 82 [B=0.01219512*82=0.99999984]
if B == 1:
print (“ισότητα”)
else:
print (“ανισότητα”, Β)
RUN (δίνει)
ανισότητα 0.9999999
Παράδειγμα: Έλεγχος ισότητας
πραγματικών αριθμών
Α = 1 / 82
Β = Α * 82
if abs (B – 1) < 0.00001:
print (“ισότητα”)
else:
print (“ανισότητα”, Β)
RUN
ισότητα
default tolerance (εσωτερική συνάρτηση)
rel_tol = 1e-09
Υποθέτει ότι δύο αριθμοί είναι περίπου ίδιοι σε
9 δεκαδικά ψηφία.
Ορισμός της συνάρτησης προσήμου
Αναπτύξτε πρόγραμμα.
→
| | / , 0sign( )
0, 0
x x xx
x
Ορισμός της συνάρτησης προσήμου
Έστω signx η μεταβλητή που κρατά το πρόσημο:
if x != 0:
signx = abs(x)/x
else:
signx = 0
| | / , 0sign( )
0, 0
x x xx
x
Λογικές εκφράσεις
Λογικές σταθερές και μεταβλητές
Λογικές σταθερές: Είναι True, False
Πχ 5>3, 6<4 είναι λογικές σταθερές
print True δίνει True
print 5>3 δίνει True
print 6<4 δίνει False
Τιμές μιας Λογικής μεταβλητής είναι: True, False
Πχ blnLogic = True
blnFound = False
Λογικές εκφράσεις και λογικοί τελεστές
Λογική έκφραση είναι μια ακολουθία
σχεσιακών εκφράσεων που συνδέονται
με τους λογικούς τελεστές
NOT
AND
OR, XOR
ορισμός →
b*b < 4*a*c
Παραδείγματος χάριν,
Λογική έκφραση ή συνθήκη = Παράσταση
λογικών σταθερών, μεταβλητών και
τελεστών.
Πχ k = 0, x < 3, y > x
X < 3 or Y > 5, -1 < x and x < 1
abs(a+b-c) <= 0.5E-5
not (k=0) σημαίνει k±0
Το αποτέλεσμα μιας λογικής έκφρασης είναι
αποκλειστικά είτε True είτε False.
!!!
The three standard input streams -
standard input (STDIN), standard
output (STDOUT) and standard
error (STDERR) - are not original
or unique to the Python
programming language. They’re
language agnostic concepts.
59
•Γέννηση: 22 Φεβρουαρίου
1903, Κέιμπριτζ, Ηνωμένο Βασίλειο
•Απεβίωσε: 19 Ιανουαρίου 1930, Guy's
Hospital, Λονδίνο, Ηνωμένο Βασίλειο
•Σύζυγος: Λετίς Ράμσεϊ (νύμφ. 1925–
1930)
•Επιρροές: Λούντβιχ
Βίτγκενσταϊν, Μπέρτραντ Ράσελ, Τσαρλς
Περς, Τσάρλς Κέι Όγκντεν
•Εκπαίδευση: Κολέγιο του
Γουίντσεστερ, Κολέγιο Τρίνιτι στο
Κέμπριτζ, Μώντλιν Κόλετζ
Τι σημαίνουν οι λογικοί τελεστές
Λογικοί τελεστές – ορισμός
NOT Άρνηση, αναιρεί συνθήκη
If NOT(X <= 0) then print X; “θετικός”
AND Σύζευξη, ισχύουν αμφότερες οι συνθήκες:
If X>0 AND X<5 Then print “ανάμεσα”
OR Διάξευξη, ισχύει η μία συνθήκη ή και οι δύο
If (L=“N”) OR (L=“n”) then print “No”
XOR Αποκλειστική διάζευξη, αν ισχύει η μία
συνθήκη, όχι όμως και οι δύο, ισχύει η πράξη
If Χ > 3 ΧΟR Μ = 5 then …
Τελεστής σε VB Λογικός ισοδύναμος
Not not - άρνηση
And and - σύζευξη
Or or - διάζευξη
Λογικοί τελεστές και ιεραρχία
Πίνακας αληθείας Not
Έκφραση Not Έκφραση Αποτέλεσμα
Αληθής Not Αληθής Ψευδής
Ψευδής Not Ψευδής Αληθής
Πίνακας αληθείας And
Έκφραση 1 Έκφραση 2 Ε1 And E2 Αποτέλεσμα
Ψ Ψ Ψ And Ψ Ψ
Ψ A Ψ And A Ψ
Α Ψ A And Ψ Ψ
Α A A And A A
Πίνακας αληθείας Or
Έκφραση 1 Έκφραση 2 Ε1 Or E2 Αποτέλεσμα
Ψ Ψ Ψ Or Ψ Ψ
Ψ A Ψ Or A A
Α Ψ A Or Ψ A
Α A A Or A A
Εκτίμηση λογικής έκφρασης:
Το αποτέλεσμα μιας λογικής έκφρασης είναι
είτε True είτε False.
Κανόνας:
1. Πρώτα οι αριθμητικές πράξεις (αποτίμηση εκφράσεων)
2. Έπειτα οι σχεσιακές εκφράσεις (>,<,== …)
3. Τέλος οι λογικοί τελεστές (not / and / or, xor)
Πχ E1 or E2 and E3
Σημαίνει:
E1 or (E2 and E3) και όχι (E1 or E2) and E3
Παράδειγμα
a x b, η διπλή ανισότητα γράφεται
a <= x AND x <= b
Παράδειγμα
Το συμπλήρωμα του
x > 0
είναι
x <= 0
και γράφεται
ΝΟΤ ( x > 0 )
Παράδειγμα
5 <= a And a <= 25
γράφεται ισοδύναμα ως
Not (5 > a Or a > 25)
Παράδειγμα Να βρεθεί η τιμή της λογικής έκφρασης
Α< 0 OR B=2 AND X>7 XOR Y>9
όταν A=-1, B=2, X=1, Y=12
Απάντηση
Πρώτα εκτιμούμε τις σχεσιακές εκφράσεις (σύγκριση αριθμών):
Α< 0 είναι True, B=2 είναι True, X>7 είναι False, Y>9 είναι True
Έπειτα εκτιμούμε τις λογικές εκφράσεις με ιεραρχία (not, and, or):
B=2 AND X>7 True AND False είναι False
Στη συνέχεια:
Προσοχή:
Τrue XOR True είναι False
true OR false XOR true
true XOR true
Παράδειγμα Να βρεθεί η τιμή της λογικής έκφρασης
A<0 OR B=2 AND (X>7 XOR Y>9)
όταν A=-1, B=2, X=1, Y=12
Απάντηση
Πρώτα η παρένθεση (X>7 XOR Y>9)
Έπειτα το AND
Έπειτα το OR
ΤΕΛΟΣ