Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 8. Συνθήκες ελέγχου, λογικοί τελεστές Ιωάννης Κατάκης
Σήμερα o Λογικές παραστάσεις Σχεσιακοί τελεστές Λογικοί τελεστές o if -else o switch
Λογικές παραστάσεις o Μια λογική παράστασηείναι ανάλογη μαθηματικής παράστασης, με την διαφορά ότι το αποτέλεσμα μπορεί να είναι μόνοαληθές (1) ή ψευδές (0) o Λογικές παραστάσεις συντίθενται χρησιμοποιώντας σχεσιακούς τελεστές o Δυο λογικές παραστάσεις μπορούν να συνδυαστούν με ένα λογικό τελεστή
Σχεσιακοί τελεστές (relational operators) o Δυαδικοί Τελεστές < μικρότερο από > μεγαλύτερο από <= μικρότερο ή ίσο με >= μεγαλύτερο ή ίσο με == ίσο με!= διάφορο του o Έχουν ως αποτέλεσμα 0 (ψευδής) ή 1 (αληθής) o Τύποι τελεσταίων int, char, float, double
Παραδείγματα λογικών παραστάσεων o 6>3 //true o 4<=3 //false o a>=0 /*Η τιμή της παράστασης είναι trueαν το a είναι θετικό, αλλιώς είναι false */ o 5+3 == 7+1// true H εντολή a = 5 >3; Έχει ως αποτέλεσμα το aνα πάρει την τιμή 1καθώς το αποτέλεσμα της παράστασης 5>3 είναι αληθές
Λογικοί τελεστές o Συνδυάζουν δύο λογικές παραστάσεις o Έχουν αποτέλεσμα 0 ή 1 0 (δεν ισχύει, ψευδής ή false) 1 (ισχύει, αληθής ή true) Τελεστής Επεξήγηση && λογικό ΚΑΙ λογικό Η! λογική άρνηση (ΝΟΤ)
Παραδείγματα t = ((A>=0) && (A<=100)); Αν Α μεγαλύτερο ή ίσο του 0 ΚΑΙ Α μικρότερο ή ίσο του 0 Αν Α στο εύρος [0..100] τότε t=1 αλλιώς t=0 y = (s<10 s>100); Αν sστο εύρος [..9]ή [101..] τότε y=1 αλλιώς y=0 y = (i<10 && j==1) Αν iστο εύρος [..9]και j ίσο με 1 τότε y=1 αλλιώς y=0
Προτεραιότητες ()! * / % + < <= >= > ==!= && = υψηλότερη χαμηλότερη
Παραδείγματα o x και y μεγαλύτερα του z (x>z&& y>z) o x είναι ίσο με το 2 ή με το 10 (x==2 x==10) o a είναι στο πεδίο από b μέχρι και c (a>=b&& a<=c)
Εντολή if-else o Εντολές συνθήκης o Χρησιμοποιείται για τον έλεγχο μίας συνθήκης και ανάλογη εκτέλεση εντολών o Με τις εντολές ελέγχου σχηματίζονται «μονοπάτια» στο πρόγραμμά μας
Παράδειγμα if(age>80) printf( you are old! ); printf( Have a good day! ) if(age>80) printf( you are old! ); else printf( you are still young! ); printf( Have a good day! )
Ένθετα (φωλιασμένα) if if(age>80) if(age>90) printf( you are TOO old! ); else printf( you are old! ); else printf( you are still young! ); printf( Have a good day! ) Αν μετά την ifή την elseακολουθεί μόνο μία εντολή, τότε οι παρενθέσεις οι αγκύλες μπορούν να λείπουν
Άσκηση Να αναπτύξετε πρόγραμμα στο οποίο ο χρήστης εισάγει δύο ακεραίους και το πρόγραμμα τυπώνει το μικρότερο αριθμό [Ψευδοκώδικας] διάβασε τους a,b αν(a<b) τότε τύπωσε ότι μικρότερο είναι το a αλλιώς Τύπωσε ότι μικρότερο είναι το b
Λύση #include <stdio.h> intmain() inta, b; printf( Dwse ta a kai to b\n"); scanf("%d, %d", &a, &b); if (a < b) printf( Mikrotero einai to: %d\n", a); else printf( Mikrotero einai to: %d\n", b); return 0;
Παραλλαγές υλοποίησης int minimum; if (a < b) else minimum = a; minimum = b; printf( Mikroteroeinaito %d\n, minimum); int minimum; minimum = a; if (b < minimum) minimum = a; printf( Mikroteroeinaito %d\n, minimum);
Άσκηση 2 o Να αναπτύξετε πρόγραμμα το οποίο ζητά από το χρήστη έναν ακέραιο αριθμό και τυπώνει ανάλογα: Ο αριθμός που δώσατε είναι μικρότερος του 0 Ο αριθμός που δώσατε είναι ίσος με το 0 Ο αριθμός που δώσατε είναι μεγαλύτερος του 0
Λύση intmain() inta; printf( dwsetοa: \n); scanf( %d, &a); intmain() inta; printf( dwsetοa: \n); scanf( %d, &a); if (a > 0) printf( megalytero tou 0\n ); else if (a<0) printf( mikrotero tou 0\n ); else printf( isome 0\n ); return 0; if (a > 0) printf( megalytero tou 0\n ); else if (a<0) printf( mikrotero tou 0\n ); printf( isome 0\n ); return 0; ΛΑΘΟΣ! ΓΙΑΤΙ;
Εντολή switch o Η εντολή switch χρησιμοποιείται όταν θέλουμε να διακρίνουμε πολλές διαφορετικές τιμές μίας παράστασης και να πράξουμε ανάλογα o Ελέγχει την τιμή της παράστασης και ψάχνει πρόταση caseμε αυτή την τιμή Αν βρεθεί, τότε εκτελούνται όλες οι εντολές μετά την case Aν δε βρεθεί case με ίδια τιμή, τότε εκτελούνται οι εντολές μετά την default (αν υπάρχει) switch(παράσταση) case σταθερά1: εντολές; break; case σταθερά2: εντολές; break; : default: εντολές;
Άσκηση Να αναπτύξετε έναν υπολογιστή αριθμητικών πράξεων δύο αριθμών. Ο χρήστης θα πληκτρολογεί την πράξη στη μορφή <number1><operator><number2> και πατώντας enterτο πρόγραμμα θα εμφανίζει το αποτέλεσμα της πράξης. Η πράξη μπορεί να είναι πρόσθεση, αφαίρεση, πολλαπλασιασμός ή διαίρεση. Να γίνει χρήση της εντολής switch. Ψευδοκώδικας; Διάβασε τη πράξη, δηλαδή τους αριθμούς number1και number2και τον τελεστή; Αν ο τελεστής είναι + κάνε πρόσθεση Εκτύπωσε το αποτέλεσμα της πράξης
Παράδειγμα #include <stdio.h> int main(void) float num1, num2; char op; printf("dwse <arithmo1> praksi <arithmo2>: "); scanf("%f %c%f",&num1,&op,&num2); switch (op) case '+': printf( " = %f", num1 + num2 ); break; //Η εντολή break αποτρέπει τη C στο να case '-': printf( " = %f", num1 -num2); //εκτελέσει τις υπόλοιπες εντολές, το return 0; break; case '*': printf( " = %f", num1 * num2 ); //μετά το τέλος της switch break; case '/': printf (" = %f", num1 / num2 ); break; default: printf ("Lathos eisodos\n\n" ); //πρόγραμμα συνεχίζει να εκτελείται
Τέλος διάλεξης