Algorithmique & Programmation Partie 2 Hassan OUAHI BCG S2 2023-2024 1 Sommaire 4 Tests (condition) Boucles (répétition) 2 Tests Boucles L’instruction conditionnelle L’instruction si alors Dans l’instruction si condition alors bloc, la condition est une expression booléenne, et le bloc n’est exécuté que si la condition est vraie. si <expression logique> alors instructions [sinon instructions] fsi 3 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x y←x si y < 0 alors y ← −y fsi afficher y fin 4 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons que x = −10.0 y←x si y < 0 alors y ← −y fsi afficher y fin 5 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons que x = −10.0 y←x y prend la valeur −10.0 si y < 0 alors y ← −y fsi afficher y fin 6 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons que x = −10.0 y←x y prend la valeur −10.0 si y < 0 alors y ← −y y est négatif donc le bloc est exécuté fsi afficher y fin 7 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons que x = −10.0 y←x y prend la valeur −10.0 si y < 0 alors y ← −y y est négatif donc le bloc est exécuté y prend donc la valeur 10.0 fsi afficher y fin 8 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons maintenant que x = 5.0 y←x si y < 0 alors y ← −y fsi afficher y fin 9 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x y←x Supposons maintenant que x = 5.0 y prend la valeur 5.0 si y < 0 alors y ← −y fsi afficher y fin 10 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons maintenant que x = 5.0 y←x y prend la valeur 5.0 si y < 0 alors y ← −y y est positif donc le bloc n’est pas exécuté fsi afficher y fin 11 Tests Boucles L’instruction conditionnelle L’instruction si alors Exemple Algorithme : valeurAbsolue variable réel x , y début saisir x Supposons maintenant que x = 5.0 y←x y prend la valeur 5.0 si y < 0 alors y ← −y y est positif donc le bloc n’est pas exécuté fsi afficher y y garde donc la valeur 5.0 fin 12 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Dans l’instruction si condition alors bloc 1 sinon bloc 2, la condition est une expression booléenne. Le bloc 1 est exécuté si la condition est vraie ; le bloc 2 est exécuté si la condition est fausse. 13 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" fsi fin 14 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors Supposons que x = 2.0 y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" fsi fin 15 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors Supposons que x = 2.0 x est positif donc le bloc alors est exécuté y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" fsi fin 16 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors y ← sqrt ( x ) afficher y Supposons que x = 2.0 x est positif donc le bloc alors est exécuté y prend la valeur 1.414 . . . sinon afficher "Valeur indéfinie" fsi fin 17 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors Supposons maintenant que x = −1.0 y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" fsi fin 18 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors Supposons maintenant que x = −1.0 x est négatif donc le bloc sinon est exécuté y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" fsi fin 19 Tests Boucles L’instruction conditionnelle L’instruction si alors sinon Exemple Algorithme : racineCarrée variable réel x , y début saisir x si x ≥ 0 alors Supposons maintenant que x = −1.0 x est négatif donc le bloc sinon est exécuté y ← sqrt ( x ) afficher y sinon afficher "Valeur indéfinie" L’algorithme affiche Valeur indéfinie et aucune valeur n’est affectée à y fsi fin 20 Tests Boucles L’instruction conditionnelle Test imbriqué chaque sommet interne représente la condition d’un "si alors (sinon)". chaque feuille représente un bloc d’instructions. vrai faux Test 1 vrai Inst. 1 Test 2 faux Inst. 2 vrai Inst. 3 Test 3 faux Inst. 4 21 Tests Boucles L’instruction conditionnelle Un algorithme Test Imbriqué Algorithme : etateau variable réel T début saisir T si T < 0 alors afficher “solide” sinon si T < 100 alors afficher “liquide” sinon afficher “gaz” fsi fsi fin 22 Tests Boucles L’instruction conditionnelle Un algorithme Test Imbriqué Algorithme : etateau variable réel T vrai faux T <0 début saisir T si T < 0 alors afficher “solide” sinon si T < 100 alors afficher “solide” vrai T < 100 faux afficher “liquide” sinon afficher “gaz” afficher “liquide” afficher “gaz” fsi fsi fin 23 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) S’il y a plus de deux choix possibles, l’instruction selon permet une facilité d’écriture, le bloc du cas correspondant est exécuté. selon <identificateur> (liste de) valeur(s) : instructions (liste de) valeur(s) : instructions … ... [autres : instructions] 24 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) Exemple Algorithme : Typepersonne variable chaine abreviation debut saisir abreviation selon abreviation "M" : afficher( " Monsieur " ) "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) fin 25 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) Exemple Algorithme : Typepersonne variable chaine abreviation debut saisir abreviation selon abreviation "M" Supposons que abreviation= M : afficher( " Monsieur " ) "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) fin 26 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) Exemple Algorithme : Typepersonne variable chaine abreviation debut saisir abreviation selon abreviation "M" Supposons que abreviation= M : afficher( " Monsieur " ) le premier cas est traité l’algorithme affiche "Monsieur" "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) fin 27 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) Exemple Algorithme : Typepersonne variable chaine abreviation debut saisir abreviation selon abreviation "M" Supposons maintenant que abreviation= Paren : afficher( " Monsieur " ) "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) fin 28 Tests Boucles L’instruction conditionnelle L’instruction selon (sélection sur choix multiples) Exemple Algorithme : Typepersonne variable chaine abreviation debut saisir abreviation selon abreviation "M" Supposons maintenant que menu = 4 : afficher( " Monsieur " ) "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) le bloc par défaut est traité fin 29 Tests Boucles L’instruction conditionnelle Comparaison Selon abréviation "M" : afficher( " Monsieur " ) "Mme" : afficher( " Madame " ) "Mlle" : afficher( " Mademoiselle " ) Autres : afficher( " Monsieur, Madame " ) Comparer : si abréviation = "M" alors afficher( "Monsieur" ) sinon si abréviation = "Mme" alors afficher("Madame") sinon si abréviation = "Mlle" alors afficher( "Mademoiselle" ) sinon afficher( "Monsieur,Madame " ) fsi fsi fsi 30 Tests Boucles L’instruction répétitive L’instruction pour L’instruction pour est utilisée pour répéter une suite d’instructions un certain nombre de fois lorsque le nombre d’itérations est connu : elle initialise un compteur elle incrémente le compteur après chaque exécution du bloc d’instructions elle vérifie que le compteur ne dépasse pas la borne supérieure pour <var> ← valInit à valfin [par <pas>] faire traitement {suite d’instructions} fpour 31 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n s←0 pour i ← 1 à n faire s ← s +i fpour afficher s fin 32 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 pour i ← 1 à n faire s ← s +i fpour afficher s fin 33 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n s←0 Supposons que n = 3 La somme s est initialisée à 0 pour i ← 1 à n faire s ← s +i fpour afficher s fin 34 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i est initialisé à 1 s ← s +i fpour afficher s fin 35 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i est initialisé à 1 s ← s +i La somme s prend la valeur 0 + 1 = 1 fpour afficher s fin 36 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i passe à la valeur 2 s ← s +i fpour afficher s fin 37 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i passe à la valeur 2 s ← s +i La somme s prend la valeur 1 + 2 = 3 fpour afficher s fin 38 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i passe à la valeur 3 s ← s +i fpour afficher s fin 39 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons que n = 3 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire Le compteur i passe à la valeur 3 s ← s +i La somme s prend la valeur 3 + 3 = 6 fpour afficher s fin 40 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n s←0 Supposons que n = 3 La somme s est initialisée à 0 pour i ← 1 à n faire s ← s +i fpour afficher s La somme finale est donc s = 6 fin 41 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons maintenant que n = 10 s←0 pour i ← 1 à n faire s ← s +i fpour afficher s fin 42 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n s←0 Supposons maintenant que n = 10 La somme s est initialisée à 0 pour i ← 1 à n faire s ← s +i fpour afficher s fin 43 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons maintenant que n = 10 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire La boucle est exécutée 10 fois s ← s +i fpour afficher s fin 44 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons maintenant que n = 10 s←0 La somme s est initialisée à 0 pour i ← 1 à n faire La boucle est exécutée 10 fois s ← s +i La somme s prend la valeur 0 + 1 + ···+ 10 fpour afficher s fin 45 Tests Boucles L’instruction répétitive Exemple Algorithme:som1n variable entier n, s, i début saisir n Supposons maintenant que n = 10 s← 0 La somme s est initialisée à 0 pour i ← 1 à n faire La boucle est exécutée 10 fois s ← s +i fpour afficher s La somme s prend la valeur 0 + 1 + ···+ 10 La somme finale est donc s = 55 fin 46 Tests Boucles L’instruction répétitive Autre Exemple de pour Algorithme:FaitLeTotal {Cet algorithme fait la somme des nbVal données qu'il saisit} Variable entier nbVal, cpt réel valeur, totalValeurs début afficher("Combien de valeurs voulez-vous saisir ?") saisir(nbVal) totalValeurs ← 0 pour cpt ← 1 à nbVal faire afficher("Donnez une valeur :") saisir(valeur) totalValeurs ← totalValeurs + valeur fpour afficher("Le total des :", nbVal, "valeurs est :" , totalValeurs) fin 47 Tests Boucles L’instruction répétitive L’instruction tant que La boucle tant que est utilisée lorsque le nombre d’itérations n’est pas connu à l’avance. Elle exécute le bloc d’instructions tant que la condition reste vraie. amorçage {initialisation de la (des) variable(s) de condition} tant que <expression logique (vraie)> faire traitement {suite d’instructions} Relance {ré-affectation de la (des) variable(s) de condition} ftq 48 Tests Boucles L’instruction répétitive Sémantique de la boucle tant que 49 Tests Boucles L’instruction répétitive Exemple Algorithme:cafeO_N Variable Caractère rep Début afficher " Voulez vous un café ? (O/N) " Saisir rep Tant que rep <> "O" et rep <> "N" faire afficher "Vous devez répondre par O ou N. Recommencez " saisir rep Ftq afficher " Saisie accepté " Fin 50 Tests Boucles L’instruction répétitive L’instruction répéter tant que La boucle répéter tant que est utilisée lorsque le nombre d’itérations n’est pas connu à l’avance, et qu’il faut lancer au moins une exécution du bloc d’instructions. Elle exécute le bloc jusqu’à ce que la condition d’arrêt devienne vraie. répéter (ré)affectation de la (des) variable(s) de condition Traitement {suite d’instructions} tant que <expression logique (vraie)> 51 Tests Boucles L’instruction répétitive Comparaison boucles répéter et tant que répéter afficher("Donnez une valeur positive :") saisir(valeur) tant que (valeur < 0 ) ...équivaut à : afficher("Donnez une valeur positive :") saisir(valeur) tant que (valeur < 0 ) faire afficher("Donnez une valeur positive :") saisir(valeur) ftq 52 Tests Boucles L’instruction répétitive Comparaisons Boucle pour La boucle pour i ← x à y faire instruction fpour exécute l’instruction exactement y − x + 1 fois. Boucle tant que La boucle tant que condition faire instruction ftq exécute l’instruction jusqu’à ce que la condition soit fausse. L’instruction peut donc être exécutée zero fois si la condition est initialement fausse. Instruction répéter tant que La boucle répéter instruction tant que condition exécute l’instruction jusqu’à ce que la condition soit fausse. L’instruction est donc exécutée au moins une fois. 53 Exemples Exemples Afficher le carré des valeurs saisies tant qu’on ne saisit pas 0 saisir(val) tant que val ≠ 0 faire afficher(val × val) saisir(val) ftq 54 Exemples Exemples Saisir des données et s'arrêter dès que leur somme dépasse 500 saisir(val) somme ← val tant que somme ≤ 500 faire saisir(val) somme ← somme + val ftq 55 Conclusion: Quelques leçons à retenir Le moule d'un algorithme Algorithme AuNomEvocateur {Cet algorithme fait..............en utilisant telle et telle donnée.........} Constantes Variables Début {préparation du traitement : saisies,....} {traitements, si itération, la décrire } {présentation des résultats: affichages,... } Fin • Il faut avoir une écriture rigoureuse • Il faut avoir une écriture soignée : respecter l’indentation • Il est nécessaire de commenter les algorithmes • Il existe plusieurs solutions algorithmiques à un problème posé • Il faut rechercher l’efficacité de ce que l’on écrit 56 FIN 57