4. Εντολές Ελέγχου Ροής - Λογικοί Τελεστές

Σχετικά έγγραφα
ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

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

ΗΥ-150. Προγραμματισμός

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

ΗΥ-150. Προγραμματισμός

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

ΔΟΜΗ ΕΠΙΛΟΓΗΣ. Οι διάφορες εκδοχές της

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

a = 10; a = k; int a,b,c; a = b = c = 10;

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

for for for for( . */

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εργαστήριο 5. Εντολή if και παραλλαγές: if-else, πολλαπλές if, πολλαπλές if-else. Απλές και σύνθετες εντολές. Εντολή switch.

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

2. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Α' μέρος: if)

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

Εντολές επιλογής Επαναλήψεις (if, switch, while)

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

Κεφάλαιο 4ο: Εντολές επιλογής

Διαδικασιακός Προγραμματισμός

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Διάλεξη 5η: Εντολές Επανάληψης

HY118- ιακριτά Μαθηµατικά

Κεφάλαιο 5ο: Εντολές Επανάληψης

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

Σχόλιο. Παρατηρήσεις. Παρατηρήσεις. p q p. , p1 p2

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

2. Εντολές Εισόδου - Ο Επαναληπτικός Βρόγχος for - Χαρακτήρες διαφυγής

Η γλώσσα προγραμματισμού C

K15 Ψηφιακή Λογική Σχεδίαση 3: Προτασιακή Λογική / Θεωρία Συνόλων

Υποθετικές προτάσεις και λογική αλήθεια

Σύµφωνα µε την Υ.Α /Γ2/ Εξισώσεις 2 ου Βαθµού. 3.2 Η Εξίσωση x = α. Κεφ.4 ο : Ανισώσεις 4.2 Ανισώσεις 2 ου Βαθµού

Ηλεκτρονικοί Υπολογιστές

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Στοιχεία προτασιακής λογικής

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

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Εκχώρηση Τιμών

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

K15 Ψηφιακή Λογική Σχεδίαση 6: Λογικές πύλες και λογικά κυκλώματα

Βασικές Έννοιες Αλγορίθμων. Βασικές Εντολές Αλγορίθμων (Κεφ. 2ο Παρ. 2.4)

ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ. ιδάσκων : ρ. Β. ΒΑΛΑΜΟΝΤΕΣ. Πύλες - Άλγεβρα Boole 1

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Προγραμματισμός I (Θ)

8. Συνθήκες ελέγχου, λογικοί τελεστές

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

Εντολές ελέγχου ροής if, for, while, do-while

K15 Ψηφιακή Λογική Σχεδίαση 4+5: Άλγεβρα Boole

ΒΑΣΙΚΕΣ ΑΡΧΕΣ ΨΗΦΙΑΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ. Κεφάλαιο 3

Δομημένος Προγραμματισμός (ΤΛ1006)

Τα δεδομένα στη C++ χωρίζονται σε 3 κατηγορίες: τους αριθμούς (numbers), τους χαρακτήρες (characters) και τις συμβολοσειρές (strings).

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Κεφάλαιο ΙII : Εργαστηριακές ασκήσεις που αφορούν εντολές ελέγχου της ροής ενός προγράµµατος.

Δομές ελέγχου ροής προγράμματος

HY118- ιακριτά Μαθηµατικά

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

HY118- ιακριτά Μαθηµατικά

1. ΕΙΣΑΓΩΓΗ. 1.1 Τι είναι η αριθµητική ανάλυση

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ

Πρόβλημα 29 / σελίδα 28

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #3

Διαδικασιακός Προγραμματισμός

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 6: Προτασιακός Λογισμός

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στον Προγραμματισμό

Η γλώσσα προγραμματισμού C

Προγραμματισμός I (Θ)

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

Transcript:

4. Εντολές Ελέγχου Ροής - Λογικοί Τελεστές Εντολές Ελέγχου (ή Επιλογής). Χρήση της εντολής if Μέχρι στιγµής έχουµε αναπτύξει ήδη αρκετά σηµαντικά εργαλεία που µας επιτρέπουν να γράφουµε αποτελεσµατικούς αλγόριθµους. Ωστόσο, ένα ακόµη εργαλείο µας είναι απαραίτητο: οι διαδικασίες ελέγχου (ή επιλογής) της ροής ενός αλγόριθµου ανάλογα µε την εκπλήρωση ή µη ορισµένης συνθήκης. Για να γίνει κατανοητή η φύση της διαδικασίας ελέγχου, ας θεωρήσουµε το µαθηµατικό πρόβληµα της εύρεσης των ριζών µιας δευτεροβάθµιας εξίσωσης µε πραγµατικούς συντελεστές. Εστω η εξίσωση αx 2 + βx +γ=0 Ως γνωστό, οαλγόριθµος της εύρεσης των λύσεων της εξίσωσης περνάει µέσα από τον έλεγχο της τιµής της διακρίνουσας =β 2-4αγ. Πιο συγκεκριµένα, γνωρίζουµε ότι Αν <0 η εξίσωση δεν έχει ρίζες Αν =0 η εξίσωση έχει µία διπλή ρίζα ρ=-β/2α Αν >0 η εξίσωση έχει δύο διαφορετικές ρίζες ρ1=(-β+sqrt )/2α και ρ1=(-β-sqrt )/2α όπου ο συµβολισµός sqrt υποδηλώνει την τετραγωνική ρίζα της διακρίνουσας. Είναι σαφές ότι η υλοποίηση ενός αλγόριθµου εύρεσης των ριζών µιας δευτεροβάθµιας εξίσωσης προγραµµατιστικά απαιτεί την ύπαρξη µιας εντολής που να υλοποιεί τις διαφορετικές δυνατές επιλογές που προκύπτουν µέσα από τον έλεγχο αν µια συνθήκη είναι αληθής ή όχι. Εδώ συγκεκριµένα ο έλεγχος αναφέρεται στο πρόσηµο της διακρίνουσας που καθορίζει την πορεία που θα πάρει ο αλγόριθµος εύρεσης των ριζών. Η C παρέχει την εντολή ελέγχου if (συνθήκη)... και τη γενίκευσή της if (συνθήκη)... else... 28

Θα µελετήσουµε τη χρήση των εντολών αυτών µέσα από το ακόλουθο πρόγραµµα 9, υπολογισµού των ριζών µιας δευτεροβάθµιας εξίσωσης. Πρόγραµµα 9 Γραµµή #include <stdio.h> 1 #include <math.h> 2 int main( ) 3 double a,b,c,d,r; 4 printf("quadratic equation ax^2 + bx + c=0\n"); 5 printf("give coefficient a\n"); 6 scanf("%lf",&a); 7 printf("give coefficient b\n"); 8 scanf("%lf",&b); 9 printf("give coefficient c\n"); 10 scanf("%lf",&c); 11 d=b*b-4.0*a*c; 12 if(d<0) printf("impossible\n"); 13 if(d= =0) 14 r=-b/(2.0*a); 15 printf("one double root = %lf\n",r); 16 if(d>0) 17 r=(-b+sqrt(d))/(2.0*a); 18 printf("first root = %lf\n",r); 19 r=(-b-sqrt(d))/(2.0*a); 20 printf("second root = %lf\n",r); 21 return 0; Γραµµή 2: #include <math.h> Ξεκινάµε µε µία παράπλευρη παρατήρηση. Ηεντολή#include <math.h> στη γραµµή 2 δίνει την οδηγία να συµπεριληφθούν στο πρόγραµµα τα περιεχόµενα του αρχείου κεφαλίδας math.h. Το αρχείο αυτό είναι µία πρότυπη βιβλιοθήκη συναρτήσεων που αντιστοιχούν σε συνήθεις µαθηµατικές συναρτήσεις, όπως π.χ. η τετραγωνική ρίζα πραγµατικού αριθµού, ο λογάριθµος, τριγωνοµετρικοί αριθµοί τόξου, κ.λ.π.. Εδώ ζητούµε να συµπεριληφθεί στο πρόγραµµα η math.h διότι θα χρειαστούµε τη συνάρτηση sqrt(x) ή οποία επιστρέφει την τετραγωνική ρίζα της µεταβλητής x. Αν παραλήψουµε τηγραµµή 2, τότε η κλήση της συνάρτησης sqrt στις γραµµές 18 και 20 δεν θα είναι δυνατό να πραγµατοποιηθεί διότι η συνάρτηση sqrt δεν θα είναι αναγνωρίσιµη απότοπρόγραµµα. Γραµµές 5 ως 11 Η γραµµή 5 τυπώνει στην οθόνη το φιλικό προς το χρήστη µήνυµα του τί κάνει το πρόγραµµα, ενώ στις γραµµές 6 ως 11 το πρόγραµµα αιτείται την εισαγωγή τριών τιµώναπότοπληκτρολόγιο, οι οποίες εκχωρούνται στις µεταβλητές a, b, και c που αντιστοιχούν στους συντελεστές α, β, και γ του τριωνύµου. Γραµµή 12: d=b*b-4.0*a*c; Στη γραµµή 12 εκχωρείται στην µεταβλητή d η τιµή που αντιστοιχεί στη διακρίνουσα µε βάση τις δοθείσες τιµές για τους συντελεστές a,b,και c. 29

Η κύρια λειτουργία του προγράµµατος, που περιλαµβάνει τις εντολές ελέγχου, συντελείται στις γραµµές 13 ως 21 Γραµµή 13 if(d<0) printf("impossible\n"); Η ακριβής απόδοση της εντολής της γραµµής 13 είναι: Αν d<0 τότε τύπωσε "Impossible" Ησύνταξητηςεντολήςif είναι: if (συνθήκη) εντολή 1; ή, πιο γενικά if (συνθήκη) εντολή 1; εντολή 2; εντολή 3; Το νόηµα τηςεντολήςείναιότιοιεντολές1, 2, 3 θα εκτελεστούν µόνο αν είναι αληθής η συνθήκη στο εσωτερικό της παρένθεσης της εντολής if. Αν όµως η συνθήκη δεν ικανοποιείται, τότε δεν θα εκτελεστεί καµµία από τις εντολές ανάµεσα στα άγκιστρα που ακολουθούν την if (ή η µοναδική εντολή 1 στην προηγούµενη σύνταξη), και η ροή του προγράµµατος θα µεταφερθεί στην αµέσως επόµενη γραµµή από το άγκιστρο που κλείνει την if. Εποµένως, στην περίπτωση της γραµµής 13 if(d<0) printf("impossible\n");, θα γίνει πρώτα ο έλεγχος αν d<0 και αν η συνθήκη είναι αληθής, τότε θα τυπωθεί στην οθόνη το µήνυµα "Impossible" και το πρόγραµµα θασυνεχίσειαπό την επόµενη γραµµή, ενώ αν η συνθήκη είναι ψευδής, θα παρακαµφθεί η εντολή µετά την if και η ροή του προγράµµατος θα µεταφερθεί στην αµέσως επόµενη εντολή. Λογικοί Τελεστές και Λογικές Συνθήκες Ερχόµαστε τώρα στο ερώτηµα, µε ποιό τρόπο θα πρέπει να διατυπωθούν οι συνθήκες των οποίων ο έλεγχος θα ζητηθεί µέσα σε µία εντολή if. Η απάντηση στο ερώτηµα αυτό είναι ουσιαστικά µια µεταφορά της "Λογικής" του Αριστοτέλη στον λεγόµενο προτασιακό λογισµό ο οποίος εγκαθιδρύει λογικές σχέσεις µεταξύ προτάσεων που αποτελούν αντικείµενα ελέγχου. ιακρίνουµε τις εξής τρεις βασικές λογικές πράξεις: Λογική Πράξη Λογικός Τελεστής Σύµβολο Τελεστή στη C Αρνηση Λογικό ΟΧΙ! Σύζευξη Λογικό ΚΑΙ && ιάζευξη Λογικό 'Η Αρνησή Η άρνηση µιας πρότασης είναι αληθής όταν η πρόταση είναι ψευδής, ενώ είναι ψευδής όταν η πρόταση είναι αληθής. Παραδείγµατα προτάσεων και των αρνήσεών τους είναι 30

Προταση p Αρνηση της πρότασης p(οχι p) X ίσο µε 3 Χ ΟΧΙ ίσο (=άνισο) 3 Χ µεγαλύτερο του 3 Χ µικρότερο ή ίσο του 3 Φαγητό κρύο Φαγητό ΟΧΙ κρύο (= ζεστό) τρίγωνο οξυγώνιο τρίγωνο ΟΧΙ οξυγώνιο (= ορθογώνιο ή αµβλυγώνιο) Οι δυνατές τιµές µιας λογικής πρότασης είναι δύο: Αληθής (Α) ή Ψευδής(Ψ). Αυτή είναι η περίφηµη "αρχή του αποκλειόµενου τρίτου". Ενας πίνακας αληθείας µιας λογικής πρότασης µας δίνει την τιµή της λογικής πρότασης ως συνάρτηση της τιµής µιας άλλης λογικής πρότασης από την οποία εξαρτάται. Π.χ. έστω οι προτάσεις p και p'= OXI p. Οι προτάσεις p και p' συνδέονται µε τον εξής πίνακα αληθείας: p Α Ψ p' = OXI p Ψ Α Μία ψηφιακή αναπαράσταση του πίνακα αληθείας δίνεται αν η τιµή Α αντικατασταθεί από το ψηφίο 1 και η τιµή Ψαπότοψηφίο0. Με την αντικατάσταση αυτή, οπροτασιακόςλογισµός µετατρέπεται σε λογισµό µεταξύπροτάσεωνπουεπιδέχονταιτιςτιµές 0 ή 1. Οι λογικοί τελεστές σ' αυτή την περίπτωση ορίζουν την Αλγεβρα Boole. Ο λογικός τελεστής NOT (= ΟΧΙ) της Αλγεβρας Boole έχει συνεπώς τον πίνακα αληθείας: p p' = ΝΟΤ p 1 0 0 1 Σύζευξη Η σύζευξη είναι η πράξη του λογικού τελεστή ΚΑΙ, ο οποίος ενεργεί σε δύο προτάσεις. Εστω οι προτάσεις p, q. Ηπρότασηr=pΚΑΙ q θα είναι αληθής όταν και οι δύο προτάσεις p,q είναι αληθείς, ενώ θα είναι ψευδής σε κάθε άλλη περίπτωση, αν δηλαδή έστω µία από τις δύο p,q ήκαιοι δύο είναι ψευδείς. Ο πίνακας αληθείας της r είναι: p q r=pkai q Ψ Ψ Ψ Ψ Α Ψ Α Ψ Ψ Α Α Α Ο τελεστής AND της άλγεβρας Boole αντιστοιχεί στον λογικό τελεστή ΚΑΙ της σύζευξης. ιάζευξη Η διάζευξη είναι η πράξη του λογικού τελεστή 'Η, ο οποίος ενεργεί επίσης σε δύο προτάσεις. Εστω οι προτάσεις p, q. Ηπρότασηr=p'Η q θα είναι αληθής όταν µία από τις δύο προτάσεις p,q, ήκαι οι δύο, είναι αληθής, ενώ θα είναι ψευδής αν και οι δύο προτάσεις είναι ψευδείς. Ο πίνακας αληθείας της r είναι: 31

p q r=p'η q Ψ Ψ Ψ Ψ Α Α Α Ψ Α Α Α Α Ο τελεστής OR της άλγεβρας Boole αντιστοιχεί στον λογικό τελεστή 'Η της διάζευξης. Λογικοί τελεστές σύγκρισης Υπάρχουν τελεστές οι οποίοι δεν αποτελούν λογική πράξη µεταξύ προτάσεων, αλλά χρησιµεύουν για τη διατύπωση προτάσεων, ειδικότερα για µαθηµατικές προτάσεις. Τέτοιοι τελεστές είναι : Ισότητα == Ανισότητα!= Μικρότερο < Μεγαλύτερο > Μικρότερο ή ίσο <= Μεγαλύτερο ή ίσο >= Μία παρατήρηση ως προς τον τελεστή της ισότητας: βλέπουµε ότι η σύγκριση της ισότητας δύο αριθµών δεν γίνεται µε το σύµβολο =, αλλά µε το σύµβολο = =. Αυτός ο διαφορετικός συµβολισµός τονίζει τη διαφορά που υπάρχει ανάµεσα στον τελεστή εκχώρησης (=) και στον τελεστή ελέγχου ισότητας (= =). Ετσι, π.χ., η εντολή x=2; αλλάζει το περιεχόµενο της µεταβλητής x, εκχωρώντας σ' αυτή τη νέα τιµή 2. Αντίθετα, στην εντολή ελέγχου if(x==2)... το περιεχόµενο της x δεν µεταβάλλεται καθόλου κατά τη διάρκεια της σύγκρισης µε τηντιµή 2. Χρήση των λογικών τελεστών. Τύποι de Morgan Με το συνδυασµό των λογικών τελεστών µπορούµε να δηµιουργήσουµε σύνθετες συνθήκες των οποίων η αλήθεια ή το ψεύδος εξαρτάται από την αλήθεια ή το ψεύδος περισσοτέρων από µία προτάσεων. Παραδείγµατα τέτοιων προτάσεων είναι: if(x>=2 && y!=1) που µεταφράζεται "αν το x είναι µεγαλύτερο ή ίσο του 2 ΚΑΙ το y δεν είναι ίσο µε 1", ήηπρόταση if((x*y)<=0 && (y!=0 x!=0)) που µεταφράζεται "αν το γινόµενο x*y είναι µικρότερο ή ίσο του 2 ΚΑΙ το y δεν είναι ίσο µε 0 ήτοx δεν είναι ίσο µε 0". 32

Αργότερα θα δούµε περισσότερες λεπτοµέρειες για την προτεραιότητα µε την οποία εκτελούνται οι λογικές πράξεις όταν υπάρχουν περισσότεροι από δύο λογικοί τελεστές σε µία συνθήκη. Θα δούµε επίσης ότι η C παρέχει τη δυνατότητα εκτέλεσης πράξεων εκχώρησης µέσα σε µία συνθήκη. Προς το παρόν, θα αναφέρουµε µόνο µία περίπτωση που είναι γνωστή ως τύποι του de Morgan, και αφορούν τη διατύπωση της άρνησης µιας πρότασης. Ενα παράδειγµα τέτοιας πρότασης είναι: Ενας φοιτητής περνά το µάθηµα αν πάρει στις εξετάσεις βαθµό µεγαλύτερο ή ίσο του 5 και έχει παρακολουθήσει παραπάνω από τα µισά εργαστήρια (δηλ. περισσότερα από ακριβώς τα µισά). Μια διαφορετική διατύπωση της ίδιας πρότασης, που είναι πλησιέστερη προς τον προτασιακό λογισµό, είναι: Αν (βαθµός >=5 ΚΑΙ εργαστήρια >1/2συνόλου εργαστηρίων) τότε περνά το µάθηµα Η παραπάνω πρόταση είναι ένα τυπικό δείγµα "παραγωγικού συλλογισµού" που αντιστοιχεί στη µαθηµατική λογική σχέση "συνεπάγεται". Σε ορισµένες περιπτώσεις είναι ίσως προτιµότερο να εργασθούµε µε την άρνηση της παραπάνω πρότασης. Τίθεται τώρα το ερώτηµα, πώς θα διατυπωθεί η άρνηση αυτή. Η απάντηση είναι η γνωστή µας µέθοδος της "εις άτοπον απαγωγής". Σύµφωνα µε τη µέθοδο αυτή, αν ισχύει η άρνηση της συνεπαγόµενης προτάσεως τότε συνεπάγεται η άρνηση της αρχικής υποθέσεως. ηλαδή η άρνηση µιας συνεπαγωγής επιφέρει αντιστροφή της φοράς της συνεπαγωγής. Συγκεκριµένα, η άρνηση της πρότασης του προηγούµενου παραδείγµατος είναι: Αν (δεν περνά το µάθηµα) τότε ΟΧΙ ((βαθµός >=5 ΚΑΙ εργαστήρια >1/2συνόλου εργαστηρίων) Η τελευταία πρόταση ΟΧΙ ((βαθµός >=5 ΚΑΙ εργαστήρια > 1/2 συνόλου εργαστηρίων) διατυπώνεται ισοδύναµα µε ένανπιοαπλότρόπο: βαθµός <5 'Η εργαστήρια <= 1/2 συνόλου εργαστηρίων Παρατηρούµε ότι η άρνηση της σύζευξης (ΚΑΙ) δύο προτάσεων σηµαίνει τη διάζευξη ('Η) των αρνήσεων των προτάσεων. Αν συµβολίσουµε µε p' την άρνηση της πρότασης p και οµοίως για τις προτάσεις q και r έχουµε την εξής σχέση, που είναι γνωστή ως τύπος του de Morgan: Αν r=p KAI q τότε r' = p' H q' και τη δυϊκή της: Αν r=p Η q τότε r' = p' ΚΑΙ q' Π.χ., η άρνηση της συνθήκης if(x>=0 && y==0) µπορεί να διατυπωθεί ως if(!(x>=0 && y==0)) αλλά και, ισοδύναµα, µε τον τύπο του de Morgan if(x<0 y!=0) 33

Κατόπιν των ανωτέρω διευκρινίσεων, θα πρέπει να είναι πλέον σαφής η ροή του προγράµµατος 9 από τη γραµµή 13 και κάτω. Ηγραµµή 13 ελέγχει αν (d<0) και τότε τυπώνει "Impossible". Η γραµµή 14 ελέγχει αν (d= = 0) και τότε υπολογίζει (γραµµή 15) και τυπώνει (γραµµή 16) τη µοναδική διπλή ρίζα. Ηγραµµή 17 ελέγχει αν (d>0) καιτότευπολογίζειτιςδύορίζες(γραµµές 18 και 20) και τυπώνει αντίστοιχα τις δύο ρίζες (γραµµές 19 και 21). Ας σηµειωθεί ότι όπως έχουν διαταχθεί στο πρόγραµµα οι τρεις εντολές if, θα γίνουν αναγκαστικά καιοιτρειςέλεγχοιδιαδοχικά, έστω και αν ένας από αυτούς επαληθευτεί πριν από τον επόµενο. Π.χ. αν για κάποιες τιµές των a,b,c, η διακρίνουσα d προκύψει αρνητική, τότε η συνθήκη στο πρώτο από τα τρία if του προγράµµατος θα είναι αληθής, και θα εκτελεσθεί η εντολή printf αµέσως µετά το πρώτο if. Ωστόσο, το πρόγραµµα θασυνεχίσειµετά και η ροή του προγράµµατος θα περάσει και από τα δύο επόµενα if. Εντούτοις, οι συνθήκες µέσα σ' αυτά τα if θα είναι ψευδείς, και εποµένως, πρακτικά, δεν θα εκτελεσθεί καµµία από τις επόµενες εντολές µέσα στα δύο if. Εναλλακτικός τρόπος µε if... else Ενας εναλλακτικός τρόπος διατύπωσης της εντολής ελέγχου if είναι στη µορφή if (συνθήκη) πρώτη οµάδα εντολών else δεύτερη οµάδα εντολών που αποδίδεται ως Αν (συνθήκη) τότε εκτέλεσε την πρώτη οµάδα εντολών, αλλιώς εκτέλεσε τη δεύτερη οµάδα εντολών. Ως συνέπεια, οι εντολές που παρατίθενται κάτω από το else θα εκτελεσθούν αν ισχύει η άρνηση της συνθήκης του if. Το ακόλουθο πρόγραµµα 10 υλοποιεί τον υπολογισµό των ριζών της δευτεροβάθµιας εξίσωσης µε τη βοήθεια της διατύπωσης if...else. Πρόγραµµα 10 Γραµµή #include <stdio.h> 1 #include <math.h> 2 int main( ) 3 double a,b,c,d,r; 4 printf("quadratic equation ax^2 + bx + c=0\n"); 5 printf("give coefficient a\n"); 6 scanf("%lf",&a); 7 printf("give coefficient b\n"); 8 scanf("%lf",&b); 9 printf("give coefficient c\n"); 10 scanf("%lf",&c); 11 d=b*b-4.0*a*c; 12 if(d<0) printf("impossible\n"); 13 else 14 34

if(d= =0) 15 r=-b/(2.0*a); 16 printf("one double root = %lf\n",r); 17 else 18 r=(-b+sqrt(d))/(2.0*a); 19 printf("first root = %lf\n",r); 20 r=(-b-sqrt(d))/(2.0*a); 21 printf("second root = %lf\n",r); 22 return 0; Προσοχή χρειάζεται στη σωστή χρήση των άγκιστων. Κάθε άγκιστρο που ανοίγει συνοδεύεται από ένα άγκιστρο που κλείνει. Η κατακόρυφη στοίχιση των αντίστοιχων άγκιστρων βοηθά οπτικά, κατά την ανάγνωση του προγράµµατος, στην αναγνώριση των τµηµάτων που εσωκλείονται κάτω από ένα if ή else. Παρατηρούµε ακόµη ότιστηγραµµή 15 υπάρχει ένα if το οποίο βρίσκεται µέσα στο else αντίστοιχο του if της γραµµής 13. Ενα τέτοιο if ονοµάζεται εµφωλευµένο if, µε την έννοια ότι εσωκλείεται στην ολότητά του µέσα σε ένα άλλο if. Εντολές Ελέγχου ροής while και do while. Μέχρι στιγµής αναφέραµε τηνεντολήελέγχου if...else, µε την οποία εκτελείται ή όχι κάποιο κοµµάτι του κώδικα, ανάλογα µετοανπληρούταιήόχιορισµένη συνθήκη στο εσωτερικό της εντολής if. Τώρα θα µελετήσουµε µία εντολή η οποία συνδυάζει τον έλεγχο µε τον επαναληπτικό βρόγχο. Ηεντολήwhile υλοποιεί έναν επαναληπτικό βρόγχο, όπως και η εντολή for, υπό την προϋπόθεση ότι ισχύει µια συνθήκη στο εσωτερικό της, όπως στην εντολή if. Ενα παράδειγµα της χρήσης της εντολής while παρέχεται από το ακόλουθο πρόγραµµα: #include <stdio.h> int main() int i; i=1; while(i<=8) printf("%d\n",i*i); i++; return 0; Το πρόγραµµα αυτό τυπώνει τα τετράγωνα των 8 πρώτων φυσικών αριθµών. Η επαναληπτική διαδικασία είναι αυτή που περιλαµβάνεται στα άγκιστρα κάτω από την while. Πριν από τον πρώτο έλεγχο, η ακέραιη µεταβλητή i έχει τιµή 1. Εισερχόµενο στον έλεγχο της while, το πρόγραµµα διαπιστώνει ότι η συνθήκη i<=1 είναι αληθής. Εποµένως προχωρά στην εκτέλεση των εντολών στο εσωτερικό της while. Αυτές είναι δύο. Η πρώτη τυπώνει το τετράγωνο του i, ενώ η δεύτερη αυξάνει τον i κατά 1. 35

Μολις φτάσουµε στο τέλος της ενότητας κάτω από το while, η ροή του προγράµµατος επανέρχεται στην εντολή while. Η τρέχουσα τιµή της µεταβλητής i είναι τώρα 2. Εισερχόµενο στον έλεγχο της while, το πρόγραµµα διαπιστώνει ότι η συνθήκη i<=1 είναι ακόµη αληθής. Εποµένως προχωρά στην εκτέλεση των εντολών στο εσωτερικό της while. Στη συνέχεια επανέρχεται στη while για νέο έλεγχο κ.ο.κ.. Σε κάθε επανάληψη το i αυξάνει κατά 1. Εποµένως, µόλις το i γίνει ίσοµε 9, θα είναι πλέον ψευδής η συνθήκη στο εσωτερικό της while. Τότε δεν θα εκτελεστούν οι εντολές της ενότητας κάτω από την while και η ροή του προγράµµατος θα διαφύγει από το βρόγχο και θα συνεχίσει στην πρώτη εντολή µετά το βρόγχο. Παρόµοια είναι και η χρήση της εντολής do...while, όπως φαίνεται στο ακόλουθο παράδειγµα: #include <stdio.h> int main() int i; i=1; do printf("%d\n",i*i); i++; while(i<=8); return 0; Εδώ ο επαναληπτικός βρόγχος ορίζεται µέσα στις αγκύλες που ακολουθούν την εντολή do. Η διαφορά είναι ότι η πρώτη εκτέλεση του βρόγχου θα πραγµατοποιηθεί οπωσδήποτε, ανεξάρτητα από το αν η συνθήκη που ελέγχεται στην while είναι αληθής ή όχι. Ενω όταν προηγείται η while, η πρώτη επανάληψη του βρόγχου πραγµατοποιείται µόνο αν η συνθήκη της while είναι αληθής, δηλαδή ισχύει για την πρώτη επανάληψη ότι ισχύει και για τις υπόλοιπες επαναλήψεις του βρόγχου. Στα επόµενα θα δούµε και άλλες εντολές που διακόπτουν ή µεταφέρουν τη ροή ενός προγράµµατος σε δεδοµένο σηµείο, ανάλογα µε τηνισχύήµή ορισµένων συνθηκών. 36