1 / 23

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

ΗΥ- 150 Προγραμματισμός. Εντολές Ελέγχου Ροής. Σειριακή εκτέλεση εντολών. Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές ( sequential – built in C) Εντολές απόφασης ( if, if/else, switch) Εντολές επανάληψης ( for, while, do/while).

jersey
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ΗΥ-150Προγραμματισμός Εντολές Ελέγχου Ροής

  2. Σειριακή εκτέλεση εντολών • Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: • Σειριακές εντολές (sequential – built in C) • Εντολές απόφασης (if, if/else, switch) • Εντολές επανάληψης ( for, while, do/while)

  3. ifβασική εντολή διακλάδωσης κάθε γλώσσας προγραμματισμού Ελέγχει τη ροή του κώδικα ανάλογα με τη (λογική) τιμή μιας συνθήκης, δηλαδή μιας ποσότητας ή έκφρασης λογικού τύπου. Στη C++ συντάσσεται ως εξής: if (condition) { ... // block A } else { ... // block B } Εάν η συνθήκη (condition) είναι αληθής ή μπορεί να μετατραπεί σε αληθή, εκτελείται το block των εντολών που περικλείεται μεταξύ των πρώτων {} (block A). Αν η συνθήκη είναι ψευδής, τότε εκτελείται το block των εντολών μετά το else (block B).

  4. if Το κάθε block μπορεί να αποτελείται από καμμία, μία, ή περισσότερες εντολές. Στην περίπτωση που περιλαμβάνει μία μόνο εντολή μπορούν να παραληφθούν τα άγκιστρα ({}) που την περικλείουν. if (val > max) max = val; else { max = 1000.0; ++i; }

  5. if Στην περίπτωση που το else block είναι κενό μπορεί να παραληφθεί ολόκληρο: if (condition) { ... }

  6. if • Kάθε block μπορεί να περιλαμβάνει οποιεσδήποτε άλλες εντολές και βέβαια άλλο if. Hif (condition) {...}else{...} είναι μία εντολή. Στην περίπτωση ενός εσωκλειόμενου if , θέλει ιδιαίτερη προσοχή το επόμενο else του κώδικα. Το κάθε else ταιριάζει με το αμέσως προηγoύμενό του if στο ίδιο block. if (i == 0) if (val > max) max = val; else max = 10; Η εντολή max = 10; εκτελείται όταν to i είναι 0 και δεν ισχύει το ( val > max ) και όχι όταν δεν ισχύει το ( i == 0 ). Η χρήση των αγκίστρων επιβάλει την πρόθεση του προγραμματιστή: if (i == 0) { if (val > max) max = val; } else max = 10;

  7. Εντολές υπό Συνθήκη - if εντολή <- έκφραση; εντολή <- { σειρά εντολών } if (έκφραση) εντολή1 if (έκφραση) εντολή1 else εντολή2 if (έκφραση1) εντολή1 else if (έκφραση2) εντολή2 else εντολή3 //Ανηέκφρασηέχειτιμήδιάφορητου 0 (!0), //εκτελείταιηεντολή 1 //Ανηέκφρασηέχειτιμήδιάφορητου 0 (!0), //εκτελείταιηεντολή 1 αλλιώςηεντολή2 //Ανηέκφραση1έχειτιμήδιάφορητου 0 (!0), //εκτελείταιηεντολή 1 //αλλιώςανηέκφραση2 έχειτιμήδιάφορητου 0 //εκτελείταιηεντολή 2 //αλλιώςεκτελείταιηεντολή 3

  8. Παράδειγμα int main() /*Ypologismos aplwn pra3ewn*/ { char p; float x,y,res; scanf("%f %c %f",&x,&p,&y); if (p == ‘+’) { res = x+y; } else if (p == ‘-’) { res = x-y; } else if (p == ‘*’) { res = x*y; } else if (p == ‘/’); { res = x/y; } else { printf(“La8os eisodos\n”); return -1; } printf(“%f%c%f = %f\n”,x,p,y,res); return 0; }

  9. Παραστάσεις υπό Συνθήκη - ? Ο τελεστής ( ?: ) είναι ένας ιδιαίτερα διαδεδομένος ιδιωματισμός της C++. Η εντολή if (condition) val = value1; else val = value2; ισοδυναμεί με val = (condition ? value1 : value2); Γενικότερα, η έκφραση (condition ? έκφρασηΑ : έκφρασηΒ) έχει την τιμή “έκφρασηΑ” όταν η συνθήκη condition είναι αληθής, ενώ έχει την τιμή “έκφρασηΒ” όταν η συνθήκη είναι ψευδής.

  10. Παραστάσεις υπό Συνθήκη - ? Οι παρενθέσεις που περιβάλουν τον τελεστή ( ?: ) με τα ορίσματά του στο συγκεκριμένο παράδειγμα δεν είναι απαραίτητες, βοηθούν όμως στην κατανόηση του κώδικα. Καθώς για το συγκεκριμένο τελεστή δεν μπορεί να καθοριστεί μονοσήμαντα η προτεραιότητά του σε σχέση με τον ( = ) πρέπει να τις χρησιμοποιούμε για να εκτελείται η επιδιωκόμενη πράξη. Εναλλακτικά, μπορούμε να εφαρμόζουμε τον εξής κανόνα: Οι τελεστές ( ?: ) και ( = ) έχουν ίδια προτεραιότητα, δεχόμενοι ότι οι πράξεις εκτελούνται από τα δεξιά προς τα αριστερά. Επομένως, η έκφραση • a = b ? c : d ισοδυναμεί με a = (b ? c : d), • ενώ η έκφραση a ? b : c = d εκτελείται ως a ? b : (c = d)

  11. Παραστάσεις υπό Συνθήκη - ? if (x > y) { x = a; }  else { x = b; } x = (x>y) ? a : b;

  12. printf(“%d\n”,(x>y?a:b));

  13. Εντολές υπό Συνθήκη - switch switch (έκφραση) { case σταθερή_παράσταση_1 : statements; break; case σταθερή_παράσταση_2 : statements; break; default : statements; } • Το default είναι προαιρετικό και εκτελείται αν καμία παράσταση δεν βρεθεί ίση με την έκφραση • Αν ένα break λείπει τότε συνεχίζεται η εκτέλεση των εντολών

  14. Εντολές υπό Συνθήκη - switch • Η τιμή ελέγχου i πρέπει να είναι ακέραιου τύπου (char , int , shortint, longint) με τις signed και unsigned παραλλαγές τους. Η τιμή μπορεί να προέρχεται από μεταβλητή ή να είναι η τιμή συνάρτησης που επιστρέφει τέτοιο τύπο ή κάποια μεταβλητή. Οι τιμές value1, value2,..., valueN είναι σταθερές ακέραιου τύπου και διακριτές μεταξύ τους. • Κατά την εκτέλεση, η τιμή ελέγχου i συγκρίνεται με κάθε μία από τις value1, value2,...,valueN. Αν η τιμή της περιλαμβάνεται σε αυτές, τότε εκτελούνται οι εντολές που ακολουθούν το αντίστοιχο case . Η εκτέλεση συνεχίζει με τις εντολές των επόμενων case ή/και του default αν έπεται, έως ότου διακοπεί με break (ή τυχόν π.χ. goto, return). • Μετά το break η εκτέλεση συνεχίζει με την πρώτη εντολή μετά το καταληκτικό άγκιστρο της δομής switch. • Αν δεν βρεθεί η τιμή της στις value1, value2,...,valueN εκτελείται το block των εντολών του default , αν υπάρχει. Αλλιώς, η εκτέλεση συνεχίζει μετά το } του switch . • Οι σχετικές θέσεις των case και του default μπορούν να είναι οποιεσδήποτε.

  15. Παράδειγμα με switch #include <stdio.h> /*Ypologismos aplwn pra3ewn*/ int main() { char p; float x,y,res; scanf("%f %c %f",&x,&p,&y); switch (p) { case ‘+’ : res = x+y; break; case ‘-’ : res = x-y; break; case ‘*’ : res = x*y; break; case ‘/’ : res = x/y; break; default : printf(“La8os eisodos\n”); } printf(“%f%c%f = %f\n”,x,c,y,res); return 0; }

  16. Τυπικά Λάθη • if(x=5) αντί για if(x==5) • Ξεχάσατε το break σε εντολή switch • Ξεχάσατε {, } • Λάθος στις προτεραιότητες: ( ) • Λύση: Μορφοποίησηκαι χρήση σχολίων

  17. Μορφοποίηση • Σχόλια πριν από συναρτήσεις και τους ορισμούς μεταβλητών • Κατάλληλη χρήση tabs, παρενθέσεων και αγκυλών • Κατάλληλη ονοματολογία συναρτήσεων - μεταβλητών /*Epistrefei ton endiameso ari8mo twn a,b,c*/ int getMedian(int a,int b, int c) { int median; /*Endiamesos*/ if ((a <= b) && (a >= c)) || ((a >= b) && (a <= c)) { median = a; } else if ((b <= a) && (b >= c)) || ((b >= a) && (b <= c)) { median = b; } else { median = c; } return median; }

  18. Define – Const – Include #define <macro> <replacement name> #define FALSE 0 #define TRUE !FALSE #define N 1000 /*ΠΡΟΣΟΧΗ!! – ΔΕΝ ΜΠΟΡΩ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΩ ΤΟ Ν ΩΣ ΜΕΤΑΒΛΗΤΗ*/ #define Pi 3.14159 • Ορίζεται στην αρχή κάθε προγράμματος και μπορεί να χρησιμοποιηθεί σε όλο το πρόγραμμα. • To Pi θα αντικατασταθεί από τον 3.14159 στο πρώτο βήμα του compilation (preprocessing) int const a = 1; • ορίζει μια σταθερά – δεν μπορεί να αλλάξει τιμή #include <file> #include <stdio.h> #include “file”

  19. #include <stdio.h> #include <math.h> float diakrinousa(float,float , float ); int printSolution2ba8mou(float a, float b, float c); int main() { float a,b,c; printf(“Dwste 3 pragmatikous ari8mous \n”); scanf(“%f %f %f”,&a,&b,&c); printf("Dw8hke to poluwnumo: %f x^2 + (%f) x + (%f) \n",a,b,c); if (a == 0) printf(“H e3iswsh einai prwtou ba8mou\n”); else printSolution2ba8mou(a, b, c); } /*Υπολογίζει τη διακρίνουσα */ float diakrinousa(float a,float b, float c) { float D = b*b – 4*a*c; return D; } /*Εκτυπώνει τις λύσεις */ int printSolution2ba8mou(float a, float b, float c) { float D = diakrinousa( a, b, c); float x1,x2; if (D < 0) { printf(“Den uparxoun pragmatikes luseis.\n”); return 0; } else if (D == 0) { x1 = -b/(2*a); printf(“Yparxei monadikh lush %f\n”,x1); return 1; } else { x1 = (-b+sqrt(D))/(2*a); x2 = (-b-sqrt(D))/(2*a); printf(“Yparxoun 2 luseis :%f, %f\n”,x1,x2); return 2; } }

  20. Είσοδος / Έξοδος χαρακτήρων

  21. putchar() / putchar() #include <stdio.h> main() { int c; c = getchar(); putchar(c); }

  22. getchar() /* char_count.c A program to count characters of input. */ main() { int c ; int count = 0; while ( ( c = getchar() ) != EOF ) count ++ ; printf( "%d characters\n" , count ) ; }

  23. getchar() /* letter_count.c A program to count letters in input. */ main() { int c ; int count = 0; while ( ( c = getchar() ) != EOF ) if ( ( c >= 'A' ) && ( c <= 'Z' ) || ( c >= 'a' ) && ( c <= 'z' ) ) count ++ ; printf( "%d letters\n" , count ) ; }

More Related