iii. instruction alternative

27
III. Instruction alternative 1. Instruction conditionnelle en algorithmique 2. Expressions logiques 3. Instruction conditionnelle sous VBA 1

Upload: others

Post on 08-Feb-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

III. Instruction alternative

1. Instruction conditionnelle en algorithmique2. Expressions logiques3. Instruction conditionnelle sous VBA

1

1. Instruction conditionnelle en algorithmique

Lorsque une ou deux actions sont liées à une condition :si (condition)

action1

sinonaction2

fin-si

suite de l’algorithme

Remarques : • Les actions sont des suites d’instructions• délimitées par si, sinon et fin-si• sinon action2 est facultatif• Indentation : l’écriture des actions 1 et 2 est décalée à droite de 2 ou 3 espaces

pour visualiser la hiérarchie

faux condition

action2

vrai

action1

facultatif

2

2. Expressions logiquesa) En algorithmiqueLe résultat a deux valeurs possibles : vrai ou fauxOn dispose :

• des parenthèses ( )• des opérateurs de comparaison : < ≤ > ≥ = ≠• des opérateurs logiques : et ou non

ü Exemple : 0 ≤ n et n ≤ 10ü Attention aux priorités. Ex : je voudrais une voiture verte ou rouge et blanche ...ü Les parenthèses permettent de lever les ambiguïtés

et vrai faux

vrai vrai faux

Faux faux faux

ou vrai faux

vrai vrai vrai

faux vrai faux

3

b) Expressions logiques Sous VBA

ü Le résultat est True ou False (valeurs « booléennes »)ü Opérateurs :

• les parenthèses ( )• opérateurs de comparaison : < <= > >= = <>• des opérateurs logiques : AND OR NOT

ü Exemple : vérifier que n Î [0, 1] 0 <= n AND n <= 1

ü Représentation interne : VBA a choisi• 0 pour False• -1 pour True

Attention : l’expression 0 < n < 1 a un sens en VBA et est toujours vrai !!!

ü Stockage : variable de type BooleanDim positif As Boolean, n As Integern = InputBox("donnez un entier")positif = (0 <= n) ' En algo on écrirait : positif <- (0 ≤ n)MsgBox positif

4

Ordre de priorités des opérateurs sous VBA :1. opérateurs arithmétiques2. opérateurs de comparaison3. opérateurs logiques

• Les opérateurs arithmétiques respectent les priorités admises en mathématiques• Les opérateurs de comparaison sont de priorités identiques

→ priorité gauche-droite• Les opérateurs logiques sont prioritaires dans l’ordre : NOT AND OR

5

3. Instruction conditionnelle sous VBA

• SyntaxeIf expression logique Then

[instruction]

Else

[instruction]

End If

• les deux suites d’instructions (éventuellement vides) sont délimitées parThen , Else et End If

• la partie Else [instruction] est facultative• on respectera l’indentation pour visualiser les 2 actions soumises à condition

faux condition

action2

vrai

action1

6

facultatif

• Complément sur la syntaxe : ajout de blocs ElseIf

If condition1 Then

[instruction]

[ElseIf condition2 Then

[instruction]

]

Else ‘les cas restants

[instruction]

End If

7

Exercice : Ecrire le programme qui calcule le prix de gros d'une quantité d'articles à partir du prix unitaire suivant la règle :

Faire une remise Ø de 10% à partir de 10 articles vendus, Ø ou de 5% à partir de 5 articles vendus.

Algorithme à développer- Déclarer et commenter les variables qui seront utilisées- lire le prix unitaire et le nombre d'articles- calculer le total- appliquer la réduction- afficher le prix final

Exercice : Le barème de l’impôt 2020 pour une personne ayant une seule part dépend de ses revenus 2020 R arrondis à l'euro inférieur :• Si R <= 5 852 €, on ne paie pas d’impôt• Si 5 853 € <= R <= 11 673 €, le montant de l’impôt est 0,055×R −321,86• Si 11 674 € <= R , le montant de l’impôt est 0,14×R − 1 314,07

Ecrire le programme qui lit un revenu annuel et calcule le montant de l'impôt

8

• Exercice : Ecrire le programme qui résout l’équation ax2+bx+c=0

• Exercice : Ecrire le programme qui saisit une date (3 entiers) et calcule la date dulendemain. On rappelle qu'une année est bissextile si elle est divisible par 400,sinon, si elle divisible par 4 et pas par 100

9

Programme

Sub equation2emeDegre()Dim a As Single, b As Single, Dim c As Single, delta As SingleDim x1 As Single, x2 As Singlea = InputBox("a :")b = InputBox("b :")c = InputBox("c :")delta = b*b-4*a*cIf delta<0 ThenMsgBox "pas de solution dans R"

ElseIf delta=0 Thenx1 = -b/(2*a)MsgBox "x=" & x1

Else ‘delta est positifx1 = (-b + Sqr(delta))/(2*a)x2 = (-b - Sqr(delta))/(2*a)MsgBox "x1=" & x1 & " x2=" & x2

End IfEnd IfEnd Sub

Algorithme

soient a, b, c, delta, x1, x2 réels

lire(a, b, c)

delta <- b2-4ac

si (delta<0)ecrire("pas de solution dans R")

Sinon

si (delta=0)

x1 <- -b/2a

ecrire(x1)sinon

x1 <- (-b + √delta)/2a

x2 <- (-b - √delta)/2a

ecrire(x1, x2)

fin-sifin-si

10

IV. Les boucles

1. Les boucles en algorithmique2. Instructions répétitives sous VBA

11

1. Les boucles en algorithmique

ü De nombreux problèmes nécessitent de répéter une actionpour trouver ou converger vers une solution

tant-que (condition)action

fin tant-que

suite de l’algorithme

ü Remarque : le résultat de la condition doit pouvoir changer dans le temps si on veut éviter la boucle « éternelle ». Les variables dans cette condition doivent évoluer dans l’action.

condition

faux

vrai

action

12

• Exemple : calcul de xn

soient i, n entiers naturels

soient x, xi réels

lire(x)

lire(n)

‘ on initialise xi avec x0

xi <- 1

i <- 0

xi <- xi*x

i <- i+1 xi vaut x1

xi <- xi*x

i <- i+1 xi vaut x2

xi <- xi*x

i <- i+1 xi vaut x3

... Jusqu’à i=n

Ecrire(xi)

n : nbre de multiplications à fairei : nbre de multiplications faitesxi : xi

13

• Exemple : calcul de xn

soient i, n entiers naturelssoient x, xi réelslire(x)lire(n)xi <- 1 i <- 0 tant-que (i < n)

xi <- xi*xi <- i+1

fin tant-que

ecrire(xi)

Remarque : vérifiez la fin de boucle et les cas particuliers.Par exemple, pour n=0, on ne rentre pas dans la boucle mais le résultat est juste.

initialisation de la boucle

modification d’un acteur de la condition

i vaut n en quittant la boucle,

n : nbre de multiplications à fairei : nbre de multiplications faitesxi : xi

14

• L’algorithme mystérieuxsoient a, b, r entiers

lire(a)

lire(b)

r <- 0

tant-que (b ¹ 0)

si (b est pair)

b <- b/2

a <- 2*a

sinon

b <- b-1

r <- r+a

fin-si

fin tant-que

ecrire(r)

15

a 5

b 7

r 0

2. Instructions répétitives sous VBA

Il en existe plusieurs formes… toutes équivalentes !Les deux principales : Do While et For

L’instruction Do While :

Do While expression logique

[instruction]

Loop

suite du programme

Exercice :Avec l’instruction Do While, écrire l’algorithme puis le programme qui :• lit une suite de notes d’un élève• fait la moyenne de ces notes et l’affiche

On ne connaît pas la longueur de la suite et, par convention,elle se terminera par une valeur négative.

condition

faux

vrai

action

16

Exo : Lire une suite de notes terminée par une valeur négative et faire la moyenne

Algorithme :soient une note, un compteur et un cumulaccumuler chaque note de la suitecalculer la moyenne à partir du cumul et du nombre de notes lues

Sub moyenne( )Dim note As Single, cumul As Single, moy As SingleDim cpt As Integercumul = 0note = InputBox ("note ?") ' lecture de la 1ère note de la suiteDo While note >= 0cumul = cumul + notecpt = cpt +1note = InputBox ("note ?") ' lecture de la note suivante

Loopmoy = cumul / cptMsgBox moy

End Sub 17

Exo : Lire une suite de notes terminée par une valeur négative et faire la moyenne

Algorithme :soient une note, un compteur et un cumulaccumuler chaque note de la suitecalculer la moyenne à partir du cumul et du nombre de notes lues

Sub moyenne( )Dim note As Single, cumul As Single, moy As SingleDim cpt As Integercumul = 0note = InputBox ("note ?") ' lecture de la 1ère note de la suiteDo While note >= 0cumul = cumul + notecpt = cpt +1note = InputBox ("note ?") ' lecture de la note suivante

Loopmoy = cumul / cptMsgBox moy

End Sub 18

Algorithme de la moyenne

• lire toute la suite de notes

- en les cumulant

- et en les comptant

• diviser le cumul par le nombrede notes

En développant :soit x réel

lire(x)

tant-que (x ≥ 0)

accumuler x

comptabiliser

lire (x)

fin tant-que

ecrire (cumul/nbre de notes)

19

Programme de la moyenne

Sub moyenneDesNotes()

Dim x As Single, cumul As Single

Dim cpt As Integer

cumul = 0

cpt = 0

x = InputBox("donnez une note:")

Do While x >= 0

cumul = cumul+x

cpt = cpt+1

x = InputBox("donnez unenote:")

Loop

MsgBox "moyenne = " & cumul/cpt

End Sub

Algorithme de la moyenne

• lire toute la suite de notes

- en les cumulant

- et en les comptant

• diviser le cumul par le nombrede notes

En développant :soient x et cumul réels

soit cpt un entier

cumul <- 0

cpt <- 0

lire(x)

tant-que (x ≥ 0)

cumul <- cumul+x

cpt <- cpt+1

lire (x)

fin tant-que

ecrire (cumul/cpt)

20

L’instruction For :

• variante de la boucle Do While

• lorsque l’on connaît à l’avance le nombre d’itérationsFor compteur = expression To expression

[instruction]

Next compteur

Exemple : calcul de !nSub factoriel()

Dim n As Integer, i As Integer, fact As Integer

n = InputBox("donnez n :")

fact = 1

For i=2 To n

fact = fact*i

Next i

MsgBox n & "! = " & fact

End Sub

i=2

Do While i <= n

fact = fact*i

i = i+1

Loop

équivalent

21

Une variante de la boucle while:ü Faire jusqu’à ce que l’expression soit vraie

Do Until expression logique condition d’arrêt ![instruction]

Loop

Suite du programme

22

3. Interruption de boucleIl peut être commode dans certains cas de quitter une boucle en cours d’exécution.

• Exit For (pour la boucle For uniquement)• Exit Do (pour les boucles Do While et Do Until uniquement)

Ils auront pour effet de :1. quitter immédiatement la boucle en cours2. poursuivre le programme à la suite de la boucle

Remarque : cette instruction sera toujours soumise à conditionDo While …

…If condition Then

Exit DoEnd If

…Loop

Poursuite du programme

23

4. Exercices• Minimum d’une suite : Reprendre le calcul de la moyenne et modifier le

programme pour trouver aussi la note la plus grande

Sub moyenne( )Dim note As Single, cpt As IntegerDim cumul As Single, moy As Single, maxNote As Singlecumul = 0note = InputBox ("note ?") 'Lecture de la 1ère notemaxNote = noteDo While note >= 0If maxNote < note ThenmaxNote = note

End Ifcumul = cumul + notecpt = cpt +1note = InputBox ("note ?") 'Lecture de la note suivante

Loopmoy = cumul / cptMsgBox moy & " meilleur note vaut " & maxNote

End Sub

24

• Calcul du PGCD de 2 entiers : algorithme d'Euclide.

Soit A et B entiers non nuls positifs. Le PGCD vérifie les propriétés suivantes :- PGCD(A, A) = A- Si A<B, alors PGCD(A, B) = PGCD(A, B-A) - Sinon PGCD(A, B) = PGCD(A-B, B)

25

• Trouver le « zéro » d’une fonction croissante.

Ecrire le programme qui approche à epsilon près la racine carrée d’un réel positif x .On fera les constatations suivantes : o Öx est compris entre 0 et max(1, x)o supposons Öx Î [a, b] et soit m le milieu de [a, b]

- si (b-a) < 0.001 , alors m est une solution approchée.- sinon, si x-m2 < 0 alors Öx Î [a, m], sinon Öx Î [m, b]

o si on réitère plusieurs fois cette opération, (b-a) converge vers 0 et a et b encadrent la solution

26

Résumé des instructions VBA

Sub maProcedure() Début de procédure

Dim x As Single, y As Double Déclarations de réels

Dim n As integer, m As Long Déclarations d'entiers

n = expression Affectation

...

x = InputBox("donnez une valeur :") Lecture

...

Do While condition Bouclesuite d’instructions

Loop

...

If condition Then Instruction alternativesuite d’instructions

Elsesuite d’instructions

End If

...

MsgBox "resultat = " & y Ecriture

...

End Sub Fin de procédure

27