Algo Algorithme Chapitre 1 : du problème au programme en passant par l'algorithme I. Introduction Soit un problème concret à résoudre : Énoncé brut du problème Analyse Trouver un énoncé moins complexe, plus précis, obtenu par décomposition en sous-problèmes Algorithme Programmation Programme Écrit avec un langage de programmation connu de la machine + Machine 1. Rôle : transformer le programme en un code exécutable par la machine Analyse a. Définition C'est un processus d'étude d'un problème en vue d'obtenir un moyen de le résoudre sous forme d'étapes très précises décrites dans un langage et compréhensible par un programmeur. Algo On obtient de ce fait un algorithme. Problème : une tâche à résoudre La phase d'analyse contient une étape préliminaire appelée pré-étude : elle permet d'identifier le résultat souhaité et les données (informations) qui conçurent à l'obtenir. Exemple : gestion simplifiée d'une facture téléphonique : Résultat : montant à payer Données : montant abonnement, prix unité, nombre d'unités consommées. b. Forme d'analyse Il existe 2 formes d'analyse : L'analyse guidée par le(s) résultat(s) Résultat(s) --> donnée(s) Décomposition : Résultat 1 Résultat a ------- Donnée 1 Résultat b ------- Donnée 2 ------- Donnée P Résultat 2 ... ... ... Résultat Résultat 3 Résultat 4 Résultat n L'analyse par le résultat correspond à une décomposition d'un problème en sous-problèmes moins complexes à résoudre et ainsi de suite pour chaque sous-problème jusqu'à arriver aux données. L'analyse guidée par la(les) donnée(s) Donnée 1 Résultat 1 Donnée 2 Résultat 2 Donnée P Résultat n Résultat Algo 2. Notion d'algorithme Définition d'un algorithme (d'après D.E. Knuth, une des personnes de l'informatique de l'Université de Stanford, 1968, 1973. Il a donné une liste de 5 propriétés largement reconnues comme prérequises d'un algorithme) : 1) Finitude : un algorithme doit toujours se terminer après un nombre fini d'étapes. 2) Définition précise : chaque étape d'un algorithme doit être défini de manière très précise, les actions doivent être très bien spécifiées et être sans ambiguïtés pour chaque cas 3) Entrées : ce sont des quantités (informatiques) données ) l'algorithme avant qu'l ne commence 4) Sortes : ce sont des quantités (informatiques) qui ont une relation spécifique avec les entrées 5) Rendement : toutes les opérations qu'il doit accomplir doivent être suffisamment basiques pour être réalisée dans une durée finie par un homme utilisant du papier et un crayon. En d'autres termes, un algorithme est un ensemble de règles ayant les caractéristiques suivantes : Il doit être fini et terminé après un nombre fini d'opérations Il doit être défini et précis : chaque opération est spécifiée sans ambiguïtés Les champs d'application des données sont précisées sans ambiguïtés Il doit être effectif : toutes les opérations doivent pouvoir être faites par l'utilisateur. II. Algorithme et méthode 1. Syntaxe Un algorithme sera composé de 3 parties : Instructions : les différentes étapes de résolution Ordonnancement : indique l'ordre selon lequel doivent se dérouler les différentes étapes Lexique : identifie les différents objets (données ou résultats) manipulées Un algorithme est identifié par un nom Forme : Algo nomAlgo Définitions (ou instructions) Ord Lexique Numéro Les objets d'ordre Deux types d'analyse <==> deux types d'algorithmes, Algo 2. Exemple : facture téléphonique Résultat : montant à payer Données : montant de l'abonnement, prix de l'unité, nombre d'unités consommées a. Analyse par résultat Algo Facture Résultat : montant à payer Ord 4 Lexique montantPaye (réel) montantPaye = montantAbonnement + prixConso 3 prixConso (réel) prixConso = nombreUnite * prixUnite 2 Données : montantAbonnement, prixUnite, nombreUnite 1 nombreUnite (entier) prixUnite (réel) b. montantAbonnement (réel) Analyse par données Algo Facture Données : montantAbonnement, prixUnite, nombreUnite Ord 1 Lexique montantPaye (réel) prixConso (réel) prixConso = nombreUnite * prixUnite 2 montantPaye = montantAbonnement + prixConso 3 Résultat : montant à payer 4 nombreUnite (entier) 3. prixUnite (réel) montantAbonnement (réel) Notion de variable Définition : une variable est un nom qui permet d'identifier un objet manipulé dans un algorithme. L'objet possède une valeur qui peut changer dans le temps dans l'algorithme qui l'utilise. Schématisation : on peut représenter à l'aide d'une boîte (qui correspond à un moment de la programmation à l'emplacement mémoire de l'ordi). Contenu (contenu qui correspond à la valeur de l'objet) Algo 4. Une première instruction : l'affectation Définition : c'est l'instruction qui permet d'associer une valeur à une variable. La valeur peut être une valeur constante, ou une valeur calculée. Symbole utilisé : <-Utilisation : nomVariable <-- valeur Sens : La variable prend la valeur X Ou : la valeur X est affectée à la variable Nom d'une variable : chaîne de caractère alphanumérique. Exemples : prixConso, a, AB_40, xy, prix_Unite, montant_abonnement, titi, etc... PrixConso <-- nombreUnite * prixUnite Remarque : dans un lexique, définir a comme variable ne signifie pas que a contient une valeur. Notion de constante : On peut associer un nom à une valeur constante et manipuler cette valeur uniquement à travers son nom dans l'algorithme. Exemple : On peut associer le nom pi à la valeur 3.14 5. Notion de type La forme du contenu d'une variable est définie par le concept du type. À toute variable est associé un type. Les types permettent de définir : L'ensemble des valeurs que pourra prendre la variable (domaine de définition) L'ensemble des opérations applicables à la variable La forme des représentations (ou "codage") en mémoire d'ordinateur Les types simples : Entiers Réels Caractère Chaîne Algo Dans un lexique d'algorithme, la définition d'un objet se fera comme suit : nomVariable (type);commentaire nomConstante (cste/type = valeur);commentaire 6. Opération de communication avec l'extérieur But : permettre de : Récupérer les données (par exemple à partir d'un clavier) => "lire" Afficher les résultats (par exemple sur un écran) => "écrire" Lire écrire Mémoire centrale (saisir, entrer) (afficher, visualiser) affectation Lire : modifie la contenu d'une variable Écrire : ne modifie pas le contenu de la variable syntaxe : Lire (a) Lire (a, b) Écrire (a) Écrire (a, b) III. Définition conditionnelles Ou primitive conditionnelles. Exemple : calcul de la paie (très simplifiée) Données : nom, nombre d'heures œuvrées, salaire horaire, taux de retenue, montant du plafond, prime. Résultat : nom, salaire brut, salaire net. Analyse par le raisonnement Algo (RSS = retenue sécurité sociale) Algo Facture Écrire(nom, salaireBrut, salaireNet) Ord 7 Lire (nom) 1 salaireBrut <-- nombreHeures * salaireHoraire 4 lire (nombreHeures, salaireHoraire) 2 salaireNet <-- salaireBrut -RSS + prime 6 Si salaireBrut ≤ plafond alors | RSS <-- salaireBrut * tauxDeRetenue1 Sinon | RSS <--(salaireBrut - plafond) * | tauxDeRetenue2 + plafond * | tauxDeRetenue1 Fin si 5 lire (prime, plafond) 3 Syntaxe : Conditionnelle simple : si condition vérifiée alors | actions fin si Exemple : si a > 8 alors | écrire (b) fin si Conditionnelle avec alternative : si condition vérifiée alors | actions 1 Sinon | actions 2 fin si Lexique Algo Conditionnelle avec alternative multiple : si condition vérifiée alors | actions 1 Sinon si condition2 vérifiée alors | actions 2 Sinon si condition3 vérifiée alors | actions 3 Sinon | actions 4 fin si ou : si condition vérifiée alors | actions 1 sinon | si condition2 vérifiée alors | | actions 2 | sinon | | si condition3 vérifiée alors | | | actions 3 | | fin si | fin si fin si IV. Le choix multiple Si une variable peut prendre différentes valeurs et que chaque valeur détermine un traitement différent, on utilise l'instruction de choix multiple pour définir le traitement à effectuer Exemple : soit a la variable de typer entier : a = 2 => on fait le traitement 1 a = {2, 3} => on fait le traitement 2 a = [6; 20] => on fait le traitement 3 Algo On l'exprime comme suit : cas a parmi | 2 : écrire(...) | 3,4 : b <-- 8 | 6,... 20 : lire (b) fin cas Syntaxe : cas variable parmi | valeur 1 : traitement 1 | valeur 2 : traitement 2 | valeur 3 : traitement 3 | valeur 5 : traitement 4 | autre : traitement n fin cas Remarque : sa variable doit être de type scalaire.