Вы находитесь на странице: 1из 67














Vous êtes libre de :

Partager — reproduire, distribuer et communiquer ce document


Remixer — modifier ce document

A condition de respecter les règles suivantes :


Indication obligatoire de la paternité — Vous devez obligatoirement préciser l’origine « SUPINFO » du document au début de celui-ci de la même manière qu’indiqué par SUPINFO
International University – Notamment en laissant obligatoirement la première et la dernière page du document, mais pas d'une manière qui suggérerait que SUPINFO International
University vous soutienne ou approuve votre utilisation du document, surtout si vous le modifiez. Dans ce dernier cas, il vous faudra obligatoirement supprimer le texte « SUPINFO
Official Document » en tête de page et préciser la page indiquant votre identité et les modifications principales apportées. En dehors de ces dispositions, aucune autre modification de
la première et de la dernière page du document n’est autorisée.

NOTE IMPORTANTE

Ce document est mis à disposition selon le contrat CC-BY-NC-SA Creative Commons disponible en ligne http://creativecommons.org/licenses ou par courrier postal à Creative Commons, 171
Second Street, Suite 300, San Francisco, California 94105, USA modifié en ce sens que la première et la dernière page du document ne peuvent être supprimées en cas de reproduction, distribution,
communication ou modification. Vous pouvez donc reproduire, remixer, arranger et adapter ce document à des fins non commerciales tant que vous respectez les règles de paternité et que les
nouveaux documents sont protégés selon des termes identiques. Les autorisations au-delà du champ de cette licence peuvent être obtenues à support@supinfo.com.

© SUPINFO International University – EDUCINVEST
IT Tower - Avenue Louise 480 – 1050 Brussels Belgium . www.supinfo.com 
Algorithmique (4).
Sous - programmes.

ECTS Code : 1ADS


CORE KNOWLEDGE N‒‒4

www.supinfo.com
Copyright © SUPINFO. All rights reserved
Algorithmique (4). Sous – programmes.

Objectifs de ce module

 Concevoir l’utilité de découper


un algorithme en sous-
programmes, qui pourront être
de deux formes : procédures ou
fonctions.

 Présenter la notion complexe


mais profonde de récursivité.
Algorithmique (4). Sous – programmes.

Plan du module
Voici les parties que nous allons aborder :

I. Généralités.
II. Procédures.
III. Fonctions.
IV. Récursivité.
Algorithmique (4). Sous – programmes.

ェ. Généralités
ェ. Généralités

Plan de la partie
Voici les chapitres que nous allons aborder :

1. Programmation procédurale.
2. Déclaration / utilisation.
3. Paramètres.
4. Les deux types de sous –
programmes.
ェ. Généralités

1. Programmation procédurale

Un principe de base : réduire la complexité d’un problème


en le « découpant ».

On construit un « sous – programme » pour chaque tâche


bien définissable qui est amenée à être répétée.

Tâches que l’on redivise elles mêmes éventuellement.

On crée ainsi une hierarchie de tâches, ce qui simplifie la


conception de l’algorithme.
ェ. Généralités

1. Programmation procédurale

Exemple : réalisation d’un algorithme écrivant tous les


nombres parfaits (i.e. égaux à la somme de leurs
diviseurs) jusqu’à un entier saisi par l’utilisateur.

Hierarchie de tâches :
 Demander un entier positif n à l’utilisateur.
 Afficher les nombres parfaits jusqu’à n.
 Savoir si un entier donné est parfait.
Calculer la somme des diviseurs d’un entier.
Savoir si un entier est un diviseur d’un autre.
ェ. Généralités

1. Programmation procédurale

Un autre avantage : un sous – programme écrit pour un


problème donné pourra être réutilisable dans un autre
contexte.

On pourra ainsi créer des « librairies » de sous –


programmes.

Dans l’exemple précédent, le sous – programme indiquant si


un entier est diviseur d’un autre pourra ainsi servir dans
un programme recherchant des nombres premiers.
ェ. Généralités

2. Déclaration / utilisation

La déclaration des sous – programmes s’effectue avant la


déclaration du programme pricipal les utilisant :

SOUS PROGRAMME machin


VAR …
DEBUT

FIN

PROGRAMME bidule
VAR …
DEBUT

machin
FIN
ェ. Généralités

2. Déclaration / utilisation

Utilisation : quand un programme fait appel à un sous –


programme, il suspend son propre déroulement, exécute
le sous – programme, et reprend ensuite son
fonctionnement.
ェ. Généralités

2. Déclaration / utilisation

Les variables déclarées lors des sous – programmes ou du


programme principal sont locales.

Cela signifie que ces variables ne sont visibles et


accessibles que depuis l’endroit où elles ont été
déclarées.

Un sous – programme ne pourra par exemple pas utiliser


une variable définie dans le programme principal. Et
inversement.
ェ. Généralités

2. Déclaration / utilisation

Si l’on veut que des variables soient utilisables par le


programme et ses sous – programmes, il faut les déclarer
de façon globale, c’est à dire en premier :

VAR … // déclaration des variables globales


SOUS PROGRAMME machin
VAR … // déclaration des variables locales au sous-programme
DEBUT

FIN

PROGRAMME bidule
VAR … // déclaration des variables locales au programme
DEBUT

FIN
ェ. Généralités

3. Paramètres

Un sous - programme fonctionne souvent avec des valeurs


transmises par le programme principal et peut également
lui en retourner : ce sont des paramètres.

Dans l’exemple du sous – programme permettant de savoir


si un entier est divisible par un autre, il faut bien
transmettre au sous – programme la valeur de ces deux
entiers. Sera retourné un booléen indiquant s’il y a ou non
divisibilité. On aura donc ici trois paramètres.
ェ. Généralités

3. Paramètres

Trois sortes de paramètres

1. Paramètres en entrée : ce sont les valeurs transmises au


sous – programme qui ne fait que les « lire ».
2. Paramètres en sortie : ce sont les valeurs retournées par
le sous – programme.
3. Paramètres en entrée / sortie : ce sont les valeurs lues et
modifiées par le sous – programme.
ェ. Généralités

3. Paramètres

Déclaration des paramètres : on précise deux choses

1. La sorte du paramètre : E pour entrée, S pour sortie, E/S


pour entrée / sortie.

2. Le type du paramètre : cela peut être un type élémentaire


ou complexe.
ェ. Généralités

3. Paramètres

Exemple : sous – programme permettant de savoir si un


entier n est divisible par un entier m.

 E : n,m : ENTIER

 S : res : BOOLEEN
ェ. Généralités

3. Paramètres

Remarque :

Dans le cas particulier où le paramètre est un tableau, on


est obligé de passer également en paramètre le nombre
de ses éléments.
En effet, on pourra vouloir utiliser notre sous-programme
avec des tableaux de tailles différentes.
On adoptera donc une syntaxe du style :

E : tab : TABLEAU [ ] : ENTIER, E : nb : ENTIER


ェ. Généralités

4. Les deux types de sous-programme

En algorithmique on distinguera deux types de sous –


programmes :

 Les procédures, qui modifient l’état du programme sans


nécessairement retourner de valeur.

 Les fonctions, qui elle ont pour but de retourner une


valeur.
ェ. Généralités

4. Les deux types de sous-programme

Remarque :

 Tous les langages de programmation ne possèdent pas


ces deux types de sous – programmes.
 En C et en C++, on ne manipule ainsi que des fonctions.
 En Pascal par contre, les deux types sont utilisables.
ェ. Généralités

Pause réflexion sur la partie ェ


Algorithmique (4). Sous – programmes.

エ. Procédures
エ. Procédures

Plan de la partie
Voici les chapitres que nous allons aborder :

1. Déclaration.
2. Utilisation.
3. Exercice.
エ. Procédures

1. Déclaration

Déclaration

PROCEDURE bidule (E : var1 : type1 , S : var2 : type2 ,


E/S : var3 : type3)
VAR
… // variables locales à la procédure
DEBUT

FIN
エ. Procédures

1. Déclaration

Exemple : procédure calculant le périmètre et l’aire d’un


rectangle

PROCEDURE rectangle ( E : x, y : REEL , S : p, a : REEL)


DEBUT
p2*x+2*y
ax*y
FIN
エ. Procédures

1. Déclaration

Exemple : procédure doublant la valeur d’un réel

PROCEDURE double (E/S : x : REEL)


DEBUT
x2*x
FIN
エ. Procédures

2. Utilisation

Utilisation

On appelle une procédure en précisant son nom, et entre


parenthèses les valeurs que l’on souhaite attribuer aux
paramètres d’entrée, ainsi que le nom des variables
destinées à recevoir les paramètres de sortie.
エ. Procédures

2. Utilisation
Exemple : le cas du rectangle

PROCEDURE rectangle ( E : x, y : REEL , S : p, a : REEL)


DEBUT
p2*x+2*y
ax*y
FIN
PROGRAMME youpi
VAR périmètre, aire : REEL
DEBUT
rectangle(2, 6, périmètre, aire)
ECRIRE(”périmètre : ”, périmètre, ” aire : ”, aire)
FIN
エ. Procédures

2. Utilisation
Exemple : le cas du rectangle (bis)

PROCEDURE rectangle ( E : x, y : REEL , S : p, a : REEL)


DEBUT
p2*x+2*y
ax*y
FIN
PROGRAMME youpi
VAR largeur, longueur, périmètre, aire : REEL
DEBUT
largeur  LIRE()
longueur  LIRE()
rectangle(largeur, longueur, périmètre, aire)
ECRIRE(”périmètre : ”, périmètre, ” aire : ”, aire)
FIN
エ. Procédures

3. Exercice

Exercice : écrire une procédure qui convertit un nombre de


secondes en heures, minutes, secondes. Ecrire un
programme affichant la conversion de 7438 secondes.
エ. Procédures

3. Exercice
PROCEDURE conversion (E : n : ENTIER, S : h, m, s : ENTIER)
DEBUT
h  n DIV 3600
m  (n - 3600 * h) DIV 60
s  (n – 3600 * h) MOD 60
FIN

PROGRAMME joujou
VAR x,y,z : ENTIER
DEBUT
conversion(7438,x,y,z)
ECRIRE(x, ”heures ”, y, ”minutes et ”, z, ”secondes”)
FIN
エ. Procédures

Pause réflexion sur la partie エ


Algorithmique (4). Sous – programmes.

ォ. Fonctions
ォ. Fonctions

Plan de la partie
Voici les chapitres que nous allons aborder :

1. Déclaration.
2. Utilisation.
3. Exercice.
ォ. Fonctions

1. Déclaration

Déclaration

FONCTION machin (var1 : type1, var2 : type2, …) : typeretour


VAR
… // variables locales à la fonction
DEBUT

RETOURNER(…)
FIN
ォ. Fonctions

1. Déclaration

Remarques :

 typeretour indique le type de la valeur retournée par la


fonction.
 Une fonction ne retournant qu’une seule valeur, ses
autres paramètres sont nécessairement en entrée, c’est
pourquoi l’on omet le « E ».
 Une fonction contient toujours la commande
RETOURNER, suivie de la valeur à renvoyer au
programme principal.
ォ. Fonctions

1. Déclaration

Exemple : fonction calculant le maximum de deux réels

FONCTION maximum ( x, y : REEL) : REEL


DEBUT
SI ( x > y)
ALORS
RETOURNER(x)
SINON
RETOURNER(y)
FINSI
FIN
ォ. Fonctions

1. Déclaration

Exemple : fonction calculant la somme des n premiers


entiers

FONCTION somme ( n : ENTIER) : ENTIER


VAR i, somme : ENTIER
DEBUT
somme  0
POUR i ALLANT de 1 à n AU PAS DE 1
FAIRE
somme  somme + i
FINPOUR
RETOURNER(somme)
FIN
ォ. Fonctions

2. Utilisation

Utilisation

On appelle une fonction en précisant son nom, et entre


parenthèses les valeurs que l’on souhaite attribuer aux
paramètres.
La valeur retournée par la fonction sera soit affectée à une
variable soit affichée.
ォ. Fonctions

2. Utilisation
Exemple : maximum de deux entiers

FONCTION maximum ( x, y : REEL) : REEL


DEBUT
SI ( x > y)
ALORS
RETOURNER(x)
SINON
RETOURNER(y)
FINSI
FIN
PROGRAMME truc
DEBUT
ECRIRE(maximum(12, 5))
FIN
ォ. Fonctions

3. Exercice

Exercice : écrire une fonction qui reçoit une durée en


heures, minutes, secondes et qui retourne le nombre total
de secondes correspondant. Ecrire un programme
affichant la conversion de 7 heures 29 minutes et 54
secondes.
ォ. Fonctions

3. Exercice

FONCTION conversion (h, m, s : ENTIER) : ENTIER


DEBUT
RETOURNER(3600 * h + 60 * m + s)
FIN

PROGRAMME coucou
DEBUT
ECRIRE(conversion(7, 29, 54))
FIN
ォ. Fonctions

Pause réflexion sur la partie ォ


Algorithmique (4). Sous – programmes.

オ. Récursivité.
オ. Récursivité

Plan de la partie
Voici les chapitres que nous allons aborder :

1. Principe.
2. Récursivité versus itération.
3. Récursivité croisée.
4. Récursivité multiple.
5. Récursivité imbriquée.
オ. Récursivité

1. Principe

Définition : un sous – programme (procédure ou fonction)


est récursif s’il s’appelle lui même.

Idée : pour effectuer une tâche ou un calcul, on se ramène à


la réalisation d’une tâche similaire mais de complexité
moindre. On recommence jusqu’à obtenir une tâche
élémentaire.
オ. Récursivité

1. Principe

Exemple : calcul de n! = 1 x 2 x 3 x … x n.

On montre facilement la relation de récurrence n! = n x (n-1)!


Si on sait calculer (n-1)!, on connaîtra donc la valeur de n!
Mais (n-1)! = (n-1) x (n-2)!
On est donc ramené au calcul de (n-2)!
Et ainsi de suite jusqu’à 1! dont on connaît la valeur : 1
オ. Récursivité

1. Principe

Algorithme récursif du calcul de n!

FONCTION factorielle (n : ENTIER) : ENTIER


DEBUT
SI ((n = 0) OU (n=1))
ALORS
RETOURNER(1)
SINON
RETOURNER (n x factorielle(n-1))
FINSI
FIN
オ. Récursivité

1. Principe

Déroulement de l’algorithme quand on appelle


factorielle(4)

factorielle(4) = 4 x factorielle(3)
factorielle(3) = 3 x factorielle(2)
factorielle(2) = 2 x factorielle(1)
or on sait que factorielle(1) = 1
factorielle(2) = 2 x 1 = 2
factorielle(3) = 3 x 2 = 6
factorielle(4) = 4 x 6 = 24
オ. Récursivité

1. Principe

Il est indispensable de prévoir une condition d’arrêt à la


récursion sinon le programme ne se termine jamais.
オ. Récursivité

2. Récursivité versus itération

On peut toujours transformer un algorithme récursif en un


algorithme itératif même si c’est parfois difficile.

L’algorithme itératif sera plus rapide une fois implémenté


dans un langage de programmation mais souvent plus
complexe à écrire.

Reprenons l’exemple de la factorielle :


オ. Récursivité

2. Récursivité versus itération

Algorithme itératif du calcul de n!

FONCTION factorielle (n : ENTIER) : ENTIER


VAR i, res : ENTIER
DEBUT
res  1
POUR i ALLANT de 2 à n AU PAS DE 1
FAIRE
res  res x i
FINPOUR
RETOURNER(res)
FIN
オ. Récursivité

2. Récursivité versus itération

Intérêts de la récursivité :

 Technique de programmation très élégante et lisible (elle


évite souvent le recours à de nombreuses structures
itératives).

 Elle est très utile pour concevoir des algorithmes sur des
structures complexes comme les tableaux, les arbres et
les graphes.
オ. Récursivité

2. Récursivité versus itération

Inconvénient majeur de la récursivité :

 Une fois implémentée dans un langage de


programmation, cette technique est très « gourmande »
en mémoire.

 Elle peut même provoquer des débordements de


capacité.
オ. Récursivité

2. Récursivité versus itération

Exercice : écrire de deux façons (itérative et récursive) une


fonction ayant pour paramètres un réel a et un entier n, et
retournant la valeur de a puissance n.
オ. Récursivité

2. Récursivité versus itération

Version itérative :

FONCTION puissance (a : REEL, n : ENTIER) : REEL


VAR i, res : ENTIER
DEBUT
res  1
POUR i ALLANT de 1 à n
FAIRE
res  res x a
FINPOUR
RETOURNER(res)
FIN
オ. Récursivité

2. Récursivité versus itération

Version récursive :

FONCTION puissance(a : REEL, n : ENTIER) : REEL


DEBUT
SI n = 0
ALORS
RETOURNER(1)
SINON
RETOURNER(a x puissance(a,n-1))
FINSI
FIN
オ. Récursivité

3. Récursivité croisée

Récursivité croisée : c’est un cas bien particulier de


récursivité où une fonction appelle une autre fonction qui
elle même appelle la première.
オ. Récursivité

3. Récursivité croisée

FONCTION pair (n : ENTIER) : BOOLEEN


DEBUT
SI n = 0
ALORS RETOURNER(VRAI)
SINON RETOURNER(impair(n-1))
FINSI À méditer !!!
FIN

FONCTION impair (n : ENTIER) : BOOLEEN


DEBUT
SI n = 0
ALORS RETOURNER(FAUX)
SINON RETOURNER(pair(n-1))
FINSI
FIN
オ. Récursivité

4. Récursivité multiple

Récursivité multiple : sous-programme récursif réalisant


plusieurs appels à lui même.

Exemple : calcul des coefficients binomiaux.

 1 si k = 0 ou si k = 1
 k  
  =   n−1   n−1 
 n    +  sinon
  k −1   k 
オ. Récursivité

4. Récursivité multiple

FONCTION coefficients ( n, k : ENTIER ) : ENTIER


DEBUT
SI (k=0 OU k=n)
ALORS
RETOURNER 1
SINON
RETOURNER coefficients (n-1,k-1) + coefficients (n-1,k)
FINSI
FIN
オ. Récursivité

5. Récursivité imbriquée

Récursivité imbriquée : sous programme récursif dont


l’appel à lui même contient un autre appel à lui même…

Exemple : suite de Ackerman.


 n+1 si m= 0

A( m, n) =  A ( m−1,1) si m> 0 et n = 0

 A ( m−1, A ( m, n −1) ) si m> 0 et n > 0
オ. Récursivité

5. Récursivité imbriquée

FONCTION Ackerman ( m, n : ENTIER ) : ENTIER


DEBUT
SI (m=0)
ALORS
RETOURNER ( n+1 )
SINON
SI (m>0 ET n=0)
ALORS
RETOURNER Ackerman ( m-1, 1)
SINON
RETOURNER Ackerman ( m-1,Ackerman( m, n-1))
FINSI
FINSI
FIN
オ. Récursivité

Pause réflexion sur la partie オ


Félicitations
Vous avez suivi avec succès le
module CORE KNOWLEDGE n‒4
Algorithmique (4).
Sous – Programmes.
Algorithmique (4). Sous – programmes.

Fin













Vous êtes libre de :

Partager — reproduire, distribuer et communiquer ce document


Remixer — modifier ce document

A condition de respecter les règles suivantes :


Indication obligatoire de la paternité — Vous devez obligatoirement préciser l’origine « SUPINFO » du document au début de celui-ci de la même manière qu’indiqué par SUPINFO
International University – Notamment en laissant obligatoirement la première et la dernière page du document, mais pas d'une manière qui suggérerait que SUPINFO International
University vous soutienne ou approuve votre utilisation du document, surtout si vous le modifiez. Dans ce dernier cas, il vous faudra obligatoirement supprimer le texte « SUPINFO
Official Document » en tête de page et préciser la page indiquant votre identité et les modifications principales apportées. En dehors de ces dispositions, aucune autre modification de
la première et de la dernière page du document n’est autorisée.

NOTE IMPORTANTE

Ce document est mis à disposition selon le contrat CC-BY-NC-SA Creative Commons disponible en ligne http://creativecommons.org/licenses ou par courrier postal à Creative Commons, 171
Second Street, Suite 300, San Francisco, California 94105, USA modifié en ce sens que la première et la dernière page du document ne peuvent être supprimées en cas de reproduction, distribution,
communication ou modification. Vous pouvez donc reproduire, remixer, arranger et adapter ce document à des fins non commerciales tant que vous respectez les règles de paternité et que les
nouveaux documents sont protégés selon des termes identiques. Les autorisations au-delà du champ de cette licence peuvent être obtenues à support@supinfo.com.

© SUPINFO International University – EDUCINVEST
IT Tower - Avenue Louise 480 – 1050 Brussels Belgium . www.supinfo.com 

Вам также может понравиться