Vous êtes sur la page 1sur 57

Cours: Algorithmique

LOYA Youssouf
youssouf.loya@u-auben.com

1
Objectif
Familiariser les étudiants avec les méthodes de
résolution de problèmes à l’aide de l’outil informatique.
A l’issue des enseignements, les étudiants devraient
être capables de :
 Maîtriser les notions de base de l’algorithmique;
 Spécifier un problème : identifier et organiser les
données d’entrée, de sortie et intermédiaires
Transcrire les différentes étapes de résolution d'un
problème sous forme d'algorithme, de façon
structurée et indépendante de toute contrainte
matérielle ou logicielle 2
Plan
 Notion d’algorithme

 Eléments de base d’un algorithme

Structures de contrôle
 Sous programmes

 Tableaux
3
3 – Structures de contrôle

Définition
Séquence
Structures conditionnelles
Structures répétitives

4
Définition
Les diverses instructions élémentaires doivent être
organisées afin que leur exécution puisse concourir au
résultat souhaité. Les consignes par lesquelles on indique
comment les actions commandées doivent s’organiser
s’appellent structures de contrôle.
Une structure de contrôle va donc permettre d’enchaîner
l’exécution de plusieurs instructions en déterminant
comment et dans quel ordre elles doivent s’exécuter.
En programmation structurée, toute logique de traitement
est exprimée par trois structures de contrôle: la séquence,
la conditionnelle et la répétitive.

5
Séquence
Définition
La séquence (ou structure séquentielle ou encore structure linéaire)
indique que les instructions doivent être exécutées
inconditionnellement les unes après les autres dans l’ordre de leurs
apparitions. La séquence est la structure de contrôle par défaut.
Notation
En Algorigramme En Arbre programmatique
En Pseudo code
SEQ
<instruction1> <instruction1>
<instruction2>
-- - - - - - - - - - - - <instruction2> <instruction1> <instruction2> <instructionn>
<instructionn>

<instructionn>
Fonctionnement
L’instruction <instruction1> est exécutée d’abord, puis l’instruction
<instruction2>, ainsi de suite jusqu’à l’exécution de l’instruction
<instructionn>. 6
Structures conditionnelles
Sélection simple
La sélection simple permet d’exécuter une instruction ou une suite
d’instructions seulement si une condition est vraie et de ne rien faire
de particulier si la condition est fausse.
Notation Algorigramme Arbre programmatique
En Pseudo code SI
SI (<condition>)ALORS <condition>
<suite d’instructions> <condition>
FINSI
<suite d’instructions>
<suite d’instructions>

Fonctionnement
‒La condition <condition> est évaluée ;
‒Si la condition a la valeur .vrai., on exécute la suite d’instructions
<suite d’instructions>.
Si la condition a la valeur .faux., on sort de la structure pour reprendre
le cours normal du déroulement de l’algorithme.
7
Structures conditionnelles
Sélection simple
Exemple: Ecrire un algorithme qui lit une valeur entière au clavier et
détermine si elle est paire
I. Environnement
Catégorie objet Type signification
Résultat Afficher qu’un entier donné est pair
Données n entier Un entier donné
II. Logique de traitement
1. Obtenir n
2. si n est pair c’est-à-dire n est divible par ,
2.1 afficher « est pair »
III. Algorithme
ALGORITHME pair
VAR n: ENTIER;
DEBUT
ECRIRE( Entrer un nombre entier: );
LIRE(n);
SI(n MOD = 0) ALORS
ECRIRE(n,  est pair );
FINSI
FIN
8
Structures conditionnelles
Sélection simple
Exemple: Étant données deux valeurs réelles lues au clavier, afficher à
l’écran la plus grande des deux.
I. Environnement
Catégorie objet Type signification
Résultat max Réel Le maximum de deux réels
x1 réel Le premier nombre réel
Données
x2 réel Le premier nombre réel

II. Logique de traitement


1. Obtenir x1, x2
2. Donner à max, x1
3. si x2 > max,
3.1 Donner à max, x2
4. Afficher max

9
Structures conditionnelles
Sélection simple
Exemple: Étant données deux valeurs réelles lues au clavier, afficher à
l’écran la plus grande des deux
III. Algorithme

ALGORITHME maximum
VAR x1, x2, max: REEL;
DEBUT
ECRIRE( Entrer le premier nombre réel: );
LIRE(x1);
ECRIRE( Entrer le deuxième nombre réel: );
LIRE(x2);
max  x1;
SI(x2 > max) ALORS
max  x2;
FINSI
ECRIRE( Le maximum de , x1,  et de , x2,  est : , max);
FIN

10
Structures conditionnelles
Alternative
L’alternative permet de choisir, suivant la valeur d’une condition,
entre deux suites d’instructions celle qui doit être exécutée.
Notation Algorigramme Arbre programmatique
En Pseudo code SI
SI (<condition>) ALORS
<condition>
<bloc1d’instructions>
SINON <condition> <bloc1> <bloc2>
<bloc2 d’instructions>
FINSI
<bloc1> <bloc2>

Fonctionnement
‒ La condition <condition> est évaluée
‒ Si la condition a la valeur .vrai., seule la suite d’instructions <bloc1>
est exécutée ;
Si la condition a la valeur .faux., seule la suite d’instructions <bloc2>
est exécutée.

11
Structures conditionnelles
Alternative
Exemple: Ecrire un algorithme qui détermine le maximum deux nombres réels
I. Environnement
Catégorie objet Type signification
Résultat max Réel Le maximum de deux réels
x1 réel Le premier nombre réel
Données
x2 réel Le premier nombre réel

II. Logique de traitement


1. Obtenir x1, x2
𝑥1 𝑠𝑖 𝑥1 > 𝑥2
2. max =
𝑥2 𝑠𝑖𝑛𝑜𝑛
3. Afficher max

12
Structures conditionnelles
Alternative
Exemple: Ecrire un algorithme qui détermine le maximum deux nombres réels
III. Algorithme
ALGORITHME maximum
VAR x1, x2, max: REEL;
DEBUT
ECRIRE( Entrer le premier nombre réel: );
LIRE(x1);
ECRIRE( Entrer le deuxième nombre réel: );
LIRE(x2);
SI(x1 > x2) ALORS
max  x1;
SINON
max  x2;
FINSI
ECRIRE( Le maximum de , x1,  et de , x2,  est : , max);
FIN

13
Structures conditionnelles
Alternative
Imbrication des SI
Il arrive que l’on ait à opter un choix exclusif entre plusieurs suites
d’instructions;
On procède alors par élimination en imbriquant les SI
Exemple: Écrire un algorithme qui affiche la mention d’un étudiant à partir de sa
moyenne. Cet étudiant doit avoir :
− la mention « passable » une moyenne supérieure ou égale à 10 et inférieure à 12 ;
− la mention « Assez bien » pour une moyenne supérieure ou égale à 12 et inférieure à 14 ;
− la mention « Bien » pour une moyenne supérieure ou égale à 14 et inférieure à 16 ;
− la mention « Très bien » pour une moyenne supérieure ou égale à 16.
I. Environnement Catégorie objet Type signification
Résultat Affichage de la mention d’un étudiant
Données moy réel La moyenne de l’étudiant

II. Logique de traitement 1. Obtenir moy


2. Si moy < 10, afficher « Pas de mention »
Si 10  moy < 12, afficher « Passable »
Si 12  moy < 14, afficher « Assez bien »
Si 14  moy < 16, afficher « Bien »
Si 16  moy , afficher « Très bien »
14
Structures conditionnelles
Alternative
Imbrication
ALGORITHME des SI
mention
VAR moy: REEL;
 Exemple:
DEBUT
ECRIRE( Entrer la moyenne de l’étudiant: );
III. Algorithme
LIRE(moy);
SI(moy<10) ALORS
ECRIRE( Pas de mention );
SINON
SI(moy<12) ALORS
ECRIRE( Passable );
SINON
SI(moy<14) ALORS
ECRIRE( Assez bien);
SINON
SI(moy < 16) ALORS
ECRIRE( Bien);
SINON
ECRIRE( Très bien);
FINSI
FINSI
FINSI

FINSI
FIN 15
Structures conditionnelles
Sélection ou choix multiple
La sélection multiple permet de choisir, suivant la valeur d’une
expression, entre plusieurs suites d’instructions celle qui doit être
exécutée.
Notation En Pseudo code

SUIVANT (<expr>) FAIRE


<val1> : <bloc1>
<val2> : <bloc2>
-----------------
<valn> : <blocn>
[SINON <bloc n+1>]
FINSVT
Fonctionnement
‒Evaluation de l’expression <expr> qui doit être de type scalaire.
‒Exécution de la suite d’instructions <bloc i> si le résultat est <val i>
(i = 1, …, n).
‒Exécution de la suite d’instructions <bloc i+1> si le résultat ne
correspond à aucune des valeurs <val i> (i = 1, …, n).

16
Structures conditionnelles
Sélection ou choix multiple
Exemple: Écrire un algorithme qui lit le numéro d’un jour de la semaine et affiche
ensuite le jour en toute lettre.
I. Environnement
Catégorie objet Type signification
Résultat Affichage d’un jour de la semaine en toute lettre
Données numero Entier Le numéro d’un jour de la semaine

II. Logique de traitement


1. Obtenir numero
2. Si numero = 1, afficher « Lundi »
Si numero = 2, afficher « Mardi »
Si numero = 3, afficher « Mercredi»
Si numero = 4, afficher « Jeudi »
Si numero = 5, afficher « Vendredi »
Si numero = 6, afficher « Samedi»
Si numero = 7, afficher « Dimanche »

17
Structures conditionnelles
Sélection ou choix multiple
Exemple: Écrire un algorithme qui lit le numéro d’un jour de la semaine et affiche
ensuite le jour en toute lettre
III. AlgorithmejourSemaine
ALGORITHME
VAR numero: ENTIER;
DEBUT
ECRIRE( Entrer le numéro du jour : );
LIRE(numero);
SUIVANT(numero ) FAIRE
1: ECRIRE(Lundi);
2: ECRIRE(Mardi);
3: ECRIRE(Mercredi);
4: ECRIRE(Jeudi);
5: ECRIRE(Vendredi);
6: ECRIRE(Samedi);
7: ECRIRE(Dimanche);
SINON ECRIRE(Numéro de jour incorrect);
FINSVT
FIN 18
Structures conditionnelles
Sélection ou choix multiple
Remarque
 Les conditions du choix multiple peuvent être :
un test d’égalité entre l’expression <expr> et une valeur
(cf. exemple ci-dessus)
un test d’appartenance de l’expression à un ensemble
de valeurs : <val i0>, <val i1>, …, <val ip> : <bloc>
un test d’appartenance à un intervalle de valeurs :
<val j0>…<val jm> :<bloc>
 Exemple de test d’appartenance à un ensemble de valeurs
Ecrire un algorithme qui calcule le nombre maximum de jours dans un mois suivant son
numéro.

19
Structures conditionnelles
Sélection ou choix multiple
Remarque
 Exemple de test d’appartenance à un ensemble de valeurs
Environnement
Catégorie objet Type signification
Résultat nbMaxJr Entier Nombre maximum de jours dans un mois
numero Entier Le numéro d’un mois
Données
a Entier L’année où le mois est considéré

Logique de traitement
1. Obtenir numero
2. Si numero {1, 3, 5, 7, 8, 10, 12}, donner à nbMaxJr, 31
Si numero {4, 6, 9, 11}, donner à nbMaxJr, 30
Si numero {2},
2.1. Obtenir a
2.2. si a est bissextile,
2.2.1. Donner à nbMaxJr, 29
si a n’est pas bissextile,
2.2.1. Donner à nbMaxJr, 28
3. Afficher nbMaxJr
NB: a est bissextile si a est divisible par 4 et non 100 ou a est divisible par 400
20
Structures conditionnelles
Sélection ou choix multiple
Remarque
 Exemple de test d’appartenance à un ensemble de valeurs
Algorithme
ALGORITHME nbJours
VAR numero, nbMaxJr, a: ENTIER;
DEBUT
ECRIRE( Entrer le numéro du mois : );
LIRE(numero);
SUIVANT(numero ) FAIRE
1, 3, 5, 7, 8, 10, 12: nbMaxJr  31;
4, 6, 9, 11: nbMaxJr  30;
2: ECRIRE(Entrer l’année);
LIRE(a);
SI(((a MOD 4 = 0) ET (a MOD 100  0)) OU (a MOD 400 = 0)) ALORS
nbMaxJr  29;
SINON
nbMaxJr  28;
FINSI
FINSVT
ECRIRE(Le dernier jour du mois , numero,  est : , nbMaxJr);
FIN 21
Structures conditionnelles
Sélection ou choix multiple
Remarque
 Exemple de test d’appartenance à un intervalle de valeurs
Un professeur note les résultats d’un test portant sur 50 questions en utilisant la table suivante
Bonnes réponses 0-10 11-20 21-30 31-40 41-50
Note E D C B A
Écrire l’algorithme qui retourne la note, étant donné un nombre de bonnes réponses.
Environnement
Catégorie objet Type signification
Résultat note caractère Note d’un étudiant
Données nbRep Entier Le nombre de bonnes réponses

Logique de traitement
1. Obtenir nbRep
2. Si 0  nbRep  10, donner à note, 'E‘
Si 11  nbRep  20, donner à note, ‘D'
Si 21  nbRep  30, donner à note, ‘C'
Si 31  nbRep  40, donner à note, ‘B'
Si 41  nbRep  50, donner à note, ‘A'
3. Afficher note
22
Structures conditionnelles
Sélection ou choix multiple
Remarque
 Exemple de test d’appartenance à un intervalle de valeurs
Algorithme
ALGORITHME note
VAR nbRep: ENTIER;
note: CARACTERE;
DEBUT
ECRIRE( Entrer le numéro du mois : );
LIRE(numero);
SUIVANT(nbRep ) FAIRE
0..10: note 'E‘;
11..20: note ‘D‘;
21..30: note ‘C‘;
31..40: note ‘B‘;
41..50: note ‘A‘;
FINSVT
ECRIRE(La note est : , note);
FIN 23
Structures conditionnelles
Conditions dans les structures conditionnelles
Les conditions intervenant dans les structures conditionnelles sont des
expressions logiques qui peuvent être complexes c'est-à-dire formées
de conditions simples reliées entre elles par des opérateurs logiques
ET, OU ou NON.
Il existe deux modes d’évaluation des expressions logiques.
Evaluation complète
‒Evaluation une par une de toutes les conditions
élémentaires de l’expression ;
‒Calcul de la valeur de l’expression logique en utilisant les
règles des opérateurs logiques.
Evaluation partielle
Les conditions élémentaires de l’expression sont évaluées
dans l’ordre de lecture de l’expression, de la gauche vers la
droite et l’évaluation s’arrête dès que l’on peut déterminer la
valeur finale de l’expression, c'est-à-dire quand on
rencontre un élément absorbant.
24
Structures conditionnelles
Maladresses lors de l’utilisation de la conditionnelle
1° SI (a=0) ALORS SI (a=0) ALORS
------ -- ------ ------ -- ------
SINON SINON
SI (a≠0 ET b=0) ALORS SI (b=0) ALORS
---- -- ------ ------ -- ------
FINSI FINSI
FINSI FINSI


SI(i>j) ALORS SI(i>j) ALORS
<bloc1> <bloc1>
FINSI SINON
SI(i≤j) ALORS <bloc2>
<bloc2> FINSI
FINSI

25
Structures conditionnelles
Maladresses lors de l’utilisation de la conditionnelle

SI (b=.VRAI.)ALORS
SI (b)ALORS
-- - - - - - - - - - - - - -- -
-- - - - - - - - - - - - - -- -
FINSI
FINSI

ou

SI (b=.FAUX.)ALORS SI (NONb)ALORS
-- - - - - - - - - - - - - -- - -- - - - - - - - - - - - - -- -
FINSI FINSI

26
Structures conditionnelles
Maladresses lors de l’utilisation de la conditionnelle
4° SI (i>j) ALORS
b←.VRAI.
b← i>j
SINON
b←.FAUX.
FINSI
ou
SI (i>j) ALORS
b←. FAUX.
b← NON i>j
SINON
b←.VRAI.
FINSI

27
Structures répétitives
Définition
Une structure répétitive ou boucle indique à l’ordinateur
qu’un groupe d’instructions doit être exécuté plusieurs
fois.
Principales boucles
Boucle TANT QUE
Définition
La boucle TANT QUE permet de répéter une suite
d’instructions tant qu’une condition est vraie.
Notation Algorigramme Arbre programmatique
Pseudo code
TANT QUE (<condition>) FAIRE TQ
<bloc> <condition>
FINTQ
<condition>
<bloc>
<bloc>

28
Structures répétitives
Principales boucles
Boucle TANT QUE
Déroulement
1. La condition est évaluée;
1.1. si la condition est vraie,
1.1.1. on exécute <bloc>
1.1.2. on remonte à l’étape 1. tester de nouveau la
condition
1.2. Si la condition est fausse
1.2.1. on quitte la boucle tant que;
Le déroulement pas à pas de cette instruction équivaut au
schéma suivant : SI(<condition>) ALORS
<bloc>
SI(<condition>) ALORS
<bloc>
SI(<condition>) ALORS
<bloc>
------------------ -
29
Structures répétitives
Principales boucles
Boucle TANT QUE
Exemple: Écrire un algorithme qui permet de saisir deux entiers positifs et de
déterminer leur plus grand commun diviseur (PGCD) en utilisant le principe suivant :

Environnement
Catégorie objet Type signification
Résultat pgcd Entier Le PGCD deux entiers
a Entier Le premier nombre
Données
b Entier Le deuxième nombre
Données x Entier Copie de a
intermédiaires y Entier Copie de b

30
Structures répétitives
Principales boucles
Boucle TANT QUE
Exemple: Écrire un algorithme qui permet de saisir deux entiers positifs et de
déterminer leur plus grand commun diviseur (PGCD) en utilisant le principe suivant :

Logique de traitement
1. Obtenir a, a>0
2. Obtenir b, b>0
3. Donner à x, a
4. Donner à y, b
5. Si a  b,
5.1 si a > b,
5.1.1 Donner à a, a-b
si a < b,
5.1.1 Donner à b, b-a
5.2 Reprendre à 5.
6. Donner à pgcd, a
7. Afficher pgcd

31
Structures répétitives
ALGORITHME pgcd
Principales boucles VAR a, b, x, y, pgcd: ENTIER;
DEBUT
Boucle TANT QUE ECRIRE( Entrer le premier entier (>0): );
Exemple LIRE(a);
Algorithme TANT QUE(a  0) FAIRE
ECRIRE( Entrer le premier entier (>0): );
LIRE(a);
FINTQ
ECRIRE( Entrer le deuxième entier (>0): );
LIRE(b);
TANT QUE(b  0) FAIRE
ECRIRE( Entrer le deuxième entier (>0): );
LIRE(b);
FINTQ
x  a;
y  b;
TANT QUE(a  b) FAIRE
SI(a > b) ALORS
a  a-b;
SINON
b  b-a;
FINSI
FINTQ
pgcd  a; (* ou b *)
ECRIRE(pgd(, x, , , y, ) =, pgcd); 32
Structures répétitives
Principales boucles
Boucle TANT QUE
Remarque
Le nombre d'itérations dans une boucle TANT QUE n'est
pas connu au moment d'entrer dans la boucle. Il dépend
de l'évolution de la valeur de condition.
La condition de la boucle TANT QUE étant testée avant
l’exécution des instructions, la boucle TANT QUE permet de
répéter un traitement, 0 ou plusieurs fois.
On doit s’assurer que la condition a une valeur déterminée
avant le début de la boucle.
Une au moins des instructions du corps de la boucle doit
changer la valeur de condition de vrai à faux après un certain
nombre d'itérations pour ne pas avoir une boucle qui tourne
indéfiniment.
La condition de TANT QUE est une condition de continuation:
si elle est vraie, on continue la répétition 33
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’A
Définition
La boucle REPETER JUSQU’A sert à répéter une suite
d’instructions jusqu’à ce qu’une condition soit vraie.
Notation
Pseudo code Algorigramme
REPETER
Arbre programmatique
<bloc> <bloc>
JUSQU’A(<condition>) JQA

<condition>

<bloc>
<condition>

34
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’A
Déroulement
1. On exécute la suite d’instructions <bloc>;
2. On évalue la condition ;
2.1. si la condition est vraie,
2.1.1. on quitte la boucle tant que;
2.2. Si la condition est fausse
2.2.1. on remonte à l’étape 1.
Remarque
Le nombre d'itérations dans une boucle REPETER
JUSQU’A n'est pas connu au moment d'entrer dans la
boucle. Il dépend de l'évolution de la valeur de condition.
La condition de la boucle REPETER JUSQU’A étant testée
après l’exécution des instructions, la boucle REPETER
JUSQU’A permet de répéter un traitement, 1 ou plusieurs fois.
35
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’À
Remarque
On doit s’assurer que la condition a une valeur déterminée
avant le début de la boucle.
Une au moins des instructions du corps de la boucle doit
changer la valeur de condition de faux à vrai après un
certain nombre d'itérations pour ne pas avoir une boucle
qui tourne indéfiniment.
La condition de REPETER JUSQU’A est une condition
d’arrêt: si elle est vraie, on arrête la répétition.

36
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’À
Exemple: Un algorithme qui calcule le PGCD de deux nombres par l'algorithme
d'Euclide.
Environnement
Catégorie objet Type signification
Résultat pgcd Entier Le PGCD deux entiers
a Entier Le premier nombre
Données
b Entier Le deuxième nombre
r Entier Reste des divisions successives de a par b
Données
x Entier Copie de a
intermédiaires
y Entier Copie de b

37
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’À
Exemple: Un algorithme qui calcule le PGCD de deux nombres par l'algorithme
d'Euclide.
Logique de traitement
1. Obtenir a, a>0
2. Obtenir b, b>0
3. Donner à x, a
4. Donner à y, b
5. Diviser a par b et donner à r le reste de la division
6. Donner à a, b
7. Donner à b, r
8. si r  0,
8.1. Reprendre à 5
9. Donner à pgcd, a
10. Afficher pgcd
38
Structures répétitives
Principales boucles
Boucle REPETER JUSQU’À
Exemple: Un algorithme qui calcule le PGCD de deux nombres par l'algorithme
d'Euclide. ALGORITHME pgcd
Algorithme VAR a, b, x, y, pgcd, r: ENTIER;
DEBUT
REPETER
ECRIRE( Entrer le premier entier (>0): );
LIRE(a);
JUSQU’À(a>0)
REPETER
ECRIRE( Entrer le deuxième entier (>0): );
LIRE(b);
JUSQU’À(b>0)
x  a;
y  b;
REPETER
r  a MOD b;
a  b;
b  r;
JUSQU’À(r = 0) (* b=0 *)
pgcd  a;
ECRIRE(pgd(, x, , , y, ) =, pgcd);
FIN 39
Structures répétitives
Principales boucles
Boucle REPETER TANT QUE
Définition
La boucle REPETER TANT QUE est une variante de la
boucle REPETER JUSQU'A dans laquelle des instructions
sont exécutées jusqu’à ce qu’une condition soit fausse.
Notation Algorigramme
Pseudo code Arbre programmatique
REPETER <bloc>
TQ
<bloc>
TANT QUE(<condition>) <condition>
<bloc>
<condition>
Remarque
La condition de la boucle REPETER TANT QUE est une
condition de continuation : elle doit être vraie pour que l’on
poursuive l’exécution de la boucle.
40
Structures répétitives
Principales boucles
Boucle POUR
Définition
La boucle POUR permet de répéter une suite d’instructions
un nombre de fois connu à l’avance.
Notation
Pseudo code Algorigramme
POUR cpt DE deb A fin [PAR PAS DE pas] FAIRE
<bloc> cpt←deb
FINPOUR

Arbre programmatique
cpt n’a pas
POUR cpt dépassé fin
cptcpt+pas

<bloc>
deb↑│↓fin <bloc>
PAS DE pas

41
Structures répétitives
Principales boucles
Boucle POUR
Déroulement
1. cpt est initialisée à deb;
2. La condition cpt n’a pas dépassé fin est évaluée;
2.1. si la condition est vraie,
2.1.1.<bloc> est exécuté;
2.1.2. La valeur cpt est augmentée de pas;
2.1.3 on remonte à l’étape 2.
2.2. Si la condition est fausse,
2.2.1. on quitte la boucle pour;

42
Structures répétitives
Principales boucles
Boucle POUR
Remarque
Le nombre d'itérations dans une boucle Pour est connu
avant le début de la boucle.
La variable d’itération cpt doit être une variable de type
entier (ou caractère). Elle doit être déclarée avant l’entrée
de la boucle.
deb et fin peuvent être des valeurs, des variables définies
avant le début de la boucle ou des expressions de même
type que le compteur cpt.
Il faut éviter de modifier la valeur de cpt (ou de fin) à
l'intérieur de la boucle. En effet, une telle action :
perturbe le nombre d'itérations prévu par la boucle Pour
rend difficile la lecture de l'algorithme
présente le risque d'aboutir à une boucle infinie 43
Structures répétitives
Principales boucles
Boucle POUR
Remarque
Le pas pas est un entier qui peut être positif ou négatif, il
permet de déterminer l’itération suivante. Par défaut sa
valeur est égal à 1.
Les instructions de la boucle ne sont jamais exécutées si :
Le pas pas est positif et la valeur initiale deb est
supérieure à la valeur finale fin de la boucle ;
Le pas pas est négatif et la valeur initiale deb est
inférieure à la valeur finale fin de la boucle.

44
Structures répétitives
Principales boucles
Boucle POUR
Exemple: Ecrire un algorithme qui affiche la table de multiplication par n, entier
compris entre 1 et 10.
Environnement
Catégorie objet Type signification
Résultat Affichage de la table de multiplication par un entier n
Données n Entier Un entier donné, représentant le multiplicande
Données
i Entier Compteur des multiplicateurs
intermédiaires

Logique de traitement
1. Obtenir n, 1n10
2. Pour chaque multiplicateur i de 1 à 10,
2.1 afficher nxi

45
Structures répétitives
Principales boucles
Boucle POUR
Exemple: Ecrire un algorithme qui affiche la table de multiplication par n, entier
compris entre 1 et 10.
Algorithme
ALGORITHME table
VAR n, i: ENTIER;
DEBUT
REPETER
ECRIRE( Entrer le numéro de la table (entre 1 et 10): );
LIRE(n);
JUSQU’À(n1 ET n10)
POUR i DE 1 A 10 FAIRE
ECRIRE(n,  x , i,=, n*i);
FINPOUR
FIN
46
Structures répétitives
Principales boucles
Boucle POUR
Sens d’une boucle POUR
Une boucle POUR est croissante si son pas est positif.
Dans une boucle croissante les valeurs que prend
successivement le compteur sont énumérées dans l’ordre
croissant.
Une boucle POUR est décroissante si son pas est négatif.
Dans une boucle décroissante les valeurs que prend
successivement le compteur sont énumérées dans l’ordre
décroissant. La notation des boucles décroissantes de pas
-1 peut être comme suit:
POUR cpt DE deb A fin DÉCROISSANT FAIRE
<bloc>
FINPOUR 47
Structures répétitives
Principales boucles
Boucle POUR
Sens d’une boucle POUR
Exemple: Ecrire un algorithme qui calcule et affiche la factorielle d’un entier
Environnement
Catégorie objet Type signification
Résultat fact Entier Factorielle d’un entier
Données n Entier Un entier donné
Données
i Entier Compteur des termes entre 1 et n
intermédiaires
Logique de traitement
1. Obtenir n
2. Initialiser fact à 1
3. Pour chaque terme i de n à 1,
3.1 Donner à fact, factxi
4. Afficher fact

48
Structures répétitives
Principales boucles
Boucle POUR
Sens d’une boucle POUR
Exemple: Ecrire un algorithme qui calcule et affiche la factorielle d’un entier
Algorithme ALGORITHME factorielle

VAR n, i, fact: ENTIER;


DEBUT
ECRIRE( Entrer un entier: );
LIRE(n);
fact  1;
POUR i DE n A 1 DECROISSANT FAIRE
fact  fact*i;
FINPOUR
ECRIRE(n,  != , fact);
FIN 49
Structures répétitives
Passage entre types de boucles
De REPETER JUSQU'A à TANT QUE
REPETER bloc
bloc TANT QUE (NON condition) FAIRE
JUSQU'A (condition) bloc
FINTQ

De REPETER TANT QUE à TANT QUE


<bloc>
REPETER TANT QUE (condition) FAIRE
bloc bloc
TANT QUE (condition) FINTQ

De POUR à TANT QUE


POUR cpt DE deb A fin [ PAR PAS DE pas] FAIRE
bloc cpt←debut;
FINPOUR TANT QUE (cpt n’a pas dépassé fin) FAIRE
bloc
cpt←cpt+pas ;
FINTQ 50
Structures répétitives
Passage entre types de boucles
De POUR à REPETER
POUR cpt DE deb A fin [ PAR PAS DE pas] FAIRE
bloc
FINPOUR

cpt←debut; cpt←debut;
SI(cpt n’a pas dépassé fin) ALORS SI(cpt n’a pas dépassé fin) ALORS
REPETER REPETER
bloc bloc
cpt← cpt + pas; cpt← cpt + pas;
JUSQU'A(cpt a dépassé fin) TANT QUE(cpt n’a pas dépassé fin)
FINSI FINSI

51
Structures répétitives
Passage entre types de boucles
De TANT à REPETER
TANT QUE (condition) FAIRE
bloc
FINTQ

SI(condition) ALORS SI(condition) ALORS


REPETER REPETER
bloc bloc
JUSQU'A(NON condition) TANT QUE(condition)
FINSI FINSI

52
Structures répétitives
Choix d’un type de boucle
Premier questionnaire

Est-ce que l’on sait


calculer avant le début
de la boucle le nombre
d’itérations (tours) à Non
Oui effectuer ?

Boucle POUR
Est-ce qu’on doit
toujours exécuter
au moins une fois
les instructions ?
oui
non

Boucles REPETER Boucle TANT

53
Structures répétitives
Choix d’un type de boucle
Deuxième questionnaire

Est-ce que l’on sait


calculer avant le début
de la boucle le nombre
d’itérations (tours) à Non
Oui effectuer ?

Boucle POUR Quand est-ce on


sait décider si on
doit continuer à
exécuter les
instructions ?
A la fin de la boucle Au début de la boucle

Boucles REPETER Boucle TANT

54
Structures répétitives
Imbrication de boucles
 Les instructions d'une boucle peuvent être des boucles
Dans ce cas, on aboutit à des boucles imbriquées
Tous les types de boucles peuvent s’imbriquer entre eux.
Remarque :
Lors de l’imbrication de boucles, elles ne doivent pas se
chevaucher. Impossible
TANT QUE (a>b) FAIRE

POUR i DE 1 A n FAIRE
FINTQ

FINPOUR

55
Exercices
Exercice 1
Ecrire un algorithme qui demande à l’utilisateur, avec les variables appropriées, la
date d’un certain jour, puis qui calcule et affiche la date du lendemain.
Il faut vérifier la validité des dates,
Une année est bissextile si et seulement si elle est divisible par 4 et non par 100
(1900 n’était pas bissextile) ou divisible par 400 (2000 sera bissextile).
Exercice 2
Écrire un algorithme qui, à partir de la saisie du jour et du mois d’une date de
naissance, affiche le signe du zodiaque correspondant :
Capricorne : 22/12 au 20/1
Verseau : 21/1 au 19/2
Poissons : 20/2 au 20/3
Bélier : 21/3 au 20/4
Taureau : 21/4 au 20/5
Gémeaux : 21/5 au 21/6
Cancer : 22/6 au 22/7
Lion : 23/7 au 23/8
Vierge : 24/8 au 23/9
Balance : 24/9 au 23/10
Scorpion : 24/10 au 22/11
Sagittaire : 23/11 au 21/12 56
Exercices
Exercice 3
Un nombre d'Armstrong est un entier pouvant se représenter par la somme des cubes de ses
chiffres.
Exemple : 153=13+53+33
Établir l'algorithme permettant de déterminer si un nombre entier donné est un nombre
d'Armstrong.
Exercice 4
On souhaite écrire un algorithme qui calcule et affiche les résistances équivalentes d’un
nombre quelconque de résistances dans un montage en parallèle et dans un montage en
série. L’algorithme doit aussi déterminer la plus grande et la plus petite des résistances
montées. On rappelle que si on a n résistances ( 𝑅𝑖 1≤𝑖≤𝑛 les résistances équivalentes en
parallèle et en série sont définies respectivement par :
𝑛 𝑛
1 1 1 1 1
= = + + ⋯+ 𝑒𝑡 𝑅𝑆 = 𝑅𝑖 = 𝑅1 + 𝑅2 + ⋯ + 𝑅𝑛
𝑅𝑝 𝑅𝑖 𝑅1 𝑅2 𝑅𝑛
𝑖=1 𝑖=1
Les résistances sont strictement positives.
Exercice 5
On considère le problème suivant :
• On lance une balle d'une hauteur initiale de hi cm.
• On suppose qu'à chaque rebond, la balle perd 10 % de sa hauteur.
• On cherche à savoir le nombre de rebonds nécessaire pour que la hauteur de la balle soit
inférieure ou égale à h cm.
Écrire un algorithme permettant de résoudre ce problème 57

Vous aimerez peut-être aussi