SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
1
1
Algorithmique & structures
de données I
1ère IAG
Responsable : Dr. Fadoua Bouafif
Dr.fadoua Bouafif
2
Chapitre 6
Les Sous-programmes
Dr.fadoua Bouafif
Objectifs du chapitre
 Savoir la programmation modulaire
 Apprendre la manipulation des modules (sous-
programmes) en algorithme et en C
 Connaitre les types de paramètres et leurs passages dans
les sous-programmes
3
Dr.fadoua Bouafif
Plan du chapitre
1. Introduction
2. Les types de sous-programmes
3. Les prototypes et les sous-programmes
4. Les variables globales et les variables locales
5. Les paramètres et le passage des paramètres
6. Conclusion
4
Dr.fadoua Bouafif
1 2
3 4
2
Introduction
 La manipulation et la résolution d'un problème complexe nécessite l’usage des sous programmes
qui seront par la suite appelés par l'algorithme principal (programme principal en C).
 Les sous programmes permettent de :
 Réduire la complexité des programmes
 Décomposer le programme en des sous modules cohérents
 Le paramétrage et la lisibilité des programmes.
 Réutiliser les sous programmes sans avoir à les redéclarer.
 Faciliter les opérations de maintenance et/ou de modification des programmes
 gain de temps (CPU) et gain de l'espace mémoire (MC).
 Un sous programme utilise des paramètres avec lesquels il sera appelé dans le programme
principal.
5
Dr.fadoua Bouafif
Introuduction (suite)
6
Déroulement d’un programme
Dr.fadoua Bouafif
Les types de sous-programmes
 Il existe deux types de sous programmes :
 Les procédures: représentent une action, qui peut être
complexe à entreprendre, et peuvent aussi calculer une ou
plusieurs valeurs
 Les fonctions: calculent et retournent une valeur et une
seule.
7
Dr.fadoua Bouafif
8
Les Procedures
Dr.fadoua Bouafif
5 6
7 8
3
Définition
 Une procédure est un sous programme qui peut être appelé soit:
 Par l’algorithme (programme) principal
 Par un autre sous programme.
 Une procédure peut être appelée comme une instruction dans un programme par
l'intermédiaire de son nom suivi de sa liste de paramètres effectifs (s'ils existent).
9
Dr.fadoua Bouafif
Déclaration
10
En Algorithmique En C
procédure nom_sp (liste paramètres formels+types)
var : // déclaration des variables locales (internes)
début
...... // Liste des instructions ;
......
fin
**********************************************
Algorithme nom_algorithme
var : ....... // déclaration des variables
début
....
// appel de la procedure
nom_sp (liste_paramètres_réels)
....
Fin
void nom_sp (liste paramètres formels+types)
{
// Déclaration des variables locales (internes);
// Liste des instructions ;
.....
}
*******************************************
void main()
{
// déclaration des variables
……..
// appel de la procedure
nom_sp (liste_paramètres_réels) ;
…….
}
Dr.fadoua Bouafif
Exemple
11
En Algorithmique En C
procédure somme( x:entire, y:entier )
var : som: entier
début
Som x+y
écrire (“la somme de”,x, y, “= “ ,som)
Fin
********************************
Algorithme test
var : a,b:entier
Début
ecrire(“donner deux valeurs”)
lire(a,b)
somme(a,b)
Fin
#include <stdio.h>
void somme ( int x, int y)
{
int som;
som=x+y;
printf (“ la somme de %d et %d =%dn”, x ,y, som) ;
}
*****************************
void main ( )
{
int a,b;
printf(“donner deux valeurs”);
scanf(“%d%d”,&a, &b);
somme(a,b);
}
Dr.fadoua Bouafif
Remarques
 Une procédure est appelée dans une action spécifiant son nom et ses paramètres effectifs en
respectant leurs modes de passage respectifs.
 En C, le type prédéfini void indique l'absence d'une valeur de retour. Il est aussi un type
particulier qui indique un ensemble vide de valeurs.
 Dans la déclaration d'un sous programme qui ne possède aucun argument (paramètre), liste
vide, le type void ou des parenthèses vides est(sont) employé(s).
12
Dr.fadoua Bouafif
9 10
11 12
4
Activité
 Ecrire un algorithme (programme C) qui permet de définir et d’appeler une procédure
Minimum qui renvoie le plus petit de deux nombres différents
13
Dr.fadoua Bouafif
14
Les Fonctions
Dr.fadoua Bouafif
Définition
 Une fonction, contrairement à la procédure, doit avoir un type, c.à.d.
qu'elle doit remettre une valeur en sortie.
 Une fonction est caractérisée par un nom et permet de renvoyer une
valeur (résultat) au programme qui va l'appeler.
15
Dr.fadoua Bouafif
Déclaration
16
En Algorithmique En C
fonction nom_sp (paramètres formels+types) : type de retour
var : // déclaration des variables locales (internes)
début
//Liste des instructions
......
retourne (variable_résultat)
Fin
*************************************************
Algorithme nom_algorithme
var : nom_variable : type de retour
.......
début
// appel de la fonction
nom_variable  nom_sp (paramètres_réels)
....
Fin
type de retour nom_sp (paramètres formels+types)
{
//Déclaration des variables locales (internes);
//Liste des instructions ;
.....
return (variable_résultat);
}
***************************************************
void main()
{
Type de retour variable_resultat ;
// appel de la fonction
variable_ resultat = nom_sp (paramètres_réels) ;
……
}
Dr.fadoua Bouafif
13 14
15 16
5
Exemple
17
En Algorithmique En C
fonction carre (x : entier) : entier
var : c : entier
début
c  x * x
retourne (c)
Fin
*****************************
Algorithme test
var : n, p : entier
début
écrire ("Saisir une valeur :")
lire (n)
p  carre(n)
Écrire ("Le carre de", n, "est ", p)
Fin
#include <stdio.h>
int carre (int x)
{
int c ;
c = x * x ;
return(c) ;
}
************************************
void main()
{
int n, p ;
printf("Saisir une valeur :") ;
scanf("%d", &n) ;
p = carre(n) ;
printf("Le carre de %d est %d", n, p) ;
}
Dr.fadoua Bouafif
Remarques
 Puisque la fonction renvoie un résultat unique, alors lors de son appel le
résultat retourné est affecté à une variable déclarée dans l'algorithme
(programme principal) correspondant et qui a le même type de retour.
 En C, si la fonction contient plusieurs paramètres de même type, ils doivent
être déclarés séparément.
18
Dr.fadoua Bouafif
Activité
 Ecrire un algorithme (programme C) qui permet de définir et d’appeler une
fonction Minimum qui renvoie le plus petit de deux nombres différents
19
Dr.fadoua Bouafif
20
Les prototypes
&
les sous-programmes
Dr.fadoua Bouafif
17 18
19 20
6
Definitions
 Un sous programme peut être déclaré avant ou après l'algorithme (programme) principal.
 Dans le cas où le sous programme est définit après l’algorithme principal, le prototype du
sous programme doit être déclaré avant l'algorithme (programme) principal.
 Le prototype d’un sous programme contient uniquement la liste des paramètres formels ainsi
que leurs types.
 En C, le prototype d’une fonction peut être définit de deux manières :
Type_resultat nom_sp (TypePar1, TypePar2, ...) ; ou bien
Type_resultat nom_sp (type1 parm1, type2 parm2, . . ., typen parmn) ;
21
Prototype en Algorithmique Prototype en C
procédure nom_sp (p1 :type1, p2 : type2, ...., pn :typen)
fonction nom_sp1 (p1 :type1, p2 : type2, ...., pn :typen) : typeretour
void nom_sp (type1 p1, ...., typen pn) ;
Type_resultat nom_sp1 (type1 p1, ...., typen pn) ;
Dr.fadoua Bouafif
Syntaxe en Algorithme
22
En Algorithmique- sous programme après l’algorithme principal
// déclaration des prototypes
procédure nom_sp (p1: type1, p2: type2, ...., pn: typen)
fonction nom_sp1 (p1: type1, ...., pn: typen) : typeretour
***************************************************************************
// algorithme principal
Algorithme Nom_algorithme
var : nom_variable : typeretour
.......
début
....
nom_sp (p1, p2, ...., pn)
....
nom_variable  nom_sp1 (p1, p2, ...., pn)
....
fin
//définition sous-programme
procédure nom_sp (p1: type1, p2: type2, ...., pn: typen)
var : // déclaration des variables locales (internes)
début
......
Fin
*********************************************************
fonction nom_sp1 (p1: type, p2: type, ...., pn: type) : typeretour
// déclaration des variables locales (internes)
var : variable_résultat : typeretour
début
......
......
retourne (variable_résultat)
fin
Dr.fadoua Bouafif
Syntaxe en C
23
En C- sous programme après le programme principal
#include <stdio.h>
// declaration des prototypes
void nom_sp (type1 p1, ...., typen pn) ;
Type_resultat nom_sp1 (type p1, ...., type pn) ;
//programme principal
**************************************************
void main()
{
Type_resultat var_resultat ;
....
nom_sp (p1, ...., pn) ;
....
var_resultat = nom_sp1 (p1, ...., pn) ;
....
}
//définition sous-programme
void nom_sp (type1 p1, ...., typen pn) ;
{
//Déclaration des variables ;
...
…
}
***********************************************
Type_resultat nom_sp1 (type p1, ...., type pn)
{
//Déclaration des variables ;
Type_resultat var_resultat ;
Liste des instructions ;
.....
return (var_resultat) ;
}
Dr.fadoua Bouafif
Les variables globales & les variables locales
24
 Une variable est dite globale si elle est déclarée dans l’algorithme (programme) principal, hors de
sous programme, mais qui peut être utilisée par ces sous programmes.
 Une variable globale a une durée de vie égale à celle de l’algorithme (programme) en entier.
 Une variable est dite locale si elle est déclarée à l'intérieur du sous programme. Elle démarre son
existence au moment de l'appel du sous programme, et est détruite lors de l'achèvement du sous
programme.
 Une variable locale a une durée de vie égale à celle du sous programme où elle est définie.
 Une variable locale définie dans un sous programme est visible partout à l'intérieur du sous
programme et invisible à l'extérieur.
 Les variables globaux et standards sont visibles en tout point de l’algorithme (programme).
Dr.fadoua Bouafif
21 22
23 24
7
Activité
Écrire un algorithme (programme C) qui permet de saisir deux entiers N1 et N2 strictement
positifs et de calculer et d’afficher la somme si N1>N2 et le produit si N2>=N1.
On utilisera
 Un sous-programme « somme() » qui retourne la somme de deux entiers.
 Un sous-programme « produit() » qui retourne le produit de deux entiers.
 Un sous-programme « Affiche() » qui affiche le résultat de l’opération
25
Dr.fadoua Bouafif
Les paramètres & le passage des paramètres
 Les paramètres:
 formels sont déclarés au sein des sous-programmes
 effectifs ou réels se trouvent dans l'algorithme principal
 Passage des paramètres:
 Par valeur
 Par adresse
26
Dr.fadoua Bouafif
Les paramètres
 Les paramètres formels et les paramètres effectifs doivent correspondre en nombre, type et
ordre respectivement.
 Il existe trois types de paramètres formels :
 paramètres données (entrés): ils ne changent pas de valeur dans le sous-programme. Leurs
valeurs sont plutôt utilisées.
 paramètres résultats (sorties): ils n'ont pas de signification qu'après l'exécution du sous-
programme.
 paramètres données/résultats (E/S): ils ont une valeur avant l'exécution du sous-programme
et qui peut changer après exécution.
27
Dr.fadoua Bouafif
Passage des paramètres par valeur: définition
 C'est le mode de passage par défaut des paramètres dans un sous-programme.
 Dans ce type de passage, le sous programme copie la valeur à transférer au sein du sous
programme lui même; Ce dernier utilise alors cette copie sans modifier la valeur initiale.
 Le paramètre formel représente une variable locale au sous-programme et tout changement de
ce paramètre n'a aucun effet sur le paramètre effectif (réel).
 La modification de ce paramètre reste locale au sous-programme.
 A l'appel, les valeurs des paramètres effectifs sont récupérées dans les paramètres formels sur
lesquels le traitement va s’effectuer. Ainsi, un paramètre effectif transmis par valeur ne peut
pas être modifié.
28
Dr.fadoua Bouafif
25 26
27 28
8
En Algorithmique En C
procédure nom_sp (p1: type1, p2: type2, ...., pn: typen)
var : // déclaration des variables locales (internes)
début
......
Fin
******************************************************
fonction nom_sp1 (p1: type1, ...., pn: typen) : type_retour
var : variable_résultat : type_retour
début
......
Retourne (variable_résultat)
Fin
*******************************************************
Algorithme nom_algorithme
var : nom_variable : type_retour
début
....
nom_sp ( p1, p2, ...., pn)
....
nom_variable  nom_sp1 ( p1, p2, ...., pn)
Fin
#include <stdio.h>
void nom_sp (type1 p1, …,typen pn)
{
............
}
******************************************************
Type_retour nom_sp1 (type1 p1, …,typen pn)
{
Type_retour varaiuble_resultat ;
............
Return(variable_résultat)
}
******************************************************
void main()
{
Type_retour nom_varaiuble ;
.......
nom_sp (p1, …, pn) ;
Nom_varaible= nom_sp1 (p1, ..., pn) ;
. . ..
}
Passage des paramètres par valeur: Syntaxe 29
Dr.fadoua Bouafif
Ecrire un algorithme qui saisit deux valeurs entières et permute leur valeurs
30
Dr.fadoua Bouafif
Passage des paramètres par valeur: Exemple
Procédure Permuter(x, y :entier)
Var aux: entier
Début
aux  x
x  y
y  aux
Fin
*******************************************
Algorithme Permutation
Var A, B: entier
Début
Lire (A, B)
Permuter (A, B)
Ecrire (A, B)
Fin
Lors de l'appel de la procédure Permuter, le
paramètre x prend la valeur de A et le
paramètre y prend la valeur de B, à la fin de
l'exécution de la procédure x aura la valeur de B
et y la valeur de A
Mais… A et B n'ont pas changé de valeur
Cet algorithme ne résout pas notre problème
Solution:
on doit donner la possibilité à la procédure
permuter d'accéder aux adresses de A et B
pour pouvoir les modifier
Passage des paramètres par adresse: définition
Rappelons qu’une variable possède un nom et une adresse
 Dans ce type de passage, l'adresse des paramètres effectifs est associée aux paramètres
formels. Ainsi, toute modification apportée aux paramètres formels affecte les paramètres
effectifs.
 Lors de l'appel du sous programme, il y aura un envoi de l'adresse de la variable spécifiée pour
qu'il y aura des modifications du contenu mémoire de la variable déclarée, et donc il y a non
seulement copie des valeurs mais aussi transmission des variables.
 En algorithmique, les paramètres formels d'une fonction ne peuvent jamais être passés
par adresse.
31
Dr.fadoua Bouafif
En Algorithmique
procédure nom_sp (p1: type1, p2: type2, ...., pn: typen, var p11: type11, var p12: type12, ...., var p1n: type1n)
Var…….
debut
......
fin
****************************************************************************************************************************
Algorithme Nom_algorithme
var : ......
Début
....
nom_sp ( p1, p2, ...., pn, p11, p12, …, p1n)
....
fin
32
passage par valeur passage par adresse
Passage des paramètres par adresse:
Syntaxe en algorithme
Dr.fadoua Bouafif
29 30
31 32
9
En C
void nom_sp (type1 p1, type2 p2, …., type11 *p11, type12 *p12, …, type1n *p1n)
{............}
****************************************************************************************************
Type_resultat nom_sp1(type1 p1, …, type2 *p6, ..., typen *pn)
{............}
*****************************************************************************************************
void main()
{
Type_resultat var_resultat ;
.......
nom_sp (p1,p2, …, &p11, &p12, …., &p1n) ;
var_resultat = nom_sp1 (p1,…, &p6, ..., &pn) ;
…
}
33
Passage des paramètres par adresse:
Syntaxe en C
passage par valeur passage par adresse
Dr.fadoua Bouafif
Passage des paramètres par adresse: Exemple
34
Lors de l'appel de la procédure Permuter,
le paramètre x prend l’adresse de A et le
paramètre y prend l’adresse de B.
À la fin de l'exécution de la procédure x
aura la valeur de B puisque x et A ont la
même adresse mémoire
De même y aura la valeur initiale de A
donc B aussi aura la valeur initiale de A
Donc A et B ont effectivement permutés
leurs valeurs
Ecrire un algorithme qui saisit deux valeurs entières et permute leur valeurs en utilisant le passage par adresse
Procédure Permuter(var x, y :entier)
Var aux:entier
Début
aux  x
x  y
y  aux
Fin
********************************
Algorithme Permutation
Var A, B :entier
Début
Lire (A, B)
Permuter (A, B)
Ecrire (A, B)
Fin
Activité
Écrire un algorithme (programme C) qui permet de saisir un tableau de taille N (0< N<=100)
d’entier et de calculer la somme de ses éléments.
On utilisera
 Un sous-programme « Taille_Tableau() » qui saisie la taille du tableau
 Un sous-programme « Remplir_Tableau() » qui saisie les éléments du tableau
 Un sous-programme « Calcul_Somme() » qui retourne la somme des éléments du tableau
35
Dr.fadoua Bouafif
Activité : Correction
36
Dr.fadoua Bouafif
33 34
35 36
10
Conclusion
 Les différences entre les sous programmes procédure et fonction
 La déclaration explicite d'une procédure, en C, comme une fonction qui ne retourne aucune valeur
se fait à l'aide du mot clé void.
 Les paramètres données sont, en général, passés par valeur.
 Les paramètres données/résultats et résultats sont toujours passés par adresse.
 Un paramètre de type tableau est toujours passé par adresse, en C.
37
Procédure Fonction
Syntaxe Syntaxe
Appel Appel
Passage de paramètre par valeur Passage de paramètre par valeur
passage de paramètres par adresse passage de paramètres par adresse (uniquement en C)
Dr.fadoua Bouafif
37

Contenu connexe

Similaire à ch6 les sous programmes.pdf

Similaire à ch6 les sous programmes.pdf (20)

Langage c
Langage cLangage c
Langage c
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Bases de php - Partie 3
Bases de php - Partie 3Bases de php - Partie 3
Bases de php - Partie 3
 
Chapitre 5 Linux
Chapitre 5 LinuxChapitre 5 Linux
Chapitre 5 Linux
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
 
Generalites
GeneralitesGeneralites
Generalites
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
 
Langage C
Langage  CLangage  C
Langage C
 
Langage C
Langage CLangage C
Langage C
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
Chapitre 7procédure et fonction
Chapitre 7procédure et fonctionChapitre 7procédure et fonction
Chapitre 7procédure et fonction
 
Turbo1
Turbo1Turbo1
Turbo1
 

Plus de FadouaBouafifSamoud

Plus de FadouaBouafifSamoud (8)

Ch3-les structures conditionnelles.pdf
Ch3-les structures conditionnelles.pdfCh3-les structures conditionnelles.pdf
Ch3-les structures conditionnelles.pdf
 
Ch4- les structures répétitives.pdf
Ch4- les structures répétitives.pdfCh4- les structures répétitives.pdf
Ch4- les structures répétitives.pdf
 
Ch1-Généralités.pdf
Ch1-Généralités.pdfCh1-Généralités.pdf
Ch1-Généralités.pdf
 
ch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdfch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdf
 
Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdf
 
ch4_les listes.pdf
ch4_les listes.pdfch4_les listes.pdf
ch4_les listes.pdf
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
 

Dernier

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 

Dernier (13)

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 

ch6 les sous programmes.pdf

  • 1. 1 1 Algorithmique & structures de données I 1ère IAG Responsable : Dr. Fadoua Bouafif Dr.fadoua Bouafif 2 Chapitre 6 Les Sous-programmes Dr.fadoua Bouafif Objectifs du chapitre  Savoir la programmation modulaire  Apprendre la manipulation des modules (sous- programmes) en algorithme et en C  Connaitre les types de paramètres et leurs passages dans les sous-programmes 3 Dr.fadoua Bouafif Plan du chapitre 1. Introduction 2. Les types de sous-programmes 3. Les prototypes et les sous-programmes 4. Les variables globales et les variables locales 5. Les paramètres et le passage des paramètres 6. Conclusion 4 Dr.fadoua Bouafif 1 2 3 4
  • 2. 2 Introduction  La manipulation et la résolution d'un problème complexe nécessite l’usage des sous programmes qui seront par la suite appelés par l'algorithme principal (programme principal en C).  Les sous programmes permettent de :  Réduire la complexité des programmes  Décomposer le programme en des sous modules cohérents  Le paramétrage et la lisibilité des programmes.  Réutiliser les sous programmes sans avoir à les redéclarer.  Faciliter les opérations de maintenance et/ou de modification des programmes  gain de temps (CPU) et gain de l'espace mémoire (MC).  Un sous programme utilise des paramètres avec lesquels il sera appelé dans le programme principal. 5 Dr.fadoua Bouafif Introuduction (suite) 6 Déroulement d’un programme Dr.fadoua Bouafif Les types de sous-programmes  Il existe deux types de sous programmes :  Les procédures: représentent une action, qui peut être complexe à entreprendre, et peuvent aussi calculer une ou plusieurs valeurs  Les fonctions: calculent et retournent une valeur et une seule. 7 Dr.fadoua Bouafif 8 Les Procedures Dr.fadoua Bouafif 5 6 7 8
  • 3. 3 Définition  Une procédure est un sous programme qui peut être appelé soit:  Par l’algorithme (programme) principal  Par un autre sous programme.  Une procédure peut être appelée comme une instruction dans un programme par l'intermédiaire de son nom suivi de sa liste de paramètres effectifs (s'ils existent). 9 Dr.fadoua Bouafif Déclaration 10 En Algorithmique En C procédure nom_sp (liste paramètres formels+types) var : // déclaration des variables locales (internes) début ...... // Liste des instructions ; ...... fin ********************************************** Algorithme nom_algorithme var : ....... // déclaration des variables début .... // appel de la procedure nom_sp (liste_paramètres_réels) .... Fin void nom_sp (liste paramètres formels+types) { // Déclaration des variables locales (internes); // Liste des instructions ; ..... } ******************************************* void main() { // déclaration des variables …….. // appel de la procedure nom_sp (liste_paramètres_réels) ; ……. } Dr.fadoua Bouafif Exemple 11 En Algorithmique En C procédure somme( x:entire, y:entier ) var : som: entier début Som x+y écrire (“la somme de”,x, y, “= “ ,som) Fin ******************************** Algorithme test var : a,b:entier Début ecrire(“donner deux valeurs”) lire(a,b) somme(a,b) Fin #include <stdio.h> void somme ( int x, int y) { int som; som=x+y; printf (“ la somme de %d et %d =%dn”, x ,y, som) ; } ***************************** void main ( ) { int a,b; printf(“donner deux valeurs”); scanf(“%d%d”,&a, &b); somme(a,b); } Dr.fadoua Bouafif Remarques  Une procédure est appelée dans une action spécifiant son nom et ses paramètres effectifs en respectant leurs modes de passage respectifs.  En C, le type prédéfini void indique l'absence d'une valeur de retour. Il est aussi un type particulier qui indique un ensemble vide de valeurs.  Dans la déclaration d'un sous programme qui ne possède aucun argument (paramètre), liste vide, le type void ou des parenthèses vides est(sont) employé(s). 12 Dr.fadoua Bouafif 9 10 11 12
  • 4. 4 Activité  Ecrire un algorithme (programme C) qui permet de définir et d’appeler une procédure Minimum qui renvoie le plus petit de deux nombres différents 13 Dr.fadoua Bouafif 14 Les Fonctions Dr.fadoua Bouafif Définition  Une fonction, contrairement à la procédure, doit avoir un type, c.à.d. qu'elle doit remettre une valeur en sortie.  Une fonction est caractérisée par un nom et permet de renvoyer une valeur (résultat) au programme qui va l'appeler. 15 Dr.fadoua Bouafif Déclaration 16 En Algorithmique En C fonction nom_sp (paramètres formels+types) : type de retour var : // déclaration des variables locales (internes) début //Liste des instructions ...... retourne (variable_résultat) Fin ************************************************* Algorithme nom_algorithme var : nom_variable : type de retour ....... début // appel de la fonction nom_variable  nom_sp (paramètres_réels) .... Fin type de retour nom_sp (paramètres formels+types) { //Déclaration des variables locales (internes); //Liste des instructions ; ..... return (variable_résultat); } *************************************************** void main() { Type de retour variable_resultat ; // appel de la fonction variable_ resultat = nom_sp (paramètres_réels) ; …… } Dr.fadoua Bouafif 13 14 15 16
  • 5. 5 Exemple 17 En Algorithmique En C fonction carre (x : entier) : entier var : c : entier début c  x * x retourne (c) Fin ***************************** Algorithme test var : n, p : entier début écrire ("Saisir une valeur :") lire (n) p  carre(n) Écrire ("Le carre de", n, "est ", p) Fin #include <stdio.h> int carre (int x) { int c ; c = x * x ; return(c) ; } ************************************ void main() { int n, p ; printf("Saisir une valeur :") ; scanf("%d", &n) ; p = carre(n) ; printf("Le carre de %d est %d", n, p) ; } Dr.fadoua Bouafif Remarques  Puisque la fonction renvoie un résultat unique, alors lors de son appel le résultat retourné est affecté à une variable déclarée dans l'algorithme (programme principal) correspondant et qui a le même type de retour.  En C, si la fonction contient plusieurs paramètres de même type, ils doivent être déclarés séparément. 18 Dr.fadoua Bouafif Activité  Ecrire un algorithme (programme C) qui permet de définir et d’appeler une fonction Minimum qui renvoie le plus petit de deux nombres différents 19 Dr.fadoua Bouafif 20 Les prototypes & les sous-programmes Dr.fadoua Bouafif 17 18 19 20
  • 6. 6 Definitions  Un sous programme peut être déclaré avant ou après l'algorithme (programme) principal.  Dans le cas où le sous programme est définit après l’algorithme principal, le prototype du sous programme doit être déclaré avant l'algorithme (programme) principal.  Le prototype d’un sous programme contient uniquement la liste des paramètres formels ainsi que leurs types.  En C, le prototype d’une fonction peut être définit de deux manières : Type_resultat nom_sp (TypePar1, TypePar2, ...) ; ou bien Type_resultat nom_sp (type1 parm1, type2 parm2, . . ., typen parmn) ; 21 Prototype en Algorithmique Prototype en C procédure nom_sp (p1 :type1, p2 : type2, ...., pn :typen) fonction nom_sp1 (p1 :type1, p2 : type2, ...., pn :typen) : typeretour void nom_sp (type1 p1, ...., typen pn) ; Type_resultat nom_sp1 (type1 p1, ...., typen pn) ; Dr.fadoua Bouafif Syntaxe en Algorithme 22 En Algorithmique- sous programme après l’algorithme principal // déclaration des prototypes procédure nom_sp (p1: type1, p2: type2, ...., pn: typen) fonction nom_sp1 (p1: type1, ...., pn: typen) : typeretour *************************************************************************** // algorithme principal Algorithme Nom_algorithme var : nom_variable : typeretour ....... début .... nom_sp (p1, p2, ...., pn) .... nom_variable  nom_sp1 (p1, p2, ...., pn) .... fin //définition sous-programme procédure nom_sp (p1: type1, p2: type2, ...., pn: typen) var : // déclaration des variables locales (internes) début ...... Fin ********************************************************* fonction nom_sp1 (p1: type, p2: type, ...., pn: type) : typeretour // déclaration des variables locales (internes) var : variable_résultat : typeretour début ...... ...... retourne (variable_résultat) fin Dr.fadoua Bouafif Syntaxe en C 23 En C- sous programme après le programme principal #include <stdio.h> // declaration des prototypes void nom_sp (type1 p1, ...., typen pn) ; Type_resultat nom_sp1 (type p1, ...., type pn) ; //programme principal ************************************************** void main() { Type_resultat var_resultat ; .... nom_sp (p1, ...., pn) ; .... var_resultat = nom_sp1 (p1, ...., pn) ; .... } //définition sous-programme void nom_sp (type1 p1, ...., typen pn) ; { //Déclaration des variables ; ... … } *********************************************** Type_resultat nom_sp1 (type p1, ...., type pn) { //Déclaration des variables ; Type_resultat var_resultat ; Liste des instructions ; ..... return (var_resultat) ; } Dr.fadoua Bouafif Les variables globales & les variables locales 24  Une variable est dite globale si elle est déclarée dans l’algorithme (programme) principal, hors de sous programme, mais qui peut être utilisée par ces sous programmes.  Une variable globale a une durée de vie égale à celle de l’algorithme (programme) en entier.  Une variable est dite locale si elle est déclarée à l'intérieur du sous programme. Elle démarre son existence au moment de l'appel du sous programme, et est détruite lors de l'achèvement du sous programme.  Une variable locale a une durée de vie égale à celle du sous programme où elle est définie.  Une variable locale définie dans un sous programme est visible partout à l'intérieur du sous programme et invisible à l'extérieur.  Les variables globaux et standards sont visibles en tout point de l’algorithme (programme). Dr.fadoua Bouafif 21 22 23 24
  • 7. 7 Activité Écrire un algorithme (programme C) qui permet de saisir deux entiers N1 et N2 strictement positifs et de calculer et d’afficher la somme si N1>N2 et le produit si N2>=N1. On utilisera  Un sous-programme « somme() » qui retourne la somme de deux entiers.  Un sous-programme « produit() » qui retourne le produit de deux entiers.  Un sous-programme « Affiche() » qui affiche le résultat de l’opération 25 Dr.fadoua Bouafif Les paramètres & le passage des paramètres  Les paramètres:  formels sont déclarés au sein des sous-programmes  effectifs ou réels se trouvent dans l'algorithme principal  Passage des paramètres:  Par valeur  Par adresse 26 Dr.fadoua Bouafif Les paramètres  Les paramètres formels et les paramètres effectifs doivent correspondre en nombre, type et ordre respectivement.  Il existe trois types de paramètres formels :  paramètres données (entrés): ils ne changent pas de valeur dans le sous-programme. Leurs valeurs sont plutôt utilisées.  paramètres résultats (sorties): ils n'ont pas de signification qu'après l'exécution du sous- programme.  paramètres données/résultats (E/S): ils ont une valeur avant l'exécution du sous-programme et qui peut changer après exécution. 27 Dr.fadoua Bouafif Passage des paramètres par valeur: définition  C'est le mode de passage par défaut des paramètres dans un sous-programme.  Dans ce type de passage, le sous programme copie la valeur à transférer au sein du sous programme lui même; Ce dernier utilise alors cette copie sans modifier la valeur initiale.  Le paramètre formel représente une variable locale au sous-programme et tout changement de ce paramètre n'a aucun effet sur le paramètre effectif (réel).  La modification de ce paramètre reste locale au sous-programme.  A l'appel, les valeurs des paramètres effectifs sont récupérées dans les paramètres formels sur lesquels le traitement va s’effectuer. Ainsi, un paramètre effectif transmis par valeur ne peut pas être modifié. 28 Dr.fadoua Bouafif 25 26 27 28
  • 8. 8 En Algorithmique En C procédure nom_sp (p1: type1, p2: type2, ...., pn: typen) var : // déclaration des variables locales (internes) début ...... Fin ****************************************************** fonction nom_sp1 (p1: type1, ...., pn: typen) : type_retour var : variable_résultat : type_retour début ...... Retourne (variable_résultat) Fin ******************************************************* Algorithme nom_algorithme var : nom_variable : type_retour début .... nom_sp ( p1, p2, ...., pn) .... nom_variable  nom_sp1 ( p1, p2, ...., pn) Fin #include <stdio.h> void nom_sp (type1 p1, …,typen pn) { ............ } ****************************************************** Type_retour nom_sp1 (type1 p1, …,typen pn) { Type_retour varaiuble_resultat ; ............ Return(variable_résultat) } ****************************************************** void main() { Type_retour nom_varaiuble ; ....... nom_sp (p1, …, pn) ; Nom_varaible= nom_sp1 (p1, ..., pn) ; . . .. } Passage des paramètres par valeur: Syntaxe 29 Dr.fadoua Bouafif Ecrire un algorithme qui saisit deux valeurs entières et permute leur valeurs 30 Dr.fadoua Bouafif Passage des paramètres par valeur: Exemple Procédure Permuter(x, y :entier) Var aux: entier Début aux  x x  y y  aux Fin ******************************************* Algorithme Permutation Var A, B: entier Début Lire (A, B) Permuter (A, B) Ecrire (A, B) Fin Lors de l'appel de la procédure Permuter, le paramètre x prend la valeur de A et le paramètre y prend la valeur de B, à la fin de l'exécution de la procédure x aura la valeur de B et y la valeur de A Mais… A et B n'ont pas changé de valeur Cet algorithme ne résout pas notre problème Solution: on doit donner la possibilité à la procédure permuter d'accéder aux adresses de A et B pour pouvoir les modifier Passage des paramètres par adresse: définition Rappelons qu’une variable possède un nom et une adresse  Dans ce type de passage, l'adresse des paramètres effectifs est associée aux paramètres formels. Ainsi, toute modification apportée aux paramètres formels affecte les paramètres effectifs.  Lors de l'appel du sous programme, il y aura un envoi de l'adresse de la variable spécifiée pour qu'il y aura des modifications du contenu mémoire de la variable déclarée, et donc il y a non seulement copie des valeurs mais aussi transmission des variables.  En algorithmique, les paramètres formels d'une fonction ne peuvent jamais être passés par adresse. 31 Dr.fadoua Bouafif En Algorithmique procédure nom_sp (p1: type1, p2: type2, ...., pn: typen, var p11: type11, var p12: type12, ...., var p1n: type1n) Var……. debut ...... fin **************************************************************************************************************************** Algorithme Nom_algorithme var : ...... Début .... nom_sp ( p1, p2, ...., pn, p11, p12, …, p1n) .... fin 32 passage par valeur passage par adresse Passage des paramètres par adresse: Syntaxe en algorithme Dr.fadoua Bouafif 29 30 31 32
  • 9. 9 En C void nom_sp (type1 p1, type2 p2, …., type11 *p11, type12 *p12, …, type1n *p1n) {............} **************************************************************************************************** Type_resultat nom_sp1(type1 p1, …, type2 *p6, ..., typen *pn) {............} ***************************************************************************************************** void main() { Type_resultat var_resultat ; ....... nom_sp (p1,p2, …, &p11, &p12, …., &p1n) ; var_resultat = nom_sp1 (p1,…, &p6, ..., &pn) ; … } 33 Passage des paramètres par adresse: Syntaxe en C passage par valeur passage par adresse Dr.fadoua Bouafif Passage des paramètres par adresse: Exemple 34 Lors de l'appel de la procédure Permuter, le paramètre x prend l’adresse de A et le paramètre y prend l’adresse de B. À la fin de l'exécution de la procédure x aura la valeur de B puisque x et A ont la même adresse mémoire De même y aura la valeur initiale de A donc B aussi aura la valeur initiale de A Donc A et B ont effectivement permutés leurs valeurs Ecrire un algorithme qui saisit deux valeurs entières et permute leur valeurs en utilisant le passage par adresse Procédure Permuter(var x, y :entier) Var aux:entier Début aux  x x  y y  aux Fin ******************************** Algorithme Permutation Var A, B :entier Début Lire (A, B) Permuter (A, B) Ecrire (A, B) Fin Activité Écrire un algorithme (programme C) qui permet de saisir un tableau de taille N (0< N<=100) d’entier et de calculer la somme de ses éléments. On utilisera  Un sous-programme « Taille_Tableau() » qui saisie la taille du tableau  Un sous-programme « Remplir_Tableau() » qui saisie les éléments du tableau  Un sous-programme « Calcul_Somme() » qui retourne la somme des éléments du tableau 35 Dr.fadoua Bouafif Activité : Correction 36 Dr.fadoua Bouafif 33 34 35 36
  • 10. 10 Conclusion  Les différences entre les sous programmes procédure et fonction  La déclaration explicite d'une procédure, en C, comme une fonction qui ne retourne aucune valeur se fait à l'aide du mot clé void.  Les paramètres données sont, en général, passés par valeur.  Les paramètres données/résultats et résultats sont toujours passés par adresse.  Un paramètre de type tableau est toujours passé par adresse, en C. 37 Procédure Fonction Syntaxe Syntaxe Appel Appel Passage de paramètre par valeur Passage de paramètre par valeur passage de paramètres par adresse passage de paramètres par adresse (uniquement en C) Dr.fadoua Bouafif 37