initiationàla programmation’impérative’ - cours instructions conditionn… ·...
TRANSCRIPT
E. Laine – 05.09.2016
Initiation à la programmation impérative et algorithmique Cours 3 – Instruc9ons Condi9onnelles
Largement inspiré des cours : Vercouter, Del Mondo & Delestre, Hérault, Mainguenaud (INSA de Rouen)
E. Laine – 05.09.2016
Limites de l’éxécution séquentielle
• Jusqu’à maintenant les instruc9ons étaient toutes interprétées séquen9ellement
Declara'on: valeurFranc , valeurEnEuro, tauxConversion : Reel
debut tauxConversion ß 6.55957 valeurEnEuro ß 10 valeurEnFranc ß valeurEnEuros * tauxConversion ecrire(‘Vos euros valent ‘, valeurEnFranc, ‘ francs’)
fin
• Comment faire un algorithme qui puisse donner le choix de la devise de conversion ?
E. Laine – 05.09.2016
Instruction si […] alors
• L’instruc9on si […] alors permet de condi9onner l’éxécu9on d’un algorithme à la valeur d’une expression boléenne
• Syntaxe : si <expression booléenne> alors
<bloc d’instruc9ons si l’expression est vraie> finsi
www.iftt.com
E. Laine – 05.09.2016
Schéma de la conditionnelle si […] alors
Début
Fin
Instruc9on 1a
Instruc9on 2a
Expression Booléenne
Vrai
Faux
E. Laine – 05.09.2016
Exemple de branchement conditionnel
Declara'on TX_FR = 6.55957 ; TX_USD = 1.3255 valeurEnEuro, valeurConver9e : Reel devise : Chaine de caracteres debut
ecrire(‘Valeur en euros :’) lire(valeurEnEuros) ecrire(‘Quelle devise voulez-‐vous ?’) lire(devise) si (devise = ‘dollar’) alors valeurConver9e ß valeurEnEuro * TX_USD finsi si (devise = ‘franc’) alors valeurConver9e ß valeurEnEuro * TX_FR finsi ecrire(‘la valeur conver9e est de ‘, valeurConver9e)
fin
E. Laine – 05.09.2016
L’instruction si [...] alors […] sinon […]
• si [...] alors […] sinon […] est une variante qui permet d’associer des instruc9ons à une condi9on fausse
• Syntaxe : si <expression booléenne> alors
<bloc d’instruc9ons si l’expression est vraie> sinon
<bloc d’instruc9ons si l’expression est fausse> finsi
E. Laine – 05.09.2016
Schéma de la conditionnelle si […] alors sinon
Début
Fin
Instruc9on 1a
Instruc9on 2a
Expression Booléenne
Instruc9on 1b
Instruc9on 2b
Vrai Faux
E. Laine – 05.09.2016
Autre exemple de branchement conditionnel • Calcul de la valeur absolue
Declara'on unEn9er, laValeurAbsolue : En'er debut lire(unEn9er) si unEn9er ≥ 0 alors laValeurAbsolue ß unEn9er sinon laValeurAbsolue ß -‐ unEn9er finsi ecrire(laValeurAbsolue) fin
E. Laine – 05.09.2016
Exercice
• Calcul des années bissex9les
Ecrire un algorithme qui lit une valeur en9ère représentant une année et écrit un texte indiquant si l’année est bissex9le ou non Rappel : Une année est bissex9le si elle est divisible par 4 et pas par 100, ou si elle est divisible par 400.
E. Laine – 05.09.2016
Imbrication de conditions • Lorsque plus de deux alterna9ves sont nécéssaires, on rajoute alors des instruc9ons condi9onnelles dans les blocs d’instruc9ons si vrai ou si faux
On parle de condi.ons imbriquées
Début
Fin
Instruc9on 1c
Cond
Instruc9on 1b
Instruc9on 2b
Instruc9on 1a
Instruc'on 2a
Cond
E. Laine – 05.09.2016
Exemples conditions imbriquées • Si on doit comparer une seule variable avec plusieurs valeurs
si a = 1 alors faire une chose
sinon si a = 2 alors faire autre chose sinon si a= 4 alors faire encore autre chose sinon ……. finsi finsi
finsi
E. Laine – 05.09.2016
Un autre exemple Déclara'on: solde, retrait : Reel début
… ecrire(‘Vous avez demandé un retrait’) si solde ≥ 0 alors ecrire(‘Combien voulez vous re9rez ?’) si retrait > solde alors ecrire(‘Opéra9on impossible. la somme dépasse votre solde’) sinon ecrire(‘Retrait en cours’) solde ß solde – retrait … finsi sinon ecrire (‘Opéra9on annulée vous être à découvert’) finsi
fin
E. Laine – 05.09.2016
Exemple Déclara'on jour: En'er, mois: Mois, signe : Chaine de caracteres début
lire(jour, mois) si (jour >= 21) et (mois = "decembre") alors signe ß"Capricorne" sinon si (jour >= 22) et (mois = "novembre") ou (mois = "decembre") alors signe ß "Sagiraire" sinon si (jour >= 23) et (mois = "octobre") ou (mois = "novembre") alors signe ß "Scorpion" sinon si (jour >= 23) et (mois = "septembre" ) ou (mois = "octobre") alors signe ß "Balance" sinon si (jour >= 23) et (mois = "aout") ou (mois = "septembre") alors signe ß "Vierge" sinon si (jour >= 23) et (mois = "juillet") ou (mois = "aout") alors signe ß "Lion" sinon si (jour >= 22) et (mois = "juin") ou (mois = "juillet") alors signeß "Cancer" sinon si jour >= 21) et (mois = "mai") ou (mois = "juin") alors signe ß "Gemeaux"
………..
E. Laine – 05.09.2016
Exercice • Co9sa9on d’assurance Ecrivez un bout de programme qui affiche à l’écran le montant d’une assurance auto. On supposera que vous disposez des variables suivantes : • age, un en9er indiquant l'âge du client • ancienneté qui indique son ancienneté en années • masculin un booléen de valeur vraie si le client est un homme • nb_accidents qui indique le nombre d’accidents du client
Le tarif de base est de 1000 euros. Si le client est un jeune conducteur (moins de 25 ans pour un garçon, moins de 23 ans pour une fille), on y ajoute 25%. Chaque accident du client a pour effet d’augmenter un malus de 10%, ini9alement à 0% et plafonné à 50%. Si le client n’a pas eu d’accidents, on lui offre un remise de 100 euros s’il a plus de 10 ans d’ancienneté et de 200 euros s’il a plus de 30 ans d’ancienneté (non cumulable)
E. Laine – 05.09.2016
l’instruction cas où Cas où permet de spécifier une instruc9on condi9onnelle sur plusieurs valeurs. • Sa syntaxe est : cas où v vaut:
v1 : ac.on1 v21, v22, …, v2m : ac.on2 … vn : ac.onn autre : ac.on
fincas • les vi sont des constantes de type scalaire (en9er, naturel, enuméré ou caractère)
• ac.oni est exécutée si v = vi (on quire ensuite l’instruc9on cas) • ac.on est exécutée si Pour tout I, v ≠ vi
E. Laine – 05.09.2016
Exemple
• Déterminer si un mois possède 30 jours. Déclara'on: mois : En'er ; resultats : Booleen Début
lire(mois) cas où mois vaut 4,6,9,11 : resultat ß Vrai autre : resultat ß Faux fincas ecrire(resultat)
fin
E. Laine – 05.09.2016
Déclara'on jour: En'er, mois: Mois, signe : Chaine de caracteres début
lire(jour, mois)
cas où mois vaut janvier : si jour >= 20 alors signe ß ‘Verseau’ sinon signe ß ‘Capricorne’ finsi février: si jour >= 19 alors signe ß ‘Poisson’ sinon signe ß ‘Verseau’ finsi mars: si jour >= 21 alors signe ß ‘Belier’ sinon signe ß ‘Poisson’ finsi avril : si jour >= 21 alors signe ß ‘Taureau’ sinon signe ß ‘Belier’ finsi mai : si jour >= 21 alors signe ß ‘Gemeaux’ sinon signe ß ‘Taureau’ finsi juin : si jour >= 22 alors signe ß ‘Cancer’ sinon signe ß ‘Gemeaux’ finsi juillet : si jour >= 23 alors signe ß ‘Lion’ sinon signe ß ‘Cancer’ finsi aout : si jour >= 23 alors signe ß ‘Vierge’ sinon signe ß ‘Lion’ finsi septembre: si jour >= 23 alors signe ß ‘Balance’ sinon signe ß ‘Vierge’ finsi octobre : si jour >= 23 alors signe ß ‘Scorpion’ sinon signe ß ‘Balance’ finsi novembre : si jour >= 22 alors signe ß ‘Sagiraire’ sinon signe ß ‘Scorpion’ finsi autre : si jour >= 21 alors signe ß ‘Capricorne’ sinon signe ß ‘Sagiraire’ finsi
fincas fin
E. Laine – 05.09.2016
Exercice
• Ecrire un algorithme qui lit un mois et une année (tous les 2 sous forme d’une valeur en9ère) et renvoie le nombre de jours du mois. • Aren9on, il faut prendre en compte les années bissex9les !
E. Laine – 05.09.2016
Python: instruction conditionnelle
• En python on u9lise l’instruc9on: if <expression booléenne> :
<instruc9on1> <instruc9on2> …
else : <bloc d’instruc9ons>
• Le niveau d’indenta'on détermine si l’instruc9on est bien condi9onnelle au if
alcool = Trueif (age < 18): print “Vous êtes mineur” alcool = False
alcool = Trueif (age < 18): print “Vous êtes mineur”alcool = False
E. Laine – 05.09.2016
Python: instruction cas ou ?
• Il n’y a pas d’instruc9on cas où, mais un raccourci elif permet d’imbriquer les clauses : if <expression booléenne 1> :
<bloc d’instruc9ons > elif <expression boolénne 2> :
<bloc d’instruc9ons> elif <expression boolénne 3> :
<bloc d’instruc9ons> else :
<bloc d’instruc9ons>
E. Laine – 05.09.2016
Conclusions/résumé
• Les branchements condi9onnels permerent de traiter différents scénarios avec un algorithme.
• Les instruc9ons condi9onnelles peuvent être imbriquées pour diviser plus finement l’espace des possibilités.
• L’u9lisa9on d’expressions booléennes complexes peut aussi simplifier la structure de contrôle.
• En python, l’entrée dans un bloc de contrôle nécessite l’indenta'on de ce bloc