ΗΥ- 150 Προγραμματισμός
DESCRIPTION
ΗΥ- 150 Προγραμματισμός. Εντολές Ελέγχου Ροής. Σειριακή εκτέλεση εντολών. Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές ( sequential – built in C) Εντολές απόφασης ( if, if/else, switch) Εντολές επανάληψης ( for, while, do/while). - PowerPoint PPT PresentationTRANSCRIPT
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης
ΗΥ-150Προγραμματισμός
Εντολές Ελέγχου Ροής
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης2
Σειριακή εκτέλεση εντολών
Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:– Σειριακές εντολές (sequential – built in C)– Εντολές απόφασης (if, if/else, switch)– Εντολές επανάληψης ( for, while, do/while)
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης3
if βασική εντολή διακλάδωσης κάθε γλώσσας
προγραμματισμού Ελέγχει τη ροή του κώδικα ανάλογα με τη (λογική) τιμή
μιας συνθήκης, δηλαδή μιας ποσότητας ή έκφρασης λογικού τύπου. Στη C++ συντάσσεται ως εξής:
if (condition) { ... // block A } else { ... // block B
} Εάν η συνθήκη (condition) είναι αληθής ή μπορεί να
μετατραπεί σε αληθή, εκτελείται το block των εντολών που περικλείεται μεταξύ των πρώτων {} (block A). Αν η συνθήκη είναι ψευδής, τότε εκτελείται το block των εντολών μετά το else (block B).
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης4
if
Το κάθε block μπορεί να αποτελείται από καμμία, μία, ή περισσότερες εντολές. Στην περίπτωση που περιλαμβάνει μία μόνο εντολή μπορούν να παραληφθούν τα άγκιστρα ({}) που την περικλείουν.
if (val > max) max = val;
else { max = 1000.0; ++i;
}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης5
if
Στην περίπτωση που το else block είναι κενό μπορεί να παραληφθεί ολόκληρο:
if (condition) { ...
}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης6
if 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 ). Η χρήση των αγκίστρων επιβάλει την πρόθεση του προγραμματιστή:
if (i == 0) {
if (val > max) max = val;
} else
max = 10;
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης7
Εντολές υπό Συνθήκη - ifεντολή <- έκφραση;εντολή <- { σειρά εντολών }
if (έκφραση) εντολή1
if (έκφραση)εντολή1
else εντολή2
if (έκφραση1) εντολή1
else if (έκφραση2) εντολή2
elseεντολή3
//Αν η έκφραση έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1 αλλιώς η εντολή2
//Αν η έκφραση έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1
//Αν η έκφραση1 έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1 //αλλιώς αν η έκφραση2 έχει τιμή διάφορη του 0 //εκτελείται η εντολή 2//αλλιώς εκτελείται η εντολή 3
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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;
}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης9
Παραστάσεις υπό Συνθήκη - ?
Ο τελεστής ( ?: ) είναι ένας ιδιαίτερα διαδεδομένος ιδιωματισμός της C++. Η εντολή
if (condition) val = value1;
else val = value2;
ισοδυναμεί με val = (condition ? value1 : value2); Γενικότερα, η έκφραση
(condition ? έκφρασηΑ : έκφρασηΒ) έχει την τιμή “έκφρασηΑ” όταν η συνθήκη
condition είναι αληθής, ενώ έχει την τιμή “έκφρασηΒ” όταν η συνθήκη είναι ψευδής.
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης10
Παραστάσεις υπό Συνθήκη - ?
Οι παρενθέσεις που περιβάλουν τον τελεστή ( ?: ) με τα ορίσματά του στο συγκεκριμένο παράδειγμα δεν είναι απαραίτητες, βοηθούν όμως στην κατανόηση του κώδικα.
Καθώς για το συγκεκριμένο τελεστή δεν μπορεί να καθοριστεί μονοσήμαντα η προτεραιότητά του σε σχέση με τον ( = ) πρέπει να τις χρησιμοποιούμε για να εκτελείται η επιδιωκόμενη πράξη.
Εναλλακτικά, μπορούμε να εφαρμόζουμε τον εξής κανόνα: Οι τελεστές ( ?: ) και ( = ) έχουν ίδια προτεραιότητα, δεχόμενοι ότι οι πράξεις εκτελούνται από τα δεξιά προς τα αριστερά. Επομένως, η έκφραση
a = b ? c : d ισοδυναμεί με a = (b ? c : d), ενώ η έκφραση a ? b : c = d εκτελείται ως a ? b : (c =
d)
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης11
Παραστάσεις υπό Συνθήκη - ?
if ( x > y)
{
x = a;
}
else
{
x = b;
}
x = (x>y) ? a : b;
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης12
printf(“%d\n”,(x>y?a:b));
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης13
Εντολές υπό Συνθήκη - switch
switch (έκφραση){
case σταθερή_παράσταση_1 : statements; break;
case σταθερή_παράσταση_2 : statements;break;
default : statements;}
Το default είναι προαιρετικό και εκτελείται αν καμία παράσταση δεν βρεθεί ίση με την έκφραση
Αν ένα break λείπει τότε συνεχίζεται η εκτέλεση των εντολών
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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 μπορούν να είναι οποιεσδήποτε.
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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;
}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης16
Τυπικά Λάθη
if(x=5) αντί για if(x==5)
Ξεχάσατε το break σε εντολή switch
Ξεχάσατε {, }
Λάθος στις προτεραιότητες: ( )
Λύση: Μορφοποίηση και χρήση σχολίων
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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;}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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”
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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;}
}
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης
Είσοδος / Έξοδος χαρακτήρων
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης21
putchar() / putchar()
#include <stdio.h> main() {
int c;
c = getchar();
putchar(c); }
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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 ) ; }
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης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 ) ;
}