Στόχοι και αντικείμενο ενότητας Βασικές κατασκευές Γλωσσών Προγραμματισμού (ΓΠ) Δομές ελέγχου ροής προγράμματος #4.. ντολές πιλογής Προτάσεις διακλάδωσης υπό συνθήκη ντολές if, if Φωλιασμένα (nested) if Έκφραση συνθήκης Συσχετιστικοί τελεστές (τελεστές σύγκρισης) Λογικοί τελεστές Η πρόταση switch Η πρόταση break Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.2 Βασικές κατασκευές ΓΠ Αποθήκευση και ανάκληση πληροφορίας Σταθερές Μεταβλητές Τύποι δεδομένων πεξεργασία πληροφορίας Τελεστές Έλεγχος ροής προγράμματος Ακολουθιακή εκτέλεση εντολών ντολές επιλογής ντολές επανάληψης Αναπαράσταση διεργασιών Συναρτήσεις Έλεγχος ροής προγράμματος Βασικές δομές (ανεξάρτητες της ΓΠ - χρησιμοποιούνται για την ανάπτυξη αλγορίθμων επίλυσης προβλημάτων) Δομή Ακολουθίας (sequence) Ένα σύνολο προτάσεων (εντολών) εκτελείται ακολουθιακά (η μία μετά την άλλη) Δομή πιλογής (selection) Ανάλογα με το αν μια συνθήκη είναι αληθής ή ψευδής, εκτελούνται διαφορετικές προτάσεις (ή ομάδες προτάσεων) Δομή πανάληψης (loop, repetition) Μια πρόταση (η μια ομάδα προτάσεων) εκτελείται πολλές φορές ίτε όσο μια συνθήκη είναι αληθής ίτε για προκαθορισμένο αριθμό επαναλήψεων Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.3 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.4
Έλεγχος ροής προγράμματος (συν.) πιλογή - Διακλάδωση υπό συνθήκη Η πρόταση if συναντάται σε όλες τις προστακτικές ΓΠ Π Απλή μορφή if then Π if then Π Π Π Π3 Π Π ακολουθία επιλογή επανάληψη Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.5 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.6 πιλογή - Διακλάδωση υπό συνθήκη (συν.) Προτάσεις επιλογής στη C Σύνθετη μορφή (φωλιασμένα if) Πρόταση if if then Π if E2 then Π3 Γενική μορφή: if then Π if E2 then if E3 then Π3 if En then Πn Π Π 2 Π3 κτελεί μια πρόταση ή μια ομάδα προτάσεων αν μια έκφραση (συνθήκη) είναι αληθής if (έκφραση) if (έκφραση) πρόταση; πρόταση_; πρόταση_2; block του if πρόταση_n; if (light==red) stop(); block του if Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.7 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.8
Προτάσεις επιλογής στη C (συν.) Πρόταση if κτελεί διαφορετικές προτάσεις ή ομάδες προτάσεων, ανάλογα με το αν μια έκφραση είναι αληθής ή ψευδής if (έκφραση) if (έκφραση) πρόταση_; πρόταση_; πρόταση_2; πρόταση_n; πρόταση_n+; if (light==red) stop(); πρόταση_n+m; go(); block του if block του Προτάσεις επιλογής στη C (συν.) Ψευδοκώδικας Αν ο βαθμός ενός φοιτητή είναι μεγαλύτερος του ή ίσος με 5 τύπωσε μήνυμα ότι προβιβάστηκε αλλιώς τύπωσε μήνυμα ότι απέτυχε Διάγραμμα ροής print Failed grade >= 5 Κώδικας σε C: if (grade >= 5) printf("passed\n"); printf("failed\n"); print Passed Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.9 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4. Παράδειγμα Παράδειγμα (συν.) Δώστε τη δήλωση και τον ορισμό της συνάρτησης min για τον υπολογισμό του μικρότερου μεταξύ δύο ακεραίων αριθμών Παίρνει ως παραμέτρους δυο ακεραίους αριθμούς και επιστρέφει τον μικρότερο ναλλακτικές λύσεις return a; return b; return a; return b; Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.2
Παράδειγμα (συν.) Παράδειγμα 2 ναλλακτικές λύσεις (συν.) return (a < b)? a : b; Υποθετικός τελεστής: επιστρέφει a αν η συνθήκη (a<b) είναι αληθής και b αν είναι ψευδής Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.3 Δώστε τη δήλωση και τον ορισμό της συνάρτησης min3 για τον υπολογισμό του μικρότερου μεταξύ τριών ακεραίων αριθμών Χρήση nested if.. int min3(int a, int b, int c) if (a < c) if (b < c) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.4 Παράδειγμα 2 (συν.) Περί εκφράσεων συνθήκης ναλλακτικές λύσεις int min3(int a, int b, int c) if (a < c) if (b < c) int min3(int a, int b, int c) if (c < minimum) Χρήση συσχετιστικών τελεστών (ή τελεστών σύγκρισης) <, >, <=, >=, == (ελέγχου ισότητας),!= (διάφορο) Το αποτέλεσμα έκφρασης που περιέχει τέτοιο τελεστή είναι αληθές () ή ψευδές () Στη C, η τιμή είναι για και για Τύποι τελεστέων (operands): int, char, float, double Παραδείγματα: (i >= 8) (x < y) (f == 3.456) ( a >= b ) Χρήση λογικών τελεστών && (AND), (OR),! (NOT) Συνένωση δύο ή περισσοτέρων εκφράσεων σύγκρισης Τύποι τελεστέων (operands): int, char Παραδείγματα: (a>= && a<=) (s< s>)!(i==5 && k==) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.5 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.6
Περί εκφράσεων συνθήκης Πίνακες αλήθειας Αποτίμηση λογικών εκφράσεων && (AND) λέγχουμε αν ισχύουν όλες οι επιμέρους εκφράσεις a b a&&b Αρχίζει από τα αριστερά και προχωρεί μέχρι το σημείο που χρειάζεται Παραδείγματα: ( && ) ( ) (OR) λέγχουμε αν ισχύει τουλάχιστο μία από τις επιμέρους εκφράσεις! (ΝΟΤ) λέγχουμε αν ισχύει το αντίθετο μιας έκφρασης a a b!a a b η αποτίμηση της έκφρασης δεν χρειάζεται σε καμία από τις παραπάνω περιπτώσεις Προσοχή Σε μία σύζευξη ( && 2), η συνθήκη πρέπει να αποτελεί τον αριστερό τελεστέο, εάν στην περίπτωση που αποτιμείται σε, τυχόν αποτίμηση της 2 οδηγεί σε πρόβλημα (με αυτή την σειρά αποτρέπεται η αποτίμηση της 2) Παράδειγμα: ((y / x) > 2 && x!= ) vs. (x!= && (y / x) > 2) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.7 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.8 Λογικές εκφράσεις σε C-Παραδείγματα Η πρόταση switch Τα x και y είναι μεγαλύτερα του z (x>z && y>z) Το x είναι ίσο με 2.5 ή με.32 (x==2.5 x==.32) Το a είναι μεταξύ του b και του c (a>=b && a<=c) Το x είναι μικρότερο του ή μεταξύ του και του (x<) (x>= && x<=) Το k είναι αγγλικός χαρακτήρας (k>= a && k<= z ) (k>= A && k<= Z ) Γενική μορφή switch (έκφραση_ελέγχου) σύνολο_ετικετών_ εντολές_ σύνολο_ετικετών_n εντολές_n default: εντολές_d Σύνολο περιπτώσεων για τις οποίες θέλουμε να εκτελεστούν οι εντολές_ Παραδείγματα: case : case 'A': case 'a': Μεταφέρει τον έλεγχο έξω από το σώμα της switch Για περιπτώσεις που δεν έχουν «καλυφθεί» παραπάνω (εκτελούνται οι εντολές_d) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.9 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.2
Η πρόταση switch (συν.) Η πρόταση switch (συν.) case a case a action(s) break case b case b action(s) break... case z case z action(s) break default action(s) Προσοχή Η έκφραση_ελέγχου πρέπει να είναι βαθμωτού τύπου, π.χ. char ή int, αλλά όχι float ή double Κάθε case πρέπει να έχει μια int ή char σταθερά ή σταθερά έκφραση Δύο case δεν μπορούν να έχουν την ίδια τιμή Οι προτάσεις κάτω από την ετικέτα default εκτελούνται όταν καμιά από τις case ετικέτες δεν ικανοποιείται Η default δεν είναι απαραίτητα η τελευταία ετικέτα Σημασία και χρήση της break Ροή προγράμματος (βλέπε προηγούμενη διαφάνεια) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.2 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.22 Η πρόταση switch - Παράδειγμα char letter_grade; int count_a, count_b, count_other; count_a = count_b = count_other = ;... switch(letter_grade) case A : counta++; message_excellent(); case B : countb++; message_very_good(); case C : case D : count_other++; message_other(); default: message_error(); Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.23 Λάθη που γίνονται συχνά Χρήση τελεστή ανάθεσης (=) αντί του τελεστή ελέγχου ισότητας (==) if (x=) αντί του ορθού if (x==) Παράλειψη παρένθεσης στη συνθήκη if x>4 αντί του ορθού if (x>4) Κακή μετατροπή μαθηματικής έκφρασης σε έκφραση της C ( <= x <= 4) αντί του ορθού ( <= x && x<= 4) Παράλειψη αγκυλών στο σώμα του if ή του if (x > ) sum = sum + x; printf( Greater than ); printf( Less than ); αντί του ορθού if (x > ) sum = sum + x; printf( Greater than ); printf( Less than ); Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 4.24