Algorithmique et structures de données I Riadh Ben Messaoud Université 7 novembre à Carthage Faculté des Sciences Économiques et de Gestion de Nabeul 1ère année Licence Fondamentale IAG 1ère année Licence Appliquée IAG Année universitaire 2009 – 2010 R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 1 / 17 Plan du cours 1 Introduction 2 Environnement algorithmique 3 Variables 4 Structures conditionnelles 5 Structures itératives 6 Tableaux 7 Sous-programmes 8 Mode de passage de paramètres R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 2 / 17 Plan du cours 1 Introduction 2 Environnement algorithmique 3 Variables 4 Structures conditionnelles 5 Structures itératives 6 Tableaux 7 Sous-programmes 8 Mode de passage de paramètres R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 3 / 17 Sous-programmes Exemple introductif Imaginons qu’au cours d’une application, nous ayons – plusieurs fois – besoin de saisir un tableau de 10 entiers. Mais à chaque fois, un tableau différent. Algorithme Application Exemple ... Pour i ← 0 à 9 Faire Ecrire (“Entrez l’entier numéro ” ; i + 1) Lire (A(i)) Fin Pour ... Pour i ← 0 à 9 Faire Ecrire (“Entrez l’entier numéro ” ; i + 1) Lire (B(i)) Fin Pour ... Pour i ← 0 à 9 Faire Ecrire (“Entrez l’entier numéro ” ; i + 1) Lire (C(i)) Fin Pour ... Est-ce qu’on peut utiliser une fonction ? R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 4 / 17 Sous-programmes Exemple introductif Une fonction permettant de remplir un tableau de 10 entiers ? Quelle serait la valeur renvoyée par la fonction ? Une fonction ne peut renvoyer qu’une seule valeur à la fois. Une fonction ne peut donc renvoyer un tableau, qui est une série de valeurs distinctes. . . . I Il faut créer une sous-programme qui ne renvoie aucune valeur ou qui en renvoie plusieurs I Il faut donc avoir recours non à une fonction, mais à une procédure. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 5 / 17 Sous-programmes Les procédures Présentation d’une procédure : Appel d’une procédure dans un algorithme : Procédure Nom Procédure(. . . ) ... Fin ... Appeler Nom Procédure(. . . ) ... Alors qu’une fonction se caractérise par les mots-clés Fonction . . . Fin, une procédure est identifiée par les mots-clés Procédure . . . Fin. Lorsqu’une fonction est appelée, sa valeur retournée est toujours affectée à une variable ou intégrée dans le calcul d’une expression. L’appel à une procédure, est – au contraire – toujours une instruction autonome. I “Exécute la procédure machin” est un ordre qui se suffit à lui-même. Toute fonction doit, comporter l’instruction Renvoyer. Cette instruction n’est jamais utilisée dans une procédure. La fonction est une valeur calculée qui renvoie son résultat vers l’algorithme principal. La procédure est un traitement. Elle ne “vaut” rien. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 6 / 17 Sous-programmes Les procédures Qu’est-ce qu’on met dans les parenthèses d’une procédure à la place des points de suspension, aussi bien dans la déclaration de la procédure que dans l’appel ? Les outils qui vont permettre l’échange d’informations entre l’algorithme principal et la procédure. De même qu’avec les fonctions, les valeurs qui circulent depuis l’algorithme appelant vers la procédure appelée se nomment des arguments, ou des paramètres en entrée de la procédure. Dans une procédure, on peut être amené à vouloir renvoyer des résultats vers l’algorithme principal. Or, la procédure, en tant que telle, ne “renvoie” rien du tout ! ! Les résultats que la procédure doit transmettre devront être véhiculés par des paramètres. I Il s’agit de paramètres en sortie. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 7 / 17 Sous-programmes Les procédures Définition Toute procédure possédant un et un seul paramètre en sortie peut être écrite sous forme d’une fonction. Problème Comment fait-on pour faire comprendre à un langage de programmation quels sont les paramètres qui doivent fonctionner en entrée et quels sont ceux qui doivent fonctionner en sortie ? R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 8 / 17 Plan du cours 1 Introduction 2 Environnement algorithmique 3 Variables 4 Structures conditionnelles 5 Structures itératives 6 Tableaux 7 Sous-programmes 8 Mode de passage de paramètres R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 9 / 17 Mode de passage de paramètres Introduction Pour bien interpréter une procédure, un language de programmation a besoin de savoir le mode de passage de ses paramètres. Il existe deux modes de passage de paramètres pour une procédure : 1 le passage par valeur ; 2 le passage par référence. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 10 / 17 Mode de passage de paramètres Passage par valeur Écrivons une procédure qui permet d’afficher un message à l’utilisateur en utilisant un paramètre Msg dont la transmission doit se faire par valeur. Procédure Affiche Message(Msg : chaı̂ne par valeur) Ecrire (Msg) Fin I Pour faire appel à cette procédure dans l’algorithme principal : Algorithme Algo Principal Var : M : chaı̂ne Début ... M ← “Êtes-vous marié ?” Appeler Affiche Message(M) ... Fin R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 11 / 17 Mode de passage de paramètres Passage par valeur Quand l’algorithme principal fait appel à la procédure Affiche Message : La procédure crée une variable Msg qui sera affecté avec le même contenu de la variable M. Msg est une copie de M. Les informations qui étaient contenues dans M ont été intégralement recopiées dans Msg. Cette copie subsistera tout au long de l’exécution de la procédure Affiche Message et sera détruite à la fin de celle-ci. I Si la procédure Affiche Message contenait une instruction qui modifiait le contenu de la variable Msg, cela n’aurait aucune répercussion sur l’algorithme principal en général et sur la variable M en particulier. I La procédure ne travaillant que sur une copie de la variable qui a été fournie par l’algorithme principal, elle est incapable, même si on le souhaitait, de modifier la valeur de celle-ci. I Dans une procédure, un paramètre passé par valeur ne peut être qu’un paramètre en entrée. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 12 / 17 Mode de passage de paramètres Passage par valeur Écrivons une procédure qui permet d’afficher l’entier suivant un entier transmis par un algorithme. Procédure Nombre Suivant(A : entier par valeur) A←A+1 ‘Modification de la valeur de A Ecrire (“Le nombre suivant est ” ; A) Fin Algorithme Algo Principal Var : N : entier Début N←5 Appeler Nombre Suivant(N) ‘Affichage de la valeur 6 (5 + 1) Ecrire (“La valeur de la variable N est ” ; N) ‘N est toujours égale à 5 Fin R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 13 / 17 Mode de passage de paramètres Passage par référence Écrivons une procédure qui permet de saisir une réponse Oui ou Non de l’utilisateur. Procédure Rep Oui Non(Truc : chaı̂ne par référence) Répéter Lire (“Tapez Oui ou Non.” ; Truc) Jusqu’à (Truc = “Oui” OU Truc = “Non”) Fin I Pour faire appel à cette procédure dans l’algorithme principal : Algorithme Algo Principal Var : T : chaı̂ne Début Appeler Rep Oui Non(T) ... Fin R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 14 / 17 Mode de passage de paramètres Passage par référence Quand l’algorithme principal fait appel à la procédure Rep Oui Non : Le fait qu’il s’agisse d’un passage par référence fait que la variable Truc ne contiendra pas la valeur de T, mais son adresse, c’est-à-dire sa référence. I Toute modification de Truc sera immédiatement redirigée sur T. I Truc n’est pas une variable ordinaire : elle ne contient pas de valeur, mais seulement la référence à une valeur, qui elle, se trouve ailleurs (dans la variable T). I Il s’agit d’un nouveau genre de variable appelé pointeur. I Tous les paramètres passés par référence sont des pointeurs. Important A partir du moment où une variable est considérée comme un pointeur, toute affectation de cette variable se traduit automatiquement par la modification de la variable sur laquelle elle pointe. R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 15 / 17 Mode de passage de paramètres Passage par référence Écrivons une procédure qui permet d’afficher une question (message) à l’utilisateur et de saisir la réponse de ce dernier par Oui ou Non. Procédure Rep Oui Non(Msg : chaı̂ne par valeur, Truc : chaı̂ne par référence) Ecrire (Msg) Répéter Lire (“Tapez Oui ou Non.” ; Truc) Jusqu’à (Truc = “Oui” OU Truc = “Non”) Fin Algorithme Algo Principal Var : M, T : chaı̂ne Début M ← “Êtes-vous marié ?” Appeler Rep Oui Non(M, T) Fin R. Ben Messaoud (FSEGN) ‘M n’est pas modifiée. T est modifiée. Algorithmique I 2009 – 2010 16 / 17 Mode de passage de paramètres Format général Format général d’une procédure : Procédure Nom Procédure(Arg 1 : Type par Mode Passage, Arg 2 : Type par Mode Passage, . . . ) Var : [Variables Locales] ... [Traitements] ... Fin I Pour appeler une procédure dans l’algorithme principal : Appeler Nom Procédure(Var 1, Var 2, . . . ) R. Ben Messaoud (FSEGN) Algorithmique I 2009 – 2010 17 / 17