Algorithmique Conditions et Itérations Cours de BTS/CPI 1ère année Algo – Prog CPI/BTS1 – M. Dravet – 17/09/2003 Dernière modification: 17/09/2003
Instructions Conditionnelles Dans les chapitres précédents, tous les algos que nous avons vu se lisent séquentiellement. Ce cas de figure nous limite énormément en possibilités de raisonnements algorithmiques, En effet, nous raisonnons sans cesse par prises de décisions, en fonction de choix qui s’imposent à nous constamment. Il est donc logique qu’en Algorithmique nous disposions du même outils: L’instruction conditionnelle.
Instructions Conditionnelles L’instruction conditionnelle a pour but de représenter une suite d’actions résultant d’une décision préalable, fondée sur l’évaluation d’une condition précise. Selon les cas, un bloc d’instruction sera exécuté plutôt qu’un autre. La syntaxe de cette instruction est: Si condition Alors liste d'instructions Sinon liste d'instructions Fin si
Instructions Conditionnelles Cette instruction est composée de trois parties distinctes: –La condition introduite par Si –La clause Alors –La clause Sinon La condition est une expression dont la valeur est de type booléen. Elle est évaluée. Si elle est vraie, les instructions de la clause Alors sont exécutées Dans le cas contraire, les instructions de la clause Sinon sont exécutées.
Instructions Conditionnelles On peut utiliser une forme simplifiée de la conditionnelle, sans clause sinon. La syntaxe est alors : si condition alors liste d'instructions fin si
Instructions Conditionnelles Il est tout à fait possible d’utiliser plusieurs instructions dans la clause Si ou Sinon. Ces multiples instructions forment alors un « bloc » de code. En algo, chaque bloc de code doit être délimité par des balises « Début » et « Fin ».
Instructions Conditionnelles On écrira donc: Si condition Alors Début instruction 1 instruction 2 Fin Sinon Début instruction 3 instruction 4 Fin Fin si
Instructions Conditionnelles Exercice : Ecrire un algorithme qui demande deux nombres entiers à l’utilisateur, et qui affiche le plus grand des deux. Exemple: Veuillez saisir un nombre: 45 Veuillez saisir un autre nombre: 34 Le plus grand des deux est: 45
Instructions Conditionnelles Programme PlusGrand Déclarations Variables x,y :entier { valeurs lues au clavier } Début écrire(‘Veuillez saisir un nombre: ’) lire(x) écrire(‘Veuillez saisir un autre nombre: ’) lire(y) écrire(‘Le plus grand des deux est: ‘) Si x>y alors écrire(x) sinon écrire(y) Fin si Fin
Instructions Conditionnelles Une instruction conditionnelle Si—Alors—Sinon—Finsi étant avant tout une instruction comme une autre, il est aussi possible de l’utiliser dans un bloc d’instruction déjà utilisé dans un bloc si—alors—sinon—finsi On dit alors qu’on imbrique les structures conditionnelles. Le nombre d’imbrications est illimité.
Instructions Conditionnelles On écrira donc: Si condition Alors Si condition2 Alors Début bloc d’instruction Fin Sinon Début bloc d’instruction Fin Fin Si Sinon Si condition3 alors instruction Sinon instruction Fin si
Instructions Conditionnelles Exercice : Ecrire un algorithme qui demande deux nombres entiers à l’utilisateur, et qui affiche le plus grand des deux si x <> y Exemple: Veuillez saisir un nombre: 45 Veuillez saisir un autre nombre: 34 Le plus grand des deux est: 45
Instructions Conditionnelles Programme PlusGrand Déclarations Variables x,y :entier { valeurs lues au clavier } Début écrire(‘Veuillez saisir deux nombres: ’) lire(x, y) Si x<>y Alors Si x>y alors écrire(‘Le plus grand des deux est: ‘, x) sinon écrire(‘Le plus grand des deux est: ‘, y) Fin Si Sinon écrire(‘Les deux nombres sont égaux !’) Fin si Fin
Instructions conditionnelles Il existe un autre type d’instruction conditionnelle, un peu moins utilisé. Il permet d’éviter la redondance des si—alors—sinon On dit que c’est davantage une structure de « choix » que conditionnelle : Si—alors—sinon fait exécuter des actions en fonction d’une condition précise « Selon sélecteur faire » lance des traitements dépendant de la valeur du sélecteur.
Instructions conditionnelles Notation dans un algo: Selon sélecteur Faire Ensemble1 de valeurs : Traitement1 Ensemble2 de valeurs : Traitement2 … Ensemble n-1 de valeurs : Traitement n-1 Sinon Traitement n Fin Selon
Instructions conditionnelles Exemple: Ecrire un algorithme qui demande à l’utilisateur de saisir un chiffre. L’algorithme a pour simple tâche d’écrire la valeur de ce chiffre en toutes lettres à l’utilisateur. L’algorithme ne connaîtra que les chiffres allant de 0 à 5, pour les autres il avouera à l’utilisateur son ignorance. Ecrire deux formes de cet algorithme: –En version « instruction conditionnelle », –En version « sélecteur de choix ».
Instructions conditionnelles Version structure conditionnelle Programme EcrireChiffre Déclarations Variable ch:entier{ chiffre de l’utilisateur saisi au clavier } Début lire(ch) Si ch = 0 alors écrire(‘Zéro’) Sinon Si ch = 1 alors écrire(‘Un’) Sinon Si ch = 2 alors écrire(‘Deux’) Sinon Si ch = 3 alors écrire(‘Trois) Sinon Si ch = 4 alors écrire(‘Quatre’) Sinon Si ch = 5 alors écrire(‘Cinq’) Sinon écrire(‘je ne sais pas !’) FinSi Fin
Instructions conditionnelles Version structure conditionnelle Programme EcrireChiffre Déclarations Variable ch:entier{ chiffre de l’utilisateur saisi au clavier } Début lire(ch) Selon ch faire 0 : écrire(‘Zéro’) 1 : écrire(‘Un’) 2 : écrire(‘Deux’) 3 : écrire(‘Trois’) 4 : écrire(‘Quatre’) 5 : écrire(‘Cinq’) Sinon écrire(‘Je ne sais pas !’) Fin Selon Fin
Exercices Ecrire un algorithme qui permet d’écrire le résultat d'un étudiant à un module sachant que ce module est sanctionné par une note d'oral de coefficient 1 et une note d'écrit de coefficient 2. La moyenne obtenue doit être supérieure ou égale à 10 pour valider le module. Exemple: Veuillez entrer la note à l’écrit: 13 Veuillez entrer la note à l’oral: 11 Résultat: Admis.
Exercices Programme Admission Déclarations Variable note_ecrit : réel { note à l’écrit coeff 2 } note_oral : réel { note à l’oral coeff 1} moyenne : réel { moyenne de l’élève } Début lire(ne) lire(no) moyenne (2*ne + no) / 3 Si moyenne < 10 Alors écrire(‘Refusé’) Sinon écrire(‘Admis’) Fin si Fin
Exercices On veut écrire un algorithme permettant de calculer le salaire d'un employé payé à l'heure, à partir de son salaire horaire et du nombre d'heures de travail. Les règles de calcul sont les suivantes : le taux horaire est majoré pour les heures supplémentaires de : –25% au-delà de 160 heures –50% au-delà de 200 heures. On demande à l’utilisateur le salaire horaire de l’employé ainsi que le nombre d’heure travaillées
Exercices Programme Salaire Déclarations Variable sh: réel { salaire horaire } nbh: réel { nombre d’heures travaillées } salaire: réel { salaire à verser à l’employé } Début lire(sal_horaire) lire(nb_heures) Si nbh < 160 alors salaire nbh * sh Sinon si nbh < 200 alors salaire 160*sh + (nbh - 160)*1,25*sh sinon salaire 160*sh + 40*sh*1,25 + (nbh - 200)*sh*1,5 Fin si écrire(‘Salaire à verser: ‘, salaire) Fin