120 likes | 275 Views
ΗΥ - 150 Προγραμματισμός. Εντολές Ελέγχου Ροής. Σειριακή εκτέλεση εντολών. Όλα τα π ρογράμματα « γράφονται » χρησιμο π οιώντας 3 είδη εντολών : Σειριακές εντολές ( sequential – built in C) Εντολές α π όφασης ( if, if/else, switch) Εντολές ε π ανάληψης ( for, while, do/while).
E N D
ΗΥ-150Προγραμματισμός ΕντολέςΕλέγχουΡοής
Σειριακήεκτέλεσηεντολών • Όλατα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδηεντολών: • Σειριακέςεντολές (sequential – built in C) • Εντολέςαπόφασης (if, if/else, switch) • Εντολέςεπανάληψης ( for, while, do/while)
ΕντολέςυπόΣυνθήκη - 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
Παράδειγμαμεswitch 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,c,y,res); return 0; }
ΕντολέςυπόΣυνθήκη - switch switch (έκφραση) { case σταθερή_παράσταση_1 : statements; break; case σταθερή_παράσταση_2 : statements; break; default : statements; } • Τοdefault είναιπροαιρετικόκαιεκτελείτεανκαμίαπαράστασηδενβρεθείίσημετηνέκφραση • Ανέναbreak λείπειτότεσυνεχίζεταιηεκτέλεσητωνεντολών
Παράδειγμαμε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; }
ΠαραστάσειςυπόΣυνθήκη - ? if (x > y) { x = a; } else { x = b; } x = (x>y) ? a : b;
ΤυπικάΛάθη • if(x=5)αντίγιαif(x==5) • Ξεχάσατετοbreakσεεντολήswitch • Ξεχάσατε {, } • Λάθοςστις προτεραιότητες: ( ) • Λύση: Μορφοποίησηκαιχρήσησχολίων
Μορφοποίηση • Σχόλιαπριναπόσυναρτήσειςκαιτουςορισμούςμεταβλητών • Κατάλληληχρήση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; }
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”
ΓενικήΔομήΠρογράμματος • Λίστααπόσυναρτήσεις - main() Τύπος-επιστρεφόμενης-τιμήςόνομα(λίστα-παραμέτρων) { δηλώσειςμεταβλητών λίσταεντολών } /*Επιστρέφειτομέγιστομεταξύτωνx, y*/ int max(int x,int y) { int z = x; /*δηλώσειςμεταβλητών - αρχικοποίηση*/ if (y > x) /*λίσταεντολών*/ { z = y; } return z; }
Παράδειγμα /* Author: C. Panagiotakis Function: Solves a second order polynomial equation. */ #include <stdio.h> #include <math.h> /*function prototypes*/ 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; } }