Algorithme et programmation : Introduction : Qu'est-ce qu'un algorithme : Le mot « algorithme » vient d'un astronome indien qui a écrit un ouvrage sur des procédés de calculs. Al Khorizmi → Algorithme = procédé de calculs Un algorithme décrit des actions que l'on veut voir exécutées par une machine pour obtenir des résultats à partir de données. Il peut être de différents types : numériques, textuels, graphiques, etc... Un algorithme est donc une spécification d'une suite d'actions élémentaires (= primitives) pour réaliser un traitement. Un programme est un ensemble de déclarations (=instructions) dans un langage donné (C, C++, Java,...) sur une machine l'utilisant pour exécuter un certain travail. Bien analyser un problème : Analyser un problème = Bien comprendre ce que le client souhaite et définir convenablement les différentes étapes. Il faut mettre un évidence tout les objets (=trucks) que l'on va manipuler, ils sont supposés connus au départ + les objets que l'on espère obtenir. Il faut ensuite décrire les traitements effectués. • L'analyse descendante : correspond au fait de décomposer un problème donné en sousproblèmes plus simples à résoudre. Et ça jusqu' à obtenir des problèmes élémentaires. • Démarche descendante : - Décomposer en sous-problème - Résoudre chaque sous-problème - Combiner les solutions La codification (ou codage) : permet d'avoir un programme écrit dans un langage compréhensible par un ordinateur (donc exécutable). → notion de syntaxe Lors de l'exécution on peut obtenir : – Les résultats sont ceux attendus – Erreurs syntaxiques (=pas de résultats) modifier le programme – Erreurs sémantiques (=résultats différents de ceux escomptés) modifier l'algorithme Sans algorithme il n'y a pas de programme, il est écrit dans un langage indépendant de celui du programme. On utilise un pseudo-langage ou LDA (Langage de Description d'Algorithme). On considère alors une machine abstraite qui comprend le LDA et peut effectuer un certain nombre d'actions. Ce pseudo-langage doit être indépendant de toute machine (soit de tout langage lié), compréhensible de tous (=universel) et suivre un ensemble de règles qui définissent : 1. Les objets manipulés (variables, etc...) 2. La façon dont on les manipulent (=opérateurs) 3. La façon dont on écrit les instructions, expressions, affectations 4. La façon dont on communique avec la machine et dont elle communique avec l'utilisateur, les entrées-sorties Un processeur est une entité capable de comprendre les opérations élémentaires énoncées et de les exécuter. Un processus de calculs (ou calculs) est une exécution d'un algorithme, soit une réalisation particulière d'un enchaînement d'étapes élémentaires. Une description finie peut entraîner l'exécution infinie d'étapes élémentaires. Un programme est indissociable de la machine capable de le décoder, son langage est souvent peu lisible. Concepts de base : I / Objets manipulés : • Les littéraux : des nombres, des mots,... exemple : 33, 45.2, " bonjours ", 'c',... • Les entités nommées : 1 : Constantes = données dont la valeur ne peut pas être modifiée 2 : Variables = données dont la valeur peut être modifiée par affectation ou par lecture Tout les objets sont stockés dans la mémoire de l'ordinateur. Les variables ont : Un nom ou identifiant → écrit en minuscule avec les articulations marquées par des majuscules. Exemple : nombre, positionElément,... Une valeur Un type qui caractérise l'ensemble des valeurs et des opérations possibles. Les constantes ont : Un nom ou identifiant → écrit en majuscules avec les articulations marquées par des _. Exemple : PI, TAUX_TVA,... Une valeur qui ne peut pas être changée et qui est spécifiée à la déclaration (=début de l'algorithme). II / Types : Domaine = ensemble de valeurs Type = Domaine + ensemble d'opérations applicables sur ces valeurs exemple : « entier » désigne l'ensemble des entiers relatifs Z (presque), muni d'opérations arithmétiques usuelles (+, -, *, etc...). A chaque variable on doit associer un type qu'on ne pourra plus changer. • Entier : Tous les entiers possibles Opérations : +, -, *, div, mod, ** exemples : 12 div 3 = 4, 12 mod 3 = 0, 13 div 3 = 4, 13 mod 3 = 1 Comparaison : ==, !=, <, <=, >, >= • Réels : Tous les réels possibles Opérations : +, -, *, / Comparaison : ==, !=, <, <=, >, >= • Booléen : Deux valeurs VRAI ou FAUX (ou 0 et 1) Opérations : ET ( ), OU ( ), NON ( ) Tables de vérité : Vrai Faux Vrai Faux Faux Vrai Vrai Faux ET Faux Faux Vrai Faux OU Vrai Vrai Vrai Faux Involution : a= a NON NON a = a Loi de Morgan : (a b)= a b NON (a OU b) = NON a ET NON b (a b)= a b NON (a ET b) = NON a OU NON b Distributivité des opérateurs : a (b c)=(a b) (a c) a ET (b OU c) = (a ET b) OU (a ET c) a (b c)=(a b) (a c) a OU (b ET c) = (a OU b) ET (a OU c) NON Vrai Faux Faux Vrai (le contraire du contraire) III / Environnements Formalisation de l'environnement d'un problème : L'environnement d'un algorithme doit être défini par l'ensemble des objets algorithmiques permettant de manipuler les données et les résultats d'un problème par des actions primitives. Nom Rôle Type IV / Actions primitives (Algorithme) Un algorithme est composé d'une en-tête et d'un corps. L'en-tête spécifie : – le nom : algorithme : nomAlgo – l'utilité : rôle : calcul de.... – l'environnement : les objets utiles à l'algorithme Le corps est composé : – Du mot clef : Début – D'une suite d'instructions (=expressions) indentées (=alignées) – Du mot clef : Fin Affecter (←) : Permet de donner pour la première fois une valeur à une variable ou de modifier la valeur déjà contenue dans une variable V←E E (la valeur à affecter) peut-être une constante, le nom d'une autre variable, une expression arithmétique décrivant un calcul à effectuer. V←4 V←E V←5*E+10 On ne peut affecter que des objets d'un même type