Structures alternatives
Objectifs
Connaitre les structures alternatives
Une structure alternative permet d'exécuter ou non une série d'instructions selon la valeur d'une condition. Le tableau ci-dessous présente la sturcture alternative Si
, ainsi que ses variantes Si... Sinon
et Si... Sinon Si ... Sinon
.
Résumé
Rôle | Commande R | Syntaxe | Exemple | Exercice |
---|---|---|---|---|
Si | if | Présentation | Exemple | |
Si... Sinon | if... else | Présentation | Exemple | ici |
Si... Sinon Si ... Sinon | if... else if ... else | Présentation | Exemple | ici |
Exemple
Dans l'exemple ci-dessous, lorsque la condition
est vraie, l'algorithme exécutera l'Instruction n°1
puis l'Instruction n°2
. Et si la condition
est fausse, l'algorithme exécutera uniquement l'Instruction n°2
:
Début
Si ‹condition› Alors
Instruction n°1
Fin du Si
Instruction n°2
Fin
Et en langage R, cet algorithme se traduit de la façon suivante :
if(condition){
Instruction n°1
}
Instruction n°2
Remarque
-
Les accolades peuvent contenir plusieurs instructions.
-
S'il n'y a qu'une instruction entre les accolades, alors celles-ci deviennent facultatives.
Exemple
Dans l'exemple ci-dessous, lorsque la condition
est vraie, l'algorithme exécutera l'Instruction n°1
puis l'Instruction n°3
. Et si la condition
est fausse, l'algorithme exécutera l'Instruction n°2
puis l'Instruction n°3
:
Début
Si ‹condition› Alors
Instruction n°1
Sinon
Instruction n°2
Fin du Si
Instruction n°3
Fin
Et en langage R, cet algorithme se traduit de la façon suivante :
if(condition){
Instruction n°1
} else{
Instruction n°2
}
Instruction n°3
Remarque
-
Attention aux accolades, le
else
doit être sur la même ligne que}
. -
La partie
else
est facultative. Si aucun traitement particulier n'est exigé dans le cas où la condition est fausse : pas deelse
. -
Les accolades peuvent contenir plusieurs instructions.
-
S'il n'y a qu'une instruction entre les accolades, alors celles-ci deviennent facultatives.
Exemple
Dans l'exemple ci-dessous :
-
lorsque la
condition1
est vraie, l'algorithme exécutera l'Instruction n°1
puis l'Instruction n°5
. -
Si la
condition1
est fausse et que lacondition2
est vraie, l'algorithme exécutera l'Instruction n°2
puis l'Instruction n°5
. -
Si la
condition1
et lacondition2
sont fausses mais que lacondition3
est vraie, l'algorithme exécutera l'Instruction n°3
puis l'Instruction n°5
. -
Et enfin, lorsque les trois conditions sont fausses, l'algorithme exécutera l'
Instruction n°4
puis l'Instruction n°5
.
Début
Si ‹condition1› Alors
Instruction n°1
Sinon Si ‹condition2› Alors
Instruction n°2
Sinon Si ‹condition3› Alors
Instruction n°3
Sinon
Instruction n°4
Fin du Si
Instruction n°5
Fin
Et en langage R, cet algorithme se traduit de la façon suivante :
if(condition1){
Instruction n°1
} else if(condition2){
Instruction n°2
} else if(condition3){
Instruction n°3
} else{
Instruction n°4
}
Instruction n°5
Remarque
-
Attention aux accolades, les
else if
et leelse
doivent être sur la même ligne que}
. -
On peut utiliser autant de
else if
que nécéssaire. -
else if
s'écrit avec un espace entreelse
etif
. -
Les accolades peuvent contenir plusieurs instructions.
-
S'il n'y a qu'une instruction entre les accolades, alors celles-ci deviennent facultatives.
Exemple
L'algorithme suivant permet de calculer et d'afficher la valeur absolue d'un réel N
saisi par l'utilisateur :
Début
Affectation de N
Si (N ‹ 0) Alors
N ‹- -N
Fin du Si
Afficher N
Fin
Pour la traduction en langage R, la valeur N = -3
est choisie :
N ‹- -3
if(N ‹ 0){
N ‹- -N
}
print(N)
## [1] 3
Remarque
Le calcul de la valeur absolue aurait également pu se faire en utilisant la fonction abs()
. Cela n'aurait donc pas nécessité d'utiliser la structure alternative Si
. L'instruction abs(N)
retourne la valeur absolue de N
.
Exemple
L'algorithme suivant permet d'afficher si un réel N
est positif ou négatif (N est supposé non nul) :
Début
Affectation de N
Si (N › 0) Alors
Afficher('N est positif')
Sinon
Afficher('N est négatif')
Fin du Si
Fin
Pour la traduction en langage R, la valeur N = -3
est choisie :
N ‹- -3
if(N›0){
print('N est positif')
} else {
print('N est négatif')
}
## [1] "N est négatif"
Exemple
L'algorithme suivant permet d'afficher les racines réelles d'un polynôme de degré 2 :
Début
Affectation de a
Affectation de b
Affectation de c
delta ‹- b^2 - 4*a*c
Si (delta › 0) Alors
X1 ‹- (-b-sqrt(delta))/(2*a)
X2 ‹- (-b+sqrt(delta))/(2*a)
Afficher('Les 2 racines réelles sont :')
Afficher(X1)
Afficher(X2)
Sinon Si (delta == 0)
X1 ‹- -b/(2*a)
Afficher('La racine double est :')
Afficher(X)
Sinon
Afficher('Pas de racines rélles')
Fin du Si
Fin
Pour la traduction en langage R, les valeurs a=1
, b=2
et c=-3
sont choisies :
a ‹- 1
b ‹- 2
c ‹- -3
delta ‹- b^2 - 4*a*c
if(delta › 0){
X1 ‹- (-b-sqrt(delta))/(2*a)
X2 ‹- (-b+sqrt(delta))/(2*a)
cat('Les 2 racines réelles sont :', X1, 'et', X2)
} else if (delta==0){
X1 ‹- -b/(2*a)
cat('La racine double est :', X)
} else{
cat('Pas de racines rélles')
}
## Les 2 racines réelles sont : -3 et 1
Remarque sur l'utilisation de cat()
L'emploi de l'instruction cat()
au lieu de print()
permet de visualiser des résultats en concaténant les représentations.
Exercice : Pair ou impair ?
-
Le pseudo-code suivant permet d'afficher à l'écran si un entier
N
est pair ou impair.
Début
Affectation de N
Si (N modulo 2 == 0) alors
Afficher('N est pair')
Sinon
Afficher('N est impair')
Fin du Si
Fin
-
Traduire cet algorithme en langage R. Valider cet algortihme en prenant
N = 5
.
Corrigé
-
Traduction en langage R.
N ‹- 5
if(N %% 2 == 0){
print('N est pair')
} else{
print('N est impair')
}
## [1] "N est impair"
Exercice : Moyenne, médiane ou maximum ?
-
Le pseudo-code suivant permet à partir d'une variable
x
saisie par l'utilisateur de calculer soit la moyenne, soit la médiane, soit le maximum de cette variable. Pour cela, la variabletype
(saisie par l'utilisateur) permet d'aiguiller le calcul vers la fonction à utiliser.
Début
Affectation de type
Affectation de x
Si (type == 'moyenne')
y ‹- moyenne(x)
Sinon Si (type == 'mediane')
y ‹- median(x)
Sinon Si (type == 'maximum')
y ‹- max(x)
Sinon
y ‹- 'Erreur'
Fin du Si
Afficher y
Fin
-
Traduire cet algorithme en langage R. On considèrera que
x
est égal au vecteurc(1,2,6)
et que la variabletype
est égale à la chaîne de caractères'mediane'
.
Corrigé
-
Traduction en langage R.
type ‹- 'mediane'
x ‹- c(1,2,6)
if(type == 'moyenne'){
y ‹- mean(x)
} else if(type == 'mediane'){
y ‹- median(x)
} else if(type == 'maximum'){
y ‹- max(x)
} else{
y ‹- 'Erreur'
}
print(y)
## [1] 2
Remarque
-
Si la variable
type
est égale à la chaîne de caractères 'moyenne',y
est égal à la moyenne dex
(ici on obtient 3). -
Si la variable
type
est égale à la chaîne de caractères 'mediane',y
est égal à la médiane dex
(ici on obtient 2). -
Si la variable
type
est égale à la chaîne de caractères 'maximum',y
est égal à la valeur max dex
(ici on obtient 6). -
Si la variable
type
n'est pas égale à l'une des chaînes de caractères 'moyenne', 'mediane' ou 'maximum',y
est égal à la chaîne de caractèresErreur
.