Les conditionnelles
Présentation
Jusqu’à présent, les algorithmes présentés sont complètement linéaires, c’est-à-dire que les instructions sont toutes exécutées dans l’ordre. Les structures de contrôle permettent, suivant les cas, de ne pas exécuter les mêmes instructions. Pour reprendre l’exemple de l’algorithme de calcul du prix TTC, il serait possible de demander à l’utilisateur si le produit a le droit à un taux de TVA réduit et, seulement si la réponse est "oui", de demander à l’utilisateur le taux de TVA à appliquer.
La structure de contrôle Si (forme simple)
La première possibilité pour n’effectuer des instructions que dans certaines situations est d’utiliser la structure de contrôle Si. Voici la syntaxe à utiliser pour ce test :
Si conditionBooléenne Alors
SuiteDInstructions
FSi
Après le Si, il faut indiquer la condition qui doit être remplie pour exécuter la suite d’instructions comprise entre les mots-clés Alors et FSi. Le mot-clé FSi correspond à "Fin du Si". La condition doit être de type booléen : elle doit avoir pour valeur soit vrai soit faux. Si la condition a pour valeur vrai, alors l’ensemble de la suite des instructions sont exécutées, sinon elles sont sautées et l’exécution continue avec les instructions situées après le FSi.
Exemple :
Algo Tva2
# calcule le prix TTC d'un article
Variable prixHT : réel
Variable tvaReduite : texte
Variable tva : réel <- 20/100
Début
écrire("Prix HT de l'article ?")
prixHT <- saisir()
écrire("Ce produit bénéficie-t-il d'un taux de TVA réduit ?")
tvaReduite <- saisir()
Si tvaReduite...
La structure de contrôle Si (forme double)
La structure de contrôle Si peut se présenter dans une forme double. Dans ce cas-là, en plus des éléments présents dans sa version simple, s’ajoute après le mot-clé Sinon la suite d’instructions à effectuer lorsque la condition est fausse.Voici donc la syntaxe :
Si conditionBooléenne Alors
suiteDInstructions
Sinon
autreSuiteDInstructions
FSi
Si la condition est vraie, alors la suite d’instructions comprises entre Alors et Sinon est exécutée et l’exécution se poursuit après le FSi. Si par contre la condition est fausse, la première suite d’instructions est sautée et les instructions qui sont exécutées sont celles comprises entre Sinon et FSi, puis l’exécution se poursuit après le FSi.
Exemple :
Algo Age
Variable age : entier
Début
age <- saisir("Quel est votre âge ? ")
Si age ≥ 18 Alors
écrire("Vous êtes majeur !")
Sinon
écrire("Vous êtes mineur !")
FSi
Fin
Dans cet exemple, suivant la valeur saisie par l’utilisateur, le message "Vous êtes majeur !"...
L’imbrication des structures de contrôle
Les structures de contrôle peuvent être imbriquées les unes dans les autres. C’est-à-dire que parmi la suite d’instructions contenues entre Alors et Sinon ou celles contenues entre Sinon et FSi, il est possible de positionner une autre structure de contrôle.
Exemple :
Algo Age2
Variable age : entier
Début
age <- saisir("Quel est votre âge ? ")
Si age < 0 Alors
écrire("Ce n'est pas possible !")
Sinon
Si age ≥ 18 Alors
écrire("Vous êtes majeur !")
Sinon
...
La structure de contrôle Selon
La structure de contrôle Selon permet également de n’effectuer que certaines instructions de manière conditionnelle. Selon permet d’effectuer les instructions souhaitées en fonction de la valeur d’une variable. Voici la syntaxe de cette structure de contrôle :
Selon nomDeLaVariable
cas premièreListeDeValeurs : premièreSuiteDInstructions
cas deuxièmeListeDeValeurs : deuxièmeSuiteDInstructions
cas troisièmeListeDeValeurs : troisièmeSuiteDInstructions
...
autre : autreSuiteDInstructions
FSelon
Si la valeur de la variable fait partie de la première liste de valeurs, alors c’est la première suite d’instructions qui est exécutée, puis l’exécution reprend après FSelon. Si ce n’est pas le cas, la valeur de la variable est recherchée dans la deuxième liste de valeurs. Si elle est présente, alors la deuxième suite d’instructions est exécutée, puis l’exécution reprend après FSelon. Cela est réalisé jusqu’à trouver le cas contenant dans sa liste la valeur de la variable.
Le cas autre est facultatif. Si celui-ci est présent et si la valeur de la variable n’a été trouvée dans aucun cas, ce sont les instructions situées après autre qui sont exécutées.
Exemple :
Algo TriSelectif
Variable dechet : texte
Début
dechet <- saisir("Que souhaitez-vous jeter ?")
Selon dechet
cas "papier"; "carton"; "boîte de conserve" :
écrire("à recycler")
cas "végétaux"; "épluchures" :
...
L’opérateur ternaire ? :
En algorithmique comme en Java, il existe un opérateur permettant de tester une condition et, en fonction de celle-ci, de procurer soit une valeur soit une autre.
Contrairement à Si et Selon, qui sont des structures de contrôle, ? : est un opérateur (comme les opérateurs vus dans le chapitre précédent : +, ≠, et …). Comme ces opérateurs, il calcule et procure une valeur.
Cet opérateur est qualifié de ternaire, car il est composé de trois opérandes. Tous les opérateurs vus précédemment sont binaires, car ils utilisent deux opérandes (par exemple : a+b, a et b étant les deux opérandes), sauf l’opérateur non qui est unaire, c’est-à-dire qu’il n’utilise qu’un seul opérande (par exemple : non a, a étant l’unique opérande).
La syntaxe de cet opérateur est la suivante :
condition?valeurSiConditionVraie:valeurSiConditionFausse
Si la condition est vraie, alors le résultat de cette opération est la valeur indiquée entre les symboles ? et : sinon c’est la valeur indiquée après le symbole :.
Exemple :
Algo Voyage
Variable nbPersonnes : entier
Variable assurance : booléen
Début
nbPersonnes <- saisir( ...
Exercices
1. La météo
Écrire un algorithme qui affiche « risque de verglas » si la température saisie est inférieure à 2°C.
2. La météo version 2
Modifier l’algorithme précédent pour afficher un message en fonction de la température :
Température |
Message |
t < 2 |
Risque de verglas |
2 ≤ t < 15 |
C’est pas chaud |
15 ≤ t < 30 |
Bonne température |
t ≥ 30 |
Trop chaud |
3. Le nom du mois
Écrire le nom du mois en toutes lettres en fonction de son numéro (saisi par l’utilisateur).
4. Le temps de cuisson
Sachant que :
-
Pour cuire 500 grammes de bœuf, il faut :
-
10 minutes si on veut une cuisson bleu
-
17 minutes si on veut une cuisson à point
-
25 minutes si on veut une cuisson bien cuit
-
Pour cuire 400 grammes d’agneau, il faut :
-
15 minutes si on veut une cuisson bleu
-
25 minutes si on veut une cuisson à point
-
40 minutes si on veut une cuisson bien cuit
-
Le temps de cuisson est proportionnel au poids.
En fonction des informations saisies par l’utilisateur (type de la viande, mode de cuisson et poids de la viande), afficher le temps de cuisson d’une viande en secondes.
5. Le bulletin de paie
Afficher le bulletin de paie simplifié d’un salarié à partir des informations saisies. Le salaire brut dépend du nombre d’heures travaillées et de son taux horaire :
-
Les heures en deçà de 169 h sont payées en appliquant son taux horaire.
-
Les heures comprises entre 169 h et 180 h sont payées en appliquant une majoration de 50 % de leur taux horaire.
-
Les heures au-delà de 180h sont payées avec une majoration de 60 %.
La prime familiale est calculée de la manière suivante :
-
1 enfant : 20 €
-
2 enfants : 50 €
-
Au-delà de 2 enfants : 70 € + 20 € par enfant supplémentaire
Voici un exemple d’affichages et de saisies possibles lors d’une exécution de l’algorithme (les valeurs saisies par l’utilisateur sont inscrites en gras italique) :
Nom de la personne... |
Solutions des exercices
1. La météo
Algo RisqueVerglas
# Saisit la température et affiche une info
Variable temperature : réel
Constante LIMITE_VERGLAS : réel <- 2
Début
temperature <- saisir("Entrez la température : ")
Si temperature < LIMITE_VERGLAS Alors
écrire("Risque de verglas")
FSi
Fin
2. La météo version 2
Algo RisqueVerglasV2
# Saisit la température et affiche une info
Variable temperature : réel
Constante LIMITE_VERGLAS : réel <- 2
Constante LIMITE_FROID : réel <- 15
Constante LIMITE_BIEN : réel <- 30
Début
temperature <- saisir("Entrez la température : ")
Si temperature < LIMITE_VERGLAS Alors
écrire("Risque de verglas")
Sinon
Si temperature < LIMITE_FROID Alors
écrire("Ce n'est pas chaud")
Sinon
Si temperature < LIMITE_BIEN Alors
écrire("Bonne température")
Sinon
écrire("Trop chaud !")
...