1
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
1. Introduction
1.1 Exemple introductif
Ecrire un algorithme qui lit n entiers, calcule la somme des entiers divisibles par 3 parmi les n lus ensuite affiche si la somme est divisible par 10 ou non.
Solution :
Algorithme calcul1 ; Var
x,r,n,cpt,s :Entier ; Début
Lire (n) ; s 0 ;
Pour cpt de 1 à n faire Lire (x) ;
r x ;
Tant que (r>=2) faire rr-2 ;
Fait ;
Si (r==0) ss+x ; Fait ;
r s ;
Tant que (r>=10) faire rr-10 ;
Fait ;
Ecrire (s) ; Si (r==0)Alors
Ecrire (‘ divisible par 10’) ;
Sinon Ecrire (‘non divisible par 10’) ; Fsi ;
Fin.
1.2 La programmation structurée
Plus le problème est complexe et plus le nombre d’instructions devient important et certaines instructions agissant à résoudre un problème se répètent à plusieurs endroits différents. Il est donc nécessaire de structurer l’algorithme. La programmation structurée consiste découper le problème principal en sous-problèmes, regrouper sous le même nom, les sous-problèmes en commun et faire l’intégration pour avoir la solution globale.
2
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Découpage Intégration
Les avantages de la programmation structurée sont :
La réduction de la taille d’un algorithme,
L’amélioration de la lisibilité de l’algorithme,
La facilité de mise au point et la correction des erreurs
La réutilisation des sous-algorithmes.
Découpage
Si nous prenons l’exemple précédant, nous découpons notre problème principal en sous-problèmes comme suit :
Somme de n entiers divisible par 2 o Divisibilité de a par b
Reste de division de a par b
Divisibilité de la somme par 10 o Divisibilité de a par b
Reste de division de a par b
Nous constatons qu’il y’a des sous problèmes qui sont en commun. Ceci nous mène au schéma suivant :
Problème globale
Sous-problème 1 Sous-problème 2 Sous-problème 1
Algorithme global
Somme de n entiers divisible par 2 Divisibilité par 10
Divisibilité de a par b
Reste de division de a par b
3
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Intégration
Nous allons maintenant résoudre les sous-problèmes progressivement et faire l’intégration.
Etape 1 : résoudre le problème du reste de la division de a par b Algorithme Reste ;
Var
a,b,r : Entier ; Debut
Lire (a,b) ; ra ;
Tant que (r>=b) Faire r r-b ;
Fait ; Ecrire(r) ; Fin.
Etape 2 : Intégrer le problème du reste de la division pour résoudre le problème de la divisibilité de a par b
Algorithme Divisibilite ; Var
a,b : Entier ;
resultat : Booleeen ; Reste ();
Debut
Lire (a,b) ;
Si (Reste (a,b)==0) Alors resultat Vrai ; Sinon resultat Faux ;
Ecrire(resultat) ; Fin.
Etape 3 : Intégrer le problème de la divisibilité de a par b pour résoudre le problème final Algorithme Finale ;
Var
val,n, cpt, s : Entier ; Divisibilte () ;
Debut
/*Lire les n entiers*/
Lire (n) ;
/* somme de n entiers divisible par 2*/
Pour cpt de 1 à n Faire Lire(val) ;
Si (Divisibilite(val,2)==Vrai) ss+val ; Fait ;
/* vérifier la divisibilté de la somme par 10*/
4
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Si (Divisibilite(s,10)==Vrai) Alors Ecrire (‘ divisible par 10’) ; Sinon Ecrire (‘non divisible par 10’) ;
Fsi ; Fin.
Exemple 2
Algorithme Questions ; Var
Rep : Car ; Debut
Ecrire ("Etes-vous étudiant ?") ; Répeter
Ecrire ("Tapez Oui ou Non") ; Lire (rep) ;
Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;
Ecrire ("Etes vous majeur ?") ; Lire (rep) ;
Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;
Ecrire ("Avez-vous des frères et sœurs ?") ; Lire (rep) ;
Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;
Fin.
Découpage :
Question1
o Réponse par oui ou non
Question2
o Réponse par oui ou non
Question3
o Réponse par oui ou non
5
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Intégration
Etape 1: Résoudre le problème de la réponse par oui ou non Algorithme ReponseOuiNon ;
Var
Rep : Car ; Debut
Lire (rep) ;
Tant Que (Rep <> ‘O’) ET (Rep <> ‘N’) ; Ecrire (rep) ;
Fin.
Etape 2 : résoudre le problème des questions en intégrant le problème de réponse oui ou non.
Algorithme Principal ; Var
Rep : Car ;
ReponseOuiNon() ; Debut
Ecrire ("Etes-vous étudiant ?") ; ReponseOuiNon() ;
Ecrire ("Etes vous majeur ?") ; ReponseOuiNon() ;
Ecrire ("Avez-vous des frères et sœurs ?") ; ReponseOuiNon() ;
Fin.
2. Les actions paramétrées
2.1 Définition
En algorithmique, on appelle action paramétrée, l’algorithme permettant de résoudre un sous-problème particulier dans un autre algorithme. Dans les exemples précédents, l’algorithme du reste de la division de a par b, l’algorithme de la divisibilité et l’algorithme de la réponse par oui ou non sont des actions paramétrées.
Algorithme global
Question 1 Question 2 Question 3
Réponse par oui ou non
6
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
L’action paramétrée est appelée autant de fois que nécessaire dans l’algorithme appelant. La communication entre les deux se fait grâce au passage de paramètres.
L’action paramétrée peut être considérée comme un bloc qui reçoit des données en entrées nécessaires à la résolution du problème (appelés paramètres d’entrée) à partir de l’algorithme appelant, et fournit un résultat (appelés paramètres de sortie) à l’algorithme appelant comme sur le schéma suivant :
Les paramètres d’une action paramétrée représentent l’interface de communication entre l’action paramétrée et l’algorithme qui l’appelle.
2.2 Structure d’un algorithme utilisant une action paramétrée
Syntaxe :Algorithme idf ; Const
<Déclaration des constantes>
Var
<Déclaration des variables>
<Déclaration des actions paramétrées >
Debut
<action 1> ;
<action 2> ;
………..
<Appel à l’action paramétrée> ;
<action n> ; Fin.
Le corps de l’action paramétrée est déclaré dans la partie des déclarations de l’algorithme. L’appel à cette action se fait dans le corps de l’algorithme (entre Début et Fin).
Selon le type de résultat que nous voulons avoir, les actions paramétrées sont divisées en deux
catégories: les procédures et les fonctions. Les procédures sont des actions paramétrées qui fournissent zéro ou plusieurs résultats tandis que les fonctions sont des actions paramétrées qui fournissent
exactement un résultat.
AP
Algorithme appelant de l’AP
Paramètre d’entrée
Paramètre de sortie
7
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
2.3 Les procédures
Plusieurs entrées
Aucune, une ou plusieurs sorties
2.3.1 Déclaration d’une procédure
Syntaxe :Procédure < identificateur_procédure> ([<liste des paramètres formels>]) ;
<Partie déclarations>
Début
<actions>
Fin;
Syntaxe de la liste des paramètres formels
(paramètre 1, paramètre 2, paramètre 3, ….paramètre n) ;
Chaque paramètre formel est défini par un identificateur, un type et un mode de transmission mode de transmission/ identificateur_paramètre :type_paramètre Le nom et le type du paramètre est défini de la même façon que pour les variables. Le mode de transmission spécifie si le paramètre est un paramètre d’entrée, de sortie ou d’entrée/sortie. On appelle aussi le mode de transmission Entrée, un passage par valeur et le mode de transmission Entrée/Sortie un passage par adresse.
On spécifie le mode de transmission comme décrit que le tableau suivant :
Mode de transmission Symbole syntaxique
Entrée (passage par valeur) E
Sortie S
Entrée/sortie (passage par adresse) ES Notes importantes :
il est possible de regrouper plusieurs paramètres (séparés par des virgules) quand ces derniers ont le même type et le même mode de transmission.
L’ordre des paramètres dans une action paramétrée est important.
Procédure
8
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
2.3.2 Appel de la procédure
Quand un algorithme veut utiliser une action paramétrée, il fait appel à cette dernière à travers une instruction.
Syntaxe :
<identificateur_procédure> ([<liste des paramètres réels>]) ; Les paramètres réels sont les paramètres passés de l’algorithme appelant à la procédure. Chaque paramètre réel va correspondre à un paramètre formel.
Exécution d’appel d’une procédure :
Etape 1 : copie des paramètres réels d’entrée dans les paramètres formels d’entrée en respectant l’ordre Etape 2 : exécution de la procédure
Etape 3 : copie des paramètres formels de sortie dans les paramètres réels de sortie en respectant l’ordre
Exemple : Calcul du reste et du quotient d’une division de x par y.
Algorithme alg1 ; Var
X,Y,Quotient,Reste : Entier ;
/*La déclaration de la procédure se fait ici*/
Procedure Quotient_reste (E/A,B : Entier,S/R,D :Entier) /* A et B sont les paramètres formels d’entrée*/
/* R et Q sont les paramètres formels de sortie*/
Debut RA;
Q0 ;
Tant que (R>= B) Faire R R-B;
Q Q+1 Fait;
Fin ; Debut
Lire (X,Y) ;
/*L’appel de la procédure se fait ici*/
Quotient_reste (X,Y ,Reste, Quotient) ;
/* X et Y sont les paramètres réels d’entrée*/
/* Quotient et Reste sont les paramètres réels de sortie*/
Ecrire (Reste) ; Ecrire (Quotient) ; Fin.
9
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
L’appel à la procédure Quotient_reste avec les paramètres réels d’entrée X et Y et les paramètres réels de sortie Reste et Quotient se fait comme suit :
Copie de X dans A et copie de Y dans B
Exécution de la procédure (Calcul du reste et du quotient)
Copie de R dans Reste et Q dans Quotient
2.3.3 Exercice d’application
Ecrire une procédure Calcul qui calcule la somme et le produit de deux entiers x et y.
Algorithme Proced ; Var
x,y,somme, produit : Entier ;
Procedure Calcul (E/A,B:Entier,S/S,P :Entier) Debut
SA+B ; PA*B ; Fin ; Debut
Lire (x,y) ;
Calcul (x,y ,somme, produit) ; Ecrire (somme) ;
Ecrire (produit) ; Fin.
2.4 Les fonctions
Plusieurs entrées
Une seule sortie
2.4.1 Déclaration de la fonction
Syntaxe 1:Fonction < identificateur_fonction > ([<liste des paramètres formels>]) :< type du résultat retourné> ;
<Partie déclarations>
Début
Fonction
10
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
<actions>
identificateur_fonction <résultat> ; Fin ;
Syntaxe 2:
Fonction < identificateur_fonction > ([<liste des paramètres formels>]) :< type du résultat retourné> ;
<Partie déclarations>
Début
<actions>
Return <résultat> ; Fin ;
Note importante : une fonction ne contient que des paramètres d’entrée. Le résultat en sortie est renvoyé par la fonction elle-même. C’est pour cela qu’il faut spécifier le type de retour.
2.4.2 Appel de la fonction
Syntaxe :<identificateur_fonction> ([<liste des paramètres réels>]) ; L’appel d’une fonction renvoi directement un résultat et elle est semblable à une expression. Nous pouvons l’utiliser d’ailleurs, dans une expression.
Exécution d’appel d’une fonction :
Etape 1 : copie des paramètres réels dans les paramètres formels en respectant l’ordre Etape 2 : exécution de la fonction et renvoi du résultat
Exemple : vérifier si un entier est positif ou négatif en utilisant une fonction Algorithme alg1 ;
Var
X : Entier ;
Fonction Verif (A:Entier) : Booléen ; Debut
Si (A>=0) Alors Return Vrai ; /* ou bien Verif Vrai ; */
Sinon Return Faux ; /* ou bien Verif Faux ; */
Fin ; Debut Lire (X) ;
/*L’appel de la fonction est mis directement dans l’instruction Ecrire comme une expression*/
Ecrire (Verif(X)) ; Fin.
11
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
2.4.3 Exercice d’application
Reprendre l’exemple introductif : Ecrire un algorithme qui lit n entiers, calcule la somme des entiers divisibles par 3 parmi les n lus ensuite affiche si la somme est divisible par 10 ou non.
Algorithme calcul1 ; Var
x,n,cpt,s :Entier ;
Fonction Reste(a,b :Entier) :Entier ; Var r :Entier ;
Debut r a ;
Tant que (r>=b) faire rr-2 ;
Fait ; Return r ; Fin ;
Fonction Divisibilité(r :Entier) : Booléen ; Début
Si (r==0) Alors Return Vrai ; Sinon Return Faux ;
Fin ; Début Lire (n) ; s 0 ;
Pour cpt de 1 à n faire Lire (x) ;
Si ((Divisibilité (Reste(x,2))==Vrai ) Alors ss+x ; Fsi ;
Fait ;
Si ((Divisibilité (Reste(s,10))==Vrai ) Alors Ecrire (‘ divisible par 10’) ;
Sinon Ecrire (‘non divisible par 10’) ; Fsi ;
Fin.
3. Les variables locales et globales
3.1 Les variables locales
Les variables locales sont les variables déclarées dans la partie déclaration de l’action paramétrée. La visibilité de ces variables est limitée à l’action paramétrée dans laquelle elle est utilisée. Elle se termine dès la terminaison de l’action paramétrée.
Exemple : Permutation de deux entiers
Algorithme algorithme_principal;
12
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Var X, Y : entier;
Procédure Permuter (ES /a, b : entier);
Var c : entier; /*La variable c est une variable locale, elle n’est visible que dans la procédure Permuter */
Début c a ; a b ; b c ; Fin;
Début
Lire (X, Y);
Permuter (X, Y);
Ecrire (X, Y);
Fin.
3.2 Les variables globales
Les variables globales sont les variables déclarées dans la partie déclaration de l’algorithme appelant.
Leur visibilité est plus grande que celle des variables locales car elle se termine avec la terminaison de l’algorithme appelant.
Exemple : Permutation de deux entiers
Algorithme algorithme_principal;
Var X, Y : entier;
Var c : entier; /*La variable c est une variable globale, elle est visible dans tout l’algorithme et compris la procédure Permuter */
Procédure Permuter (ES /a, b : entier);
Début c a ; a b ; b c ; Fin;
Début
Lire (X, Y);
Permuter (X, Y);
Ecrire (X, Y);
Fin.
13
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Exercices d’application :
Donnez le déroulement de l’algorithme suivant : Algorithme algorithme_principal;
Var a, b : entier;
Procédure affichage ();
Var a : entier;
Début
(a) a 1;
(b) Ecrire(a, b) ;
Fin;
Début (*algorithme principal*) (1) a 4; b 3;
(2) affichage ( );
(3) Ecrire (a, b);
Fin.
Déroulement
Variables globales Variables locales
Instruction a b a Ecran
(1) 4 3
(2) (a) 4 3 1
(2) (b) 4 3 1 1 3
(3) 4 3 1 4 3
Note importante : Dans la procédure Affichage, on remarque qu’il y’a une variable a qui est locale et il y’a aussi une variable a qui est globale. On dit que ces deux variables sont homonymes. La procédure va prendre en compte sa variable locale et on dit que la variable globale a été masquée par la variable locale.
4. Imbrication des actions paramétrées
Une action paramétrée AP1 peut appeler une autre action paramétrée AP2 à condition que l’action paramétrée appelée (i.e AP2) soit accessible par l’action paramétrée appelante (i.e AP1).
14
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
AP2 est accessible par AP1 si :
AP2 est la même que AP1
AP2 est directement déclarée à l’intérieur de AP1
AP2 est déclarée au même niveau que AP1 et avant AP1 Exemple : Soit l’algorithme suivant :
On peut schématiser la hiérarchie des actions paramétrées de cet algorithme comme suit :
Les possibilités d’appel dans cet algorithme sont résumées sur le tableau suivant :
principal A B C D E F
principal oui oui
A oui oui
B oui oui oui
C oui oui oui
D oui oui
E oui
F oui oui
15
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Notes importantes :
Une action paramétrée peut appeler elle-même, on parle ici d’un appel récursif.
L’imbrication est tolérée dans certains langages (Pascal, Caml…. ) et elle est interdite dans d’autres (C,C++,..)
Exercice d’application
Dérouler l’algorithme suivant : Algorithme affichage;
Var a, b, c : entier;
Procédure P1 ();
Var
a , c : entier;
Procédure P2 ();
Var b : entier;
Début
(2,3,1) : a ← 4; b ← 5 ; (2,3,2) : écrire (a, b, c)
Fin;
Début
(2,1) : c ← 6;
(2,2) : écrire (a, b, c) (2,3) : P2() ;
(2,4) : écrire (a, b, c)
Fin;
Début (*algorithme principal*) (1) : a ← 1; b ← 2 ; c ← 3;
(2) : P1();
(3) : Ecrire (a, b,c );
Fin.
16
Dr Manel SeddikiDépartement Informatique https://manel-seddiki.jimdo.com/
Déroulement :
Affichage P1 P2
Instruction a b c a c b Ecran
(1) 1 2 3 / / /
(2) (1) 1 2 3 / 6 /
(2) (2) 1 2 3 / 6 / / 2 6
(2) (3)(1) 1 2 3 4 6 5
(2) (3)(2) 1 2 3 4 6 5 4 5 6
(2) (4) 1 2 3 4 6 5 4 2 6
(3) 1 2 3 4 6 5 1 2 3
5. Exercices
Les actions paramétrées à écrire sont à intégrer dans un algorithme principal :
1. Ecrire une AP qui permet d’entrer deux valeurs M et N et d’afficher toutes les valeurs paires entre M et N si M < N
2. Ecrire une AP qui permet de vérifier si un entier naturel A est divisible par B.
3. Ecrire une AP qui permet de vérifier si un entier A est un nombre premier.
4. Ecrire une AP qui permet de vérifier si un entier A est un nombre parfait. Un nombre parfait est un nombre dont la somme de ses diviseurs est égale à lui-même.
5. Ecrire une AP qui permet de vérifier si une un caractère donné c est une voyelle ('a','e','i','o','u','y').
6. Ecrire une AP qui permet de vérifier si un nombre entier naturel N représente un carré parfait.
N est dit carré parfait s'il existe un entier i, tel que N=i*i.
7. Ecrire une AP qui permet de résoudre une équation du second degré dans R
8. Ecrire une AP qui permet d’avoir un nombre entier positif et afficher son image miroir.
Exemple le nombre est 3524, on doit afficher 4253.