Vous êtes sur la page 1sur 36

Introduction à l'Algorithmique

Définitions
Le mot « algorithme » provient de la forme latine (Algorismus) du nom du mathématicien
musulman AL KHWARIZMI. Il tenta une première définition : « Un algorithme est une séquence
d'opérations visant à la résolution d'un problème en un temps fini. »
Un algorithme est une suite d'actions élémentaires qu'il faut effectuer pour résoudre un problème.
Algorithme et Programme
Tout problème à programmer doit être résolu, d'abord sous forme d'algorithme, puis converti en
programme dans le langage de votre choix. En effet, un algorithme est indépendant du langage de
programmation à utiliser.
Un programme est un enchaînement d'instructions écrites dans un langage de programmation
exécuté par un ordinateur, permettant de traiter un problème et de renvoyer des résultats. Il
représente la traduction d'un algorithme à l'aide d'un langage de programmation

Un programme c'est un algorithme codé dans un langage compréhensible par ordinateur à


l'aide d'un compilateur (traducteur).

Les étapes de résolution d'un problème


1. Comprendre l'énoncé du problème
2. Décomposer le problème en sous-problèmes plus simple à résoudre
3. Associer à chaque sous problème, une spécification :
o Les données nécessaires
o Les données résultantes
o La démarche à suivre pour arriver au résultat en partant d'un ensemble de données.
4. Elaboration d'un algorithme.

Structure d'un algorithme


ALGORITHME nom_de_l'algorithme
Constante {Définition des constantes}
Variable {Déclaration de variables}
DEBUT
{Suite d'instructions}
FIN
Algorithmique

Les Variables
1. La notion de variable
Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement
des v de données issues du disque dur ou
au clavier). Ces données peuvent être de plusieurs types : elles peuvent être des nombres, du

une variable.
1.1. Déclaration des variables
La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et de lui
coller une étiquette. Ceci se fait tout au début de l algorithme, avant même les instructions
proprement dites. C est ppelle la déclaration des variables. Une variable ne peut être
utilisée que si elle est déclarée. La déclaration se fait par la donnée du nom de la variable et du
type de la variable.
on lui attribue un nom et on lui réserve un emplacement

type de la variable.

1.2. Noms de variables


Le nom de la variable (l étiquette de la boîte) obéit à des règles qui changent selon le langage
utilisé. Les principales règles à respecter sont :
Le nom de la variable peut comporter des lettres et des chiffres,
On exclut la plupart des signes de ponctuation, en particulier les espaces.
Un nom de variable doit commencer par une lettre.
Le nombre maximal de caractères qui composent le nom iable dépend du langage
utilisé.
Ne pas utiliser les mots clés du langage de programmation.

de variable est la suivante :

VARIABLES
nom_variable : Type ;
nom1_variable1, nom2_variable2 : Type ;

2. Types de variables
2.1. Type numérique

Généralement, les langages de programmation offrent les types suivants :


2.1.1. ENTIER

entre -32 768 à 32 767.

VARIABLES
On écrit alors
i, j, k : ENTIER ;

2
Algorithmique
2.1.2. REEL
Le type réel comprend les variables numériques qui ont des valeurs réelles. La plage des valeurs
du type réel est :
-3,40x1038 à -1,40x1045 pour les valeurs négatives
1,40x10-45 à 3,40x1038 pour les valeurs positives

VARIABLES
On écrit alors : x, y : Reel ;

Remarque : Le type de variable choisi pour un nombre va déterminer les valeurs maximales et
minimales des nombres pouvant être stockés dans la variable. Elle détermine aussi la précision de
ces nombres (dans le cas de nombres décimaux).

2.2. Type alphanumérique


2.2.1. Type caractère
Ce type comporte les caractères connus, on y stocke un seul caractère :
Exemple : etc
On écrit alors :
VARIABLES
sexe_etudiant, etat_civil : CARACTERE ;

2.2.2. Type chaine


Dans une variable de ce type, on stocke des caractères gnes de

Le nombre maximal de caractères pouvant être stockés dans une seule variable chaîne dépend du
langage utilisé.

VARIABLES
On écrit alors : nom, prenom, adresse : CHAINE ;

Une chaîne de caractères est notée toujours soit entre guillemets, soit entre des apostrophes.
suivantes :
Confondre un chiffre et une suite de chiffres. Par exemple, 423 peut représenter le nombre 423
(quatre cent vingt-trois), ou la suite de caractères 4, 2, et 3.
La confusion qui consiste à ne pas pouvoir faire la distinction entre le nom d'une variable et son
contenu.
Remarque : Pour les valeurs des variables de type chaîne, il faut respecter la casse. Par exemple,
la chaîne Salut est différente de la chaîne salut .
2.3. Type booléen (Logique)
Dans ce type de variables on y stocke uniquement des valeurs logiques VRAI ou FAUX, TRUE
ou FALSE, 0 ou 1.
VARIABLES
On écrit alors : etat_interrupteur : LOGIQUE ; ou
etat_interrupteur :BOOLEEN ;
3
Algorithmique
3. Les constantes
Comme une variable, une constante est un emplacement mémoire réservé auquel on accède par le
nom qui lui a été attribué, mais dont la valeur stockée ne sera jamais modifiée au cours du
programme.
Syntaxe :
Constante nom_de_la_constante = valeur
Exemple :
Constante pi = 3.14

4
Algorithmique

Opérateurs et expressions
1. Opérateurs
Un opérateur est un signe qui relie deux variables pour produire un résultat.
Les opérateurs dépendent des types des variables mis en jeu.
Pour le type numérique on a les opérateurs suivants :

+ : Addition - : Soustraction
* : Multiplication / : Division
^ : Puissance Div: Division entière (euclidienne)
Mod : Reste de la division entière

Tandis que pour le type chaîne, on a un seul opérateur qui permet de concaténer deux chaînes de
caractères. Cet opérateur de concaténation est noté & (+).
Par exemple : la chaîne de caractères Salut concaténée à la chaîne tout le monde donne
comme résultat la chaîne Salut tout le monde .
"Salut" & "tout le monde" Salut tout le monde .
"Salut" + "tout le monde" Salut tout le monde .
2. Expressions
Une expression est un ensemble de variables (ou valeurs) reliées par des opérateurs et dont la
valeur du résultat de cette combinaison est unique.

Par exemple : 7 5+4 x + 15 y/2 nom & prenom

des
opérateurs est important. En effet, la multiplication et la division sont prioritaires par rapport à
n.

Par exemple, 12 * 3 + 5 donne comme résultat 41.

s.

Par exemple, 12 * (3 + 5) donne comme résultat 96.

3.
tation est une opération qui consiste à attribuer une valeur à une variable. On
la notera par avec une flèche orientée vers la gauche :

Par exemple :
Variable valeur
Montant 3500

attribue) la valeur 3500 à la variable numérique Montant.

affectée ont des types différents, cela provoquera une erreur.


5
Algorithmique
On peut aussi attribuer à une variable
façon générale.
On écrit : Variable Expression

Par exemple : A B
A B*2+5

On affecte la valeur obtenue à la variable à gauche.

Par exemple : A A+5

Dans cet variable A sera


augmentée de 5.

Remarque :
tation on a toujours :
tation le nom de la variable

oit être du même type que la variable située à gauche.


Si dans u
erreur.

résultat final.
Exemple :
Cas Instructions Valeur de A
A 15
1 30
A 30
A 30
2 15
A 15

4. Les instructions de lecture et ecriture


Algorithme carre
Variable
A : Entier ;
Considérons l suivant : Début
;
Fin
Il permet de calculer le carré de 12.
:
, il faut réécrire le programme

ne saura jamais quel est le carré de 12

6
Algorithmique

lisées par le programme.

La syntaxe de cette instruction de lecture est :


Lire (NomVariable);
Lire (NomVariable1, NomVariable2, NomVariable3)
Lorsque le programme rencontre une instruction Lire
r la touche ENTER
reprend.

:
Ecrire (NomVariable);
Ou de façon générale
Ecrire (Expression);
Remarque

Exemple :
Algorithme calcul_carre
Variables
A, Carre : Reel;
Debut
Ecrire ("Entrez un nombre");
Lire (A);

Ecrire ("Le carré de ce nombre est : ");


Ecrire (Carre);
Fin
Exercices
1. Quelles seront les valeurs des variables A et 2. Quelles seront les valeurs des variables A, B
B après exécution des instructions suivantes ? et C après exécution des instructions
suivantes ?
Variables Variables
A, B : Entier ; A, B, C : Entier ;
Début Début
A 3;
A 1;
B 10;
B A + 3;
C A + B;
A 3; B A + B;
Fin A C;
Fin
3. On dispose de trois variables A, B et C. 4 ?
Ecrivez un algorithme transférant à B la valeur Variables
de A, à C la valeur de B et à A la valeur de C A, B, C : Chaine;
(toujours quels que soient les contenus Début
préalables de ces variables). A
B
C A + B;
Fin
7
Algorithmique
5. Soient x, y et z trois variables :
x 150
y 100
z DH
Qu affichent les instructions suivantes :
Instruction Résultat
Ecrire ( assalamo alaykom )
Ecrire (x)
Ecrire ( z )
Ecrire (x*2)
Ecrire ( Prix : , x+y ,z)

7.
qui fournit le prix total TTC correspondant. Faire en sorte que des libellés apparaissent
clairement.

8. écrive un programme qui


calcule, pour chaque élève, la moyenne des notes des cinq matières. Ces matières sont avec leur
coefficient :
Matiere Histoire -
Math Physique Français Anglais
Géographie
Coefficient 5 5 4 2 2
9. Ecrire un algorithme permettant de calculer et afficher à l utilisateur la surface ainsi que le
périmètre d un cercle et d un rectangle. (C est l utilisateur qui saisit les dimensions nécéssaires
au calcul).

10. le responsable de l entreprise X souhaite donner une récompense à ses salariés en leur offrant
63% du salaire de chacun d eux.écrire l algorithme permettant à chaque employé travaillant à
l entreprise de saisir son salaire et de savoir combien il aura comme récompense.

11. le surveillant général de l établissement souhaite qu on lui fasse un algorithme permettant de


saisir les informations des étudiants et les afficher comme suit (en prenant l étudaint ahmed
comme exemple)

Vous êtes : Ahmed Saddiqi agé(e) de : 18 ans votre CNE est : E321456 de la filière DSI

8
Algorithmique

LA STRUCTURE ALTERNATIVE
1. Les conditions simples
Une condition simple consiste en une comparaison entre deux expressions du même type. Cette
comparaison s'effectue avec des opérateurs de comparaison. Voici la liste de ces opérateurs
accompagnée de leur signification dans le cas des types numérique ou chaîne :
Signification Signification
Opérateur
numérique chaîne
= égal à égal à
<> différent différent
< inférieur placé avant dans l'ordre alphabétique
> supérieur placé après dans l'ordre alphabétique
<= inférieur ou égal placé avant dans l'ordre alphabétique ou égal
>= supérieur ou égal placé après dans l'ordre alphabétique ou égal
Remarque : Pour la comparaison du type chaîne c'est l'ordre alphabétique qu'est utilisé dans le
cas où l'on compare deux lettres majuscules ou minuscules. En effet, si l'on compare majuscules
et minuscules, il faut savoir que les majuscules apparaissent avant les minuscules. Ainsi, par
exemple : "M" < "m".
2. Les conditions complexes
Certains problèmes exigent parfois de formuler des conditions qui ne peuvent pas être exprimées
sous la forme simple vu en dessus. A cet effet, la plupart des langages autorisent des conditions
formées de plusieurs conditions simples reliées entre elles par ce qu'on appelle des opérateurs
logiques. Ces opérateurs sont : Et, Ou et Non.
Tableaux d'évaluations
A et A ou Vrai Faux
Vrai Faux Non A
B B A
Vrai Vrai Vrai
Vrai Vrai Faux Vrai Faux
Faux Vrai Faux
Faux Faux Faux Faux Vrai

D'une manière générale, les opérateurs logiques peuvent porter, non seulement sur des conditions
simples, mais aussi sur des conditions complexes. L'usage de parenthèses permet dans de tels cas
de régler d'éventuels problèmes de priorité.
Par exemple, la condition : (a < 0 ET b > 1) OU (a > 0 ET b > 3) est Vrai si l'une des conditions
entre parenthèses est Vrai.

Exercice

Evaluer les expressions logiques suivantes, avec (a, b, c, d) = (2, 3,5, 10) et (X, Y) = (V, F).
1) (a < b) Et (a < c) 2) (a < b) Ou (a < c) 3) Non (a < b) Et (a < c)
4) (a < c) Et (c = d/2) 5) Y= (d / a = c) 6) Y= (d / c = b)
7) X = (d / c = b) 8) (a < b) Ou (d < c) 9) X = (a < b) Et (d < c)

9
Algorithmique
3. La structure alternative
Syntaxe
Si <Condition> Alors
-1>
[Sinon
-2>]
FinsiI

Format Organigramme

fausse vraie
e condition

TRAITEMENT-2 TRAITEMENT-1

FINSI

La <condition> est une expression, qui peut être vraie ou fausse, selon les valeurs des
paramètres la constituant.
Si la condition est vérifiée (sa valeur est vraie -1> qui sera
e après le Finsi.
(valeur de la condition est
fausse - facultative). Si

Les suites d'action 1 et 2, peuvent être des actions simples ou même des structures
conditionnelles.
Exemple 1

Algorithme POS_NEG
Variable
Reel A;
Debut
Ecrire("Donner un nombre ");
Lire(A);
Si (A < 0) Alors
Ecrire(A, " est négatif ");
Sinon
Ecrire(A, " est positif ");
Finsi
Fin

Dans cet exemple, on a déterminé uniquement les cas de positivité ou de négativité, et on n'a pas
déterminé le cas où A est nulle.

10
Algorithmique
Algorithme POS_NEG_NUL
Variable
Reel A;
Debut
Ecrire("Donner un nombre ");
Lire(A);
Si (A < 0) Alors
Ecrire(A, " est négatif ");
Sinon { A>=0}
Si (A > 0) Alors
Ecrire(A, " est positif ");
Sinon { A=0}
Ecrire(A, " est nulle ");
Finsi
Finsi
Fin
Remarque : Il peut arriver que l'une des parties d'une structure alternative contienne à son tour
une structure alternative. Dans ce cas, on dit qu'on a des structures alternatives imbriquées les
unes dans les autres.

La structure conditionnelle Selon


Cette structure conditionnelle est appelée aussi à choix multiple ou sélective car elle sélectionne
entre plusieurs choix à la fois, et non entre deux choix alternatifs (le cas de la structure SI).
Syntaxe
Selon (Selecteur)
Cas 1 : suite d'action (s)-1;
Cas 2 : suite d'action (s)-2;

Cas N : suite d'action (s)-N;


[SINON : suite d'action (s);]
FinSelon
Le sélecteur peut être une variable ou une expression arithmétique ou logique.
La structure Selon évalue le "sélecteur", passe à comparer celui ci respectivement avec les
valeurs dans les listes. En cas d'égalité avec une valeur, les actions correspondantes, qui
sont devant cette valeur seront exécutées.
Devant "Cas", il peut y avoir une seule valeur, une suite de valeurs séparées par des
virgules et/ou un intervalle de valeurs.
Après avoir traité la suite d'actions correspondante, l'exécution se poursuit après le Finselon.

Exercices
1.
produit est négatif, positif ou nul.
Remarque : on ne doit pas calculer le produit des deux nombres.

11
Algorithmique
3. A :
1% si le montant est compris entre 2000 et 5000 Dhs (valeurs comprises)
2 % si le montant est supérieur à 5000 Dhs.

4. Écrivez un algorithme qui permet de discerner une mention à un étudiant selon la moyenne de
ses notes :
- "Très bien" pour une moyenne comprise entre 16 et 20 (16<= moyenne <=20)
- "Bien" pour une moyenne comprise entre 14 et 16 (14<= moyenne <16)
- "Assez bien" pour une moyenne comprise entre 12 et 14 (12<= moyenne <14)
- "Passable" pour une moyenne comprise entre 10 et 12 (10<= moyenne <12

5. Les étudiants ayant passé l'examen d rithmique en session de Juin ont été classés selon
leurs notes en trois catégories :
pour une note inférieure strictement à 5, l'étudiant est éliminé,
pour une note supérieure ou égale à 5 et inférieur strictement à 10, l'étudiant passe la
session de rattrapage,
pour une note supérieure ou égale à 10, l'étudiant valide le module
Ecrivez un algorithme qui dem utilisateur d trer la note du module, puis affiche la
situation de l'étudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et
20).

Voir Serie d'exercices N° 2 (TD 2)

12
Algorithmique

Les Structures Répétitives (Boucles)


Situation problème
On souhaite écrire un algorithme qui permet de saisir les moyennes des N étudiants de la classe
Informatique et de calculer la moyenne générale de la classe.
Résolution
Sans les boucles, on est obligé de déclarer N variables, et d'écrire N actions LIRE.
LIRE(MOY)
S S + MOY
LIRE(MOY)
N S S + MOY
fois

LIRE(MOY)
S S + MOY
LIRE(MOY)
La boucle POUR donne l'ordre à la machine d'itérer les deux actions S S+ MOY N fois.

Une structure répétitive sert donc


structures répétitives : POUR, TANT QUE, REPETER.
1. La Boucle Pour
Syntaxe
Pour compteur = Vi A Vf [ Pas Vp]Faire
Instructions à répéter
Fin Pour
Avec :
Compteur est une variable entière, qui compte le nombre de répétition du <Traitement>,
Vi la valeur initiale à laquelle Compteur est initialisé,
Vf la valeur finale à laquelle se termine Compteur,
Vp la valeur du pas, c'est la valeur qu'on rajoute à Compteur à chaque fin de traitement.
Remarque
La boucle Pour est utilisée lorsqu'on connaît le nombre de répétition du <Traitement>
d'avance.
La valeur du pas peut être positive ou négative et par conséquent, il faut au départ de la
boucle que Vi <= Vf ou Vi >= Vf selon la positivité ou la négativité de cette valeur.
La valeur du pas est égale à 1 par défaut.
Les étapes d'exécution de la boucle POUR

1. Initialisation de Compteur par la valeur de Vi (comme si on avait Compteur Vi)


2. Test si Vi dépasse ( ) Vf (du côté supérieur ou inférieur, selon la positivité ou la négativité
du pas).
Si oui, alors la boucle s'arrête et l'exécution se poursuit après le Fin Pour
Sinon,
Exécution du <Traitement>,
Incrémentation ou décrémentation de Vc par la valeur du pas,
Retour à l'étape 2.

13
Algorithmique
Application
Le compteur varie de 1 jusqu'à N avec un pas de 1.

ALGORITHME MOYENNE
Variables
Entier N, i ;
Reel MOY, S, MC;
Debut
Ecrire("Donner le nombre d'étudiants");
Lire(N);
SI (N > 0) ALORS
S 0; {Initialisation de S}
Pour i DE 1 A N FAIRE {Le pas égale 1 par défaut}
Ecrire("Donner la moyenne de l'étudiant n°", i);
Lire(MOY);
S S + MOY; {on rajoute la moyenne du iième étudiant à la somme}
Fin Pour
MC S / N ;
Ecrire("La moyenne de la classe est : ", MC);
Sinon
Ecrire("Erreur dans le nombre d'étudiants");
Finsi
Fin

Remarque Juste Avant le FIN Pour, le changement de la valeur de i se fait automatiquement.


Application 1
Ecrire l'algorithme qui permet d'afficher tous les nombres pairs qui existent entre 1 et 10.
1ière solution 2ième solution 3ième solution
Pour i de 2 à 10 pas 2 Faire Pour i de 2 à 10 Faire Pour i de 1 à 5 Faire
Ecrire(i); SI (i mod 2 = 0) Alors Ecrire(2*i);
Fin Pour Ecrire(i); Fin Pour
Finsi
Fin Pour
Application 2
Ecrire l'algorithme qui permet d'afficher tous les nombres impairs entre 50 et 100 dans l'ordre
décroissant.
Pour i de 99 à 50 PAS (-2) Faire
Ecrire(i);
Fin Pour

lisée. Sa syntaxe
est :
Répéter
<Traitement>
Jusqu'à (condition)

14
Algorithmique
Cet ordre d'itération permet de répéter le <Traitement> une ou plusieurs fois et de s'arrêter sur
une condition. En effet, lorsque la condition est vérifiée, la boucle s'arrête, si non elle ré-exécute
le <Traitement>.
Remarques
Dans cette boucle, le traitement est exécuté au moins une fois avant l'évaluation de la
condition d'arrêt.
Il doit y avoir une action dans le <Traitement> qui modifie la valeur de la condition.

Les étapes d'exécution de la boucle Répéter


1) Exécution du <Traitement>
2) Test de la valeur de la <condition >
Si elle est vérifiée Alors la boucle s'arrête
Sinon Retour à l'étape 1.

Application
Ecrire un algorithme qui saisit un nombre pair et qui détermine combien de fois il est divisible par
2. Exemple 8 est divisible 3 fois par 2 (2*2*2).

ALGORITHME PAIR_NBDIV2
Variables
Entier N, N2,NB;
Debut
{Saisie d'un entier qui doit être pair}
Répéter
Ecrire("Donner un entier pair") ;
Lire(N) ;
Jusqu'à (N MOD 2 = 0) {condition pour que N soit pair}
{Détermination du nombre de division par 2}
N2 0 ;
NB N ;
Répéter
NB NB div 2 ;
N2 N2 +1 ;
Jusqu'à (NB MOD 2 <> 0) {On s'arrête lorsque NB n'est plus divisible par 2}
Ecrire(N, "est divisible par 2", N2,"fois")

FIN

3. La bou
Sa syntaxe
est :
Tant Que (condition d'exécution) Faire
<Traitement>
Fin TantQue
Cet ordre d'itération permet de répéter le <Traitement> zéro ou plusieurs fois et de s'arrêter
lorsque la condition d'exécution n'est plus vérifiée. En effet, lorsque la condition d'exécution est
vérifiée, le <Traitement> est exécuté, si non elle s'arrête.

15
Algorithmique
Les étapes d'exécution de la boucle Répéter
1) Test de la valeur de la <condition d'exécution>
2) Si elle est vérifiée Alors
Exécution du <Traitement>
Retour à l'étape 1.
Sinon Arrêt de la boucle.

Remarques
Dans cette boucle, le traitement peut ne pas être exécuté aucune fois, c'est lorsque la
condition d'exécution est à fausse dés le départ.
Les paramètres de la condition doivent être initialisés par lecture ou par affectation avant
la boucle.
Il doit y avoir une action dans le <Traitement> qui modifie la valeur de la condition.
Application
Ecrire un algorithme qui saisit un nombre pair et qui détermine combien de fois il est divisible par
2. Exemple 8 est divisible 3 fois par 2 (2*2*2).

ALGORITHME PAIR_NBDIV2
Variables
Entier N, N2,NB;
Debut
{Saisie d'un entier qui doit être pair}
Répéter
Ecrire("Donner un entier pair") ;
Lire(N) ;
Jusqu'à (N MOD 2 = 0) {condition pour que N soit pair}
{Détermination du nombre de division par 2}
N2 0 ;
NB N ;
Tant Que (NB MOD 2 = 0)
NB NB div 2 ;
N2 N2 +1 ;
Fin TantQue {On s'arrête lorsque NB n'est plus divisible par 2}
Ecrire(N, "est divisible par 2", N2,"fois") ;

FIN

Remarque
La condition d'arrêt avec la boucle Répéter est l'inverse de la condition d'exécution de la
boucle TANTQUE.
Le Traitement d'une boucle peut contenir lui aussi une autre boucle. On l'appelle dans ce
cas des boucles imbriquées.

16
Algorithmique
Exercices
1. Ecrire l'algorithme qui permet d'afficher les N premiers entiers impairs dans l'ordre
décroissant.

2. Ecrire l'algorithme qui permet d'afficher les diviseurs d'un entiers N.

3. Ecrire l'algorithme qui permet de calculer le produit de deux entiers en utilisant des
additions successives.

4. Ecrire l'algorithme qui permet de calculer la division de deux entiers en utilisant des
soustractions successives

5. Ecrire l'algorithme qui permet de saisir un entier N et d'afficher s'il est premier ou non. Un
nombre est dit premier s'il est divisible uniquement par 1 et par lui-même.

6. Ecrire l'algorithme qui détermine le 20ieme terme d'une suite définie par :

7. Ecrire l'algorithme qui détermine le N'eme terme d'une suite définie par :

8. Ecrire l'algorithme qui permet de saisir un entier positif en décimal et de le transformer en


binaire.

Exemple (7)10 =(111)2


9. Ecrire un algorithme qui permet de saisir deux entiers positifs et de déterminer leur plus
grand commun diviseur (PGCD).

Le PGCD(A,B) = PGCD(A-B, B) si A est le plus grand et à


PGCD(A,B) = PGCD(A, B-A) si B est le plus grand.
Si A=B le PGCD(A,B) est A ou B.
10. Ecrire l'algorithme qui permet de saisir deux entiers et de déterminer leur plus petit
commun multiple (PPCM).

Voir Série d'exercices N° 3 (TD 3)

17
Algorithmique

LES TABLEAUX
II est courant d'avoir besoin de gérer plusieurs éléments qui appartiennent au même type de
données. A titre d'exemple, supposez que nous souhaitions déterminer, à partir de 30 notes
fournies en donnée, combien d'élèves ont une note inférieure à la moyenne de la classe. Pour
parvenir à un tel résultat, nous devons :
Déterminer la moyenne des 30 notes, ce qui demande de les lire toutes,
Déterminer combien parmi ces 30 notes, sont inférieures à la moyenne précédemment
obtenue.
Vous constatez que si nous ne voulons pas être obligé de demander deux fois les notes à
l'utilisateur, il nous faut les conserver en mémoire. Pour ce faire, il paraît peu raisonnable de
prévoir 30 variables différentes. Le tableau va nous offrir une solution convenable à ce problème.
Définition :
Un tableau (Vecteur) représente un ensemble d'emplacements mémoire regroupés d'une façon
séquentielle, qui portent le même nom et contiennent le même type de données. Chacun de ces
emplacements est appelé élément du tableau et repérée par un nombre appelé indice.
Un tableau peut être à une ou à plusieurs dimensions. Il n'y a pas de limite au nombre de
dimensions.
1. Les tableaux à une dimension :
Un tableau à une dimension à N éléments est représenté en mémoire comme suit :
Donnée Donnée Donnée Donnée Donnée
Élément 1 Élément 2 Élément 3 Élément 4 Élément 5
Exemple : soit le tableau MOY
Contenu 15 12 5 10 4 17
Indice 0 1 2 3 4 5 6 7 8 9 10 11 12

Déclaration d'un tableau


La forme générale de la déclaration d'un tableau à une dimension est :
Type Tableau Nom_Tableau(Nombre)
Nom_Tableau : désigne le nom du tableau
Nombre
Type éléments
Exemples :
Reel Tableau Note (20);
Note (20) est un tableau qui contient vingt valeurs réelles.
Chaine Tableau nom (10), prenom (10) ;
Nom (10) et prenom (10) sont deux tableaux de 10 éléments de type chaîne.
Un tableau peut être représenté graphiquement par (exemple Note (9)) :

Note (0) Note (3)

syntaxe suivante :

18
Algorithmique
Nom_Tableau (indice)
Exemple si X est un tableau de 10 entiers :
- 5 Met la valeur -5 dans la 3ème case du tableau
En considérant le cas où A est une variable de type Entier,
Met la valeur de la 3ème case du tableau tab dans A - à- dire -5
Lire (X (1)) deuxième case du tableau
Ecrire (X (1)) affiche la valeur de la deuxième case du tableau
Remarques :
:
Une constante Note(5)
Une variable Note(i)
Une expression Note(i*2)

Remplissage d un Tableau
nnées des éléments du tableau (remplir des
cases successives du tableau). On doit utiliser une boucle qui permet de saisir à chaque entrée
dans la boucle la iième case.
Exemple
ALGORITHME Remplissage
Variables
Reel Tableau Moy(50), Smoy;
Entier i, N;
Début
Ecrire ("Saisir le Nombre d'étudiants :");
Lire(N);
{Chargement du tableau}
Pour i de 1 à N faire
Ecrire ("donne ", i);
Lire (Moy(i));
Fin Pour
{Fin chargement}
{Calcul de la somme des moyennes}
Smoy 0;
Pour i de 1 à N Faire
Smoy Smoy+Moy(i);
Fin Pour
Smoy Smoy /N;
Ecrire (" la moyenne de la classe est ", Smoy)
Fin

On peut écrire les deux premières boucles en une seule. Simplifier alors cet algorithme.

Application
1) Charger un vecteur de 10 éléments par les 10 premiers entiers naturels positifs.
2) Charger un vecteur de 10 éléments par les 10 premiers multiples de 7.

19
Algorithmique
Recherche dans un tableau
Recherche séquentielle
On peut chercher le nombre d'apparition d'un élément dans un vecteur, sa ou bien ses positions.
Pour cela, on doit parcourir tout le vecteur élément par élément et le comparer avec la valeur de
l'élément à chercher.
Applications
Chercher la position de la première occurrence d'un élément X dans un vecteur V contenant N
éléments. (On suppose que le vecteur est définit)
Chercher le nombre d'apparition d'un élément X dans un vecteur V contenant N éléments,
ainsi que les positions des occurrences de cet élément.
Réponse 1
i 1
Trouv faux
Tant que ((i <= N) et (Trouv = faux)) Faire
Si V(i) = X Alors
Trouv vrai
Sinon
i i +1
Fin Si
Fin TantQue
Si (Trouv = vrai) Alors
Ecrire(X, "se trouve à la position", i)
Sinon
Ecrire(X, "ne se trouve pas dans V")
Fin Si
Recherche dichotomique (Binaire)
Soit T un tableau de N éléments ordonnés et x un élément de même type que les éléments de T. Il
s'agit d'examiner la présence de x dans T. Comme le tableau est ordonné, il satisfait la
spécification suivante :
i [1 , N-1] T (i) T (i+1)
Au lieu de faire une recherche linéaire (Parcourir tout le tableau T du premier élément au dernier)
on décompose le tableau en deux sous-tableaux T1 et T2 et trois cas peuvent se produire :
x est trouvé la recherche est terminé.
la recherche continue dans T1.
la recherche continue dans T2.

Exemple
Soit le tableau suivant T :
1 2 3 4 5 6 7 8
3 7 8 8 11 15 20 24
Vous constatez que le tableau T est déjà ordonné. On va voir comment s'applique la méthode de
recherche binaire pour rechercher si x = 20 existe dans le tableau T.
On divise l'intervalle des indices [1,8] en deux intervalles [1,4] et [5,8]. On obtient deux tableaux
T1 et T2.

1 2 3 4 5 6 7 8

20
Algorithmique
3 7 8 8 11 15 20 24
x T1 x T2
La recherche va continuer dans le tableau T2 puisque x (20) est plus supérieur que le plus grand
élément de T1. Donc l'intervalle de recherche devient [5,8] et on va le diviser à son tour en deux
intervalles [5,6] et [7,8].

5 6 7 8
11 15 20 24
x T1 x T2

De même, la recherche va continuer dans T2. L'intervalle de recherche devient [7,8]. On le divise
en deux intervalles [7,7] et [8,8].
Finalement, x est trouvé.
7 8
20 24
x T1 x T2

Le programme de la recherche dichotomique est le suivant :


Variables
Entier Tableau T(N), inf , sup , milieu , x ;
Booléen Trouve ;
DEBUT
;
inf = 1;
;
TANT QUE (inf sup ET Trouve = Faux) Faire
;
SI (T(milieu) = x ) ALORS
;
SINON
SI (T(milieu) < x) alors
;
SINON
1;
FIN SI
FIN SI
FIN TANT QUE
SI Trouve = Vrai ALORS
Ecrire (" " , x , " existe dans T ");
SINON
Ecrire(" ",x," ");»
FIN SI
FIN

21
Algorithmique
Exercices
1. :
Variable
Entier i, Tableau C (6);
DEBUT
POUR i de 1 à 6 Faire
Lire C (i) ;
FIN POUR
POUR i de 1 à 6 Faire
;
FIN POUR
POUR i de 1 à 6 faire
Ecrire C (i) ;
FIN POUR
FIN
Si on saisit successivement les valeurs : 2 , 5 , 3 , 10 , 4 , 2.
2. :
Variable
Entier Tableau suite (8) ,i ;
DEBUT

POUR i de 3 à 8 Faire
su - 1) + suite (i - 2) ;
FIN POUR
POUR i de 1 à 8 Faire
Ecrire suite (i) ;
FIN POUR
FIN
3.
plus grand élément et la position du plus petit élément du tableau.
4. Soit T un tableau de N réels. Ecrire le programme qui permet de calculer le nombre des
-à-dire combien de fois ce nombre X figure dans le tableau T).

22
Algorithmique

Les tableaux dynamiques


Il arrive fréquem
comporter un tableau. Bien sûr, une solution consisterait à déclarer un tableau avec une taille très
grande. Cela pourra avoir comme conséquence soit que cette taille ne nous suffira
place mémoire immense sera réservée sans être utilisée.
Afin de surmonter ce problème on a la possibilité de déclarer le tableau sans préciser au départ
va
fixer ce nombre via une instruction de re-dimensionnement : Redim.

Exemple :
On veut saisir des notes pour un calcul de moyenne, mais on ne sait pas combien il y aura de
quelque chose du genre :

Variables
Reel Tableau Notes ();
Entier n;
DEBUT
Ecrire ( -t-il de notes à saisir );
Lire (nb);
Redim Notes(nb);

FIN

Exercices
1.
Soit T un tableau de N éléments. Ecrire un programme qui per
position i du tableau T.

2.
Soit T un tableau de N éléments. Ecrire un programme qui permet de supprimer un élément x du
tableau.

Les tableaux multidimensionnels


leau à une dimension correspond à une liste ordonnée de valeurs, repérée
chacune par un indice.
Dans tous les langages de programmation, il est possible de définir des tableaux à deux
dimensions (permettant par exemple de représenter des matrices). Ainsi, on pourra placer des
valeurs dans un tableau à deux dimensions et cela consiste comme dans le cas des tableaux à une

indices qui précisent la position.


On déclare un tableau à deux dimensions de la façon suivante :
Type Tableau Nom_Tableau (i , j ) ;
Nom_Tableau : désigne le nom du tableau
i : désigne le nombre de lignes du tableau
j : désigne le nombre de colonnes du tableau
Type : représente le type des éléments du tableau

23
Algorithmique
Exemple :
:
T (1 , 4)

T (3 , 4)

T (1, 4) et T(3 , 4) sont deux éléments du tableau. Entre parenthèse on trouve les valeurs des
indices séparées par une virgule. Le premier sert à repérer le numéro de la ligne, le second le
numéro de la colonne.

en utilisant la syntaxe suivante : Nom_tableau (i , j)


Par exemple si T est défini par : Reel Tableau T (3, 2)
T (2 , 1) -1.2 met la valeur -1.2 dans la case 2,1 du tableau
Par extension, on peut aussi définir des tableaux à n dimensions. Leur déclaration sera à
- à- dire :

Par exemple :
Entier Tableau X (10 , 9 , 5);
Ainsi que leur utilisation :

Lecture et écriture d'une matrice


Lecture d'une matrice :
variable
Entier Tableau matrice(10,10),i ,j, n , k;
Début
écrire("donner le nombre de lignes de la matrice :");
lire(n);
écrire("donner le nombre de colonne s de la matrice :");
lire(k);
pour i de 1 à n faire
écrire("donner les éléments de la ligne:",i );
pour j de1 à k faire
lire(matrice(i,j));
finpour
finpour
fin

Ecriture d'une matrice :

24
Algorithmique
variable
Entier Tableau matrice(10,10),i,j,n,k;
Début
pour i de 1 à n faire
pour j de1 à k faire
Ecrire (matrice(i,j ));
finpour
fipour
fin

Exemples d'utilisation d'une matrice

Somme de deux matrices :


constante N =20
variables
Reel Tableau A (N, N),B(N,N),C(N,N);
Entier i,j,n ;
Début
écrire("donner la taille des matrices(<20) :")
lire(N)
/* lecture de la matrice A */
pour i de1 à n faire
écrire("donner les éléments de la ligne:",i)
pour j de 1 à n faire
lire(A(i,j));
finpour
finpour
/* lecture de la matrice B */
pour i de 1 à n faire
écrire("donner les éléments de la ligne:" ,i)
pour j = 1 à n faire
lire(B(i,j));
finpour
finpour
/* la somme de C = A + B */
pour i de 1 à n faire
pour j de 1 à n faire
C(i,j) <- A(i,j)+B(i,j) ;
finpour
finpour
/* affichage de la matrice de C */
pour i =1 à n faire
pour j = 1 à n faire
écrire (C(i,j)," ")
finpour
finpour
fin

25
Algorithmique
Exercices
1. Considérons le programme suivant :
Variables
Entier Tableau X (2 , 3), i , j , val ;
DEBUT

POUR i de 1 à 2 Faire
POUR j de 1 à 3 Faire

FIN POUR
FIN POUR
POUR i de 1 à 2 Faire
POUR j de 1 à 3 Faire
Ecrire X (i , j);
FIN POUR
FIN POUR

b. que produira ce p :
POUR j de 1 à 3 Faire
POUR i de 1 à 2 Faire
Ecrire X (i , j);
FIN POUR
FIN POUR
2. Quel résultat fournira ce programme :
Variables
Entier Tableau X (4 , 2) , k , m;
DEBUT
POUR k de 1 à 4 Faire
POUR m de 1 à 2 Faire
X (k , m)
FIN POUR
FIN POUR
POUR k de 1 à 4 Faire
POUR m de 1 à 2 faire
Ecrire X (k , m);
FIN POUR
FIN POUR
3. Soit T un tableau à deux dimensions de vingt lignes et cinquante colonnes.
a. Ecrire un algorithme qui permet de calculer la somme de tous les éléments du tableau.
b.
c.
somme des éléments négatifs (sneg) de ce tableau.
d.
ainsi que sa position.
Voir Série d'exercices N° 4 (TD 4)

26
Algorithmique

Les Algorithmes De Tri


Trier n ordre croissant ou
décroissant.

un algorithme qui devra satisfaire à la spécification suivante :


i [1 , N-1] T (i) T (i+1)
Dans cette paragraphe on va traiter plusieurs algorithmes de tri : tri par bulle, tri par sélection, tri
par comptage, tri par permutation, tri par insertion et tri par shell.

Tri par bulle


Principe
Ce tri permet de faire remonter petit à petit un élément trop grand vers la fin du tableau en
comparant les éléments deux à deux.

on les échange et on continue avec le suivant (c'est-à-


atteint la
bien placés c'est-à-
Algorithme
Variables
Reel Tableau T(N),z;
Entier j , nc;
DEBUT
REPETER

POUR j = 1 A (N-1) faire


SI T(j) > T(j+1) ALORS
nc+1

FIN SI
FIN POUR

FIN
Exemple
Soit le tableau suivant :
52 10 1 25
Boucle Valeur de
Etat du tableau
REPETER nc
10 52 1 25
Itération 1 10 1 52 25 3
10 1 25 52
1 10 25 52
Itération 2 1 10 25 52 1
1 10 25 52
Itération 3 1 10 25 52 0
Tri par sélection
27
Algorithmique
Principe
Le principe du tri par sélection est d'aller chercher le plus petit élément du vecteur pour le mettre
en premier, puis de repartir du second élément et d'aller chercher le plus petit élément du vecteur
pour le mettre en second, etc...
Au ième passage, on sélectionne donc l'élément le plus petit parmi les éléments { T(i) ...T(n) } et
on l'échange avec T(i).

Algorithme
Variables
Reel Tableau T(N),z;
Entier i,k,j ;
DEBUT
POUR i = 1 A N-1Faire

POUR j = i+1 A N faire


SI T(j) < T(k) ALORS

FIN SI
FIN POUR

FIN SI
FIN POUR
FIN

Tri par comptage


Principe
Pour ce type de tri on va considérer un autre tableau T1 dans lequel on va placer les éléments
triés.
On prend un élément du tableau T(i) et o
-ns). Donc, T1(n-ns) = T(i).
Algorithme
Variables
Entier Tableaux T(N) ,tableau T1(N) i , j , ns ;
DEBUT
POUR i = 1 A N Faire
n
POUR j = 1 A N Faire
SI T(j) > T(i) ALORS

FIN SI
FIN POUR
T1(n
FIN POUR
FIN

Le tri par permutation


Principe
28
Algorithmique
Dans ce tri on compare chaque élément avec son successeur. Si le premier est plus grand on
permute les deux éléments et on revient au premier élément du tableau. Sinon on passe à

Algorithme
Variables
Entier Tableau T(N) , i , j , z;
DEBUT

REPETER
SI T(j) > T(j+1) ALORS

SINON
j = j+1
FIN SI
JUSQU'A j = N
FIN

Tri par insertion


Principe
Le tri par insertion suit le principe suivant :
On démarre de la deuxième case.
Si un élément T(i) est supérieur à son prédécesseur T(i-1)
On recherche parmi les cases précédentes la plus petite valeur supérieure soit T(j).
-1 et on insère la
nouvelle valeur T(i) à la position j.
Algorithme
Variables
Entier Tableau T(N) , j , i , z;
DEBUT
POUR j = 2 A N Faire

TANT QUE i > 1 ET T(i - 1) > z


- 1)
-1
FIN TANT QUE

FIN POUR
FIN

Voir Série d'exercices N° 5 (TD 5)

29
Algorithmique

Les Fonctions
Une fonction est un sous-programme qui retourne un seul résultat.
Pour définir une fonction on utilise la syntaxe suivante :
FONCTION nom_fonction (Type Argument1, Type, Argument2, : Type
Déclarations
DEBUT
Instructions de la fonction

FIN

Une fois la fonction définie, il est possible (en fonction des besoins) à tout endroit du programme
appelant de faire appel à elle en utilisant son nom suivi entre parenthèse des paramètres effectifs
séparés par des virgules. Un paramètre effectif peut être soit une constante ou une variable.
Remarque
Chaque paramètre effectif est associé à un paramètre formel et les deux doivent être du même
type. Le nombre des paramètres effectifs doit être égal aux nombres des paramètres formels.
Quand on appelle une fonction chaque paramètre formel reçoit la valeur du paramètre effectif
correspondant.
Une fonction possède un seul type, qui est le type de la valeur retournée qui est affecté au nom de

expression compatible avec son type.


Exemple :
FONCTION Calcul (reel x , Réel y,: Réel, z) : Réel
Variable
Entier a;
DEBUT

FIN
Calcul » est de type réel
et elle admet trois arguments de type réel.
Maintenant voici un exemple de programme complet :

FONCTION Calcul (reel x , Réel y,: Réel, z) : Réel


Variable
Entier a;
DEBUT

FIN

Variables
Reel i , j , k , b;
DEBUT
Lire( i);

30
Algorithmique
Lire( j);
Lire(k);

Ecrire (b)
FIN
Dans ce programme on fait appel a une fonction. Sa valeur est utilisée dans une expression.

Exercice
1. Définir la fonction « Somme
comme valeur la somme des valeurs reçues.
2. Définir la fonction « Absolue » qui renvoie
comme paramètre.
3. Définir la fonction « Inverse
paramètre.
4. Définir la fonction « Max » qui renvoie le maximum de deux valeurs.

5. Ecrivez un pro

6.
renvoie la même chaîne mais en remplaçant les « a » par des « i ». On suppose que vous disposer
des deux fonctions prédéfinies suivantes :
LONGUEUR
Utilisation LONGUEUR (chaîne)
EXTRAIRE
Utilisation : EXTRAIRE (chaîne , position_Debut, longueur)
Paramètre :
chaîne

longueur désigne la longueur de la chaîne qui va être extraite.

Les variables locales et globales


-programmes où cette variable est connue c'est-à-
dire que les instructions de ces sous-programmes peuvent utiliser cette variable.
Une variable définie au niveau du programme principal (problème appelant) est appelée variable
globale. Sa portée est totale : tout sous-programme du programme principal peut utiliser cette
variable.
-programme est appelée variable locale. La
-programme qui la déclare.

Remarque :

localement masquée. Dans ce sous-programme la variable globale devient inaccessible.

Exemple
Soit le programme suivant :
31
Algorithmique
Fonction Surface (Reel a) : Réel
Variables
Reel valeur , resultat;
DEBUT
;
*a;
;
FIN
*************************************
Variable rayon : Réel
DEBUT
Ecrire (" Entrez le rayon du cercle : ");
Lire( rayon);
Ecrire (" La surface de cette cercle est : " , Surface (rayon));
FIN

Les variables valeur et resultat déclarées dans la fonction Surface sont locales.
Considérons presque le même programme sauf que la variable valeur est déclarée maintenant
dans le programme appelant.
Fonction Surface (Reel a) : Réel
Variables
Reel valeur , resultat;
DEBUT
;
*a;
;
FIN
*************************************
Variablevaleur, rayon : Réel
DEBUT

Ecrire (" Entrez le rayon du cercle : ");


Lire( rayon);
Ecrire (" La surface de cette cercle est : " , Surface (rayon));
FIN
Dans ce deuxième programme seule la variable resultat est locale. Tandis que la variable valeur
est devenue globale. On peut par conséquent accéder à sa valeur dans la fonction Surface.

Les passage de paramètres


Il e
du sous-programme (fonction ou procédure) et variable(s) du programme appelant :
Passage par valeur
Passage par adresse
tre effectif un passage par valeur, la valeur de ce
-programme la valeur du
paramètre formel correspondant change. On peut dire que dans ce cas le paramètre effectif et le
paramètre formel ont
type de passage par défaut.

32
Algorithmique

-programme la valeur du paramètre formel


correspondant change. On peut dire que dans ce cas le paramètre effectif et le paramètre formel

il faut soulignés les paramètres concernés lors de la définition du sous-


programme.

Exemple
Considérons les deux programmes suivants :
Programme 1
Fonction Calcul (Reel a) : Réel
DEBUT
1;
;
FIN
********************
Variable
Reel x;
DEBUT
;
Ecrire( Calcul (x));
Ecrire (x);
FIN

Programme 2
Fonction Calcul (Reel a) : Réel
DEBUT
1;
;
FIN
********************
Variable
Reel x;
DEBUT

Ecrire( Calcul (x));


Ecrire (x);
FIN

Dans le premier programme on a un passage de paramètre par valeur et dans le deuxième par
adresse. Le premier programme affichera le résultat suivant : 4 3
car même si la valeur de a change celle de x non.
Tandis que le deuxième programme il affichera : 4 2
la valeur de x changera car celle de a a changée.

33
Algorithmique

Les procédures
Les procédures sont des sous- programmes qui ne retournent aucun résultat. Elles admettent
comme les fonctions des paramètres.
On déclare une procédure de la façon suivante :
PROCEDURE nom_procedure (Type Argument1,
Déclarations
DEBUT
Instructions de la procédure
Fin Procédure
Et on appelle une procédure comme une fonction, en indiquant son nom suivi des paramètres
entre parenthèses.
Exemple :
Ecrire une procédure qui ajoute 2 à un entier :

Procédure aug2(n : entier)


Début
n n+ 2
fin Procédure

Exemple 2 :
Ecrire un algorithme qui :
- Lit un entier positif puis
- Affiche tous les nombres impaires inférieures à n.
Algorithme ex2
Variable i, n : entier
Procédure aug2(n : entier)
Début
n n+ 2
Fin Procédure
Début
Lire (n)
i 1

Ecrire(i)
aug2(i)
Fin TantQue
Fin

Remarque :
- Une procédure ne retourne pas de valeur.
: ne pas écrire j

Procédures et fonctions : appels imbriqués

34
Algorithmique

définie.
Même remarque pour les fonctions.

Exemple :
Procédure aug4(n : entier)
Début
aug2(n)
aug(n)
Fin Procédure

Exercice

de la surface. Donnez à cette procédure le nom « Surface ».

procédure « Echanger ».
3.
4. Ecrire une procédure qui permet de lire deux nombres, calculer la somme et le produit et si ces
derniers sont positifs ou négatifs.
5. Ecrire une procédure qui permet de lire une liste de nombres entiers dont la dernière valeur =
-

Fonctions récursives
Introduction
Il arrive, en mathématique, que des suites soient définies de la manière suivante :
u0 = constante
U n = f ( U n-1)
Exemple : La suite factorielle : n ! = n x ( n - 1 ) ! , pour n>1 avec 0!=1, peut s'écrire :
f(0)=1
f(n)=n*f(n-1)
Ce que l'on peut traduire par : f(n) = ( s i n=0 alors 1 sinon n * f ( n - 1 ) ) . Cela peut se
traduire en algorithmique par :
fonction factorielle1(Entier n): entier
Variable
Entier Resultat;
Début
si (n=0) alors Resultat=1;
sinon Resultat = n*factorielle1(n -1)
finsi
factorielle1=Resultat;
fin
Dans la fonction factorielle1(), on constate que la fonction appelle elle-même. Ceci est
possible, puisque la fonction factorielle1() est déclarée avant son utilisation (c'est l'entête d'une
fonction qui la déclare).
Que se passe-t-il lorsque on calcul f a c t o r i e l l e 1 ( 3 ) ?
factorielle1(3) = 3 * factorielle1(2)

35
Algorithmique
= 3 * (2*factorielle1(1)
= 3 * (2 * (1*factorielle1(0))) = 3 * (2 * (1 * ( 1 ) ) )
= 3 * (2 * (1)) = 3 * (2) = 6

Définition de la récursivité
La récursivité est un concept fondamental en mathématiques et en informatique. La définition la
plus simple que l'on puisse en donner consiste à dire qu'un programme récursif est un programme
qui appelle lui-même. Pourtant, il faut appeler lui-même si l'on
veut éviter la boucle infinie. Un programme récursif doit contenir une condition de terminaison
qui autorise le programme à ne plus faire appel à lui-même. Les définitions récursives de
fonctions sont fréquentes en mathématiques ; le type le plus simple, portant sur des arguments
entiers, est la relation de récurrence. La fonction la plus familière de ce type est sans doute la
fonction factorielle vue plus haut.
La fonction factorielle1() illustre les caractéristiques élémentaires de tout programme récursif
(elle appelle elle-même, avec une valeur inférieure de l'argument et elle contient une condition de
terminaison dans laquelle elle calcule directement le résultat), mais on ne peut cacher qu'il n'est
rien d'autre qu'une boucle "pour". Cet exemple ne démontre pas vraiment la puissance d'un
programme récursif.
fonction factorielle2(Entier n) : entier
variables
Entier f a c t , i ;
début
fact =1
pour i = 2 à n f a i r e
fact = f a c t * i;
finpour
f a c t o r i e l l e 2 =f a c t ;
fin

Exercices
1. Écrivez une fonction qui prend pour argument un tableau d'entiers T, sa taille n, une valeur x,
et il indique ensuite si l'élément x appartient ou non au tableau T.
2. Écrivez une fonction qui prend pour argument un tableau d'entiers T et sa taille n, et nous
informe si les éléments d'un tableau d'entiers sont tous consécutifs ou non. (Par exemple, si le
tableau est : 7; 8; 9; 10, ses éléments sont tous consécutifs. Si le tableau est : 7; 9 ; 10; 11, ses
éléments ne sont pas tous consécutifs).
3. Écrivez une fonction qui prend pour arguments un tableau de réels T et sa taille n, et nous
donne la plus grande et la plus petite valeur du tableau T.

4. On note par pgcd ( a , b ) le plus grand commun diviseur de a et b.


Soit a et b deux entiers naturels, si b est non nul, on peut effectuer la division euclidienne de a
par b. Il existe un couple unique d'entiers ( q , r ) tels que :
a = bq +r avec 0 < r < b On a la formule suivante : pgcd(a,b) = pgcd(b,r)
A partir de cette formule déduisez une fonction pgcdRec(a,b) récursive qui calcul le pgcd de a
et b.

36

Vous aimerez peut-être aussi