Tests et branchements

Transcription

Tests et branchements
Principe
• 
Différents traitements possibles.
• 
L’exécution d’un bloc d’instructions dépend de la réalisation de certaines conditions.
• 
Les instructions de branchement permettent d’exécuter des instructions différentes selon que
des conditions sont vérifiées ou non.
• 
On distingue 3 instructions de branchement:
–  Branchement Simple.
–  Branchement Double.
–  Branchement Multiple.
14/03/10
TESTS ET BRANCHEMENTS
2
Calcul Booléen
• Permet d’évaluer les assertions et le calcul des prédicats.
• Valeurs possibles{vrai, faux}.
• Opérateurs:
• Et
• Ou
• Non
• Tables de vérités.
14/03/10
a
non a
faux
faux
faux
vrai
vrai
faux
vrai
vrai
a
b
a et b
a
b
a ou b
faux
faux
faux
faux
faux
faux
faux
vrai
faux
faux
vrai
vrai
vrai
faux
faux
vrai
faux
vrai
vrai
vrai
vrai
vrai
vrai
vrai
TESTS ET BRANCHEMENTS
3
Calcul Booléen
Lois de Morgan
a
b
non a non b
non a et non b
non a ou non b
Non (a et b) Non (a ou b)
faux
faux
vrai
vrai
vrai
vrai
vrai
vrai
faux
vrai
vrai
faux
faux
vrai
vrai
faux
vrai
faux
faux
vrai
faux
vrai
vrai
faux
vrai
vrai
faux
faux
faux
faux
faux
faux
• Loi de Morgan:
Non (P et Q) = non (P) ou non (Q)
Non (P ou Q) = non (P) et non (Q)
14/03/10
TESTS ET BRANCHEMENTS
4
Les branchements conditionnels:
Branchement conditionnel Simple
Syntaxe :
Si <condition> alors
<instruction1>
<instruction2>
…
FinSi
Variable Réel x,y,t
x:=readstat("Saisissez un premier nombre");
y:=readstat("Saisissez un deuxième nombre");
Début
lire (‘Saisissez un premier nombre’, x);
lire (‘Saisissez un deuxième nombre’, y);
t:=x
si x > y alors
t:=y
fin si
ecrire(‘le minimum est égal à : ’, t)
Fin
15/03/10
t:=x;
if x> y then
t:=y:
fi:
print("le minimum est égal à : ", t);
TESTS ET BRANCHEMENTS
5
Les branchements conditionnels:
Branchement conditionnel Simple
Exemple Maple:
> x:=0:
if x>0 then « positif »:
if x>1 then " >1" fi:
fi;# printlevel est 1
"positif"
> printlevel:=2;
if x>0 then "positif ":
if x>1 then ">1" fi:
fi;# affichage des deux niveaux
printlevel := 2
"positif »
">1"
15/03/10
TESTS ET BRANCHEMENTS
6
Les branchements conditionnels:
Branchement conditionnel Simple
> printlevel:=0;
if x>0 then "positif":
if x>1 then ">1" fi:
fi;# pas d’affichage
printlevel := 0
> printlevel:=1;
if x>0 then print(“positif "):
if x>1 then ">1" fi:
fi;# utilisation de print()
printlevel := 1
"positif"
">1"
15/03/10
TESTS ET BRANCHEMENTS
7
Les branchements conditionnels:
Branchement simple: si immédiat
Syntaxe :
Sii(<condition>,<valeur 1>,<valeur 2>)
Retourne <valeur 1> si la condition est vraie, retourne <valeur 2> sinon.
si <condition> alors
<valeur 1>
Sinon
<valeur 2>
finsi
`if` (<condition>,<valeur si vrai>,<valeur si faux>)
Exemple Maple:
> x:=-2; 5+`if` (x>0,2*x,-2*x);
X:=-2
9
14/03/10
TESTS ET BRANCHEMENTS
8
Les branchements conditionnels:
Branchement double
Syntaxe:
si <condition> alors
<instruction_a1>
…….
<instruction_an>
sinon <instruction_b1>
…….
<instruction_bm>
finSi
if <condition> then <instructions> else <instructions> fi
Variable Réel x,y
Début
lire (‘Saisissez un nombre’, x);
si x >0 alors
y:=x
sinon
y:=-x
Finsi
ecrire(‘la valeur absolue de ’, x ,’ est égale à : ‘, y)
Fin
14/03/10
TESTS ET BRANCHEMENTS
9
Les branchements conditionnels:
Branchement double
Exmple Maple:
> x;if x>0 then print ("valeur positive")
else print ("valeur négative") fi;
15/03/10
TESTS ET BRANCHEMENTS
10
Suivant les cas
cas <condition1>
<instruction_1>
……….
<instruction_n>
cas <condition2>
<instruction_n+1>
……….
<instruction_m>
…
cas <conditionn>
<instruction>
……….
<instruction>
autres cas
<instruction>
…….
<instruction>
FinCas
14/03/10
If <cas 1> then <instruction1>
elif <cas 1> then <instructions 1>
….
elif <cas n> then <instructions n>
else <instructions>
fi
TESTS ET BRANCHEMENTS
11
Les branchement conditionnels:
Branchement multiple
Variable Numérique x, signe
Début
lire (‘Saisissez un nombre’, x);
Selon cas
Cax x<0
sig:=-1
Cas x=0
sig:=0
Cas x>0
sig:=1
fincas
ecrire(‘le signe de ’, x ,’ est : ‘, sig)
fin
15/03/10
x:=readstat("Saisissez un nombre");
If x<0 then
sig:=-1:
elif x=0 then
sig:=0:
elif x>0 then
sig:=1:
fi
Print("le signe de x :",sig);
TESTS ET BRANCHEMENTS
12
Les branchement conditionnels:
Branchement multiple
Exemple Maple:
> printlevel:=-1:x:=readstat("taper un nombre positif");
if x<10 then print("Un chiffre")
elif x< 100 then print ("nombre à deux chiffres")
elif x<1000 then print ("nombre à 3 chiffres")
else print(">999")
fi:printlevel:=1;
14/03/10
TESTS ET BRANCHEMENTS
13
Les branchement conditionnels:
Combinaisons
Il est possible d’imbriquer plusieurs tests.
Si <condition1> alors
<instruction 1>
Si <condition2> alors
<instruction2>
Sinon
<instruction3>
Finsi
Sinon
<instruction4>
FinSi
14/03/10
TESTS ET BRANCHEMENTS
14
TP:
• 
Printlevel:= <valeur entiere>;
– 
– 
– 
– 
• 
Permet de spécifier les niveaux de log.
Portée : jusqu’au prochain restart ou printlevel.
N’a pas d’effet sur la fonction print(<message>).
: avant le fi annules les affichages avec " " mais pas ceux formulés avec print(" ").
evalb(<expression>)
–  x=x; evalb(x=x);
–  a:=2;b:=2;evalb(a=b);
–  evalb(2+3 I < 3+4 I);
14/03/10
TESTS ET BRANCHEMENTS
15
Exercices:
• 
Début
Variable somme : Entier
etat : String
somme lire(« quel montant ? »)
etat "inconnu"
Si (somme <= 0) alors
etat  "decouvert"
Finsi
Si (somme < 1000) alors
etat "limite"
Finsi
Si (somme >= 1000) alors
etat  "suffisant"
Finsi
Ecrire (" l’état du compte est", etat)
Fin
14/03/10
Ecriture en Maple
> somme := readstat("Quel montant ? ") ;
etat := "inconnu";
if (somme <= 0) then
etat := "decouvert ";
end if;
if (somme < 1000) then
etat := "limite";
end if;
if (somme >= 1000) then
etat := "suffisant";
end if;
print(" l'etat du compte est ", etat);
TESTS ET BRANCHEMENTS
16
Exercices:
> somme := readstat("Quel montant ? ") ;
etat := "inconnu";
if (somme < 1000) then
etat := "limite";
end if;
if (somme <= 0) then
etat := "decouvert ";
end if;
if (somme >= 1000) then
etat := "suffisant";
end if;
print(" l'etat du compte est ", etat);
14/03/10
> somme := readstat("Quel montant ? ") ;
etat := "inconnu";
if (somme < 1000) then
etat := "limite";
else
if (somme <= 0) then
etat := "decouvert ";
else
if (somme >= 1000) then
etat := "suffisant";
end if;
end if;
end if;
print(" l'etat du compte est ", etat);
TESTS ET BRANCHEMENTS
17
Exercices:
exercice 1:
Valeur de vérité des expressions suivantes :
Variables p, q, r, t en booléen
a, b,c en entier
a  2 ; b  4 ; c  -1;
p  (a > b) ; q  ((b * c) > a); r  (non (p) et q); t  (non(p) ou q) ;
Traduire en Maple les fonctions Excel suivantes (vous donnerez le résultat en fonction
des évaluations précédentes).
ET(p ;q ;r ;t) ;
OU(p ;q ;r ;t) ;
IF(OU (ET (p ; q) ; r) ; a ; b)
Note : l’emplacement des cellules a été remplacé par le nom des variables.
14/03/10
TESTS ET BRANCHEMENTS
18
Exercices:
exercice 2:
Simplifier :
> f1 := x 
> if (evalb(x)=true) then
>
print(`test vrai`) ;
> else
>
print(`test faux`) ;
> fi;
> f2:= (x,y) 
> if (x > y) then
>
true ;
> else
>
false ;
> fi;
Utiliser f2 :
Dans un algorithme qui affiche le maximum entre deux valeurs.
Dans un algorithme qui pour trois valeurs numériques affiche leur classement
14/03/10
TESTS ET BRANCHEMENTS
19
Exercices:
exercice 3:
Si (C – B) <= B alors
AA+1
CC+B
BA
Sinon
BA
AA–1
CC*B
Finsi
Valeur de A, B et C si initialement :
A  2 ; B  3; C  A * B
A  1; B  5; C  3
A3;BA*A;CB–5
A  8 ; B  3 ; C  A – 2;
15/03/10
restart;
If (C-B) <= B then
A:=A+1:
C:=C+B;
B:=A;
Else
B:=A:
A:=A-1:
C:=C*B:
End if;
A;B;C;
TESTS ET BRANCHEMENTS
A
B
C
3
3
9
2
2
8
4
4
13
9
9
9
20
Exercices:
exercice 4:
Variable Entier A, B, C
Début
A 5
Ecrire « valeur de B ? "
Lire B
Si ( ( A >= 5) et (B <6) alors
C  A –B
Si (B>0) alors
AB
FinSi
FinSi
Si ((A > 3) et (B < 0)) alors
CA+B
Si (B < 6) alors
AB+C
FinSi
FinSi
Fin
Trouver les Valeurs finales de A, B, C si
B  6 ; 2) B  3 ; 3) B  4.
15/03/10
restart;
A:=5:
B:=readstat("valeur de B?"):
If ((A≥5) and (B<6)) then
C:=A-B:
If B>0 then
A:=B:
Fi:
Fi:
If ((A≥3) and (B<0)) then
C:=A+B:
If B,6 then
A:=B+C:
Fi:
Fi:
A
B
A;B;C;
5
6
TESTS ET BRANCHEMENTS
C
C
3
3
2
4
4
1
21
Exercices:
exercice 5:
• 
Donner les instructions permettant de classer dans un ordre croissant les valeurs des variables a,b,c. Donnez
un exemple d’exécution si a  2, b  5 et c  1.
14/03/10
TESTS ET BRANCHEMENTS
22
Exercices:
exercice 9:
• 
• 
Que fait l’algorithme suivant :
Traduire cet algorithme en Maple
14/03/10
TESTS ET BRANCHEMENTS
23
Exercices:
exercice 9:
restart;
A:=readstat("Donner la valeur de A"):
A:=readstat("Donner la valeur de A"):
A:=readstat("Donner la valeur de A"):
Delta:=B*B-4*A*C:
If Delta>0 then
R1:=(-B-sqrt(Delta))/(2*A):
R2:=(-B+sqrt(Delta))/(2*A):
R!;R2;
Elif Delta=0 then R:=-B/(2*A):
R;
Else
Print("Pas de Solution"):
fi
15/03/10
TESTS ET BRANCHEMENTS
24