Chap 3b - Moodle

publicité
Progr. I MT & EL Progr. I MT & EL Le type Booléen
Expressions logiques Delannoy chap3 (partiel) Le type booléen ne peut prendre que l’une des 2 valeurs logiques
opposées suivantes: VRAI ou FAUX
Objectifs:
• maîtriser le type booléen en C
• exploiter les opérateurs logiques
• les combiner avec les autres opérateurs
Le type booléen est essentiel pour construire les instructions de
contrôle car elles reposent toutes sur l’évaluation d’une condition
de ce type.
Plan:
Exemple:
‐ le type booléen (VRAI / FAUX)
‐ construire des expressions booléennes
‐ les combiner avec ET et OU
Si la condition est VRAI
Sinon ( la condition est FAUSSE)
S4 3b 1/12
Progr. I MT & EL alors faire l’action1
alors faire l’action2
Chap03.2
S4 3b 2/12
Progr. I MT & EL Le type Booléen (1)
Le type Booléen (2)
C standard 89:
C standard 99:
Pas de type de base booléen, la valeur d’une condition prend l’une
des 2 valeurs entières :
- On dispose d’un nouveau type de base _Bool
0 si elle est FAUSSE
1 si elle est VRAI
- Ou alors si on ajoute la directive #include <stdbool.h>
Réciproquement:
la valeur d'une expression utilisée pour exprimer une
condition est convertie en un booléen:
• motif binaire nul
: FAUX
• motif binaire non-nul : VRAI
- On peut continuer à travailler comme précédemment
on peut utiliser les mots clef: bool, true, false
(ex: 0)
(ex: n'importe quel
entier différent de 0)
la représentation binaire sera explorée en détails, en semaine 6
S4 3b 3/12
S4 3b 4/12
Progr. I MT & EL Progr. I MT & EL niveaux de priorités des opérateurs
Les opérateurs relationnels
comparaison
<
égalité
différence !=
==
<=
>
>=
Pour construire des expressions booléennes dont la
valeur est VRAI ou FAUX
45 opérateurs 15 niveaux de priorités
Delannoy p 48
int a=77; int b=88;
Associativité: pour les opérateurs de même priorité
a<b
valeur : VRAI
conversion automatique en :
Gauche‐>Droite / Left‐to‐Right
Droite‐>Gauche / Right‐to‐Left
int
a == b
ou
FAUX
0
1
Que se passe t‐il si on utilise l'affectation au lieu de l'opérateur d'égalité ?
if( a = 21) ...
S4 3b 6/12
source: Tep Dobry http://ee.hawaii.edu/~tep/
Progr. I MT & EL Progr. I MT & EL Les opérateurs logiques
int a=77; int b=88;
• L’opérateur de négation logique, noté !, donne le
booléen opposé de son opérande.
printf("%d", (a < b)!=(a == b) );
• Sa table de vérité montre tous les cas possibles:
x = 3*(a != b);
char c1=‘C’; char c2 =‘H’;
if(c1 < c2)
…
!FAUX donne VRAI
!0 donne 1
!VRAI donne FAUX
!1 donne 0
• Donner la valeur des expressions suivantes:
• !(-1)
• !(6%2)
(cet usage sera justifié en semaine 6)
S4 3b 7/12
S4 3b 8 /12
Progr. I MT & EL Progr. I MT & EL Le ET logique
bool a, b;
Le OU logique
b
bool a, b;
a&&b
0
1
0
0
0
0 && b = 0
1
0
1
1 && b = b
a
ET
b
a¦¦b
0
1
0
0
1
0¦¦b =
b
1
1
1
1¦¦b =
1
a
LOGIQUE
OU
LOGIQUE
Evaluation paresseuse du ET logique:
Evaluation paresseuse du OU logique:
L’opérande droit n'est PAS évalué
si celui de gauche vaut 0
L’opérande droit n'est PAS évalué
si celui de gauche vaut 1
Ex: donner l'expression qui est vraie quand l'entier k
est compris entre 10 et 20 (bornes exclues):
Ex: donner l'expression qui est vraie quand l'entier k est
strictement à l'extérieur de l'intervalle [10, 20] :
S4 3b 9/12
Progr. I MT & EL S4 3b 10/12
Progr. I MT & EL autre exemple Résumé
#define MAX 10
...
int tab[MAX];
...
if( i< MAX && tab[i] != 0)
tab[i]++ ;
• Le type booléen n’existe pas en C standard 89, on
travaille le type entier à la place
• les valeurs booleennes FAUX / VRAI sont traitées comme
les entiers 0 / 1 .
• Réciproquement les opérateurs logiques convertissent
les valeurs de leur opérandes en FAUX (si égal à 0) ou en
VRAI (si ≠ 0)
Loi de De Morgan • Le C standard 99 offre le type bool (include <stdbool.h> )
Soit P1 et P2 deux opérandes de valeur VRAI ou FAUX:
• Le C exploite les propriétés des opérateurs logiques pour
faire moins de calcul (évaluation paresseuse)
!(P1 && P2) == !P1 || !P2
!(P1 || P2) == !P1 && !P2
• Il faut maitriser les lois de De Morgan pour construire des
conditions complexes avec les opérateurs logiques
Ex: donner LA NEGATION de l'expression qui est vraie quand l'entier k
est compris entre 10 et 20 (bornes exclues):
S4 3b 11/12
S4 3b 12/12
Téléchargement