ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302...
TRANSCRIPT
![Page 1: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/1.jpg)
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ
Ι. Κ. Δημητρίου
5η Διάλεξη
![Page 2: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/2.jpg)
41CSC302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών
Βιβλιογραφία1. PYTHON – ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ
ΥΠΟΛΟΓΙΣΤΕΣ – 4η αναθεωρημένη και επαυξημένη έκδοση 77117677 ΙΔΡΥΜΑ ΤΕΧΝΟΛΟΓΙΑΣ & ΕΡΕΥΝΑΣ-ΠΑΝΕΠΙΣΤΗΜΙΑΚΕΣ ΕΚΔΟΣΕΙΣ ΚΡΗΤΗΣ
2. ΕΞΕΡΕΥΝΗΣΗ ΤΗΣ PYTHON 68386005 ΕΚΔΟΣΕΙΣ ΚΛΕΙΔΑΡΙΘΜΟΣ ΕΠΕ
39
![Page 3: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/3.jpg)
Επαναληπτικές ασκήσεις
Οι επόμενες διαφάνειες δίνουν αλγοριθμική περιγραφή ορισμένων προβλημάτων.
Η υλοποίηση των αλγορίθμων σε κώδικα Python επαφίεται ως άσκηση.
40
![Page 4: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/4.jpg)
41
Παράδειγμα 2 (Άσκηση 7.1, ∆ημ)
Προσδιορισμός του αρμονικού αθροίσματος1 + 1/2 + 1/3 + 1/4 + … + 1/71Χρειάζεται ένας αθροιστής, έστω S, για το άθροισμα:
S = 1 + 1/2 + 1/3 + 1/4 + … + 1/71Αρχική τιμή αθροιστή, S=0Επόμενη τιμή αθροιστή είναι: S = S + 1/1Επόμενη τιμή αθροιστή είναι: S = S + 1/2Επόμενη τιμή αθροιστή είναι: S = S + 1/3 +…+… κοκ S = S + 1/71Γενική επανάληψη S = S + 1/j, j=1,2,…,71
![Page 5: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/5.jpg)
42
S = 0 ‘ αθροιστήςFor j = 1 to 71
S = S + 1 / j ‘ μεταβολή αθροιστήNext jPrint j, S
ΙΣΟ∆ΥΝΑΜΑ με το WhileS = 0 : j = 1 ‘ αρχικές τιμές εκτός whileWhile j <= 71 ‘ έλεγχος συνθήκης πρώτα
S = S + 1 / j ‘ μεταβολή αθροιστήj = j + 1 ‘ αύξηση μετρητή
Print j, S
![Page 6: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/6.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python
43
![Page 7: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/7.jpg)
44
Παράδειγμα 4
Προσδιορισμός του αθροίσματος δυνάμεωνS = 1 + x + x2 + x3 + x4 + … + x21
To S γράφεται:S = x0 + x1 + x2 + x3 + x4 + … + x21
Παρατηρούμε ότι το S αυξάνεται ως εξής:S = 0S = S + 1 ή S = S + x0
S = S + x ή S = S + x1
S = S + x2
S = S + x3, κοκ.S = S + x21
Εδώ, αλλάζει ο εκθέτης του x, ως 0, 1, 2, 3, …, 21, οπότε το πρόγραμμα γράφεται ως εξής:
![Page 8: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/8.jpg)
Προσδιορισμός του αθροίσματος τετραγώνωνS = 1 + x + x2 + x3 + x4 + … + x21
To S γράφεται:S = x0 + x + x2 + x3 + x4 + … + x21
Το πρόγραμμα είναι:S = 0For j = 0 to 21
S = S + x**jNext j
Ωστόσο, υπολογίζομε την πλήρη δύναμη x**j λαμβάνοντας υπόψη ότι η δύναμη x**(j-1) είναι διαθέσιμη από την προηγούμενη επανάληψη. Οπότε ένας πολλαπλασιασμός αρκεί και ο αλγόριθμος (το πρόγραμμα) γράφεται ως εξής:
![Page 9: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/9.jpg)
46
S = 0For j = 0 to 21
S = S + x**jNext j
ΙΣΟ∆ΥΝΑΜΑ' αρχικές τιμέςS = 0term = 1x = 0.5 ‘ δίνεται
For j = 0 To 21S = S + term O(1)term = term * x ' επόμενος όρος O(1)
Next jPrint j, S ' αποτέλεσμα
Δηλ. υπολογίζομε την πλήρη δύναμη x**jλαμβάνοντας υπόψη ότι η δύναμη x**(j-1)είναι διαθέσιμη από την προηγούμενη επανάληψη:
X**j = x**(j-1) * x = term * x, όπου
term_αρχική_τιμή = 1
Οπότε το πρόγραμμα γράφεται ως εξής:
ΚΩΔΙΚΑΣ
![Page 10: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/10.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python
47
![Page 11: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/11.jpg)
49
Παράδειγμα 5 (Άσκηση 10.1, ∆ημ)
Να αναπτυχθεί πρόγραμμα προσέγγισης του αριθμού π με ακρίβεια 4 δεκαδικών ψηφίων από τον τύπο
1 1 1 14(1 )3 5 7 9
Αρκεί να βρεθεί το άθροισμα,
το οποίο βρίσκεται από το Παράδειγμα 2 με εναλλαγή των προσήμων των προσθετέων
1 1 1 113 5 7 9
S
![Page 12: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/12.jpg)
50
Θυμίζομε το Παράδειγμα 2 που βρίσκει το άθροισμα …
S = 0 ‘ αθροιστήςFor j = 1 to 71
S = S + 1 / j ‘ μεταβολή αθροιστήNext jPrint j, S
ΙΣΟ∆ΥΝΑΜΑ με το WhileS = 0 : j = 1while j <= 71 ‘ έλεγχος συνθήκης πρώτα
S = S + 1 / j ‘ μεταβολή αθροιστήj = j + 1 ‘ αύξηση μετρητή
Print j, S
Προφανώς στο Παράδειγμα 4, ο παρονομαστής αλλάζει κατά 2Πως μπορούμε να αλλάζομε το πρόσημο εναλλάξ;
![Page 13: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/13.jpg)
51
Επαναλήψεις 11 – 1/31 – 1/3 + 1/51 – 1/3 + 1/5 – 1/7 ‘ μεταβαλλόμενοι όροι--------S = 1 : j = 3 : signum = -1While j <= 100000 ‘ έλεγχος συνθήκης πρώτα
S = S + (signum)* 1 / j ‘ μεταβολή αθροιστή επί αλλαγή προσήμουsignum = - signum ' ΠΡΟΣΟΧΗ: αλλαγή προσήμουj = j + 2 ‘ αύξηση μετρητή κατά 2
----------' αρχικές τιμέςs = 1 ' όταν j = 1, δηλ. πριν το for-nextsignum = -1For j = 3 To 100000 Step 2 ' 100000 επαναλήψεις για καλή ακρίβεια
s = s + signum / jsignum = - signum ' ΠΡΟΣΟΧΗ: αλλαγή προσήμου
Next j
1 1 1 113 5 7 9
S
![Page 14: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/14.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python με for
52
![Page 15: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/15.jpg)
Άσκηση: Να αναπτύξετε κώδικα Python για το προηγούμενο πρόβλημα με τη δομή while
53
![Page 16: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/16.jpg)
54
Ερχόμαστε τώρα στον υπολογισμό του π
Είναι ένας επιπλέον πολλαπλασιασμός----------' αρχικές τιμέςs = 1 ' όταν j = 1, δηλ. πριν το for-nextsignum = -1
For j = 3 To 100000 Step 2 ' 100000 επαναλήψεις για καλή ακρίβειαs = s + signum / jsignum = -signum ' ΠΡΟΣΟΧΗ: αλλαγή προσήμου'Print j, s ' εκτύπωση ίχνους, αλλά μόνο για μικρό j
Next j
mypi = 4 * s
1 1 1 14(1 )3 5 7 9
![Page 17: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/17.jpg)
55
' αρχικές τιμέςs = 1 ' όταν j = 1, δηλ. πριν το for-nextsign = -1
For j = 3 To 100000 Step 2 ' 100000 επαναλήψεις για καλή ακρίβειαs = s + sign / jsign = -sign ' ΠΡΟΣΟΧΗ: αλλαγή προσήμου'Print j, s ' εκτύπωση ίχνους, αλλά μόνο για μικρό j
Next jpi = 4 * sPrint j, s, pi ' εκτύπωση αποτελέσματος
ΙΣΟ∆ΥΝΑΜΑ με το While-WendS = 1 : j = 3While j <= 100000 ‘ έλεγχος συνθήκης πρώτα
S = S + sign / j ‘ μεταβολή αθροιστήsign = - sign ' αλλαγή προσήμουj = j + 2 ‘ αύξηση μετρητή
WendPrint j, S
![Page 18: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/18.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python
56
Γενίκευση με το While
![Page 19: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/19.jpg)
57
' αρχικές τιμέςs = 1sign = -1For j = 3 To 100000 Step 2
s = s + sign / jsign = -sign ' αλλαγή προσήμου'Print j, s ' εκτύπωση ίχνους, αλλά για μικρό j
Next jpi = 4 * sPrint j, s, pi ' εκτύπωση αποτελέσματοςΙΣΟ∆ΥΝΑΜΑ με το Whiles = 1sign = -1j = 3while j <= 100000 ' έλεγχος συνθήκης πρώτα
s = s + sign / jsign = -sign ' αλλαγή προσήμουj = j + 2 ‘ αύξηση μετρητή
Print j, s, 4*s
ΒΕΛΤΙΩΣΗ ΣΥΝΘΗΚΗΣ
![Page 20: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/20.jpg)
58
Αυτό, ωστόσο, που ζητά η Άσκηση 10.1 είναι να υπολογιστεί ο π με ακρίβεια 4 δεκαδικών ψηφίων
Αυτό σημαίνει ότι, όταν δύο διαδοχικές προσεγγίσεις διαφέρουν κατά 10-4 τότε να σταματούν οι επαναλήψεις.
Άρα, οι επαναλήψεις συνεχίζουν έως ότου|Sold – Snew| < 10-4 ή abs(Sold – S) < 10**(-4), όπουSold = προηγούμενη τιμή του S.
Αλλιώτικα
![Page 21: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/21.jpg)
59
Εναλλακτική συνθήκη τερματισμού της ανακύκλωσης:
Οι επαναλήψεις λαμβάνουν χώρα εφόσονterm ≥ 10-4
δηλ. εφόσον ο προσθετέος φθάσει σε ακρίβεια 4 δψ
Η δομή αυτή υλοποιείται με το While :
while term ≥ 10-4
……
![Page 22: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/22.jpg)
60
sold = 0s = 0i = 1sign = 1while αbs(sold - s) > 10 ** (-4)sold = s ' φύλαξε την τρέχουσα τιμήterm = sign * 1 / i ' επόμενος όροςs = s + termsign = -sign ' αλλαγή προσήμουi = i + 2
mypi = s * 4print "προσέγγιση="; mypi; " επαναλήψεις ="; iprint "εσωτερική ="; pi
![Page 23: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/23.jpg)
61
Η προσέγγιση του π βελτιώνεται αν η διαφορά δύο διαδοχικών S γίνει μικρότερη από 10-5:
Εναλλακτική συνθήκη τερματισμού
![Page 24: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/24.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python
62
![Page 25: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/25.jpg)
63
Παράδειγμα 6 (Ασκ. 10.7, ∆ημ)Ένα κεφάλαιο 100,000 ευρώ τοκίζεται με 3.5% το
χρόνο, ενώ ένα κεφάλαιο 40,000 ευρώ αυξάνεται με ρυθμό 5% το χρόνο. Σε πόσα έτη από τώρα, το δεύτερο κεφάλαιο θα υπερβεί το πρώτο;
k1 = 100 : k2 = 40 ‘ Αρχικά κεφάλαιαetos0 = 2007 ‘ Έτος βάσηςetos = etos0while k1 > k2 ‘ Συνθήκη επανάληψης, ενώ κ1>κ2
k1 = k1 * (1 + 0.035) ‘ αύξηση k1k2 = k2 * (1 + 0.05) ‘ αύξηση k2etos = etos + 1 ‘ επόμενο έτος
Print etos - etos0, k1, k2
![Page 26: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/26.jpg)
64
Oxi Παράδειγμα 7 (Πρόγραμμα 10, ∆ημ.)
Να αναπτυχθεί πρόγραμμα προσέγγισης της τετραγωνικής ρίζας ενός μη αρνητικού αριθμού number με τη μέθοδο Newton-Raphson ως εξής:
Αν app είναι μια προσέγγιση τουτότε (number/app + app)/2 είναι καλύτερη προσέγγιση.
Χρησιμοποιείστε ως κριτήριο τερματισμού των επαναλήψεων τη συνθήκη
number
62 1 10number eps
app
![Page 27: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/27.jpg)
65
TO ΚΡΙΤΗΡΙΟ ΤΕΡΜΑΤΙΣΜΟΥTο κριτήριο τερματισμού μπορεί να γραφεί ως εξής:
ή
Ή καθώς το eps τείνει στο μηδέν λαμβάνομε
αυτό δηλαδή που θέλομε να δείξομε.Επειδή όμως στον υπολογιστή έχομε υπολογιστική ανακρίβεια, χρησιμοποιούμε αυτή την ανωτέρω ισότητα υπό προσεγγιστική μορφή, πράγμα που εξηγεί το κριτήριο τερματισμού:
21 1numbereps epsapp
2 2(1 ) (1 )eps app number eps app
2number app
abs(number / app ^ 2 - 1) < eps
![Page 28: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/28.jpg)
66
Πόσες προσπάθειες πρέπει να γίνουν για να καταλήξει ο υπολογισμός;
Μια ανακύκλωση do-loop until είναι αυτό που ταιριάζει στο πρόβλημα (έως ότου να ικανοποιηθεί το κριτήριο τερματισμού).
![Page 29: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/29.jpg)
67
Πόσες προσπάθειες πρέπει να γίνουν για να καταλήξει ο υπολογισμός;
Μια ανακύκλωση do-loop until είναι αυτό που ταιριάζει στο πρόβλημα (έως ότου να ικανοποιηθεί το κριτήριο τερματισμού).
![Page 30: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/30.jpg)
68
ΚΩ∆ΙΚΑΣ
eps = 10 ** (-6) 'Σταθεράnumber = 5 'Να βρεθεί η τετραγωνική του ρίζαapp = 1 'Αρχική προσέγγιση της τετρ ρίζας του numberiter = 0 'Μετρητής επαναλήψεων
While abs(number / app ^ 2 - 1) > epsiter = iter + 1 'Αύξησε το μετρητήapp = (app + number / app) / 2 'Νέα προσέγγιση
print "Τετραγωνική ρίζα του "; number; "="; sqrt(number)print "Τετραγωνική ρίζα του "; number; "="; appprint "Επαναλήψεις ="; iterTEST RUN
![Page 31: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/31.jpg)
69
Oxi Παράδειγμα 8 (Ασκ. 10.5, ∆ημ)
Να βρεθεί η κυβική ρίζα του αριθμού x.
Όπως το Παράδειγμα 7.
![Page 32: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/32.jpg)
70
Παράδειγμα 9 (Υπολογισμός του Ν!)
Να γραφεί πρόγραμμα που υπολογίζει το Ν!, όπου Ν είναι θετικός ακέραιος.
Εξ ορισμού 0!=1Ν! = 1*2*3*…*Ν
1!=12!=1 * 23!=1*2*3, κοκΧρησιμοποιούμε έναν ΠΟΛΛΑΠΛΑΣΙΑΣΤΗ P με αρχική τιμή P=1.
![Page 33: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/33.jpg)
71
P = 1For j = 1 to N
P = P * jNext j
Προσοχή: το Ν ας είναι <= 20, διότι το P αυξάνει πολύ γρήγορα
![Page 34: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/34.jpg)
72
Παράδειγμα 10 (Ασκ 10.2, ∆ημ)
Να αναπτυχθεί πρόγραμμα υπολογισμού της παράστασης
έως ότου ο n-στός προσθετέος γίνει μικρότερος του 10-6.
Χρήση αθροιστή S για το άθροισμα και πολλαπλασιαστή P για το παραγοντικό. Το κριτήριο τερματισμού παραπέμπει σε while (repeat until)
1 1 112! 3! 4!
![Page 35: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/35.jpg)
73
S = 1 Χρήση μτβλ P = 11 + 1 / 2! = S + 1 / P, όπου P = P*21 + 1 / 2! + 1 / 3! = S + 1 / P, όπου P = P*31 + 1 / 2! + 1 / 3! + 1 / 4! = S + 1 / P, όπου P = P*4
ΟπότεS = 0 : P = 1 : I = 1 ‘ Αρχικές τιμέςS = S + 1 / PI = I + 1P = P * I
Επανάλαβε έως ότου (1/ P ≤ 10-6)
Δηλ. δεν χρειάζεται να επαναλάβομε τον πλήρη υπολογισμό του παραγοντικού Ρ. Επομένως, δαπανούμε μόνο Ο(1) πράξεις ανά επανάληψη.
ή επανάλαβε ενώ (1/ P > 10-6)
1 1 112! 3! 4!
![Page 36: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/36.jpg)
74
Παράδειγμα 10 (Ασκ 10.3, ∆ημ)Να αναπτυχθεί πρόγραμμα υπολογισμού της
παράστασης
έως ότου ο n-στός προσθετέος γίνει μικρότερος του 10-6.
Χρήση αθροιστή S για το άθροισμα και πολλαπλασιαστή P για το παραγοντικό. Το κριτήριο τερματισμού παραπέμπει σε Loop-Until.
2 3 4
12! 3! 4!
x x x xe x
1 1 112! 3! 4!
![Page 37: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/37.jpg)
75
S = 1 1 + x1 + x + x2 / 2!1 + x + x2 / 2! + x3 / 3! 1 + x + x2 / 2! + x3 / 3! + x4 / 4!
Ωστόσο, δεν χρειάζεται να επαναλάβομε τον πλήρη υπολογισμό της αναδρομικής σχέσης. S = 1S = S + termόπου term = term * x / i, με αρχική τιμή term = 1 και i = 1Άρα, την πρώτη φορά (i=1) είναι S=1+term*x/1 = 1+ x term=xΤη δεύτερη φορά (i=2) είναι S = S + term*x/i κοκΕπομένως, δαπανούμε μόνο Ο(1) πράξεις ανά επανάληψη.
Μεταβαλλόμενος όρος = αναδρομική σχέση:
τωρινή xi/i!
προ xi-1 /(i-1)!
Γενικώς xi/P, όπου P=i!
![Page 38: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/38.jpg)
76
επανάλαβε ενώ (term ≥ eps)
Γενικώς,
S = 1 : i = 1 : term = 1 ‘αρχ. σ.
term = term * x / i
S = S + term
i =i + 1
Άσκηση: Συγκρίνατε με την exp (x) για x= 0.5
![Page 39: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/39.jpg)
Άσκηση: Να αναπτύξετε τον κώδικα Python
77
![Page 40: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ · 2020. 6. 4. · 41csc302 Δομές Δεδομένων και Αρχές Προγραμματισμού Υπολογιστών](https://reader035.vdocuments.site/reader035/viewer/2022062403/5fe50a5113fc657d163d37a3/html5/thumbnails/40.jpg)
78
Τέλος διάλεξης