Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
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 = ; ++i; }
5
if Στην περίπτωση που το else block είναι κενό μπορεί να παραληφθεί ολόκληρο: if (condition) { ... }
6
if if (i == 0) if (val > max) max = val; else max = 10; { }
Kάθε block μπορεί να περιλαμβάνει οποιεσδήποτε άλλες εντολές και βέβαια άλλο if. H if (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 ). Η χρήση των αγκίστρων επιβάλει την πρόθεση του προγραμματιστή: { }
7
Εντολές υπό Συνθήκη - if
εντολή <- έκφραση; εντολή <- { σειρά εντολών } if (έκφραση) εντολή1 else εντολή2 if (έκφραση1) else if (έκφραση2) εντολή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
{ case σταθερή_παράσταση_1 : statements; break; case σταθερή_παράσταση_2 : default : statements; } Το default είναι προαιρετικό και εκτελείται αν καμία παράσταση δεν βρεθεί ίση με την έκφραση Αν ένα break λείπει τότε συνεχίζεται η εκτέλεση των εντολών
14
Εντολές υπό Συνθήκη - switch
Η τιμή ελέγχου i πρέπει να είναι ακέραιου τύπου (char , int , short int, long int) με τις 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; case ‘*’ : res = x*y; case ‘/’ : res = x/y; 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 Ορίζεται στην αρχή κάθε προγράμματος και μπορεί να χρησιμοποιηθεί σε όλο το πρόγραμμα. To Pi θα αντικατασταθεί από τον στο πρώτο βήμα του 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 ) ; }
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.