Les sous-programmes Chapitre n° 5: Objectifs : Activité: Décomposer un problème en sou-problèmes élémentaires. Présenter les solutions sous formes de procédures et de fonctions. Présenter les solutions sous formes d'algorithmes puis de programmes Pascal. Activité: Deux entiers naturels m et n strictement positifs sont dits nombres amis si et seulement si : La somme des diviseurs de m sauf lui-même est égale à n. La somme des diviseurs de n sauf lui-même est égale à m. Écrire un programme permettant de déterminer si deux entiers naturels m et n strictement positifs sont dits nombres amis ou non.
Les sous-programmes Chapitre n° 5: Solution: Analyse du programme "amis": Résultat = Ecrire(m, " et ", n, message) sdm = [sdm0] pour i de 1 à (m div 2) faire si m mod i = 0 alors sdm sdm + i finsi fin pour 3 6 1 m = [ ] répéter m = donnée ("introduire un entier positif") jusqu'à (m > 0) 4 sdn = [sdn0] pour i de 1 à (n div 2) faire si n mod i = 0 alors sdnsdn + i finsi fin pour n = [ ] répéter n = donnée ("introduire un entier positif") jusqu'à (n > 0) 2 7 Fin amis Tableau de déclaration des objets: 5 Message = [ ] si (sdm = n) et (sdn = m) alors Message "sont amis" sinon Message " ne sont pas amis" finsi Objet Type Rôle m n Message sdm sdn i Entier Chaîne de caractères Un entier strictement positif Message amis ou non Somme des diviseurs de m Somme des diviseurs de n compteur
Les sous-programmes Chapitre n° 5: III. Introduction : Lorsqu'un problème devient de plus en plus ……… et/ou ……. ,on doit le décomposer en ………… Indépendants et de tailles réduites qu'on appelles……………………… Il existe deux types de sous programmes : Les …………. IV. Les fonctions : 1. Définition : Une fonction est un…………………… Qui renvoie au programme principal une seule valeur de type simple (entier, réel, caractère, chaîne ou booléen). complexe long modules Sous-programmes fonctions procédures Sous-programme
Les sous-programmes Chapitre n° 5: Déclaration d'une fonction : Une fonction est constituée de trois parties : La partie entête : où nous trouvons son nom qui est suivi entre parenthèses des paramètres en entrées, puis du type résultat. La partie déclarative : où tous les objets locaux de la fonction sont déclarés. La partie instruction : où nous trouvons les actions de la fonction. En PASCAL, la déclaration d'une fonction se trouve dans la partie déclarative d'un programme principal (après la déclaration des constantes, des types et des variables).
Les sous-programmes Chapitre n° 5: Vocabulaire et syntaxe : Au niveau Analyse et algorithme: 0) DEFFN Nom_fonction(paramètre formel1 : type1;….; paramètre formeln : typen): typerésultat 1) { bloc d'instruction de la fonction} n-1) Nom_fonction var_résultat n) FIN Nom_fonction. En Pascal FUNCTION Nom_fonction(paramètre formel1 : type1;…; paramètre formeln : typen) : typerésultat ; VAR {déclaration des variables locales} BEGIN { bloc d'instruction de la fonction} Nom_fonction := var_résultat ; END ;
Les sous-programmes Chapitre n° 5: Revenons à l'activité 1, on va analyser à part la partie qui est répété deux fois dans le programme "Amis" et pour but de faire la somme de tous les diviseurs d'un entier positif. Analyse de la fonction "som_div": DEF FN som_div(x:entier):entier Résultat= som_div som_div sd sd = [sd0] pour i de 1 à (x div 2) faire si x mod i = 0 alors sd sd + i finsi fin pour Fin som_div Tableau de déclaration des objets locaux: Objet Type Rôle sd i Entier Somme des diviseurs de x Compteur 2 1 3
Les sous-programmes Chapitre n° 5: Algorithme: Pascal: FUNCTION som_div(x:integer):integer; var sd,i:integer; begin sd:=0; for i:=1 to x div2 do if (x mod i =0) then sd:=sd+i; end; som_div:=sd; End; Algorithme: 0) DEFFN som_div(x:entier):entier 1) sd = [sd0] pour i de 1 à (x div 2) faire si x mod i = 0 alors sd sd + i finsi fin pour 2) som_div sd 3) Fin som_div.
Les sous-programmes Chapitre n° 5: Appel d'une fonction : L'appel d'une fonction figure obligatoirement dans une expression (affectation, instruction d'affichage, condition, boucle pour, …), en utilisant le nom de la fonction suivi de la liste des paramètres effectifs. Au niveau analyse et algorithme Var_résultat FN Nom_fonction (liste des paramètres effectifs) En pascal Var_résultat:=Nom_fonction (liste des paramètres effectifs) ;
Les sous-programmes Chapitre n° 5: Revenons à l'activité 1, le programme principal deviendra comme suit : Analyse du programme "amis": Résultat = Ecrire(m, " et ", n, message) m = [ ] répéter m = donnée ("introduire un entier positif") jusqu'à (m > 0) n = [ ] répéter n = donnée ("introduire un entier positif") jusqu'à (n > 0) Message = [ ] si (sdm = n) et (sdn = m) alors Message "sont amis" sinon Message "est ne sont pas amis" finsi …………………………… Fin amis Tableau de déclaration des objets globaux: Objet Type Rôle m n Message sdm Sdn Som_div Entier Chaîne de caractères Fonction Un entier strictement positif Message amis ou non Somme des diviseurs de m Somme des diviseurs de n Calcule la somme des diviseurs strictes d’un entier 6 1 2 5 3 sdm FN som_div(m) 4 sdn FN som_div(n) 7
Les sous-programmes Chapitre n° 5: 5. Types des objets La variable sd est utilisée uniquement au niveau de la fonction som_div, on l'appelle variable ………… Contrairement aux variables sdn et sdm, sont utilisées dans le programme principal Amis on les appelle variables …………….. Dans notre exemple: sdn et sdm : ces sont des variables ……………. sd et i : ces sont des variables ……………. A retenir: Tous les objets (constantes, variable, types) qui sont déclarés dans un sous-programme, sont utilisés qu'à l'intérieur de celui-ci : sont dit ………………… Tous les objets (constantes, variable, types) qui sont déclarés dans le programme principal, sont utilisés par le programme principal et par les sous programmes qui le forment: sont dit ……………. locale globales globales locales objets locaux objets globaux
Les sous-programmes Chapitre n° 5: 6. Types de paramètres On distingue deux types de paramètres : Les paramètres formels : Ce sont des paramètres qui figurent dans l'entête d'un sous-programme et sont utilisés dans les instructions de celui-ci et là seulement. Les paramètres effectifs : Ce sont des paramètres qui figurent dans le programme principal. Ces paramètres sont substitués aux paramètres formels au moment de l'appel du sous-programme. Donc ceux qui seront manipulés effectivement par le programme. Dans notre exemple : x : paramètre …………….. m, n : paramètres ………….. Remarque : Les paramètres effectifs et les paramètres formels doivent s'accorder du point de vue nombre et ordre. Leurs types doivent être identiques ou compatibles, selon le mode de passage des paramètres. formel effectifs
Les sous-programmes Chapitre n° 5: Mode de passage des paramètres Il existe deux modes de passages des paramètres : Mode de passage par …………. Mode de passage par ..………… Définition du mode de passage par valeur : Au moment de l'appel, seulement la valeur du paramètre effectif est copiée dans la variable du paramètre formel. Dans notre exemple, lors de l'appel de la fonction som_div (n) (ou som_div (m)), le paramètre effectif n (ou m) est transmis par valeur valeur variable
Les sous-programmes Chapitre n° 5: Retenons : Lors de l'utilisation d'une fonction il faut : Spécifier le type de la fonction (type du résultat retrouvé) Déclaré, si nécessaire une variable locale de même type que la fonction pour faire les calculs intermédiaires. (exemple : var_resultat). Obligatoirement d'affecter le résultat du traitement de la fonction au nom de celle ci avant la fin du bloc. L'appel d'une fonction se fait obligatoirement dans une expression.
Les sous-programmes Chapitre n° 5: 1. Définition: IV. Les procédures 1. Définition: Contrairement aux fonctions, la procédure ne fournit pas un résultat mais crée une action ou une suite d'actions(instructions) exécutées à l'appel dans le programme appelant. 2. Activité 2 (mode de transfert par variable) Dans l'analyse de l'activité 1 correspondant au programme principal, on remarque qu'il y'a une suite d'instructions de lecture qui figure plusieurs fois. Ce bloc peut construire un programme qu'on appel un sous-programme/module. 3. Déclaration d'une procédure : Une procédure est constituée de trois parties : La partie entête : où nous trouvons son nom qui est suivi entre parenthèses des paramètres en entrées. La partie déclarative : où tous les objets locaux de la procédure sont déclarés. La partie instruction : où nous trouvons les actions de la procédure. En PASCAL, la déclaration d'une procédure se trouve dans la partie déclarative d'un programme principal.
Les sous-programmes Chapitre n° 5: Revenons à l'activité 1, on va analyser à part la partie qui est répéter deux fois dans le programme Amis et pour but de faire la saisie des deux entier m et n. Analyse de la procédure "saisie": DEF PROC saisie(var y :entier) y = [ ] répéter y = donnée ("introduire un entier positif") jusqu'à (y > 0) Fin saisie 1 2
Les sous-programmes Chapitre n° 5: Algorithme: Traduction en Pascal: procedure saisie(var y :integer) ; begin repeat writeln(‘Introduire un entier’) ; readln(y) ; until (y>0) ; end ; Algorithme: 0 ) DEF PROC saisie( var y :entier) 1 ) y = [ ] répéter y = donnée ("introduire un entier positif") jusqu'à (y > 0) 2 ) Fin saisie
Les sous-programmes Chapitre n° 5: 4. Appel d'une procédure L'appel d'une procédure se fait généralement, en utilisant son nom suivi entre parenthèses de la liste des paramètres effectifs. Au niveau analyse et algorithme PROC Nom_procédure (liste des paramètres effectifs) En pascal Nom_procédure (liste des paramètres effectifs) ;
Les sous-programmes Chapitre n° 5: Revenons à l'activité 1, le programme principal Amis deviendra comme suit : Analyse du programme "amis": Résultat = Ecrire(m, " et ", n, message) …………………………… Message = [ ] si (sdm = n) et (sdn = m) alors Message "sont amis" sinon Message "est ne sont pas amis" finsi Fin amis Tableau de déclaration des objets globaux: Objet Type Rôle m n Message sdm Sdn Som_div saisie Entier Chaîne de caractères Fonction Procédure Un entier strictement positif Message amis ou non Somme des diviseurs de m Somme des diviseurs de n Calcule la somme des diviseurs strictes d’un entier Saisie des variables m et n. 6 1 PROC saisie(m) 2 PROC saisie(n) 5 4. Types des objets Dans notre exemple : sdm, sdn, m, et n sont des …………….. 5. Types des paramètres y : est un ……………….... déclaré dans l'entête de la procédure. m et n : …………………. variables globales. sdm FN som_div(m) 3 sdn FN som_div(n) 4 paramètre formel 7 paramètres effectifs.
Les sous-programmes Chapitre n° 5: 5. Mode de passage des paramètres par variable Les paramètres transmis par variable font communiquer l'information dans les deux sens: A l'appel, l'appelant transmet une ou plusieurs valeurs à l'appelé, de même l'appelé rend un ou plusieurs résultats à l'appelant au moment du retour. Ce mode de transmission par variable est utilisé chaque fois que le paramètre représente un résultat calculé par le sous programme appelé et transmis au programme appelant.