αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση...

43
Λογικές παραστάσεις Η τιμή μιας λογικής παράστασης είναι αληθής (true), μη μηδενική ή ψευδής (false), μηδενική Οι συγκρίσεις παραστάσεων γίνονται με χρήση των τελεστών συσχέτισης

Transcript of αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση...

Page 1: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικές παραστάσεις

• Η τιμή μιας λογικής παράστασης είναι

αληθής (true), μη μηδενική

ή ψευδής (false), μηδενική

• Οι συγκρίσεις παραστάσεων γίνονται με χρήση των τελεστών συσχέτισης

Page 2: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Τελεστές Συσχέτισης

Αλγεβρικός Τελεστής Τελεστής στη C

< <

> >

≤ <=

≥ >== ==

≠ !=

Page 3: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Ιεραρχία και προσεταιριστικότητα τελεστών συσχέτισης

• <, <=, >, >= (αριστερά προς τα δεξιά)

• ==, != (αριστερά προς τα δεξιά)

Πχ int a=3, b=2;

η λογική παράσταση a>b είναι αληθής (μη μηδενική)

Η λογική παράσταση a==b είναι ψευδής (0)

Page 4: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Προσοχή!!

Άλλο το b=2 (εντολή εκχώρησης) και άλλο το b==2 (λογική παράσταση με επιστρεφόμενη τιμή ακέραιο – 0 αν είναι ψευδής, μη μηδενικό αν είναι αληθής)

Page 5: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικοί τελεστές (1/5)

• && (ο λογικός τελεστής And)

<Λογική παρ.1> && <Λογική παρ.2>, το αποτέλεσμα είναι 1 αν και οι δύο παραστάσεις είναι αληθείς, διαφορετικά είναι 0

Παράσταση1 Παράσταση2 Αποτέλεσμα &&

0 0 0

1 0 0

0 1 0

1 1 1

Page 6: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικοί τελεστές (2/5)

Πχ int a=3, b=2, c=6• (a>b) && ( c<=b), ψευδής• (c>a) && (c>=b), αληθής

Αν κατά την εκτέλεση μιας πράξης AND το πρώτο μέλος είναι ψευδές, το δεύτερο μέλος δεν αξιολογείται:

Πχ: αν int x = 1;Στην παράσταση ( (x == 2) && (y == 3) ) το αν το y είναι

3 δεν αξιολογείται, (η παράσταση επιστρέφει 0 -ψευδής)

Page 7: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικοί τελεστές (3/5)

• || (ο λογικός τελεστής Or)<Λογική παρ.1> || <Λογική παρ.2>, το αποτέλεσμα είναι αληθές

αν τουλάχιστον μία εκ των δύο παραστάσεων είναι αληθής. Μόνο αν και οι 2 παραστάσεις είναι ψευδείς το αποτέλεσμα είναι ψευδές (0).

Παράσταση1 Παράσταση2 Αποτέλεσμα ||0 0 0 1 0 10 1 11 1 1

Page 8: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικοί τελεστές (4/5)

Πχ int a=3, b=2, c=6• (A>b) || (c<=b), αληθής• (c<a) || (c<=b), ψευδής

Αν κατά την εκτέλεση μιας πράξης OR το πρώτο μέλος είναι αληθές, το δεύτερο μέλος δεν αξιολογείται:

Πχ: αν int x = 1;Στην παράσταση ( (x == 1) || (y == 3) ) το αν το y είναι 3

δεν αξιολογείται, (η παράσταση επιστρέφει μη μηδενική τιμή - αληθής)

Page 9: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογικοί τελεστές (5/5)

! (ο λογικός τελεστής Not)!<Λογική παρ.1>Αν η λογική παρ.1 είναι αληθής, το αποτέλεσμα είναι

ψευδές, διαφορετικά είναι αληθές

Λογική Παράσταση Πράξη Not0 11 0

Πχ int a=3, b=2, c=6• !(A>b), ψευδές (0)• !(c<a), αληθές (μη μηδενικό)

Page 10: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Παραδείγματα

• Εκφράστε τις παρακάτω σχέσεις σε C

1) 0.0 < x <3.5

2) x ≤ y ≤ z

3) a > b > c

( 0.0 < x ) && ( x < 3.5 )

( x <= y ) && ( y <=z )

( a > b ) && ( b > c)

Page 11: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Απλοποίηση μορφής

1) !(a==b)

2) !(a!=b)

3) !(a<b)

4) !(a<=b)

5) !(a>b)

6) !(a>=b)

a!=b

a==b

a>=b

a>b

a<=b

a<b

Page 12: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Θεώρημα De Morgan

1) !(Λογ.Παράσταση1 && Λογ. Παράσταση2)

2) !(Λογ.Παράσταση1 || Λογ.Παράσταση2)

( !Λογ.Παράσταση1) || (!Λογ.Παράσταση2)

( !Λογ.Παράσταση1) && (!Λογ.Παράσταση2)

Page 13: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Ιεραρχία Τελεστών

• Για να μπορέσει να υπολογιστεί η τιμή μιας παράστασης με αριθμητικούς και λογικούς τελεστές, πρώτα πρέπει να εκτελεστούν οι αριθμητικές και μετά οι λογικές πράξεις

Page 14: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Ιεραρχία Τελεστών

• () (από αριστερά προς τα δεξιά)• !, ++, -- (δεξιά προς τα αριστερά)• *, /, % (αριστερά προς τα δεξιά)• +, - (αριστερά προς τα δεξιά)• <, >, <=, >= (αριστερά προς τα δεξιά)• ==, != (αριστερά προς τα δεξιά)• && (αριστερά προς τα δεξιά)• || (αριστερά προς τα δεξιά)• =, +=, -=, *=, /=, %= (δεξιά προς τα αριστερά)

Page 15: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογική Καταχώρηση

• Η εντολή καταχώρησης μπορεί να χρησιμοποιηθεί και για την καταχώρηση της τιμής μιας λογικής παράστασης σε μια μεταβλητή (τύπου int)

double thermokrasia;int zesti, krio, kanoniki;scanf(“%lf”, &thermokrasia);zesti = thermokrasia>38; /* zesti e {0,1} */krio = thermokrasia<5; /* krio e {0,1} */kanoniki = (!zesti) && (!krio); /* kanoniki e {0,1} */

Page 16: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Λογική Καταχώρηση

• Οι μεταβλητές zesti, kryo έχουν την τιμή της παράστασης

zesti = thermokrasia>38; /* zesti e {0,1} */

krio = thermokrasia<5; /* krio e {0,1} */

• Οι μεταβλητές zesti, kryo έχουν την τιμή της μεταβλητής thermokrasia

(zesti = thermokrasia) >38;

(krio = thermokrasia) <5;

Page 17: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής – Η εντολή If

• Η σύνταξη της if:

if (Παράσταση)

εντολή;

• Για ένα σώμα εντολών

if (Παράσταση)

{Εντολή1;

Εντολή2;

}

Page 18: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής – Η εντολή If

Παράσταση

Σώμα εντολών

Επόμενηεντολή

Μη μηδενική (αληθής)

0(ψευδής)

Page 19: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής – Η εντολή If

H ενέργεια

αν x>0 τότε y = y - x

σε C γράφεται:

if ( x>0 )

y = y - x;

Page 20: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Παράδειγμα

• Ένα πρόγραμμα που να διαβάζει 2 αριθμούς και να τοποθετεί το μεγαλύτερο στη μεταβλητή χ και το μικρότερο στην y

Page 21: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Βήματα

• Διάβασε δύο αριθμούς και αποθήκευσέ τους στις μεταβλητές x και y. Εκτύπωσε τις τιμές x και y.

• Αν x<y, αντάλλαξε τις τιμές των x και y

• Εκτύπωσε τις τιμές των x,y

Page 22: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Βήματα – Ανταλλαγή των x και y

x

1 3

2

prosorini

y

Για να γίνει η ανταλλαγή των τιμών των x,y θα πρέπει να χρησιμοποιηθεί μια ενδιάμεση μεταβλητή (prosorini)Καταχώρηση της x στην prosoriniΚαταχώρηση της y στην xΚαταχώρηση της prosorini στην y

Page 23: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

#include <stdio.h>#include <stdlib.h>main(){//Δηλώσεις Μεταβλητών

double x,y,prosorini;//Εκτύπωση

printf(“Δώστε τις τιμές των x,y\n”);//Αποθήκευση στις μεταβλητές

scanf(“%lf %lf”,&x,&y);

Page 24: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

//Εκτύπωσηprintf(“ x=%lf\n y=%lf\n”,x,y);

//Έλεγχος και ανταλλαγή τιμών αν χρειάζεται if (x<y){

prosorini = x;x = y;y = prosorini;

}

Page 25: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

//Εκτύπωση αποτελέσματος

printf(“ megisti:%f, elaxisti:%f”,x,y);

system(“pause”);

return 0;

}

Page 26: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής (If – else)

• Η σύνταξη της if - else:

if (Παράσταση)

εντολή1;

else

εντολή2;

Page 27: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής (If – else)

• Για ένα σώμα εντολώνif (Παράσταση) {

Εντολή1;Εντολή2;

}else{

Εντολή1;Εντολή2;

}

Page 28: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής (If – else)

Παράσταση

Εντολή_1 Εντολή_2

Επόμενη εντολή

0(ψευδής)Μη μηδενική(αληθής)

Page 29: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής (If – else)

H ενέργεια

αν x<y τότε min = x αλλιώς min=y

σε C γράφεται:

if ( x<y )

min = x;

else

min = y;

Page 30: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής (If – else)

• Aν χ≥ 0, τότε sum1 = sum1+x και sum2 = sum2 + 1, διαφορετικά sum1 = sum1 – x και sum2 = sum2 -1

• Σε C γράφεται:If (x>=0){

sum1 = sum1 + x;sum2 = sum2 + 1;

}else{

sum1 = sum1 - x;sum2 = sum2 - 1;

}

sum1 +=x;sum2++;

sum1 -= x;sum2--;

Page 31: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Η if – else είναι 1 εντολή

Μπορεί να γραφτεί:

1) if (Παράσταση1)if (Παράσταση2)

Εντολή1;

else

Εντολή2

Page 32: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Η if – else είναι 1 εντολή

2) if (Παράσταση1)if (Παράσταση2)

Εντολή1;else

if (Παράσταση3)Εντολή2;

elseΕντολή3;

elseΕντολή4;

Page 33: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Παράδειγμα

Να γραφτεί ένα πρόγραμμα που να διαβάζει ένα χαρακτήρα και να εξετάζει αν είναι κενός χαρακτήρας, ψηφίο, γράμμα ή νέα γραμμή.

Page 34: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

#include <stdio.h>

#include <stdlib.h>

main(){

char c;

printf(“Input char\n”);

scanf(“%c”,&c);

Page 35: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

If (c == ‘ ‘)printf(“Space character\n”);

elseif (c>=‘0’ && c<=‘9’)

printf(“Digit\n”);else

if ( c>=‘a’ && c<=‘z’ || c>=‘A’ && c<=‘Z’)printf(“Letter\n”);

elseif (c == ‘\n’)

printf(“New line\n”);

Page 36: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

system(“pause”);

return 0;

}

Page 37: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής –Η εντολή Switch

switch ( Παράσταση ){

case σταθερά1:εντολή1;break;

…….

case σταθεράν:εντολή1;break;

default:τελευταία εντολή;

}

Int ή char

Σύγκριση με την Παράσταση

Page 38: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Εντολές Επιλογής –Η εντολή Switch (σώμα εντολών)

switch ( Παράσταση ){

case σταθερά1:{

εντολή1;εντολή2;break;

}…….

case σταθεράν:εντολή1;break;

default:τελευταία εντολή;

}

Page 39: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Παράδειγμα

Έστω ότι οι μέρες της εβδομάδας Δευτέρα έως Κυριακή αντιστοιχούν στους αριθμούς 1-7. Γράψτε ένα πρόγραμμα που να τυπώνει το όνομα της αντίστοιχης μέρας αν υπάρχει.

Page 40: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

#include <stdio.h>

#include <stdlib.h>

main(){

int arithmos;

printf(“Dwse akeraio apo 1 ews 7:\n”);

scanf(“%d”,&arithmos);

Page 41: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

switch(arithmos){case 1:

printf(“Monday\n”);break;

case 2:printf(“Tuesday\n”);break;

case 3:printf(“Wednesday\n”);

Page 42: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

case 4:printf(“Thursday\n”);break;

case 5:printf(“Friday\n”);break;

case 6:printf(“Saturday\n”);break;

Page 43: αληθής (true), μημηδενική ή ψευδής (false), μηδενική χρήση ...cgi.di.uoa.gr/~himiko/Lectures/Lab6.pdf · Έστω ότι οι μέρες της

Πρόγραμμα

case 7:

printf(“Sunday\n”);

break;

default:

printf(“Number is not in the range [1,7]\n”);

}