ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE Παράδειγμα 1 Το παρακάτω πρόγραμμα ελέγχει την ηλικία του χρήστη για να τον αφήσει να ψηφίσει. int hlikia; printf("dose thn Hlikia soy: "); scanf("%d", &hlikia); if (hlikia>=18) printf("mporeis na psifiseis\n"); else printf("sygnomh, den mporeis na psifiseis\n"); Το ίδιο πρόγραμμα με υποθετικό τελεστή (? :) int hlikia; printf("dose thn Hlikia soy: "); scanf("%d", &hlikia); printf("%s", hlikia>=18?"psifizeis\n":"den psifizeis\n"); σελ. 1
Παράδειγμα 2 Το παρακάτω πρόγραμμα δέχεται τρείς ακεραίους από έναν χρήστη, βρίσκει τον μεγαλύτερο από αυτούς και τον τυπώνει στην οθόνη. int a,b,c; printf("\ndwse arithmo a:"); scanf("%d",&a); printf("\ndwse arithmo b:"); scanf("%d",&b); printf("\ndwse arithmo c:"); scanf("%d",&c); if(a>b) if(a>c) printf("max(%d,%d,%d)=%d\n",a,b,c,a); else printf("max(%d,%d,%d)=%d\n",a,b,c,c); else if(b>c)printf("max(%d,%d,%d)=%d\n",a,b,c,b); else printf("max(%d,%d,%d)=%d\n",a,b,c,c); ΕΞΟΔΟΣ Αv ισχύει (a>b) τότε Αν ισχύει και (a>c) τότε a μεγαλύτερος Αν όχι δηλ (a<c) τότε c μεγαλύτερος Αν όχι δηλ. (a<b) τότε Αν ισχύει και (b>c) τότε b μεγαλύτερος Αν όχι δηλ (b<c) τότε c μεγαλύτερος σελ. 2
Το ίδιο με τον υποθετικό τελεστή (? :) int a,b,c,max; printf("\ngive int a:"); scanf("%d",&a); printf("\ngive int b:"); scanf("%d",&b); printf("\ngive int c:"); scanf("%d",&c); max=(a>b?a:b)>c?(a>b?a:b):c; printf("max(%d,%d,%d)=%d\n",a,b,c,max); ΕΞΟΔΟΣ max=(a>b?a:b)>c?(a>b?a:b):c; A? B :c η αλλιώς max=α?b:c αν αληθεύει συνθήκη με την πρώτη παρένθεση (a>b?a:b)>c Α τότε και το a και το b είναι μεγαλύτερα από το c οπότε ισχύει η δεύτερη παρένθεση (a>b?a:b) Β στην οποία ελέγχουμε ποιο από τα a και b είναι μεγαλύτερο αν δεν αληθεύει συνθήκη με την πρώτη παρένθεση (a>b?a:b)>c τότε μεγαλύτερο είναι το c. σελ. 3
Παράδειγμα 3 Το πρόγραμμα που ακολουθεί υπολογίζει την έκπτωση σύμφωνα με το δοθέν ποσό. Η έκπτωση ορίζεται στο 5% για ποσά από 100-199, 10% για ποσά από 200-299, στα 15% για ποσά από 300-399, στα 20% για ποσά από 400 και πάνω. Για ποσά μικρότερα από 100 δεν υπάρχει έκπτωση. float synolo,ekptosi; printf("synoliko Poso: "); scanf("%f", &synolo); if (synolo>=100 && synolo<200) ekptosi=0.05; else if (synolo>=200 && synolo<300) ekptosi=0.10; else if (synolo>=300 && synolo<400) ekptosi=0.15; else if (synolo>=400) ekptosi=0.20; else ekptosi=0.0; if (ekptosi>0) synolo=synolo-ekptosi*synolo; printf("h Ekptosi einai %.0f%%\n",ekptosi*100); printf("to Poso meta thn Ekptosi einai %.2f\n",synolo); else printf("sygnomi, den exete Ekptosi!!\n"); ΕΛΕΓΧΟΣ ΡΟΗΣ ΜΕ ΧΡΗΣΗ ΤΗΣ SWITCH Παράδειγμα 4 Το παρακάτω πρόγραμμα παίρνει δύο αριθμούς από τον χρήστη, ενημερώνει για δυνατές επιλογές, ανάλογα με την επιλογή εκτελεί την αντίστοιχη πράξη (διασφαλίζοντας ότι δεν θα γίνει η διαίρεση εάν ο διαιρέτης είναι 0) και στο τέλος εμφανίζει το αποτέλεσμα. σελ. 4
float num1, num2, result=0, k=0; int choice; //gia thn epilogi toy xrhsth printf( "\ndose prwto arithmo: "); scanf("%f",&num1 ); printf( "\ndose deytero arithmo: "); scanf("%f",&num2 ); printf( "\n\t\t\t----epelexe praxh---- \n" ); printf( "\n\t\t\t 1 -> + (prosthesh)\n" ); printf( "\n\t\t\t 2 -> - (afairesh)\n" ); printf( "\n\t\t\t 3 -> * (pollaplasiasmos)\n" ); printf( "\n\t\t\t 4 -> / (diairesh)\n" ); printf( "\n\t\t\t 5 -> / (exodos)\n" ); printf( "\n\tepilogh: " ); scanf( "%d",&choice ); switch(choice) //elegxos ths choice me ta case case 1: result=num1+num2; case 2: result=num1-num2; case 3: result=num1*num2; case 4: if (num2!=0) result=num1/num2; // num2!= 0 else printf( "\t\t ERROR: division by 0\n" ); case 5: printf("\nden EPILEXATE PRAXH *GEIA SAS*\n\n"); k=1; //gia na mhn typothei apotelesma default: printf( "\nlathos EPILOGH\n\n" ); k=1; //gia na mhn typothei apotelesma // TELOS THS switch if (k==0) printf( "\n\tto APOTELESMA EINAI: %10.2f\n\n",result ); // TELOS THS main σελ. 5
1. Το πρόγραμμα παίρνει την επιλογή του χρήστη και την συγκρίνει με την τιμή της choice. Εάν είναι ίση τότε εκτελεί την εντολή μετά το αντίστοιχο case και βγαίνει από την switch, για να τυπώσει το αποτέλεσμα (εάν το k είναι 0). 2. Στην περίπτωση 5 (έξοδος) τυπώνεται μήνυμα μη επιλογής πράξης, η k γίνεται 1, με την break φεύγουμε από την switch και δεν τυπώνεται το αποτέλεσμα!(k==0). 3. Στην περίπτωση που επιλέξουμε κάτι άλλο από τα 1,2,3,4,5 cases τότε αφού η choice δεν είναι ίση με την εισηγμένη τιμή, η switch δεν εκτελείται, εκτελείται αυτό που βρίσκεται μετά την default (μήνυμα και k=1) και δεν τυπώνεται το αποτέλεσμα. σελ. 6