Λύσεις Σειράς Ασκήσεων 5

Σχετικά έγγραφα
Λύσεις Σειράς Ασκήσεων 5

Σειρά Προβλημάτων 5 Λύσεις

Λύσεις Σειράς Ασκήσεων 5

Λύσεις Σειράς Ασκήσεων 5

Σειρά Προβλημάτων 4 Λύσεις

Λύσεις Σειράς Ασκήσεων 5

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Ανάλυση της Ορθότητας Προγραμμάτων

Ανάλυση της Ορθότητας Προγραμμάτων

Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΕΠΑΛΗΘΕΥΣΗ ΠΡΟΓΡΑΜΜΑΤΩΝ Ι

Σειρά Προβλημάτων 3 Λύσεις

Ασκήσεις Επανάληψης Λύσεις

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Ασκήσεις Επανάληψης Λύσεις

Σειρά Προβλημάτων 3 Λύσεις

Σειρά Προβλημάτων 5 Λύσεις

Φροντιστήριο 6 Λύσεις

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Υπολογιστικά & Διακριτά Μαθηματικά

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Σειρά Προβλημάτων 5 Λύσεις

Λύσεις 4ης Σειράς Ασκήσεων

εισαγωγικές έννοιες Παύλος Εφραιμίδης Δομές Δεδομένων και

Σειρά Προβλημάτων 5 Λύσεις

Σειρά Προβλημάτων 5 Λύσεις

Κεφάλαιο : Επαναλήψεις (for, do-while)

Πολλοί τρόποι περιγραφής αλγορίθμων. Όλοι είναι μηχανιστικά ισοδύναμοι και ειδικά ισοδύναμοι με μερικές αναδρομικές συναρτήσεις.

Δομημένος Προγραμματισμός

Σειρά Προβλημάτων 1 Λύσεις

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Σειρά Προβλημάτων 5 Λύσεις

Αλγόριθμοι και Πολυπλοκότητα Φώτης Ε. Ψωμόπουλος, Περικλής Α. Μήτκας

Μεταγλωττιστές Βελτιστοποίηση

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

ιαφάνειες παρουσίασης #4

Προγραµµατισµός Η/Υ. Μέρος2

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Μεταγλωττιστές Βελτιστοποίηση

Φροντιστήριο 2 Λύσεις

Φροντιστήριο 2 Λύσεις

Σειρά Προβλημάτων 5 Λύσεις

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Σειρά Προβλημάτων 1 Λύσεις

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ιαφάνειες παρουσίασης #3

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Σειρά Προβλημάτων 3 Λύσεις

Σειρά Προβλημάτων 4 Λύσεις

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Κατηγορηματικός Λογισμός (ΗR Κεφάλαιο )

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Εισαγωγή στην πληροφορική

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false.

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Σειρά Προβλημάτων 3 Λύσεις

ιαφάνειες παρουσίασης #5

Κεφάλαια Εντολές επανάληψης. Τρεις εντολές επανάληψης. Επιλογή εντολής επανάληψης ΟΣΟ...ΕΠΑΝΑΛΑΒΕ. Σύνταξη στη ΓΛΩΣΣΑ

Φροντιστήριο 10 Λύσεις

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΘΕΜΑ 1ο Α. Να γράψετε στο τετράδιό σας τον αριθµό κάθε πρότασης και δίπλα τη λέξη Σωστό, αν είναι σωστή, ή τη λέξη Λάθος, αν είναι λανθασµένη.

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

1 Arq thc Majhmatik c Epagwg c

Μη επιλυσιμότητα I. Απόδειξη. Ορίζουμε # # =

Γ ΤΑΞΗ ΗΜΕΡΗΣΙΟΥ ΕΠΑ.Λ ΜΑΘΗΜΑ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΚΦΩΝΗΣΕΙΣ

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Σειρά Προβλημάτων 1 Λύσεις

Ταξινόμηση. 1. Ταξινόμηση του Shell. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Σειρά Προβλημάτων 1 Λύσεις

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

ιαφάνειες παρουσίασης #4

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Κατανεμημένα Συστήματα Ι

Πολλοί τρόποι περιγραφής αλγορίθμων. Όλοι είναι μηχανιστικά ισοδύναμοι και ειδικά ισοδύναμοι με μερικές αναδρομικές συναρτήσεις

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

α. Λογικό διάγραμμα είναι η μέθοδος που χρησιμοποιεί απλά σχήματα που υποστηρίζονται με απλές λέξεις για την αναπαράσταση συγκεκριμένων λειτουργιών.

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΤΕΛΟΣ 1ΗΣ ΑΠΟ 6 ΣΕΛΙ ΕΣ

Συναρτήσεις. Υποπρόγραμμα

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Εισαγωγή στον Προγραμματισμό (με. τη C)

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Σειρά Προβλημάτων 3 Λύσεις

Φροντιστήριο 9 Λύσεις

Transcript:

Άσκηση 1 Λύσεις Σειράς Ασκήσεων 5 Να υπολογίσετε τις ασθενέστερες προσυνθήκες έτσι ώστε οι πιο κάτω προδιαγραφές να είναι ορθές σύμφωνα (i) με την έννοια της μερικής ορθότητας και (ii) με την έννοια της ολικής ορθότητας. Να αιτιολογήσετε σύντομα τις απαντήσεις σας (δεν είναι απαραίτητο να κατασκευάσετε αποδείξεις με τους κανόνες). (α) Η ασθενέστερη προσυνθήκη της προδιαγραφής (τόσο για μερική όσο και για ολική ορθότητα) είναι η x = 1 x = 1 αφού προφανώς το x θα πάρει την τιμή 0 μόνο στις δύο αυτές περιπτώσεις. Ακολουθεί και η απόδειξη. { x = 1 x = 1 } { (x > 0 x 1 = 0) (x <= 0 x+1 = 0) } Συνεπαγωγή if x > 0 { x 1 = 0 } Προσυνθήκη if x := x 1 { x = 0 } { x + 1 = 0 } Προσυνθήκη x := x + 1 { x = 0 } { x = 0 } Καν. if (β) Η ασθενέστερη προσυνθήκη της προδιαγραφής (τόσο για μερική όσο και για ολική ορθότητα) είναι η x = a n n >= 0. Ακολουθεί και η απόδειξη. {x = a n n >= 0} {x*a = a n+1 n+1 > 0} Συνεπαγωγή x := x a; {x = a n+1 n+1 > 0} n := n + 1 {x = a n n > 0} (γ) Η ασθενέστερη προσυνθήκη της προδιαγραφής (τόσο για μερική όσο και για ολική ορθότητα) είναι η (i < j) A[j] > 1) (i >= j {A[i] > 0). Ακολουθεί και η απόδειξη. { (i < j) A[j] 1> 0) (i >= j {A[i] > 0) } if i < j {A[j] 1> 0} then A[i]:= A[j] 1 A[j] := A[i] 1 Προσυνθήκη if Προσυνθήκη Καν. if Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 1

(δ) Η ασθενέστερη προσυνθήκη της προδιαγραφής για μερική ορθότητα είναι η true ενώ για ολική ορθότητα είναι η x k. Ακολουθούν οι αποδείξεις. Μερική ορθότητα Αμετάβλητη συνθήκη: true while (x!= k) { true x!= k } Αμ. Συνθ. και φρουρός Συνεπαγωγή x := x-1 {true x = k} Καν. partial while {x = k} Συνεπαγωγή Ολική ορθότητα Αμετάβλητη συνθήκη: true Μεταβλητή έκφραση: x k { k x } { 0 x k } Συνεπαγωγή while (x!= k) { true x!= k 0 x k = E 0 } Αμ. Συνθ. και Μετ. Εκφρ. και Φρουρός { true 0 x 1 k < E 0 } Συνεπαγωγή x := x-1 { true 0 x k < E 0 } {true x = k} Καν. while {x = k} Συνεπαγωγή Άσκηση 2 Να αποδείξετε την ορθότητα των πιο κάτω προδιαγραφών με την έννοια της μερικής ορθότητας. {y = 0} { (y+1 > 0 & y >= 0) [(y (y+1)> 0 y (y+1) y+(y+1)+y = y (y+1) y ) (y+1 > 0 & y >= 0) y+1 = y)} x := y + 1; (y (y+1) 0 y (y+1) = y (y+1) y )] { (x > 0 & y >= 0) [(y x > 0 y x y+x+y = y x y ) (y x 0 y x = y x y )] (x > 0 & y >= 0) x = y)} if (x > 0 & y >= 0) then { (y x > 0 y x y + x + y = y x y ) (y x 0 y x = y x y ) } x := y - x; Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 2

{x=y} { (x > 0 x x + y = x y ) (x 0 x = x y ) } y := x - y { (x>0 x y=y ) (x 0 x = y)} if (x > 0) then {x y=y} x := x y {x=y} (β) Αμετάβλητη συνθήκη του while loop: lg a = lg x + r x 1 {a > 1} { lg a = lg a + 0 a 1 } Συνεπαγωγή x := a ; { lg a = lg x + 0 x 1 } r := 0; { lg a = lg x + r x 1 } while ( x > 1) { lg a = lg x + r x 1 x > 1 } Αμ. Συνθήκη και Φρουρός { lg a = lg (x div 2) + r + 1 x div 2 1 } Συνεπαγωγή (Δες εξήγηση *) x := x div 2 ; { lg a = lg x + r + 1 x 1 } r := r + 1 { lg a = lg x + r x 1 } { lg a = lg x + r x 1 x 1 } Καν. Partial while { r = lg a } Συνεπαγωγή Εξήγηση συνεπαγωγής (*): Έστω lg a = lg x + r x 1 x > 1. Τότε από τη δοσμένη σχέση lg x = lg (x div 2) +1, έχουμε lg a = lg (x div 2) + 1 + r x > 1 και επομένως lg a = lg (x div 2) + r + 1 x div 2 1 Άσκηση 3 Να αποδείξετε την ορθότητα των πιο κάτω προδιαγραφών με την έννοια της ολικής ορθότητας. (α) Αμετάβλητη συνθήκη του βρόχου είναι η x = b + z y = a z z 0 και μεταβλητή έκφραση η z. Ακολουθεί η απόδειξη. {x = a y = b a > b} {x = b + x y y = a x + y x y 0 } Συνεπαγωγή z := x - y; {x = b + z y = a z z 0 } Κανόνας Ανάθεσης while (1 z){ Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 3

} {x = b + z y = a z z 1 0 z = E 0 } Αμ. Συνθ., Μετ. Εκφρ. και Φρ. {x 1 = b + z 1 y + 1 = a z + 1 z 1 0 0 z 1< E 0 } Συνεπαγωγή x := x - 1; {x = b + z 1 y + 1 = a z + 1 z 1 0 0 z 1 < E 0 } y := y + 1; {x = b + z 1 y = a z + 1 z 1 0 0 z 1 < E 0 } z := z - 1; {x = b + z y = a z z 0 0 z < E 0 } {x = b z y = a + z z < 1 z 0 } Καν. total while {x = b y = a} Συνεπαγωγή (β) O πιο κάτω αλγόριθμος υπολογίζει το στοιχείο πλειοψηφίας στον πίνακα Α[0,Ν 1] αν ένα τέτοιο στοιχείο υπάρχει. Στην προδιαγραφή συμβολίζουμε με #Α[i,j].x τον αριθμό των εμφανίσεων του στοιχείου x στον πίνακα Α[i,j]. Αμετάβλητη συνθήκη του βρόχου είναι η y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x και μεταβλητή έκφραση η N i. Ακολουθεί η απόδειξη. {0 Ν } { y [y x ( #Α[0, 1].y 0/2 )] x = A[0] 0 = #A.[0,i 1].x 0 Ν } Συνεπαγωγή i := 0; { y [y x ( #Α[0,i 1].y i/2 )] x = A[0] 0 = #A.[0,i 1].x 0 Ν i } Καν. Αναθ. j := 0; { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] 0 = #A.[j,i 1].x 0 Ν i } Καν. Αναθ. c := 0; { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x 0 Ν i } Καν. Ανάθ. while (i!= N) do { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x i N 0 Ν i = E 0 } Αμετ. Συνθ. Και Φρουρός και Μετ. Εκφρ. { 2c i j y[y A[i] (#Α[0,i].y (i+1)/2 ) 0 Ν i 1 < E 0 ] 2c > i j 0 Ν i 1 < E 0 A[i]=x y[y x ( #Α[0,i].y (i+1)/2 )] x=a[j] c+1 = #A.[j,i].x A[i] x y[y x ( #Α[0,i].y (i+1)/2 )] x=a[j] c=#a.[j,i].x } Συνεπαγωγή (*) if (2c i-j) do { y[y A[i] (#Α[0,i].y (i+1)/2 )] } Προσυνθήκη if { A[i]=A[i] y[y A[i] (#Α[0,i].y (i+1)/2 )] A[i]=A[i] 1= #A.[i,i].A[i] 0 Ν i 1 < E 0 A[i] A[i] y[y A[i] (#Α[0,i].y (i+1)/2 )] A[i]=A[i] 0=#A.[i,i].A[i] Συνεπαγωγή j := i; { A[i]=A[i] y[y A[i] (#Α[0,i].y (i+1)/2 )] Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 4

A[i]=A[j] 1= #A.[j,i].A[i] A[i] A[i] y[y A[i] (#Α[0,i].y (i+1)/2 )] A[i]=A[j] 0=#A.[j,i].A[i] x := A[i]; { A[i]=x y[y x (#Α[0,i].y (i+1)/2 )] x=a[j] 1= #A.[j,i].x A[i] x y[y x (#Α[0,i].y (i+1)/2 )] x=a[j] 0=#A.[j,i].x c := 0; { A[i]=x y[y x (#Α[0,i].y (i+1)/2 )] x=a[j] c+1 = #A.[j,i].x A[i] x y[y x (#Α[0,i].y (i+1)/2 )] x=a[j] c=#a.[j,i].x { A[i] = x y [y x ( #Α[0,i].y (i+1)/2 )] x = A[j] c + 1 = #A.[j,i].x A[i] x y [y x ( #Α[0,i].y (i+1)/2 )] x = A[j] c = #A.[j,i].x Καν. Εντολής if if (A[i] = x) { y [y x ( #Α[0,i].y (i+1)/2 )] x = A[j] c + 1 = #A.[j,i].x Προσυνθήκη if i := i+1; { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c + 1 = #A.[j,i 1].x c := c+1; { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x { y [y x ( #Α[0,i].y (i + 1)/2 )] x = A[j] c = #A.[j,i].x 0 Ν i 1 < E 0 } Προσυνθήκη i := i+1; { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x Καν. εντολής if { y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x i = N } Κανόνας tot while { y [y x ( #Α[0,N 1].y N/2 )] } Συνεπαγωγή Απόδειξη συνεπαγωγής *: Έστω ότι y [y x ( #Α[0,i 1].y i/2 )] x = A[j] c = #A.[j,i 1].x i N Διακρίνουμε τις πιο κάτω περιπτώσεις: 2c i j. Πρέπει να δείξουμε ότι #Α[0,i].A[j] i/2. Αφού επίσης Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 5

1. y [( #Α[0,j].y j/2 )] που συνεπάγεται #Α[0,j].Α[j] j/2 2. c = #A.[j,i 1].A[j] (i j)/2 έχουμε ότι #Α[0,i].A[j] (j+i j)/2 1 + 1 (i+1)/2. Επομένως το σκέλος της συνεπαγωγής 2c i j y[y A[i] (#Α[0,i].y (i+1)/2 )] αληθεύει. 2c > i j και A[i]=x. Προφανώς, αφού y [y x ( #Α[0,i 1].y i/2 )] και Α[i] = x, ισχύει επίσης ότι y[y x ( #Α[0,i].y (i+1)/2 )]. Επιπλέον, αφού c = #A.[j,i 1].x, έχουμε ότι c+1 = #A.[j,i].x. Επομένως το σκέλος της συνεπαγωγής 2c > i j A[i]=x y[y x ( #Α[0,i].y (i+1)/2 )] x=a[j] c+1 = #A.[j,i].x αληθεύει. 2c > i j και A[i] x. Γνωρίζουμε ότι y [y x ( #Α[0,i 1].y i/2 )]. Θέλουμε να δείξουμε ότι ( #Α[0,i].Α[i] i/2 )] επομένως απομένει να επιβεβαιώσουμε ότι για y = A[i], #Α[0,i].y i/2. Αφού επίσης 1. y [( #Α[0,j].y j/2 )] που συνεπάγεται #Α[0,j].Α[i] j/2 2. c = #A.[j,i 1].x > (i j)/2 που συνεπάγεται ότι #Α[j,i 1].A[i] < (i j)/2 έχουμε ότι #Α[0,i].y < (j+i j)/2 + 1 < (i+2)/2 (i+1)/2. Επομένως το σκέλος της συνεπαγωγής 2c > i j A[i] x y[y x ( #Α[0,i].y (i+1)/2 )] x=a[j] c=#a.[j,i].x αληθεύει. Αυτό ολοκληρώνει την απόδειξη. Άσκηση 4 Θέλουμε να προσθέσουμε στη γλώσσα μας WHILE (διαφάνεια 9 5), εντολές της μορφής: if? then C 1 C 2 Οι εντολές αυτές εκτελούνται επιλέγοντας για εκτέλεση μια από τις εντολές C 1 και C 2 μη ντετερμινιστικά. (α) Να προτείνετε κανόνα για την ανάλυση προδιαγραφών που σχετίζονται με την εντολή αυτή. Ο καινούριος κανόνας για την εντολή loop C είναι ο εξής: C1 C 2 if? then C C 1 2 nondeter (β) Ακολουθεί η απόδειξη της προδιαγραφής. Αμετάβλητη συνθήκη του while loop είναι η x 0 και μεταβλητή έκφραση η x. if? then { 0 0 } Συνεπαγωγή x := 0 { x 0 } Κανόνας Ανάθεσης Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 6

{ 3 0 } Συνεπαγωγή x := 3 { x 0 } Κανόνας Ανάθεσης { x 0 } while x > 0 { x > 0 x 0 0 x = E 0 } Φρουρός και Αμ. Συνθ. και Μετ. Εκφρ. { x 1 0 0 x 1 < E 0 } Συνεπαγωγή x := x 1 { x 0 0 x < E 0 } { x 0 x 0 } Κανόνας total while { x = 0 } Συνεπαγωγή Λύσεις Σειρά Προβλημάτων 5 Χειμερινό Εξάμηνο 2014 Σελίδα 7