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 AA+1 CC+B BA Sinon BA AA–1 CC*B Finsi Valeur de A, B et C si initialement : A 2 ; B 3; C A * B A 1; B 5; C 3 A3;BA*A;CB–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 AB FinSi FinSi Si ((A > 3) et (B < 0)) alors CA+B Si (B < 6) alors AB+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