INFOR 101 Chapitre 2 Marianne Morris 1 L’informatique Web et réseaux Systèmes d’exploitation Intelligence Artificielle Théorie informatique Graphiques Algorithmes Méthodes numériques Robotiques Génie informatique Jeux vidéo Bioinformatique Informatique médicale 2 Que font les informaticiens? Toutes sortes d’applications Médicale Biologique Physique Agriculture Pédagogique Astronomique Climatologique Robotique 3 INFOR 101 Algorithmes et Pseudocode Programmation en C++ Architecture de l’ordinateur Langage assembleur Intro aux réseaux et à l’intelligence artificielle 4 Révision du Chapitre 1 Objectifs: Définir l’informatique Introduction aux algorithmes L’histoire des sciences informatiques 5 Révision du Chapitre 1 Introduction Idées fausses: L’informatique est l’étude des ordinateurs L’informatique c’est apprendre à écrire des programmes L’informatique est l’étude des applications de l’ordinateur et des logiciels 6 Révision du Chapitre 1 Définition de l’informatique L’étude des algorithmes Propriétés mathématiques et formelles Réalisation de matériel Construire des systèmes pour exécuter les algorithmes Réalisations linguistiques Comportement des algorithmes (corrects, efficaces) Traduire les algorithmes en langage programmation Applications Créer des logiciels pour aider à résoudre les problèmes 7 Révision du Chapitre 1 Sommaire L’informatique est l’étude d’algorithmes …et non pas l’étude des ordinateurs!!! Un algorithme est une séquence d’opérations qui peuvent être exécutées efficacement pour produire un résultat et terminer dans un temps défini 8 Révision du Chapitre 1 Sommaire Si on arrive à spécifier un algorithme pour résoudre un problème particulier, on pourrait automatiser la solution …et employer un agent pour l’exécuter Les ordinateurs se sont développés originairement de calculatrices mécaniques en merveilles électroniques miniatures! 9 Intro au chapitre 2 Algorithmes Pseudocode Opérations en séquence Opérations de condition Opérations itératives 10 Chapitre 2 Pseudocode Construction d’un programme En langage naturel Usage de syntaxe de programmation? Exemple de pseudocode: Entrer la valeur pour x et y z=x+y Imprimer à l’écran la valeur de z 11 Chapitre 2 Opérations en séquence Opérations multiples dans un ordre particulier et qui se font l’une après l’autre Exemple d’opérations en séquence: Lire des valeurs pour x et y à l’écran Additionner les valeurs de x et de y Assigner la somme à une variable z Imprimer à l’écran la valeur de z 12 Chapitre 2 Opérations de condition Condition: Si… donc fais quelque chose Exemple d’opérations de condition: Lire les valeurs pour x et y Si y = 0 Imprimer à l’écran «impossible de diviser» D’ailleurs Calculer x / y Assigner z à la valeur de la division Imprimer la valeur de z à l’écran 13 Chapitre 2 Opérations itératives Itératives: répétition de la même étape Exemple d’opérations itératives: Tandis que x = 0 { Imprimer à l’écran « Entrer une valeur x plus petite ou plus grande que zéro! » Lire une autre valeur pour x } 14 Chapitre 2 Représentation des algorithmes Résolution de problèmes en utilisant des algorithmes Multiplication de deux nombres Rechercher des listes Trouver le max et le min Comparaison avec motifs connus (Pattern-matching) 15 Représentation des algorithmes En langage naturel Langage quotidien parlé et écrit Ex: français, anglais, espagnol, arabe, etc. Problèmes Verbosité Imprécision Sens des mots varie selon le contexte 16 Figure 2.1 The Addition Algorithm of Figure 1.2 Expressed in Natural Language 17 Représentation des algorithmes Programmation en langage évolué Ex: C++ et Java Problèmes: Les défis de syntaxe et de connaissance de langage surtout pendant la conception initiale du programme 18 Figure 2.2 The Beginning of the Addition Algorithm of Figure 1.2 Expressed in a High-Level Programming Language 19 Pseudocode En anglais… ressemble à la plupart des langages de programmation Structure Étapes numérotées et bien espacées Aucune exigence de syntaxe 20 Pseudocode Moins ambigu et plus facile à lire que le langage naturel Emphase sur la procédure et non pas sur la notation ou la syntaxe! Aider au raisonnement logique et à mieux comprendre le comportement de l’algorithme Facilement traduit en langage de programmation 21 Opérations de calcul (en séquence) Exemple Assigner à une variable la valeur d’une expression arithmétique Une variable Une adresse dans la mémoire pour le stockage des données qui a un nom et qui garde la valeur de ces données 22 Opérations en séquence Opérations d’entrée Recevoir des données du monde extérieur Exemple Obtenir la valeur r, le rayon d’un cercle Opérations de sortie Envoie des données au monde extérieur Exemple Imprimer la valeur de la surface d’un cercle 23 Figure 2.3 Algorithm for Computing Average Miles per Gallon 24 Opérations de condition et opérations itératives Tandis que les opérations en séquence sont exécutées « en ligne droite » i.e. du début jusqu’à la fin de l’algorithme en séquence des instructions Les opérations itératives et celles de condition sont des structures de contrôle Condition: « If… else » Si + condition = résultat; d’ailleurs fais autre chose… Itérations: boucle (loop) Répétition d’un bloc d’instructions 25 Opérations de condition et opérations itératives Éléments d’une boucle (loop) Condition de continuation Structure de la boucle Boucle infinie La condition ne devient jamais fausse Erreur!!! 26 Figure 2.5 Second Version of the Average Miles per Gallon Algorithm 27 Figure 2.7 Third Version of the Average Miles per Gallon Algorithm 28 Opérations de condition et opérations itératives Prétester une boucle Tester la condition au début de chaque passe à travers la boucle La boucle peut ne jamais être exécutée Boucle « while » Post-tester une boucle Tester la condition à la fin de chaque passe La boucle devrait être exécutée au moins une fois Boucle « do – while » 29 Figure 2.9 Summary of Pseudocode Language Instructions 30 Exemples de résolution de problèmes algorithmique Multiplication de deux nombres en utilisant l’addition répétitive Recherche en séquence pour trouver une valeur particulière dans une collection non ordonnée Trouver la valeur max dans une collection de données Déterminer si et où un motif se trouve dans un morceau de texte (pattern-matching) 31 Exemple 1: Multiplication Objectif: Construire un algorithme pour multiplier deux nombres a et b en utilisant l’addition répétée Étapes: Créer une boucle qui s’exécutera exactement b fois et qui ajoutera chaque fois la valeur a à un total t Note: la valeur t augmente par une valeur a chaque fois la boucle est exécutée 32 Figure 2.10 Algorithm for Multiplication via Repeated Addition 33 Exemple 2: Rechercher une liste Objectif: Trouver le nom d’une personne dans une liste non ordonnée de numéros de téléphones d’abonnés Étapes: Commencer par la première entrée dans la liste, y vérifier le nom et répéter la même procédure pour toutes les entrées 34 Exemple 2: Rechercher une liste Recherche naïve (en séquence) Pour chaque entrée dans la liste, une section de l’algorithme vérifie si on a trouvé la bonne valeur ou l’élément Problèmes: L’algorithme est utile pour les listes qui contiennent un seul élément On exécute la même opération plusieurs fois! 35 Exemple 2: Rechercher une liste Recherche correcte (en séquence) Utiliser des itérations pour simplifier… Référer aux éléments de la liste par des indexes ou des pointeurs Considérer les cas spéciaux (ex: le nom n’a pas du tout été trouvé dans la liste) Utiliser une variable « found » pour terminer les itérations aussitôt qu’on trouve la valeur qu’on cherche 36 Figure 2.13 The Sequential Search Algorithm 37 Exemple 2: Rechercher une liste Quel algorithme exécuter pour résoudre un problème particulier? La réponse dépend bien des données dans la liste qu’on recherche et de la manière dont les données sont organisées dans cette liste Les problèmes sont variés – il faut être flexible et créatif! 38 Exemple 3: La valeur max Objectif: Trouver la plus grande valeur dans une liste de données Étapes: Initialiser la plus grande valeur à la première entrée dans la liste Conserver un suivi de la valeur max vue jusqu’à présent Comparer chaque valeur dans la liste à la plus grande valeur vue jusqu’à présent et assigner la valeur la plus large à la valeur max 39 Exemple 3: La valeur max Utiliser des itérations et les indexes des données dans la liste (comme on a fait dans exemple 2) Update de deux variables constamment pendant les itérations de la boucle « location » et « largest » 40 Figure 2.14 Algorithm to Find the Largest Value in a List 41 Exemple 4: Pattern-matching Objectif: Trouver un motif (s’il y en a) dans une string plus longue de texte Exemple: TTAAGCAAGGCCTTGGGAATT Étapes: Essayer de trouver le motif dans toutes les positions possibles dans le texte À chaque position, comparer les lettres du motif avec celles du texte 42 Exemple 4: Pattern-matching Deux boucles l’une à l’intérieur de l’autre Boucle extérieure: itérations à travers toutes les positions possibles de strings qui peuvent correspondre au motif Boucle intérieure: itérations à travers toutes les lettres des strings et celles des motifs pour vérifier si elles correspondent les unes aux autres 43 Figure 2.16 Final Draft of the Pattern-Matching Algorithm 44 Notes pratiques Une fois qu’on a construit un algorithme, on peut utiliser celui-ci pour développer des algorithmes plus sophistiqués Librairie Une collection d’algorithmes utiles Un instrument important pour le développement d’algorithmes 45 Notes pratiques Méthode descendante (top-down) Pour résoudre des problèmes compliqués Brouillon de l’algorithme pour réfléchir aux opérations de haut niveau Élaborer les opérations de haut niveau après avoir développé un schéma brouillon de l’algorithme Répéter jusqu’à ce que toutes les opérations de haut niveau soient développées à partir d’opérations plus simples 46 Sommaire Développement d’algorithmes Corrects et efficaces Plusieurs étapes inclues pseudocode, brouillon et copies plus évoluées! Utiliser des méthodes descendantes (top-down) Utilisation du pseudocode Pour aider à développer des algorithmes Lisible, non ambigu, facile à analyser 47 Importance des exercices Noter que les exemples dans ce chapitre et les deux exercices 1 et 2 dans les prochaines pages (diapo # 49 et 50 dans cette présentation) sont importants pour la pratique et pour votre compréhension des concepts aussi bien que pour l’examen! 48 Exercice 1: Exponentiel Développez un algorithme pour calculer la valeur exponentielle d’un nombre donné Demandez à l’utilisateur d’entrer deux valeurs: le nombre et la puissance Utiliser une boucle dans votre algorithme… Imprimez à l’écran de l’ordinateur le résultat de l’opération exponentielle 49 Exercice 2: Recherche et pattern-matching Trouver si la séquence de lettres existe dans une liste de lettres alphabétiques Séquence de lettres: « abbd » Liste contient un nombre N de lettres Algorithme: Lire N à l’écran Rechercher la liste en utilisant une boucle et des conditions « if… else » Imprimer « found » ou « not found » à l’écran 50 Labo # 2 Déroulement d’algorithmes Voir le manuel de labos exercices du labo 2 Problèmes additionnels distribués pendant la session de labo Il faut me donner vos solutions des exercices du labo 2 vers la fin de la session du labo pour que je corrige votre travail (valeur 3%) 51 Intro au chapitre 3 Attributs des algorithmes Importance de maintenir ces attributs Mesurer l’efficacité des algorithmes Exemples pratiques Distribution du devoir # 1 52