1 INFOR 101 Chapitre 2 Marianne Morris
2 L’informatique WWeb et réseaux SSystèmes d’exploitation IIntelligence Artificielle TThéorie informatique GGraphiques AAlgorithmes MMéthodes numériques RRobotiques GGénie informatique JJeux vidéo BBioinformatique IInformatique médicale
3 Que font les informaticiens? Toutes sortes d’applications MMédicale BBiologique PPhysique AAgriculture PPédagogique AAstronomique CClimatologique RRobotique
4 INFOR 101 Algorithmes et Pseudocode Programmation en C++ Architecture de l’ordinateur Langage assembleur Intro aux réseaux et à l’intelligence artificielle
5 Révision du Chapitre 1 Objectifs: Définir l’informatique Introduction aux algorithmes L’histoire des sciences informatiques
6 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
7 Révision du Chapitre 1 Définition de l’informatique L’étude des algorithmes Propriétés mathématiques et formelles Comportement des algorithmes (corrects, efficaces) Réalisation de matériel Construire des systèmes pour exécuter les algorithmes Réalisations linguistiques Traduire les algorithmes en langage programmation Applications Créer des logiciels pour aider à résoudre les problèmes
8 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
9 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 agent …et employer un agent pour l’exécuter Les ordinateurs se sont développés originairement de calculatrices mécaniques en merveilles électroniques miniatures!
10 Intro au chapitre 2 Algorithmes Pseudocode Opérations en séquence Opérations de condition Opérations itératives
11 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 Entrer la valeur pour x et y z = x + y Imprimer à l’écran la valeur de z
12 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 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
13 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 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
14 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 }
15 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)
16 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
17 Figure 2.1 The Addition Algorithm of Figure 1.2 Expressed in Natural Language
18 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
19 Figure 2.2 The Beginning of the Addition Algorithm of Figure 1.2 Expressed in a High-Level Programming Language
20 Pseudocode En anglais… ressemble à la plupart des langages de programmation Structure Étapes numérotées et bien espacées Aucune exigence de syntaxe
21 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
22 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
23 Opérations en séquence Opérations d’entrée Recevoir des données du monde extérieur Exemple r 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
24 Figure 2.3 Algorithm for Computing Average Miles per Gallon
25 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 contrôle 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
26 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!!!
27 Figure 2.5 Second Version of the Average Miles per Gallon Algorithm
28 Figure 2.7 Third Version of the Average Miles per Gallon Algorithm
29 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 »
30 Figure 2.9 Summary of Pseudocode Language Instructions
31 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)
32 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 t a Note: la valeur t augmente par une valeur a chaque fois la boucle est exécutée
33 Figure 2.10 Algorithm for Multiplication via Repeated Addition
34 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
35 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!
36 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
37 Figure 2.13 The Sequential Search Algorithm
38 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!
39 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
40 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 »
41 Figure 2.14 Algorithm to Find the Largest Value in a List
42 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
43 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
44 Figure 2.16 Final Draft of the Pattern-Matching Algorithm
45 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
46 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
47 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
48 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!
49 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
50 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
51 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%)
52 Intro au chapitre 3 Attributs des algorithmes Importance de maintenir ces attributs Mesurer l’efficacité des algorithmes Exemples pratiques Distribution du devoir # 1