Vous êtes sur la page 1sur 100

Chapitre 1 : Généralités sur l’algorithmique

CHAPITRE 1

GÉNÉRALITÉS SUR L’ALGORITHMIQUE

Page 1
Chapitre 1 : Généralités sur l’algorithmique

1. Définitions

• L’informatique

L’informatique est la science du traitement rationnel de l’information par des ordinateurs ou


des robots.

• L’ordinateur

Un ordinateur est une machine électronique et programmable destinée au traitement de


l’information.

• Algorithmique, algorithme, structure de données et programme

L'algorithmique est la science des algorithmes.


Elle a pour objectif :
- d’une part, la conception et l’étude des algorithmes,
- et d’autre part, la conception et l’étude des structures de données.

Un algorithme est un ensemble de règles précises qui définit un procédé de calcul destiné à
obtenir un résultat déterminé à partir de données initiales. Cet ensemble de règles constitue les
étapes de la résolution d’un problème.
En d'autres termes, un algorithme est une suite finie et non-ambiguë d’opérations ou
d'instructions permettant de résoudre un problème.

Un algorithme manipule des données (par exemples des nombres et des mots). Ces données
sont mémorisées (ou stockées) dans des cases mémoire. En effet, dans la mémoire de
l’ordinateur, les données sont rangées dans des cases mémoire.

Les algorithmes et les structures de données sont si liés.


Une structure de données peut être vue sous deux angles : l’angle physique et l’angle logique :

 sous l’angle physique, une structure de données est un ensemble de cases mémoire
destiné à contenir des données, et organisé de sorte à faciliter l’accès aux données et
leur manipulation ;

 sous l’angle logique, une structure de données est une méthode de stockage et
d’organisation des données qui facilite l’accès aux données et leur manipulation.

Un algorithme est écrit en langage naturel. Il peut alors varier "légèrement", dans la forme mais
pas dans le fond, d’un livre ou d’un concepteur à un autre. Cependant, il ne peut être exécuté
sur aucun ordinateur à moins d’être codé en un programme informatique.

Un programme informatique est un algorithme codé dans un langage de programmation et


exécutable sur un ordinateur.

Page 2
Chapitre 1 : Généralités sur l’algorithmique

• Le langage de programmation

Un langage de programmation est un ensemble de conventions normalisées permettant de


traduire un algorithme en un programme informatique.
Par exemples : Pascal, C, C++, Java, PHP et Python sont des langages de programmation.

2. Du problème au programme informatique

Un ordinateur ne sait rien faire. Pour qu’il réalise une tâche, par exemple calculer la factorielle
d’un nombre, on doit lui montrer comment le faire. On lui fournit alors un programme qu’il
exécute. Ce programme lui montre comment effectuer cette tâche.

Pour créer un programme il faut :


− d’abord, formaliser le problème ;
− ensuite, exprimer les actions à exécuter sous la forme d’algorithmes ;
− et enfin, traduire ces algorithmes en des programmes à l’aide d’un langage de
programmation approprié.

L'objectif fondamental de l'algorithmique est d’exprimer les instructions résolvant un problème


donné et les structures de données à employer, indépendamment d’un langage de
programmation.

La programmation se compose de deux grandes étapes :


− une étape de conception de la solution (formalisation du problème et recherche des
algorithmes),
− et une étape de codage des algorithmes dans un langage de programmation.

L’étape de la conception de la solution n’est pas du tout facultative au regard des avantages
certains que l’on en tire. Ces avantages seront exposés plus loin.

Le calcul de la factorielle d’un nombre est, sur un plan purement mathématique, élémentaire
car la méthode de calcul est très simple à appliquer. La difficulté réside au niveau
algorithmique, c’est-à-dire :
− Comment "expliquer" la méthode à un ordinateur ?
− Comment traduire les étapes du calcul en instructions algorithmiques ?
− La solution proposée est-elle juste ?
− Si cette solution est juste, est-elle la meilleure ?

Il est évident que l’on ne peut pas directement créer un programme pour la résolution de ce
problème sans l’avoir sérieusement analysé.
En effet, Il faudra réfléchir sur la définition de la factorielle et ses propriétés, pour espérer
pouvoir proposer une ou plusieurs solutions. Ce qui signifie implicitement qu’un problème peut
admettre plusieurs solutions.

Page 3
Chapitre 1 : Généralités sur l’algorithmique

3. Les critères fondamentaux de définition d’un algorithme

L’informaticien et mathématicien américain Donald Knuth a formulé cinq critères


fondamentaux pour la définition d’un algorithme :

− la finitude : un algorithme doit toujours se terminer après un nombre fini d'étapes (donc
il doit avoir un nombre fini d’instructions) ;

− la précision : chaque étape d'un algorithme doit être définie précisément (donc il doit
avoir chacune de ses instructions, définie sans ambiguïté) ;

− les entrées : ce sont des quantités prises dans un ensemble spécifié d'objets, qui sont
données à l'algorithme avant qu'il ne commence (on doit utiliser des données connues
par l’utilisateur) ;

− les sorties : ce sont des quantités qui ont une relation spécifiée avec les entrées (un
algorithme doit être déterministe, c’est-à-dire qu’il doit donner les mêmes résultats pour
les mêmes données) ;

− le rendement : toutes les opérations que l'algorithme doit accomplir doivent être
suffisamment élémentaires pour pouvoir être en principe réalisées dans une durée finie
par un homme utilisant du papier et un crayon.

4. Quelques domaines d’application des algorithmes

Aujourd’hui, les ordinateurs sont devenus nos plus fidèles compagnons. Ils sont présents, sous
une forme ou une autre, dans la quasi-totalité des appareils électroniques que nous utilisons au
quotidien. Tous ces systèmes dits informatisés ou électroniques sont en réalité pilotés par des
programmes plus ou moins complexes.
Ces programmes découlent évidemment d’algorithmes. Donc, partout où un ordinateur
intervient, ce sont, en réalité, des algorithmes qui sont mis en œuvre. Les algorithmes
interviennent dans de nombreux domaines :

 la gestion des stocks


 les moteurs de recherche sur internet
 le commerce électronique : la cryptographie pour sécuriser les numéros de cartes de
crédit, mots de passe et relevés bancaires.
 les banques : gestion des comptes des clients, divers calculs, etc.
 la gestion du routage de l’information sur Internet
 la géolocalisation (avec les systèmes de positionnement GPS, Glonass, Galileo)
 les jeux (jeu de dames, jeu d’échecs, awalé, scrabble)
 la météorologie

Page 4
Chapitre 1 : Généralités sur l’algorithmique

 la navigation assistée (voiture, avion, bateau, navette spatiale, fusée, sous-marin)


 le transport (recherche du chemin optimal)

5. Pourquoi apprendre l’algorithmique avant un langage de programmation ?

Apprendre l’algorithmique permet d’exprimer les instructions et les structures de données


résolvant un problème informatique indépendamment :
− des particularités d’un langage de programmation ;
− de l’ordinateur qui exécutera le programme découlant des algorithmes.

Apprendre l’algorithmique permet d’apprendre à mettre en évidence la structure logique des


programmes à créer. Cet aspect est présent quel que soit le langage de programmation utilisé.
Lorsqu’on programme directement dans un langage sans avoir écrit d’algorithme, on doit en
plus de rechercher la structure logique du programme, se préoccuper des contraintes propres au
langage utilisé (alphabet, vocabulaire, syntaxe, grammaire).
Pour illustrer ce constat, on peut dire que l’algorithme est pour le programme informatique ce
qu’est le plan pour l’ouvrage en génie civil. En effet, on conçoit toujours le plan d’un ouvrage
avant de passer à sa réalisation.

Apprendre l’algorithmique permet d’acquérir la démarche algorithmique. Elle facilite la


conception des programmes, la recherche d’erreurs, l’amélioration des programmes et elle
facilite aussi la maintenance des programmes.

Si quelqu’un apprend directement à programmer dans un langage particulier, il sera


incapable d’établir la différence entre les concepts qui relèvent de la structure logique générale
d’un programme (les règles fondamentales de l’algorithmique) et les concepts qui relèvent du
langage particulier qu’il utilise.
Ce programmeur écrira souvent des programmes qui, bien que justes, pourraient être de moindre
qualité, et pire, il pourrait éprouver beaucoup de difficultés à passer à un autre langage.

Donc apprendre l’algorithmique permet d’aborder les difficultés de la programmation l’une


après l’autre.

Page 5
Chapitre 2 : Variables, types, instructions élémentaires et expressions

CHAPITRE 2

VARIABLES, TYPES, INSTRUCTIONS ÉLÉMENTAIRES


ET EXPRESSIONS

Page 6
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Leçon 1 : La structure d’un algorithme

1. Un exemple d’algorithme

Problème : écrire un algorithme pour calculer la factorielle d’un nombre.

Différents algorithmes résolvent ce problème. En voici un :

Algorithme CalculFactorielle
Var nombre, sauvegarde, resultat : entier
Début
écrire ("Calcul de la factorielle d’un nombre")
Répéter
écrire ("Donnez un entier naturel : ")
lire (nombre)
Jusqu’à (nombre >= 0)
sauvegarde ← nombre
Si ((nombre = 0) OU (nombre = 1))
Alors resultat ← 1
Sinon resultat ← 1
TantQue (nombre > 1) Faire
resultat ← nombre * resultat
nombre ← nombre - 1
FinTantQue
FinSi
écrire ("La factorielle de ", sauvegarde, "est ", resultat) Fin

Dans ce chapitre, on ne s’intéressera qu’à la structure de cet algorithme.

2. Les principales parties d’un algorithme

Un algorithme comporte trois parties : l’en-tête, la zone des déclarations et le corps.

2.1. L’en-tête

L’en-tête est annoncé par le mot réservé (ou mot-clé) Algorithme suivi du nom que l’on a
choisi pour désigner l’algorithme. Le nom d’un algorithme est aussi appelé identificateur.
Le choix de l’identificateur est libre, mais il doit respecter certaines règles. Ces règles seront
présentées dans la leçon suivante.
L’en-tête sert à nommer un algorithme de sorte à ne pas réécrire cet algorithme à nouveau
lorsque l’on en aura besoin.
L’algorithme de l’exemple a pour en-tête : Algorithme CalculFactorielle

Page 7
Chapitre 2 : Variables, types, instructions élémentaires et expressions

2.2. La zone des déclarations

La zone des déclarations est l’espace réservé pour lister les "ingrédients" dont on a besoin pour
résoudre un problème. Ces ingrédients sont appelés objets algorithmiques.
Ce sont : les constantes, les types, les procédures, les fonctions, et les variables.
La zone des déclarations est délimitée par les mots réservés Algorithme et Début.

Dans l’algorithme de l’exemple, trois variables (nombre, sauvegarde et resultat) ont été
déclarées.
Les variables forment une catégorie d’objets algorithmiques. Le
mot réservé Var sert à déclarer les variables.

2.3. Le corps

Le corps d’un algorithme est la zone située entre les mots réservés Début et Fin.
On y écrit toutes les instructions qui permettent de résoudre le problème.
Le mot réservé Début indique le début de la suite d’instructions, le mot réservé Fin marque,
à la fois, la fin de la suite des instructions, et la fin de l’algorithme. Donc il n’y a plus
d’instruction après le mot Fin, et l’algorithme s’arrête.

3. Formalisme (ou schéma général) d’un algorithme

Algorithme < Nom_de_l’algorithme > // En-tête de l’algorithme


// Zone des déclarations - Liste des objets algorithmiques
Constantes

Types

Procédures

Fonctions

Variables

// Corps de l’algorithme
Début
< instruction1 ou action1 >
< instruction2 ou action2 >
. .
.
< instruction_n ou action_ n > Fin

Page 8
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Remarques

 au sujet du fonctionnement d’un algorithme : de manière générale, un algorithme


reçoit des données, effectue des traitements sur ces données, et retourne des résultats.

 au niveau syntaxique : On peut insérer des commentaires dans un algorithme. Ils


permettent d’annoncer les intentions de celui qui écrit l’algorithme. Bien que facultatifs,
ces commentaires ne doivent pas se confondre aux instructions et aux mots réservés de
l’algorithme.
Pour ce faire, on doit les délimiter avec les signes /* et */ lorsque le commentaire s’étend sur
plusieurs lignes, ou avec le signe // lorsque le commentaire tient sur une seule ligne.

 au sujet de la déclaration des objets algorithmiques : L’utilisation d’objets


algorithmiques dépend du problème à résoudre. Dans l’exemple, on n’a utilisé qu’une
seule catégorie d’objets : les variables. Et dans cette catégorie, on a déclaré trois objets.

Page 9
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Leçon 2 : Les objets algorithmiques

1. Notion d’objet

Un objet doit être impérativement déclaré avant d’être utilisé dans un algorithme.
On donne alors ses caractéristiques : son identificateur, son type et si possible sa valeur.

1.1. L’identificateur

L’identificateur est le nom choisi pour l’objet. Il se présente sous la forme d’une suite de
caractères alphanumériques (alphabétiques et/ou numériques) sans espace. Il commence
toujours par une lettre. Il est recommandé de choisir un nom qui a un lien sémantique avec le
contenu de l’objet ou avec le rôle de l’objet. Les caractères accentués ne sont pas autorisés.

Par exemples : nombre, resultat sont acceptés tandis que 1nombre, résultat sont refusés.

1.2. Le type

Avant d’appliquer un quelconque traitement à un objet, il faut d’abord connaître son type.
Un objet est soit du type numérique, soit du type chaîne de caractères, soit du type booléen.

Exemple : On considère deux objets a et b contenant des données. S’il est possible
d’additionner ces données, alors ces données sont des nombres. Il faut donc nécessairement
que les deux objets qui les contiennent soient du type numérique.

La notion de type d’un objet sera complètement exposée à la leçon suivante.

1.3. La valeur

Le traitement d’un objet porte sur la valeur de la donnée que cet objet contient.
Il y a deux cas :
− si cette valeur est modifiable, alors l’objet est une variable,
− si cette valeur n’est pas modifiable, alors l’objet est une constante.

Voici les formalismes respectifs de déclaration d’une variable et d’une constante :

Var < identificateur de la variable > : < type de la variable >

Const < identificateur de la constante > ← < valeur affectée à la constante >

Exemple : dans l’algorithme précédent, deux variables ont été déclarées : nombre, sauvegarde
et resultat. La variable appelée nombre reçoit le nombre dont on veut calculer la factorielle ; la
variable nommée sauvegarde reçoit une copie du contenu de la variable nombre, et enfin la
variable appelée resultat reçoit le résultat du calcul.

Page 10
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Elles sont toutes les trois de type numérique et précisément de type entier. D’où
la déclaration : Var nombre, sauvegarde, resultat : entier.

Remarques

 à propos de la notion de variable : la notion de variable en informatique semble


identique à celle utilisée en mathématiques. Il y a une grande différence. En effet :

 la variable informatique, à tout instant donné du déroulement de l’algorithme,


ne peut contenir qu’une seule valeur, bien que celle-ci puisse évoluer du fait de
certaines instructions de l’algorithme.

 la variable mathématique se comporte différemment selon les situations. Par


exemples :
− dire que x appartient à ℝ, signifie que la variable x peut désigner n’importe quel nombre réel
;
− dire que n est un nombre premier, signifie que la variable n peut désigner n’importe quel
nombre premier ;
− dans l’équation x appartenant à ℝ, ax² + bx + c = 0, x désigne simultanément deux racines
réelles, si elles existent.

 à propos des caractéristiques d’un objet :

 lors de la déclaration d’un objet, on précise son identificateur, son type et sa


valeur si possible.

 lorsque l’on déclare un objet, on donne, en réalité, l’ordre au système


d’exploitation de réserver un espace dans la mémoire vive de l’ordinateur, pour
la mémorisation de cet objet. Dès que cet ordre est exécuté, une quatrième
caractéristique s’ajoute : l’adresse.
Une adresse est la valeur numérique qui permet de localiser une donnée dans la mémoire vive.
Par exemple, à la déclaration des variables nombre, sauvegarde et resultat, le système
d’exploitation effectue une allocation de mémoire pour leur réserver des espaces dans la
mémoire vive. Mais les adresses de ces espaces sont inconnues du programmeur.

 Chaque objet algorithmique est déclaré à l’aide d’un mot réservé propre.

 Les objets algorithmiques types, procédures et fonctions seront étudiés plus loin.

Page 11
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Leçon 3 : Les types de base

1. Rappel

Une variable sert à stocker une donnée dans la mémoire vive de l’ordinateur. La variable peut
mémoriser la donnée si elle est du même type que cette donnée.

2. Définition

Le type d’un objet est défini :


− d’une part, par l’ensemble des valeurs que cet objet peut prendre
− et d’autre part, par l’ensemble des opérateurs que l’on peut appliquer à ces valeurs.

3. Les principaux types de base

On distingue trois principaux types de base (ou types élémentaires ou types simples) : le type
numérique, le type chaîne de caractères et le type booléen.

3.1. le type numérique

Le type numérique regroupe tous les nombres : les entiers et les réels.
On déclare alors une donnée numérique soit dans le type réel, soit dans le type entier.

Le type numérique supporte les opérateurs arithmétiques, les fonctions trigonométriques et


les fonctions mathématiques. Les opérations les plus courantes sont regroupées dans le tableau
ci-dessous :

Page 12
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Le type numérique supporte aussi les opérateurs de comparaison :

Opérateurs Signification
= est égal à
> est strictement supérieur à
< est strictement inférieur à
>= ou ≥ est supérieur ou égal à
<= ou ≤ est inférieur ou égal à
< > ou ≠ est différent de

3.2. le type chaîne de caractères (ou type chaîne)

Une chaîne de caractères est une suite finie de caractères. Elle


peut être :
− une chaîne vide
− ou un caractère suivi d’une chaîne de caractères

Un caractère peut être :


− une lettre de l’alphabet (minuscule ou majuscule)
− un chiffre
− ou un symbole ou un signe quelconque : signe d’opérations (+ - * /), signe de ponctuation (
! ? ; :) ou d’autres signes (§ £ ~ #)

On retient alors :

Une chaîne de caractères est une suite finie de caractères regroupés dans une seule variable.
Le type chaîne de caractères supporte les opérateurs de comparaison et les instructions de
manipulation de chaînes de caractères.

Une chaîne de caractères est délimitée par des griffes (" ") tandis qu’un caractère est délimité
par des apostrophes (' ').
Exemples : "Calcul de la factorielle d’un nombre", 'D', 'd'.

Le type chaîne supporte les mêmes opérateurs de comparaison que ceux supportés par le
type numérique.
Il existe des tables (par exemples : ASCII, ASCII étendu) qui regroupent tous les caractères
utilisés en informatique. Dans ces tables, chaque caractère est lié à un code numérique, c’est-
àdire un nombre, qui le représente dans l’ordinateur. Ce code numérique permet d’établir une
relation d’ordre entre les chaînes de caractères.

Page 13
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Exemples :

 'a' > 'A' car dans la table ASCII, le code numérique lié à 'a' est supérieur au code
numérique lié à 'A'. En effet, 97 > 65
 'A' < 'Z' car, selon la table ASCII, 65 < 90
 "235" < "236" car le code numérique lié à '5' est inférieur à celui de '6' (car 53 < 54)
 "2015" < "3" car le code numérique lié à '2' est inférieur à celui de '3' (car 50 < 51)
La manipulation des chaînes de caractères nécessite l’utilisation de certaines instructions
spécifiques. Ces instructions sont en réalité des algorithmes prédéfinis. On n’écrit pas à
nouveau de tels algorithmes, on les utilise directement comme on utilise les fonctions
mathématiques prédéfinies (ln x, ex, sin x, cos x, abs x) en prenant soin de respecter leurs règles
d’utilisation. Ces instructions sont des primitives algorithmiques.

On admettra les primitives ci-dessous :

longueur (< chaîne >)


Elle fournit la longueur de la chaîne, c’est-à-dire le nombre de caractères situés entre les deux
guillemets qui délimitent la chaîne, y compris les espaces.

Exemple : longueur ("YAO Kassi Benoît"), résultat : 16 (car il faut aussi compter les espaces)

code (< caractère >)


Elle fournit la valeur du code numérique lié au caractère.

Exemple : code ('A'), résultat : 65

car (< nombre >)


Elle fournit le caractère correspondant à cette valeur numérique. Elle
est la réciproque de code (<caractère >).

Exemple : car (65), résultat : 'A'

+ est la fonction de concaténation de chaînes. Elle recopie une chaîne à la fin d’une autre.

Exemple : "Algo" + "rithmique", résultat : "Algorithmique"


"YAO" + ' ' + "Kassi", résultat : "YAO Kassi"

sschaine (< chaîne >, < position >, < nombre >)
Elle extrait de < chaîne >, à partir de la position < position >, < nombre > caractères.

Exemple : sschaine("Algorithmique", 5, 7), résultat : "rithmiq"

Page 14
Chapitre 2 : Variables, types, instructions élémentaires et expressions

On extrait de la chaîne "Algorithmique", à partir de la position 5 (donc à partir de la lettre 'r'),


7 caractères.

cvchaine (< nombre >)


Elle convertit une variable ou une constante de type numérique, en une variable ou une
constante de type chaîne de caractères.

Exemple : cvchaine (7), résultat : "7" ; cvchaine (3.45), résultat : "3.45"

Exemple : cvnombre ('7'), résultat : 7 Le


résultat est un nombre.

cvnombre (< caractère >)


Elle convertit une variable ou une constante de type chaîne de caractères, contenant une valeur
numérique, en une variable ou une constante de type numérique.

Exemple : cvnombre ('7'), résultat : 7

LA TABLE ASCII

L'ordinateur conserve les données en mémoire sous forme numérique. Puisqu’il n'existe pas
de méthode pour stocker directement les caractères, alors chaque caractère est représenté en
mémoire par un code numérique appelé code ASCII. L’acronyme ASCII signifie American
Standard Code for Information Interchange (Code américain normalisé pour l'échange
d'information). La table ASCII permet de déterminer le code ASCII de chaque caractère.

La table ASCII en codage décimal

Page 15
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Selon la table ci-dessus, pour déterminer le code ASCII en codage décimal du caractère
contenu dans une cellule de la table ASCII, on additionne le nombre lu en ligne et le
nombre lu en colonne. Ainsi, par exemples :
− ASCII ('A') = 65 (car 60 + 5 = 65) ; −
ASCII ('a') = 97 (car 90 + 7 = 97). −
ASCII ('0') = 48 (car 40 + 8 = 48) ;
− ASCII ('9') = 57 (car 50 + 7 = 57).

Les codes 0 à 31 ne sont pas des caractères. Ce sont des caractères de contrôle, ils sont
utilisés en programmation. Les codes 48 à 57 représentent les chiffres, ceux de 65 à 90
représentent les majuscules, et ceux de 97 à 122 représentent les minuscules.
Le code ASCII ne contient ni caractère accentué ni caractère spécifique à une langue. Ces
caractères particuliers ont été intégrés à la table ASCII, aboutissant ainsi à la table ASCII
étendu.
3.3. le type booléen

Certaines questions et assertions (ou propositions) n’admettent que deux réponses qui
s’excluent mutuellement : Non/Oui, Faux/Vrai.
Par exemples : être à l’intérieur, être admis, être en bonne santé, être en marche.

La réponse à la question relative à l’une de ces situations est soit "Non", soit "Oui" ; ou alors
soit "Faux", soit "Vrai". Mais jamais les deux à la fois.

La variable qui contient la réponse à une telle assertion est du type booléen. Donc le type
booléen n’admet que deux valeurs : Faux et Vrai notées respectivement F et V (et symbolisés
respectivement par les chiffres 0 et 1).

Le type booléen supporte les opérateurs logiques suivants : ET, OU, NON.

Supposons qu’une salle dispose de deux ampoules nommées l’une a, l’autre b. On


observe deux situations :

 l’une concernant l’état de chacune des ampoules :


 a est allumée : est-ce faux ? est-ce vrai ?
 b est allumée : est-ce faux ? est-ce vrai ?

 l’autre concernant l’état de la salle :


 la salle est éclairée : est-ce faux ? est-ce vrai ?  quel est le niveau d’éclairage
: total ? partiel ?

La réponse relative à l’état de la salle dépend entièrement de l’état de chacune des ampoules.
La réponse peut être aussi formulée en fonction de l’état que l’on recherche (salle éclairée
totalement, salle éclairée partiellement, salle sombre totalement, etc.) En effet :
− si les deux ampoules sont allumées, on dira que la salle est entièrement éclairée

Page 16
Chapitre 2 : Variables, types, instructions élémentaires et expressions

− si les deux ampoules sont éteintes, on dira que la salle est entièrement sombre − si
l’une des ampoules est allumée, on dira que la salle est partiellement éclairée − si la
salle est partiellement éclairée, laquelle des ampoules est allumée ?
− si la salle est partiellement éclairée, laquelle des ampoules est éteinte ?
− peut-on avoir au moins une ampoule éteinte si la salle est éclairée ? − peut-
on avoir les deux ampoules allumées si la salle est sombre ?
− ...

Pour obtenir les réponses à toutes les questions possibles selon tous les points de vue, on
construit des tableaux. Ces tableaux sont des tables de vérité.

Voici les tables de vérité des opérateurs ET, OU, NON :

 l’opérateur ET

a b a ET b
V V V
V F F
F V F
F F F

Selon le "point de vue" de l’opérateur ET, la salle est éclairée si l’ampoule a et l’ampoule b
sont simultanément allumées.

Donc pour l’opérateur ET :

− la salle est éclairée si les deux ampoules sont allumées ;


− la salle est non éclairée si au moins l’une des ampoules n’est pas allumée.

 l’opérateur OU

a b a OU b
V V V
V F V
F V V
F F F

Selon le "point de vue" de l’opérateur OU, la salle est éclairée si l’une des ampoules est allumée
: C’est-à-dire :
− soit uniquement a est allumée − soit
uniquement b est allumée
− soit a et b sont simultanément allumées.

Page 17
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Donc pour l’opérateur OU :

− la salle est éclairée si au moins l’une des ampoules est allumée.


− la salle est non éclairée si aucune des ampoules n’est allumée.

 l’opérateur NON

a NON a
V F
F V

"NON a" signifie "contraire de l’état initial (ou précédent) de a".

Ce sont les trois tables de vérité élémentaires. On construit d’autres tables plus complexes à
partir de ces tables.

Remarque

On admettra qu’il existe cinq types de base :


− le type entier ;
− le type réel ;
− le type caractère ;
− le type chaîne de caractères ;
− le type booléen.

Page 18
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Leçon 4 : Les instructions élémentaires

1. Définition

Une instruction est un ordre que l’on donne à un matériel informatique.


C’est une information exprimée en langage informatique, et qui commande l’exécution d’une
opération informatique.

2. Les principales instructions élémentaires

Il y a deux principaux groupes d’instructions : les instructions élémentaires et les instructions


complexes. Cette leçon traite des instructions élémentaires.
On dispose de quatre instructions élémentaires (ou instructions simples) : la déclaration,
l’affectation (ou assignation), la saisie (ou lecture) et l’affichage (ou écriture ou édition).

2.1. La déclaration

La déclaration d’un objet est une instruction qui permet de réserver un espace dans la mémoire
vive dans le but de mémoriser cet objet. Lors de la déclaration d’un objet, on précisera son
identificateur, son type et si possible sa valeur (pour plus de détails, voir les leçons
précédentes).

Exemples

2.2. L’affectation

L’affectation est une instruction qui permet d’affecter ou d’assigner ou d’attribuer une valeur
à un objet. On dit couramment "stocker une valeur dans un objet".

Représentée par une flèche orientée à gauche (←), cette instruction a pour format général :

< identificateur de l’objet > ← < valeur >

La valeur peut être :


• une variable du type de l’identificateur ;
• une constante du type de l’identificateur ;
• une expression dont le résultat de l’évaluation est du type de l’identificateur.

La notion d’expression sera étudiée dans la prochaine leçon.

Page 19
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Dans l’algorithme de l’exemple introductif, on a écrit l’instruction : resultat ← 1


Elle signifie que l’objet d’identificateur resultat reçoit la valeur 1 ou encore que l’on stocke la
valeur 1 dans la variable resultat.
Donc l’instruction resultat ← 1 est une affectation.

2.3. La lecture

La lecture ou saisie est une instruction qui permet de fournir une valeur à une variable, cette
valeur étant récupérée généralement via le clavier.
Elle a pour format général :

lire (identificateur de l’objet)


ou
saisir (identificateur de l’objet)

Dans l’algorithme, on a écrit l’instruction : lire (nombre)


L’utilisateur fournit une valeur à l’objet d’identificateur nombre via le clavier. Cette instruction
permet donc à l’utilisateur de saisir une valeur, qui sera implicitement affectée à la variable
nombre.
Cette instruction permet donc à l’algorithme de récupérer une valeur saisie par l’utilisateur puis
de la stocker dans la variable indiquée.

2.4. L’écriture

L’écriture ou affichage est une instruction qui permet d’écrire ou d’afficher ou d’éditer une
valeur à l’écran.
Elle a pour format général :

écrire (valeur)
ou

afficher (valeur)
La valeur peut être :
• le contenu d’une variable ;
• le contenu d’une constante ;
• le résultat d’une expression.

Dans l’algorithme de l’exemple introductif, on a écrit les deux instructions ci-dessous :


écrire ("Calcul de la factorielle d’un nombre")
écrire ("La factorielle de ", nombre, "est ", resultat)

Page 20
Chapitre 2 : Variables, types, instructions élémentaires et expressions

La première instruction permet d’afficher du texte (ou plus généralement, une chaîne de
caractères) à l’écran, sur une ligne. On délimite le texte à l’aide de griffes (" ").

La seconde instruction permet d’afficher, à la fois, du texte et les contenus des variables nombre
et resultat.

Il faut remarquer que :


− une chaîne de caractères et une variable sont toujours séparées par une virgule ;
− une variable n’est pas délimitée (donc une variable n’admet ni griffe ni apostrophe).

Leçon 5 : Les expressions 1. Rappel : l’affectation

L’affectation est une opération qui consiste à stocker une valeur dans une variable ou dans une
constante.
Cette opération est représentée par une flèche orientée à gauche : ←, et a pour format général
< identificateur > ← < valeur >.
La valeur est soit un nombre, soit une chaîne de caractères, soit une variable du type de
l’identificateur, soit une constante du type de l’identificateur, soit une expression dont le
résultat de l’évaluation est du type de l’identificateur.

2. Définition : L’expression

Une expression est un ensemble de valeurs reliées par des opérateurs, et qui fournit une
seule valeur.

Par exemple :

Soient la variable delta, et les variables a, b et c de type réel. Considérons


l’instruction d’affectation : delta ← b*b - 4*a*c

La partie b*b - 4*a*c (située à droite de la flèche) est une expression. On veut stocker sa valeur
dans la variable delta.
Le calcul de cette valeur est effectué avec les valeurs contenues dans les variables a, b et c.
L’affectation est possible si la variable delta est du même type que le résultat de l’expression
b*b - 4*a*c. Alors la variable delta doit être du type réel.

3. Caractéristiques d’une expression

Une expression possède une valeur et un type. Une expression peut alors être aussi bien une
variable qu’une constante, de n’importe quel type.

Par conséquent, le format général d’une affectation peut s’écrire :

Page 21
Chapitre 2 : Variables, types, instructions élémentaires et expressions

< identificateur > ← < expression >

L’expression peut être :


• un nombre ou une chaîne de caractères,
• une constante du type de l’identificateur,
• une variable du type de l’identificateur,
• un ensemble de valeurs reliées par des opérateurs dont le résultat de l’évaluation est du
type de l’identificateur,
• une fonction dont la valeur de retour est du type de l’identificateur. (La notion de
fonction sera étudiée dans le chapitre traitant des sous-algorithmes.)

Les notions d’affectation et d’expression sont essentielles en algorithmique.

TRAVAUX DIRIGÉS

TD 1 : Affectation de variables [cas 1]

On considère m et n des variables de type entier.


Indiquez, pour chaque variable, sa valeur après l’exécution de chacune des instructions :

TD 2 : Affectation de variables [cas 2]

On considère m, n et p des variables de type entier.


Indiquez, pour chaque variable, sa valeur après l’exécution de chacune des instructions :

Page 22
Chapitre 2 : Variables, types, instructions élémentaires et expressions

TD 3 : Affectation de variables [cas 3]

On considère les variables :


 m, n, q et r de type entier,
 p de type réel,
 s de type chaîne de caractères

Indiquez, pour chaque variable, sa valeur après l’exécution de chacune des instructions :

TD 4 : Affectation de variables [cas 4]

a et b sont des variables de type numérique.


Que contient chacune de ces variables après l’exécution des instructions ? :

Situation
1a←5b
←7a←
bb←a

Situation
2a←5b
←7b←
aa←b

Une question pour gagner 2000 francs CFA

On a du jus de gnanmankou dans un verre bleu, et du bissape dans un verre jaune. Comment
procéder pour échanger les contenus des deux verres ?

TD 5 : : Échanger les contenus de deux variables

Page 23
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Écrire les instructions qui permettent d’échanger les valeurs de deux variables.
On supposera que ces deux variables sont a et b de type entier et qu’elles contiennent
respectivement les valeurs 10 et -10.
Indication : S’inspirer de la méthode de résolution de la question pour gagner 2000 FCFA.

TD 6 : : Permutation triangulaire

Soient trois variables x, y et z (supposées du même type). Écrivez les instructions permettant
de permuter leurs valeurs, de telle sorte que la valeur de x passe dans z, celle de z dans y, et
celle de y dans x. On utilisera une seule variable supplémentaire.

Une question pour gagner 1500 FCFA

Que trouvera-t-on dans c à l’exécution de l’instruction c ← 14, sachant que c est une constante
de type entier contenant la valeur 7 ?

RÉSUMÉ

 Un algorithme est une suite finie d’instructions permettant de résoudre un problème.

 Un algorithme est constitué de trois parties :


− l’en-tête qui annonce le nom de l’algorithme ;
− la zone des déclarations où l’on déclare les objets algorithmiques que l’on va utiliser, par
exemples, des constantes et des variables, introduites respectivement par les mots réservés
Const et Var ;
− le corps où l’on écrit les instructions qui résolvent le problème. Ces instructions sont
encadrées par les mots réservés Début et Fin.

 Toute variable (ainsi que toute constante) a un type. Un type couvre un ensemble de
valeurs et un ensemble d’opérateurs.

 On dispose de quatre opérations élémentaires : la déclaration, l’affectation, la lecture


et l’écriture :
− les déclarations permettent d’établir la liste des objets algorithmiques que l’on va utiliser
dans le corps de l’algorithme avec leurs types respectifs ;
− l’affectation permet de ranger une valeur dans une variable ou dans une constante ;
− la lecture permet de récupérer une valeur via le clavier puis de la stocker dans une variable
;
− l’écriture permet d’afficher à l’écran soit un message, soit le contenu d’une variable, soit les
deux à la fois.

Page 24
Chapitre 2 : Variables, types, instructions élémentaires et expressions

 Un algorithme fonctionne généralement de la façon suivante :


− d’abord, il reçoit des données de l’utilisateur (à l’aide de l’instruction de lecture); − ensuite,
il effectue des traitements sur ces données (à l’aide des opérateurs arithmétiques, des fonctions
mathématiques, des fonctions trigonométriques, et des fonctions de manipulation de chaînes
de caractères),
− et enfin affiche le résultat à l’écran (à l’aide de l’instruction d’affichage). Néanmoins, un
algorithme peut produire des résultats intermédiaires qu’il utilisera pour aboutir au résultat
final.

 Il est conseillé d’écrire des algorithmes "conversationnels" ; c’est-à-dire des


algorithmes qui affichent des messages permettant de faciliter la "communication" entre
l’utilisateur et l’algorithme, via le clavier et l’écran.

POUR S’ENTRAÎNER…

Énoncé 1 : Calcul du cube d’un nombre

Écrire un algorithme qui calcule le cube d’un nombre.

Énoncé 2 : Extraction d’initiales

Écrire un algorithme qui extrait les initiales d’une personne. On suppose que la personne donne
le nom et un seul prénom.

Énoncé 3 : Somme, produit et moyenne

Écrire un algorithme qui calcule la somme, le produit et la moyenne de trois nombres.

Énoncé 4 : Autre expression de la durée

On donne une durée en jours. Écrire un algorithme qui permet d’exprimer cette durée en
années, mois, semaines et jours.
(Par exemple : 433 jours équivalent à une durée de 1 an 2 mois 1 semaine et 1 jour)

Énoncé 5 : Une petite facture d’achat

Page 25
Chapitre 2 : Variables, types, instructions élémentaires et expressions

Écrire un algorithme qui lit le prix HT en francs CFA et la quantité d’un article, et qui retourne
le prix total TTC correspondant, sachant que la TVA vaut 18%. L’algorithme devra afficher
une facture détaillée.

Énoncé 6* : Résultat d’un candidat à un concours

Écrire un algorithme qui affiche le résultat d’un candidat au test d’entrée au cycle d’ingénieur
de l’INSTI, selon les données du tableau ci-dessous :

Matières Analyse Algorithmique Langages Architecture Maths Anglais


Coefficients 8 5 4 4 5 3
Avoir au moins 12,50 de moyenne pour être déclaré admis

Page 26
Chapitre 3 : Les Structures Conditionnelles

CHAPITRE 3

LES STRUCTURES CONDITIONNELLES

Page 27
Chapitre 3 : Les Structures Conditionnelles

Introduction

À la fin du chapitre précédent, on a écrit des algorithmes. Certains résolvent parfaitement le


problème, tandis que d’autres le font imparfaitement à cause des failles qu’ils présentent. Aucun
algorithme n’a été trouvé pour résoudre le dernier problème (Énoncé 6 : Résultat d’un candidat
à un concours, chapitre 2).

Chacun des algorithmes écrits s’exécute de manière séquentielle, c’est-à-dire que les
instructions sont exécutées les unes après les autres, selon leur position dans le corps de
l’algorithme. Tranquillement, de la première instruction à la dernière.

En réalité, la plupart des algorithmes ne sont pas des algorithmes à déroulement séquentiel (ou
algorithmes séquentiels).
Les algorithmes doivent tenir compte de certaines contraintes posées par les problèmes. Ces
contraintes peuvent porter, par exemples, sur l’intervalle des valeurs acceptées, sur des choix à
faire face à plusieurs possibilités, sur des répétitions d’actions ou sur des itérations.

En algorithmique, ces contraintes sont exprimées à l’aide des structures de contrôle.

Une structure de contrôle ou (instruction de contrôle) est une instruction complexe qui
contrôle l’ordre dans lequel les instructions du corps d’un algorithme sont exécutées.

Les instructions de contrôle permettent :

• de prendre des décisions ou d’effectuer des choix dans le traitement réalisé. Par
exemple, dans l’énoncé 6 de la série d’exercices du chapitre précédent, l’algorithme
doit "décider" de l’admission ou de l’échec du candidat selon la moyenne obtenue.

• de répéter plusieurs fois un bloc d’instructions. Par exemple, toujours dans


l’énoncé 6, l’algorithme devrait "contraindre" l’utilisateur à saisir une note correcte
en refusant toute note fantaisiste jusqu’à ce qu’il rentre une note valide.

On dispose donc de deux groupes d’instructions :

• les instructions élémentaires : déclaration, affectation, lecture et écriture ;

• les instructions de contrôle : ce sont des instructions complexes qui agissent sur
l’ordre d’exécution des instructions élémentaires. Elles ont un rôle de structuration de
l’algorithme.

Les instructions de contrôle comprennent :

 les structures conditionnelles pour effectuer des tests ou des choix ;


 les structures répétitives pour effectuer des répétitions ou des itérations.

Ce chapitre traite des structures conditionnelles.

Page 28
Chapitre 3 : Les Structures Conditionnelles

Leçon 1 : Les conditions

1. Définitions

• Une condition est une expression dont le résultat est une valeur booléenne.

• Une condition composée (ou condition complexe) est formée d’au moins deux
conditions simples reliées entre elles par un ou plusieurs opérateurs logiques (ET, OU,
NON).

2. Description

Il existe deux catégories de conditions : les conditions simples et les conditions composées.

2.1. les conditions simples

Une condition simple contient un opérateur de comparaison (=, <, ≤, >, ≥, ≠).

2.2. les conditions composées

Une condition composée relie une ou plusieurs conditions simples en une condition unique à
l’aide des opérateurs logiques.
Exemple : (x > 0) ET (x ≠ 30) est une condition composée ; (x > 0) est une condition simple,
(x ≠ 30) est aussi une condition simple. Ces deux conditions simples sont reliées par l’opérateur
logique ET.

Exercice d’application : Définition d’un intervalle de réels

Soit x un réel, à quelle condition x appartient-il à l’intervalle ]15 ; 35] ?

Leçon 2 : La structure conditionnelle alternative

Les structures conditionnelles permettent à l’algorithme d’effectuer un certain traitement selon


les circonstances (par exemples : selon une saisie ou selon une réponse de l’utilisateur, ou selon
le résultat d’un calcul).

On dispose de trois sortes de structures conditionnelles :


− la structure conditionnelle alternative ;
− la structure conditionnelle simple ;

Page 29
Chapitre 3 : Les Structures Conditionnelles

− la structure de choix.

La structure conditionnelle alternative permet à l’algorithme de "prévoir" deux traitements


différents à effectuer lorsqu’une situation peut se présenter de deux façons différentes. Elle sert
à réaliser un test.

Elle a pour format général :

Si < condition >


Alors < action1 >
Sinon < action2 >
FinSi

Lorsque l’évaluation de la condition produit la valeur


:  Vrai : l’action1 est exécutée ;  Faux :
l’action2 est exécutée.

action1 ou action2 peut être :


− soit une instruction [1] ;
− soit un bloc d’instructions [2] ;
− soit un algorithme [3].

[3] L’action peut être un algorithme. En effet, un algorithme peut exécuter un autre algorithme
comme s’il exécutait une instruction. L’algorithme exécuté est un sous-algorithme. Cette
catégorie d’algorithmes sera étudiée plus tard.

Exercice d’application 1 : Test de parité

Écrire un algorithme permettant de déterminer la parité d’un nombre. On suppose que


l’utilisateur ne saisira que des entiers naturels.

Exercice d’application 2 : Définition d’un intervalle de réels

Écrire un algorithme qui détermine si un x appartient à l’intervalle ]15 ; 35].

Leçon 3 : La structure conditionnelle simple

La structure conditionnelle simple n’effectue de traitement que lorsque l’évaluation de la


condition produit la valeur Vrai. Cette structure ne prévoit aucun traitement lorsque l’évaluation
de la condition produit la valeur Faux.
Cette structure est aussi un test, mais avec un format plus simple :

Page 30
Chapitre 3 : Les Structures Conditionnelles

Si <condition>
Alors <actions>
FinSi

action peut être :


− soit une instruction ;
− soit un bloc d’instructions ;
− soit un algorithme.

Exercice d’application : Résolution d’une équation du premier degré [1ère approche]

Écrire un algorithme qui résout une équation du premier degré dans ℝ.

Page 31
Chapitre 3 : Les Structures Conditionnelles

Leçon 4 : Les structures conditionnelles imbriquées

Selon le problème à résoudre, on peut être amené à poser une ou plusieurs conditions sur une
condition. Dans ce cas, l’une des parties d’une structure conditionnelle renferme une ou
plusieurs autres structures conditionnelles. La structure obtenue est une structure
conditionnelle imbriquée.

Le format d’une structure conditionnelle imbriquée varie selon le problème à traiter. Néanmoins
le format de base est :

Si < condition_1 >


Alors
Si < condition_2 >
Alors < action_1 >
Sinon < action_2 >
FinSi
Sinon
Si < condition_3 >
Alors < action_3 >
Sinon < action_4 >
FinSi
FinSi

Une structure conditionnelle contenue dans une autre peut elle-même contenir une autre
structure conditionnelle.

Il faut bien prendre soin de toujours indiquer la fin de la structure conditionnelle alternative, de
la structure conditionnelle simple et des structures conditionnelles imbriquées à l’aide du mot
réservé FinSi.

Exercice d’application 1 : Décision de fin d’année

La direction d’une école a pris la décision suivante :


 moyenne annuelle supérieure ou égale à 10,00 : l’élève est admis
 moyenne annuelle comprise entre 9,00 et 10,00 : l’élève redouble
 moyenne annuelle strictement inférieure à 9,00 : l’élève est exclu.

Écrire un algorithme qui affiche la décision concernant un élève donné à partir de la saisie de
sa moyenne. On suppose que l’utilisateur ne saisira pas de moyennes fantaisistes.

Exercice d’application 2 : Résolution d’une équation du premier degré [2ème approche]

Écrire un algorithme qui résout une équation du premier degré dans ℝ.

Page 32
Chapitre 3 : Les Structures Conditionnelles

Leçon 5 : La structure de choix

On effectue les tests et les choix à l’aide des structures conditionnelles. Un choix est une
sélection parmi plusieurs possibilités.
On peut présenter chacune des possibilités à l’aide de la structure conditionnelle simple.

Cependant, lorsqu’il y a plus de deux possibilités, la structure de choix facilite l’écriture de


l’algorithme, et favorise sa clarté.

La structure de choix a pour format général :

Suivant < variable > Faire


< valeur1 > : < action1 >
< valeur2 > : < action2 >
< valeur3 > : < action3 >
… : ...
< valeur_n > : <action_n >
Sinon : < action par défaut >
FinSuivant

Comment fonctionne cette structure ?

 d’abord, la valeur de la variable est comparée à chacune des constantes


énumérées (de valeur1 à valeur n) ;

 ensuite, si la valeur de la variable est égale à l’une des constantes, l’action


correspondante est exécutée ;

 cependant, si la valeur de la variable n’est égale à aucune des constantes, une


action par défaut est exécutée.

Si plusieurs valeurs exécutent la même action, on peut regrouper ces valeurs dans une liste de
valeurs séparées par des virgules.
D’où le format plus général :

Suivant < variable > Faire


< (liste1 de) valeurs > : < action1 >
< (liste2 de) valeurs > : < action2 >
< (liste3 de) valeurs > : < action3 >
… : …
< (liste_n de) valeurs > : < action_n >
Sinon : < action par défaut >
FinSuivant

Page 33
Chapitre 3 : Les Structures Conditionnelles

Comme pour la structure conditionnelle alternative et la structure conditionnelle simple, une


action peut être une instruction, un bloc d’instructions ou un algorithme.

Exercice d’application 1 : Intervalles d’âges

On veut écrire un algorithme (pour le service inscriptions d’une école de football) qui intègre
si possible un élève à une catégorie, à la saisie de son année de naissance.
Les catégories selon les tranches d’âge sont les suivantes :
Poussin : de 6 à 7 ans Pupille
: de 8 à 9 ans
Minime : de 10 à 11 ans Cadet
: 12 à 13 ans

Proposer deux algorithmes, l’un utilisant la structure conditionnelle, et l’autre utilisant la


structure de choix.

Exercice d’application 2 : Quel est le menu du jour ?

On veut effectuer l’une ou l’autre des opérations ci-dessous sur trois nombres, à partir d’un
menu :
− additionner ;
− multiplier ;
− rechercher le minimum ;
− rechercher le maximum.

On admettra qu’un menu est une liste d’options affichées à l’écran de l’ordinateur.

TRAVAUX DIRIGÉS

Énoncé 1 : Recherche des racines d’un polynôme du second degré

Proposer un algorithme qui recherche les racines d’un polynôme du second degré dans ℝ.

Énoncé 2 : Résoudre une équation du second degré

Écrire un algorithme qui résout une équation du second degré dans ℝ, en mettant en œuvre la
structure de choix.

Page 34
Chapitre 3 : Les Structures Conditionnelles

Énoncé 3 : Calcul d’aires

Proposer un algorithme qui permet de calculer selon le choix de l’utilisateur :


− l’aire d’un carré ;
− l’aire d’un rectangle ; −
l’aire d’un cercle ;
− l’aire d’une sphère.

On ne se préoccupera ni des unités de mesure de distance ni des unités de mesure d’aire. On


prendra 𝜋𝜋 avec 15 décimales.

Page 35
Chapitre 4 : Les structures répétitives

CHAPITRE 4

LES STRUCTURES RÉPÉTITIVES

Page 36
Chapitre 4 : Les structures répétitives

Introduction

Certains algorithmes du chapitre précédent présentent des failles. La solution à ces failles
consiste à contraindre l’utilisateur à saisir des valeurs appartenant à une plage de valeurs.
En effet, on doit :
− soit lui demander de saisir une nouvelle valeur tant que l’actuelle n’est pas valide,
− soit répéter le refus de toute valeur invalide jusqu’à ce qu’il saisisse une valeur valide.

Les structures répétitives permettent de réaliser de telles contraintes.


Une structure répétitive permet d’exécuter un même bloc d’instructions plusieurs fois de suite.
On la désigne aussi par les termes structure de répétition ou structure itérative ou structure de
boucle ou boucle.

Les structures répétitives sont aussi des structures de contrôle.

Il existe trois sortes de structures répétitives :


− la structure Tant Que ;
− la structure Répéter Jusqu’à (appelée tout simplement structure Répéter) ;
− la structure Pour.

Ces structures jouent presque le même rôle mais elles ne s’utilisent pas de la même façon.

Page 37
Chapitre 4 : Les structures répétitives

Leçon 1 : La structure Tant Que

Elle a pour format général :

TantQue < condition > Faire


< action(s) >
FinTantQue

Comment fonctionne cette structure ?

La structure Tant Que permet d’exécuter une ou plusieurs actions plusieurs fois de suite tant
que la condition spécifiée est vérifiée.

La condition est évaluée avant la première exécution du bloc d’actions définies.


Lorsque l’évaluation de la condition produit la valeur :
 Vrai : le bloc d’actions est exécuté, et la condition est évaluée à nouveau ;
 Faux : aucune action de la boucle Tant Que n’est exécutée, et l’instruction qui vient
immédiatement après FinTantQue est exécutée. (On sort de la boucle.)

Puisque la condition est évaluée avant l’entrée dans la boucle, il peut alors arriver que le bloc
d’actions ne soit pas exécuté. Cela se produit lorsque la première évaluation de la condition
produit la valeur Faux.
Par conséquent, les actions définies dans la boucle Tant Que peuvent être exécutées 0 ou 1 ou
plusieurs fois.
De plus, il faut qu’au moins une variable de l’expression d’évaluation soit susceptible de
modification à l’intérieur de la boucle pour que l’on puisse en sortir.

Si la condition qui régit la boucle ne prend jamais la valeur Faux (donc si la condition prend
toujours la valeur Vrai), les actions seront répétées indéfiniment. On aura alors un cas de
"boucle infinie". (On ne sort jamais de la boucle)
Pour éviter ce genre d’erreur, il faut toujours rechercher la condition d’arrêt de la boucle, et
exprimer sa proposition contraire.

Exercice d’application 1 : Saisie d’un nombre selon un critère

Écrire un algorithme qui demande la saisie d’un entier naturel strictement positif. L’algorithme
valide la saisie si elle est correcte, sinon il invite l’utilisateur à recommencer.

Exercice d’application 2 : Affichage d’un intervalle de nombres selon un critère

Écrire un algorithme qui affiche les entiers naturels de 1 à n, n étant un entier naturel strictement
supérieur à 1, saisi au clavier.

Exercice d’application 3 : Réponse à une question

Page 38
Chapitre 4 : Les structures répétitives

Écrire un algorithme qui permet de saisir la réponse à la question : "Aimez-vous l’algorithmique


(O/N) ?"

Leçon 2 : La structure Répéter

Elle a pour format général :

Répéter
< action(s) >
Jusqu’à < condition >

La structure Répéter permet d’exécuter une ou plusieurs actions plusieurs fois de suite jusqu’à
ce que la condition spécifiée soit vérifiée.

La condition est évaluée après la première exécution du bloc d’actions définies.


Lorsque l’évaluation de la condition produit la valeur :
 Faux : le bloc d’actions est exécuté, et la condition est évaluée à nouveau
 Vrai : aucune action de la boucle Répéter n’est exécutée, et l’instruction qui vient
immédiatement après le mot clé Jusqu’à est exécutée. (On sort de la boucle)

Puisque la condition est évaluée après l’exécution du bloc d’actions définies dans la boucle,
alors le bloc d’actions est exécuté au moins une fois.
Donc les actions définies dans la boucle Répéter seront exécutées une ou plusieurs fois. De
plus, il faut qu’au moins une variable de l’expression d’évaluation soit susceptible de
modification à l’intérieur de la boucle pour qu’on puisse en sortir.

Si la condition qui régit la boucle ne prend jamais la valeur Vrai (donc si la condition prend
toujours la valeur Faux), les actions sont répétées indéfiniment. On aurait alors un cas de
"boucle infinie".
Pour éviter ce genre d’erreurs, il faut toujours rechercher la condition de continuité de la
boucle, et exprimer sa proposition contraire.

Remarque : Comparaison Tant Que / Répéter

La structure Tant Que et la structure Répéter se ressemblent. Mais elles ne doivent être
confondues.
En effet :
 dans la structure Tant Que, la condition exprimée est la condition de continuité ; tandis
que dans la structure Répéter, la condition exprimée est la condition d’arrêt.

 dans la structure Tant Que, la condition est évaluée avant une première exécution du
bloc d’actions définies ; tandis que dans la structure Répéter, la condition est évaluée
après une première exécution du bloc d’actions.

Page 39
Chapitre 4 : Les structures répétitives

 dans la structure Tant Que le bloc d’actions définies peut ne pas être exécuté du tout ;
tandis que dans la structure Répéter, le bloc d’actions définies est exécuté au moins une
fois.

Exercice d’application 1 : Réponse à une question

Écrire un algorithme qui permet de saisir la réponse à la question : "Aimez-vous l’algorithmique


(O/N) ?".

Exercice d’application 2 : Affichage d’un intervalle de nombres selon un critère

Écrire un algorithme qui affiche les entiers naturels de 1 à n, n étant un entier naturel strictement
supérieur à 1, saisi au clavier.

Exercice d’application 3 : Résoudre plusieurs fois une équation du premier degré

Écrire un algorithme qui permet de résoudre une équation du premier degré, autant de fois que
l’utilisateur le souhaite.

Page 40
Chapitre 4 : Les structures répétitives

Leçon 3 : La structure Pour

Elle a pour format général :

Pour < identificateur > ← < valeur initiale > à < valeur finale > [Pas de < incrément >] Faire
< action(s) >
FinPour

Avant d’étudier le fonctionnement de cette structure, il faut savoir que :

 < identificateur > est le nom d’une variable de type entier (déclarée au préalable).

 < valeur initiale > et < valeur finale > sont des constantes ou des variables ou des
expressions du même type que < identificateur >, donc de type entier

 < valeur initiale > et < valeur finale > constituent les bornes de l’intervalle d’entiers
dans lequel < identificateur > va prendre ses valeurs

 Pas de < incrément > est une valeur entière positive ou négative prédéfinie ajoutée à
la valeur de < identificateur > à chaque exécution de < action(s) >. On peut simplement
dire Pas ou incrément

 < action(s) > peut être une instruction, un bloc d’instructions ou un algorithme.

Comment fonctionne la structure Pour ?

La structure Pour permet d'exécuter un bloc d’actions un nombre connu de fois.

< identificateur > reçoit la valeur de < valeur initiale >. La valeur de < identificateur > va
progresser en fonction du pas (c’est-à-dire en fonction de l’incrément) jusqu’à atteindre la
valeur de < valeur finale >. C’est la condition de continuité de la boucle Pour.
Chaque fois que < identificateur > change de valeur et progresse, < action(s) > est exécuté.

Exemples :

• valeur initiale, valeur finale et incrément valent respectivement 1 ; 5 et 1.


< identificateur > progressera de 1 en 1, et prendra les valeurs 1 ; 2 ; 3 ; 4 et 5. <
action(s) > sera exécuté 5 fois.

• valeur initiale, valeur finale et incrément valent respectivement 2 ; 12 et 2.


< identificateur > progressera de 2 en 2, et prendra les valeurs 2 ; 4 ; 6 ; 8 ; 10 et 12. <
action(s) > sera exécuté 6 fois.

• valeur initiale, valeur finale et incrément valent respectivement 5 ; 0 et -1.

Page 41
Chapitre 4 : Les structures répétitives

< identificateur > progressera de -1 en -1, et prendra les valeurs 5 ; 4 ; 3 ; 2 ; 1 et 0. <


action(s) > sera exécuté 6 fois.

• valeur initiale, valeur finale et incrément valent respectivement -10 ; 2 et 2.


< identificateur > progressera de 2 en 2, et prendra les valeurs -10 ; -8 ; -6 ; -4 ; -2 ; 0 et 2. <
action(s) > est exécuté 7 fois.

• valeur initiale, valeur finale et incrément valent respectivement 2; -10 et -2.


< identificateur > progressera de -2 en -2, et prendra les valeurs 2 ; 0 ; -2 ; -4 ; -6 ; -8 et -10. <
action(s) > est exécuté 7 fois.

Cependant :

• Si valeur initiale = valeur finale et incrément = 1, alors le bloc d’actions définies sera
exécuté une seule fois.

• Si valeur initiale > valeur finale et incrément > 0, alors le bloc d’actions définies ne
sera pas exécuté.

• Si valeur initiale < valeur finale et incrément < 0, alors le bloc d’actions définies ne
sera pas exécuté.

La structure Pour s’exécute selon l’algorithme ci-dessous :

1. < identificateur > reçoit la valeur de < valeur initiale >

2. < identificateur > vérifie les conditions de continuité a. Si Vrai :


i. exécuter < action(s) > ii. exécuter < identificateur >
← < identificateur > + < incrément > iii. revenir au point 2
b. Si Faux : sortir de la boucle

Cas particulier : l’incrément vaut 1

Lorsque l’incrément vaut 1, la structure Pour devient :

Pour < identificateur > ← < valeur initiale > à < valeur finale > Faire
< action(s) >
FinPour

Page 42
Chapitre 4 : Les structures répétitives

Exercice d’application 1 : Affichage d’un intervalle de nombres selon un critère

Écrire un algorithme qui affiche les entiers naturels de 1 à n, n étant un entier naturel strictement
supérieur à 1, saisi au clavier.

Exercice d’application 2 : Génération de la table de multiplication de 5

Écrire un algorithme qui génère la table de multiplication de 5.

Exercice d’application 3 : Génération d’une table de multiplication quelconque

Écrire un algorithme qui génère une table de multiplication quelconque.

Page 43
Chapitre 4 : Les structures répétitives

Leçon 4 : Imbrication de structures de contrôle

Selon le problème à résoudre, on peut être amené à imbriquer des structures de contrôle.
En effet, on peut imbriquer :
• les structures conditionnelles entre elles ;
• les structures itératives entre elles ;
• une structure itérative dans une structure conditionnelle ;
• une structure conditionnelle dans une structure itérative ;

Soit l’énoncé ci-dessous :

Exercice d’application : Génération de tables de multiplication

Écrire un algorithme qui génère les dix tables de multiplication.

Page 44
Chapitre 4 : Les structures répétitives

Leçon 5 : Comparaison des structures répétitives

On utilise une boucle pour répéter un bloc d’instructions. Mais quelle boucle choisir ?
L’objectif ici n’est pas de montrer que "telle boucle est mieux que telle autre" mais plutôt
d’abord de mettre en évidence leurs particularités les unes par rapport aux autres, et ensuite de
montrer comment choisir une boucle selon la situation.

On démontre que les boucles Tant Que, Répéter et Pour sont équivalentes.

En effet : la structure Pour définie dans son format général :

Pour (identificateur ← valeur initiale à valeur finale) [Pas de incrément ] Faire


< action(s) >
FinPour

est équivalente à la structure Tant Que :

identificateur ← valeur initiale


TantQue (identificateur ≤ valeur finale) Faire
< action(s) > identificateur ← identificateur + incrément
FinTantQue

La structure Tant Que est elle-même équivalente à la structure Répéter… Jusqu’à :

identificateur ← valeur initiale


Répéter
< action(s) > identificateur ← valeur initiale + incrément
Jusqu’à (identificateur > valeur finale )

En fait, la boucle Pour est une simplification de la boucle Tant Que, tandis que la boucle Répéter
est une "réécriture" de la boucle Pour.
Donc la boucle Tant Que pourrait largement suffire pour la réalisation de toute répétition.

Cependant, selon la situation, une boucle peut être plus adaptée qu’une autre. On
revient alors à la question posée plus haut : quelle boucle choisir ?

Connait-on d’avance le nombre de répétitions ?


►Si Oui alors utiliser la boucle Pour
►Si Non alors s’interroger : "le traitement sera-t-il exécuté au moins une fois ?"
→Si Oui alors utiliser la boucle Répéter
→Si Non alors utiliser la boucle Tant Que

Page 45
Chapitre 4 : Les structures répétitives

POUR S’ENTRAÎNER …

Avec les structures de contrôle (structures conditionnelles et structures itératives), on peut


maintenant écrire des algorithmes de plus en plus "intelligents".

Les exercices proposés dans cette partie (et dans les chapitres suivants) requièrent des
connaissances dans divers domaines, notamment en mathématiques, en comptabilité et en
linguistique. Donc quelques recherches seront utiles.

Pour tous les exercices, il est recommandé d’effectuer si nécessaire ou si possible des
contrôles de saisie.
Pour les exercices traitant des chaînes de caractères, on considérera que les caractères
alphabétiques sont minuscules et non accentués.
On admettra qu’un mot est une chaîne de caractères alphabétiques ayant un sens ou non.

Page 46
Chapitre 4 : Les structures répétitives

Énoncé 1 : De la logique

Pour écrire une boucle, il est recommandé de déterminer sa condition de continuité et sa


condition d’arrêt.
Compléter le tableau ci-dessous :

Conditions d’arrêt Conditions de continuité


X=6
Y < 20
(X = 6) ET (Y < 20)
(X ≠ 6) ET (Y ≤ 5)
(X ≠ 6) OU (Y ≤ 5)
(X ≠ 6) ET (Y ≠ 6)
(X > 0) ET (X < 6)
((X = 6) ET (Y = 6)) OU (Z > 5)

Énoncé 2 : Établissement d’une facture d’achat

Écrire un algorithme qui établit une facture détaillée en fournissant le nombre d’articles
commandés, le montant total HT, le taux de la remise, le montant de la remise, la TVA (la TVA
est de 18 %), le montant de la TVA, et le net à payer, sachant que la remise est accordée dans
les conditions suivantes :
• 0% pour un prix total HT inférieur à 10000 F
• 5% pour un prix total HT supérieur ou égal à 10000 F et inférieur à 20000 F
• 10% pour un prix total HT supérieur ou égal à 20000 F et inférieur à 50000 F
• 15% pour un prix total HT supérieur ou égal à 50000 F

Pour un client donné, la facturière saisit les prix des produits commandés les uns à la suite des
autres sans savoir d’avance le nombre de prix à saisir. On suppose qu’elle ne commet pas
d’erreur de saisie.
L’unité monétaire est le Franc CFA de la BCEAO.

Enoncé 3 : Étude d’un algorithme

1. Que fait l’algorithme ci-dessous ?

Page 47
Chapitre 4 : Les structures répétitives

Algorithme SansNom
Var i : entier
nombre, somme : réel
Début
somme ← 0
Pour (i ← 1 à 4) Faire
écrire ("Donnez un nombre : ")
lire (nombre)
somme ← somme + nombre
FinPour
écrire ("La somme est : ", somme)
Fin

2. Écrire un algorithme qui réalise la même chose, en utilisant à la place de la boucle Pour : a)
la boucle Tant Que
b) la boucle Répéter

3. Proposez un algorithme réalisant la même chose sans utiliser de structure de boucle.

Énoncé 4 : Somme des n premiers entiers naturels

Écrire un algorithme qui calcule la somme des n premiers entiers naturels. On affichera
uniquement le résultat. (On n’utilisera pas de formule relative au suites numériques.)

Énoncé 5 : Génération de nombres

Écrire un algorithme qui génère les dix nombres consécutifs d’un entier naturel donné. (On
n’utilisera pas de formule relative au suites numériques.)

Énoncé 6 : Génération de nombres pairs

Proposer un algorithme qui génère les vingt premiers nombres pairs à partir de 0.

Énoncé 7 : Calcul de la factorielle d’un nombre

Proposer six algorithmes différents pour calculer la factorielle d’un nombre, à raison de deux
algorithmes par structure de boucle.

Énoncé 8 : Une autre façon de multiplier

Écrire un algorithme qui calcule le produit de deux entiers naturels, sans utiliser l’opérateur de
multiplication.

Énoncé 9 : Une autre façon d’élever à la puissance

Page 48
Chapitre 4 : Les structures répétitives

Écrire un algorithme qui calcule xn, x étant un réel et n un entier naturel, sans utiliser l’opérateur
d’élévation à la puissance.

Énoncé 10 : Une autre façon de diviser

Écrire un algorithme qui détermine le quotient et le reste d’une division entière sans utiliser les
opérateurs division entière et modulo.

Énoncé 11 : Recherche des diviseurs d’un nombre

Écrire un algorithme qui recherche les diviseurs d’un entier naturel.

Énoncé 12 : Test de perfection

Écrire un algorithme qui détermine si un nombre est parfait.


Un nombre parfait est un entier naturel qui est la somme de ses diviseurs stricts, c’est-à-dire
hormis lui-même.
Par exemples :
 6 est un nombre parfait car 1 + 2 + 3 = 6
 28 est un nombre parfait car 1 + 2 + 4 + 7 + 14 = 28
 mais 15 n’est pas un nombre parfait car 1 + 3 + 5 = 9

Énoncé 13 : Test de primalité

Un test de primalité est un algorithme qui détermine si un nombre est premier.


Un nombre premier est un entier naturel qui n’admet que deux diviseurs : 1 et lui-même. Par
exemples : 2 ; 5 ; 7 ; 11 ; 13 ; 17 ; 19 ; 21 ; 23 et 29 sont des nombres premiers.

À partir de la définition d’un nombre premier, écrire un algorithme qui effectue un test de
primalité sur un entier naturel saisi au clavier. Proposer des améliorations successives.

Énoncé 14 : Résultat d’un candidat

Écrire un algorithme qui détermine le résultat d’un candidat au test d’entrée au cycle
d’ingénieur de l’INSTI selon les données du tableau ci-dessous :

Matières Analyse Algorithmique Langages Architecture Maths Anglais


Coefficients 8 5 4 4 5 3
Avoir au moins 12,50 de moyenne pour être déclaré admis

Énoncé 15 : Recherche d’une lettre dans un mot

Écrire un algorithme qui recherche une lettre particulière dans un mot.


La recherche cesse dès qu’une occurrence, s’il y en a, de cette lettre est trouvée.

Page 49
Chapitre 4 : Les structures répétitives

Énoncé 16 : Recherche des positions d’une lettre dans un mot

Écrire un algorithme qui détermine les positions d’une lettre dans un mot.

Énoncé 17 : Compter les voyelles d’un mot

Écrire un algorithme qui compte le nombre de voyelles d’un mot.

Énoncé 18 : Test "palindromique"

Écrire un algorithme qui détermine si un mot saisi au clavier est un palindrome.


On admettra qu’un palindrome est un mot dont l’ordre des lettres reste le même quand on le lit
dans un sens ou dans l’autre sans considération des accents.

Par exemples : non, rotor, radar, été, kayak, sas, Laval, Anna.

Énoncé 19 : Conversion d’un entier naturel en un nombre binaire

Écrire un algorithme qui convertit un entier naturel en un nombre binaire.

Énoncé 20* : Statistiques dans la CEDEAO

On considère les PIB des pays de la CEDEAO.


Proposer un algorithme qui permet de :
1. calculer le PIB moyen
2. déterminer le PIB le plus élevé
3. déterminer le PIB le moins élevé
4. effectuer le classement des PIB

Page 50
Chapitre 5 : Les tableaux

CHAPITRE 5

LES TABLEAUX

« Le tableau est une transposition de la réalité. »


Ludwig Wittgenstein

Page 51
Chapitre 5 : Les tableaux

Leçon 1 : Généralités sur les tableaux

Introduction

La résolution du dernier exercice (Statistiques dans la Cedeao) du chapitre précédent nécessite


l’utilisation d’une variable différente des variables habituelles.
En effet, cette nouvelle variable devra permettre de stocker plusieurs données, tandis que les
variables habituelles ne peuvent stocker qu’une seule donnée.
À titre d’illustration, une chaise est destinée à recevoir une seule personne tandis qu’un banc
est destiné à recevoir plusieurs personnes. Alors la chaise est la variable "habituelle", et le banc
est la "nouvelle" variable dont il sera question dans cette partie.

1. Approche descriptive

Les variables "habituelles" sont des variables simples (ou variables scalaires), tandis que les
"nouvelles" variables font partie des structures de données complexes. La "nouvelle" variable
est le tableau.

Le tableau permet de stocker plusieurs données que l’on peut traiter de manière individuelle ou
de manière collective.

Les applications des tableaux sont nombreuses. Par exemples :


− le stockage temporaire de données ; − les
calculs statistiques ;
− le calcul matriciel.

1. Définitions de base

On considère le tableau ci-dessous :

 Un tableau est un graphique constitué de cellules disposées en lignes et en colonnes ;

 Une ligne d’un tableau est constituée de deux segments horizontaux consécutifs ;

 Une colonne d’un tableau est constituée de deux segments verticaux consécutifs ;

 L’intersection d’une colonne et d’une ligne est une case ou une cellule ;

 Le nombre de lignes et le nombre de colonnes constituent la taille de ce tableau ;

 La formule nombre de lignes × nombre de colonnes donne le nombre de cellules ;

Page 52
Chapitre 5 : Les tableaux

 Le nombre de cellules d’un tableau caractérise aussi la taille de ce tableau.

Caractéristiques du tableau de l’exemple :

• 3 lignes ;
• 6 colonnes ;
• taille : 3 lignes et 6 colonnes notée tableau (3 × 6) ;
• d’où taille = 18 cellules.

Le tableau précédent admet une représentation qui ne tient compte que des cellules :

 Un tableau de dimension 1 (ou tableau à une dimension ou tableau unidimensionnel


ou vecteur) est un tableau constitué soit d’une seule ligne et plusieurs colonnes, soit de
plusieurs lignes et une seule colonne. (Dans le premier cas, le tableau est horizontal ;
dans le second cas, le tableau est vertical).

 Un tableau de dimension 2 (ou tableau à deux dimensions ou tableau bidimensionnel)


est un tableau possédant des lignes et des colonnes. Le tableau de l’exemple est de
dimension 2.

 Un tableau est une structure de données linéaire qui permet de stocker des données de
même type. Chaque donnée est repérée par un ou plusieurs indices qui indiquent la
position de la donnée dans le tableau.

 Les données d’un tableau doivent être toutes du même type. C’est ce type commun qui
est attribué au tableau. Donc le type d’un tableau est le type des données qu’il contient.

 Un indice est une variable de type entier qui sert à parcourir un tableau et à repérer une
cellule du tableau.

 Dans un tableau, on stocke une donnée par cellule. Repérer une donnée revient aussi à
repérer la cellule qui la contient.
Dans un tableau à une dimension, le repérage s’effectue à l’aide d’un seul indice, tandis que
dans un tableau à deux dimensions, le repérage s’effectue à l’aide de deux indices. Le tableau
de l’exemple est un tableau à deux dimensions. Chaque cellule est située à l’intersection d’une
ligne et d’une colonne. Donc la cellule est repérée par deux indices :
un indice ligne et un indice colonne.

 Un tableau est une variable particulière. À sa déclaration, il possède :


− un identificateur ;

Page 53
Chapitre 5 : Les tableaux

− un type ;
− un ou plusieurs indice(s).

 L’identificateur d’un tableau est le nom que l’on donne au tableau.

Leçon 2 : Les tableaux à une dimension

1. La déclaration

Avant de déclarer un tableau, il faut d’abord connaître le nombre de données à stocker et leur
type commun. Cette opération permet de préciser son identificateur, son nombre maximal
d’éléments et son type selon la syntaxe :

< nom du tableau > [1 : indice maximal] : tableau de < type de donnée>
ou encore < nom du tableau > [1 .. indice maximal] : tableau de < type de
donnée>  < nom du tableau >

C’est le nom donné au tableau à sa déclaration, c’est-à-dire l’identificateur du tableau.

 [1 : indice maximal]

C’est l’intervalle de valeurs entières strictement positives que prendra la variable représentant
l’indice.
La borne inférieure de cet intervalle vaut toujours 1 à la déclaration du tableau.
La valeur de la borne supérieure (indice maximal) dépend du nombre de données à stocker dans
le tableau. Ce qui signifie que la valeur de l’indice maximal indique le nombre maximal de
données que l’on peut stocker dans un tableau de dimension 1.

Par exemple, si le tableau doit contenir au maximum 15 valeurs, alors indice maximal vaut 15
; d’où la notation [1:15].

 tableau de < type de donnée >

Cette notation indique le type commun des données que contiendra le tableau. Toutes les
données d’un tableau doivent être du même type ou de types compatibles. Le tableau est alors
du même type que les données.
Par exemples :
− si toutes les données sont de type entier, alors le tableau doit être de type entier ;
− si certaines des données sont de type entier et d’autres de type réel, alors le tableau doit être
de type réel ;
− si certaines des données sont de type caractère et d’autres de type chaîne de caractères, alors
le tableau doit être de type chaîne de caractères.

Page 54
Chapitre 5 : Les tableaux

2. La saisie

Cette opération consiste à stocker une valeur dans chacune des cellules du tableau. On dit qu’on
saisit le tableau ou qu’on renseigne le tableau. Cette opération se réalise de deux manières :
− soit on adresse directement les cellules, dans un ordre quelconque ;
− soit on saisit le tableau de manière séquentielle (de la première cellule à la dernière).

 On renseigne le tableau T en adressant directement ses cellules, selon l’instruction :

T [i] ← < valeur > // T[i] désigne la cellule d’indice i, et i varie de 1 à indice maximal

Exemple : On considère le tableau T [1:15] contenant des entiers


T [1] ← -3 // la cellule 1 reçoit la valeur -3 ;
T [8] ← 2015 // la cellule 8 reçoit la valeur 2015.

La saisie peut s’effectuer dans un ordre quelconque. Toutefois, il faut veiller à ne pas faire de
"débordement", c’est-à-dire tenter de renseigner une ou plusieurs cellules qui ne font pas partie
du tableau. Par exemple, les cellules T [16] et T [17] n’existent pas dans le tableau T [1:15].

 On renseigne le tableau T de manière séquentielle, à l’aide de la boucle Pour car elle est
mieux adaptée à cette opération :

Pour (i ← 1 à < indice maximal >) Faire


< instructions >
lire (T [i])
< instructions >
FinPour

Exercice d’application 1 : Calcul de la moyenne d’un vecteur

On considère le PIB de chacun des pays de la CEDEAO. Écrire


un algorithme qui calcule le PIB moyen.

3. L’affichage

Cette opération est similaire à l’affichage du contenu d’une variable scalaire.


Elle consiste à afficher :
− soit le contenu d’une partie du tableau (le contenu d’une ou plusieurs cellules) ;
− soit le contenu de tout le tableau.

Considérons le tableau T [1: indice maximal] :

 On affiche le contenu de la cellule i de T, à l’aide de l’instruction :

Page 55
Chapitre 5 : Les tableaux

écrire (T [i])

 On affiche tout le contenu de T, à l’aide de la syntaxe générale :

Pour (i ← 1 à < indice maximal >) Faire


< instructions >
écrire (T [i])
< instructions >
FinPour

Puisque l’affichage peut être sélectif, c’est-à-dire peut porter sur une partie des données du
tableau, alors il faudrait adapter la condition régissant la structure Pour et les instructions
contenues dans la structure Pour.
Avant d’afficher un tableau, il faut d’abord l’avoir saisi.
Il faudra bien sûr éviter les "débordements" en voulant afficher le contenu de cellules ne faisant
pas partie du tableau.

Remarque

T étant un vecteur, la notation T[i] désigne à la fois :


− la cellule d’indice i ;
− et le contenu de cette cellule.

Exercice d’application 2 : Affichage d’un vecteur

Écrire un algorithme qui édite les PIB des pays de la CEDEAO.

4. Quelques opérations sur les vecteurs

On peut utiliser des vecteurs pour effectuer divers travaux tels que :

 les calculs statistiques


− somme, produit, moyenne arithmétique
− recherche d’extrémum
− tris (tri croissant et tri décroissant)

 des calculs en géométrie analytique


− produit scalaire à partir des coordonnées cartésiennes
− distance entre deux points

 des opérations plus générales


− recherche d’une valeur selon un critère quelconque
− calculs divers

Page 56
Chapitre 5 : Les tableaux

4.1. recherche d’un élément dans un tableau

On recherche un objet qui pourrait être dans l’un des nombreux casiers (ou tiroirs) d’un meuble
disposés les uns après les autres (en ligne ou en colonne).
On ouvre le premier casier, et on y recherche l’objet. S’il y est, on arrête la recherche ; sinon
on continue jusqu’à atteindre le dernier casier.
Il y a deux résultats possibles : soit l’objet y est, soit il n’y est pas.

La méthode rappelle celle utilisée pour rechercher un caractère dans une chaîne de
caractères. La structure Tant Que est appropriée pour cette opération.
Et à propos de chaîne de caractères, une chaîne de caractères est en réalité un tableau
unidimensionnel de type caractère.

Exercice d’application 3 : Recherche d’une valeur dans un vecteur (cas 1)

Écrire un algorithme qui recherche un pays de la CEDEAO ayant le PIB saisi au clavier.

Analyse et méthode

On a besoin de deux vecteurs de taille 15 chacun. Ils seront mis en correspondance tels que
schématisés ci-dessous :

Noms des pays

PIB des pays

L’un des tableaux stocke les noms des pays et l’autre stocke leurs PIB. On les renseigne dans
la même boucle avec le même indice.
On recherche le PIB dans le tableau des PIB. S’il y est, on utilise la valeur de son indice pour
afficher le nom du pays correspondant à ce PIB à partir du tableau des noms de pays. On arrête
la recherche dès que l’on trouve un pays.

Exercice d’application 4 : Recherche d’une valeur dans un vecteur (cas 2)

Écrire un algorithme qui recherche les pays de la CEDEAO ayant le PIB saisi au clavier.

Analyse et méthode

Cet exercice est similaire au précédent à la différence qu’ici on recherche tous les pays ayant
le PIB indiqué. On parcourt alors tout le tableau des PIB. Chaque fois que l’on rencontre une
occurrence du PIB recherché, on affiche le nom du pays correspondant par l’intermédiaire de
la valeur de l’indice de son PIB dans le tableau des PIB.
La structure Pour est la plus appropriée.

Page 57
Chapitre 5 : Les tableaux

Un compteur est nécessaire pour prévoir le cas où le PIB recherché ne figure pas dans le
tableau, et informer l’utilisateur.

Exercice d’application 5 : Recherche de valeurs dans un vecteur

Écrire un algorithme qui recherche les pays de la CEDEAO ayant leurs PIB compris dans un
intervalle donné.

Analyse et méthode

Il faut d’abord, définir l’intervalle de PIB en précisant la borne inférieure et la borne supérieure
puis, s’inspirer de la solution de l’exercice précédent.

4.2. recherche des extrémums d’un tableau

Il s’agit ici de rechercher la plus petite valeur et la plus grande valeur d’un vecteur.

Exercice d’application 6 : Recherche des extrémums d’un vecteur

Écrire un algorithme qui recherche le PIB le plus faible et le PIB le plus élevé de la CEDEAO.

Analyse et méthode

On parcourt le vecteur des PIB pour rechercher les extrémums. Le parcours s’effectue à l’aide
de la boucle Pour. On y met en œuvre deux structures conditionnelles simples, l’une
recherchant le minimum et l’autre le maximum. Parallèlement à cette double recherche, il faut
déterminer, à tout instant, le pays dont le PIB est traité. On a alors besoin d’un indice pays qui
aura pour valeur l’indice de l’extrémum des PIB traité.

4.3. tri d’un vecteur

Un tri est une opération qui permet d’organiser les éléments d’un ensemble fini de données
selon un ordre déterminé ou selon un ensemble de critères.
Donc un algorithme de tri est un algorithme qui permet d’ordonner un tableau homogène
d’éléments selon un ordre fixé.

Les ordres les plus utilisés sont :


− l’ordre numérique (qui porte sur les nombres) ;
− et l’ordre lexicographique (pour traiter des chaînes de caractères).

Les éléments à trier appartiennent à un ensemble E muni d’une relation d’ordre noté ≤ (ou
≥). Un tableau est ordonné (ou trié) s’il existe une relation d’ordre entre ses éléments. Il
existe deux sortes de tri. On parle de :

Page 58
Chapitre 5 : Les tableaux

− tri croissant si la donnée de la cellule d’indice i est inférieure ou égale à la donnée de la


cellule d’indice i + 1 ;
Les données du tableau sont alors rangées dans l’ordre croissant.

− tri décroissant si la donnée de la cellule d’indice i est supérieure ou égale à la donnée de la


cellule d’indice i + 1.
Les données du tableau sont alors rangées dans l’ordre décroissant.

Les algorithmes de tri sont nombreux. Trois algorithmes classiques de tri seront étudiés : le tri
par sélection, le tri à bulles et le tri par insertion.
Ce sont des algorithmes de tri en place, c’est-à-dire que le tri s’effectue sans faire intervenir
un autre tableau mais plutôt une variable scalaire comme variable temporaire.
Donc, au départ, on a un tableau non trié, à la fin du traitement, ce tableau est trié.
Chacun de ces algorithmes sera présenté à partir d’un exemple.
Il est recommandé d’appliquer manuellement la méthode. Cela permet de mieux l’appréhender
et de comprendre l’algorithme qui sera proposé, et même d’en présenter des variantes.

4.3.1. le tri par sélection

Le principe est le suivant :

− d’abord rechercher le plus petit élément du tableau ;


− ensuite le placer dans la première cellule ;
− puis rechercher le second plus petit élément ;
− puis le placer dans la deuxième cellule ;
− et ainsi de suite jusqu’à parcourir tout le tableau.

Chaque fois que l’on déplace le minimum relatif, on procède à un échange de cellule entre le
minimum relatif et l’élément qui occupe la cellule où l’on désire stocker le minimum. De plus,
au fil des échanges de positions, la partie du tableau où la recherche s’effectue "se réduit" car
on n’effectue plus de recherche de minimum "en arrière".

Exemple : tri croissant par recherche des minima successifs sur le tableau ci-dessous :

Le plus petit élément est dans la cellule 3. On le repositionne en cellule 1, et l’élément de cette
cellule vient occuper la cellule 3 :

Après le premier passage, on considère le tableau à partir de sa deuxième cellule. Le plus petit
élément de cette partie se trouve dans la cellule 4 (du tableau de départ). Il y a échange de
cellule avec l’élément occupant la cellule 2. On obtient :

Page 59
Chapitre 5 : Les tableaux

On considère maintenant les trois dernières cellules. Il y a échange de cellules entre les
éléments des cellules 3 et 5 :

On considère maintenant les deux dernières cellules. Il n’y a pas d’échange de cellules entre
les éléments des cellules 4 et 5, car l’ordre est respecté :

Il reste maintenant la dernière cellule, la cellule 5. L’élément de cette cellule est supérieur ou
égal à tous les éléments qui le précèdent dans le tableau, et qui eux-mêmes sont rangés selon
l’ordre fixé. Il n’y aura alors pas d’échange. Donc le tableau final est :

Le tableau est trié lorsque le nombre d’éléments non triés vaut 1.


Considérons les variables : T, un vecteur de n éléments ; i, l’indice de parcours de T ; j, l’indice
relatif de parcours de T ; indmin, l’indice minimal relatif de T ; temp, variable temporaire. Le
bloc d’instructions pour effectuer un tri croissant par recherche des minima successifs :

Pour (i ← 1 à (n - 1)) Faire


indmin ← i
Pour (j ← (i + 1) à n) Faire
Si (T [j] < T [indmin])
Alors indmin ← j
FinSi
FinPour j
Si (i ≠ indmin)
Alors temp ← T [i]
T [i] ← T [indmin]
T [indmin] ← temp
FinSi
FinPour i

On peut aussi effectuer un tri croissant par recherche des maxima successifs.
Le principe est le même que précédemment sauf qu’ici :
− on parcourt le tableau de la dernière cellule à la deuxième
− on recherche le maximum et on le stocke dans la dernière cellule du tableau.

Page 60
Chapitre 5 : Les tableaux

Pour (i ← n à 2) Pas -1 Faire


indmax ← i // indice maximal relatif de T
Pour j ← ((i - 1) à n) Faire
Si (T [j] > T [indmax])
Alors indmax ← j
Fin
FinPour j
Si (i ≠ indmax)
Alors temp ← T [i]
T [i] ← T[indmax]
T[indmax] ← temp
FinSi
FinPour i

On peut aussi effectuer un tri décroissant en s’inspirant de la méthode du tri croissant.


Si l’on procède par :
− recherche des minima successifs, on stocke le minimum à la dernière cellule.
− recherche des maxima successifs, on stocke le maximum à la première cellule.

4.3.2. le tri à bulles

On parcourt le tableau en comparant les éléments deux à deux consécutifs. Lorsque


deux éléments successifs ne sont pas ordonnés, on les échange.

On recommence jusqu’à ce qu’il n’y ait plus d’échange. S’il n’y a pas eu d’échange pendant
un parcours, cela signifie que le tableau est trié. On effectue donc des itérations.
Après le premier passage, le plus grand élément sera placé dans la dernière cellule du tableau,
dans la bonne cellule. Pour le passage suivant, on n’effectue pas de comparaison avec le
dernier élément. Ainsi à chaque passage, le nombre de valeurs à comparer diminue de 1.

Pour savoir qu’il y a eu échange ou pas, on utilise une variable booléenne qui changera de
valeur s’il n’y a pas d’échange.

Exemple : trier la collection d’entiers (5, 1, 4, 2, 0).

Les éléments à comparer sont en gras.

Première étape ou premier passage


(5 1 4 2 0) → (1 5 4 2 0) : on compare 5 et 1, puisque 5 > 1 alors échange
(1 5 4 2 0) → (1 4 5 2 0) : on compare 5 et 4, puisque 5 > 4 alors échange
(1 4 5 2 0) → (1 4 2 5 0) : on compare 5 et 2, puisque 5 > 2 alors échange (1 4 2 5 0) → (1 4 2
0 5) : on compare 5 et 0, puisque 5 > 0 alors échange

Page 61
Chapitre 5 : Les tableaux

Il y a eu au moins un échange, alors on recommence

Deuxième étape ou deuxième passage


(1 4 2 0 5) → (1 4 2 0 5) : puisque 1 < 4 alors pas d’échange
(1 4 2 0 5) → (1 2 4 0 5) : on compare 4 et 2, puisque 4 > 2 alors échange (1
2 4 0 5) → (1 2 0 4 5) : on compare 4 et 0, puisque 4 > 0 alors échange

Il y a eu au moins un échange, alors on recommence

Troisième étape ou troisième passage


(1 2 0 4 5) → (1 2 0 4 5) : puisque 1 < 2 alors pas d’échange (1
2 0 4 5) → (1 0 2 4 5) : puisque 2 > 0 alors échange

Il y a eu au moins un échange, on recommence

Quatrième étape ou quatrième passage


(1 0 2 4 5) → (0 1 2 4 5) : puisque 1 > 0 alors échange

À l’issue de ce passage, le tableau est trié, mais pour le montrer, on effectue un passage de
contrôle. On constate que les éléments sont deux à deux ordonnés, il n’y a alors aucun échange.
On arrête le traitement d’où le résultat : (5, 1, 4, 2, 0) → (0, 1, 2, 4, 5).

Considérons les variables : T, un vecteur de n éléments ; i, l’indice de parcours de T ; temp,


variable temporaire ; echange, variable de type booléen. Le bloc d’instructions pour effectuer
un tri croissant :

echange ← Vrai
TantQue (echange = Vrai)
echange ← Faux
Pour (i ← 1 à n) Faire
Si (T [i] > T [i + 1])
Alors temp ← T [i + i]
T [i + i] ← T [i]
T [i] ← temp
echange ← Vrai
FinSi
FinPour
FinTantQue

Page 62
Chapitre 5 : Les tableaux

4.3.3. le tri par insertion

On parcourt le tableau du début à la fin en insérant chaque élément rencontré (ou élément
courant) à la bonne position sans écraser l’élément stocké à cette position. Le décalage
s’effectue vers la droite jusqu’à trouver le point d’insertion.
Ainsi, tous les éléments qui précèdent l’élément courant sont triés. Pour insérer l’élément
courant à la bonne place, on le compare à ses précédents, puis on décale les éléments afin
d’effectuer l’insertion.

Exemple : trier la collection d’entiers (9, 6, 1, 4, 8).

Au départ, l’élément courant est le deuxième élément de la collection. Pour la suite, l’élément
courant est en gras, et les éléments déjà triés sont soulignés.

Étape 1 : (9 6 1 4 8) → (6 9 1 4 8)

Étape 2 : (6 9 1 4 8) → (1 6 9 4 8)

Étape 3 : (1 6 9 4 8) → (1 4 6 9 8)

Étape 4 : (1 4 6 9 8) → (1 4 6 8 9)

À l’issue de ce passage, le tableau est trié. D’où le résultat : (9, 6, 1, 4, 8) → (1, 4, 6, 8, 9).

Considérons les variables : T, un vecteur de n éléments ; i, l’indice de parcours de T ; j, l’indice


de parcours de la partie non triée de V ; temp, la variable contenant l’élément courant à insérer.

Le bloc d’instructions pour effectuer un tri croissant :

Pour (i ← 2 à n) Faire
temp ← T [i] // mémorisation de l’élément courant (élément à insérer)
// décalage des éléments jusqu’à trouver le point d’insertion
j←i+1
TantQue ((j ≥ 1) ET (T [j] > temp)) Faire
T [i + i] ← T [i]
j←j-1
FinTantQue
T [j + i] ← temp // insertion de l’élément courant à sa place
FinPour

Le bloc d’instructions pour effectuer un tri décroissant :

Page 63
Chapitre 5 : Les tableaux

Pour (i ← 2 à n) Faire
temp ← T [i]
j←i+1
TantQue ((j ≥ 1) ET (T [j] < temp)) Faire
T [i + i] ← T [i]
j←j-1
FinTantQue
T [j + i] ← temp
FinPour

4.4. La recherche d’un élément dans un tableau trié

On dispose de deux méthodes de recherche d’un élément dans un tableau : la recherche


séquentielle et la recherche dichotomique.

 la recherche séquentielle (elle a déjà été présentée)


On recherche une seule occurrence de l’élément. Elle consiste à effectuer la recherche en allant
de la première cellule du tableau à la dernière. La recherche s’arrête lorsque l’élément est trouvé
ou lorsque l’on a atteint la dernière cellule du tableau.

Si le tableau est ordonné (et de grande taille), cette méthode se révèle inefficace. On la
qualifierait même de méthode bestiale.
Lorsque le tableau est trié, on peut considérablement améliorer la recherche en effectuant une
recherche par dichotomie (ou recherche dichotomique).

 la recherche dichotomique
La recherche dichotomique est un procédé itératif au cours duquel, à chaque boucle, on divise
le tableau en deux parties égales ou presque, et on recherche l’élément dans la partie appropriée.

Description de la méthode de la recherche dichotomique sur un tableau ordonné dont


l’indice minimal est borninf, et bornsup l’indice maximal :

1. rechercher l’objet stocké à l’indice médian du tableau (on obtient l’indice médian du tableau
en effectuant le calcul (borninf + bornsup) DIV 2)

2. comparer l’objet recherché et l’objet médian. Trois possibilités se présentent :

a. l’élément recherché est égal à l’objet médian : on arrête la recherche

b. l’élément recherché est supérieur à l’objet médian : s’il existe, l’élément recherché
est stocké dans une cellule de la partie droite du tableau. Appliquer de nouveau le

Page 64
Chapitre 5 : Les tableaux

point 1, borninf change de valeur et vaut indice médian + 1. Ensuite appliquer le


point 2.

c. l’élément recherché est inférieur à l’élément médian : s’il existe, l’élément


recherché est stocké dans une cellule de la partie gauche du tableau. Appliquer de
nouveau le point 1, bornsup change de valeur et vaut indice médian – 1. Ensuite
appliquer le point 2.

ATTENTION : La recherche par dichotomie n’est applicable que sur un tableau trié.

Le bloc d’instructions ci-dessous permet d’effectuer une recherche dichotomique sur le vecteur
T [1:8] rangé dans l’ordre croissant :

borninf ← 1
bornsup ← 8
trouve ← Faux
écrire ("Donnez l’élément à rechercher : ")
lire (valeur)
Répéter
indmedian ← (borninf + bornsup) DIV 2
Si (T [indmedian] = valeur)
Alors trouve ← Vrai
Sinon Si (valeur > T [indmedian])
Alors borninf ← indmedian + 1
Sinon bornsup ← indmedian - 1
FinSi
FinSi
Jusqu’à ((trouve = Vrai) OU (borninf > bornsup))
Si (trouve = Vrai)
Alors écrire ("L’objet ", valeur, " est au rang ", indmedian)
Sinon écrire ("L’objet ", valeur, " n'est pas dans le tableau")
FinSi

Leçon 2 : Les tableaux à deux dimensions

1. La déclaration

Cette opération permet de préciser l’identificateur, le nombre maximal de lignes, le nombre


maximal de colonnes et le type d’un tableau à deux dimensions, selon la syntaxe :

< nom du tableau > [1 : indice ligne maximal, 1 : indice colonne maximal] :
tableau de < type de donnée >

Page 65
Chapitre 5 : Les tableaux

ou encore

< nom du tableau > [1 .. indice ligne maximal, 1 .. indice colonne maximal] :
tableau de < type de donnée >

Exemple : On veut créer le tableau M de 3 lignes et 4 colonnes pour y stocker des réels :
− son nombre minimal de lignes est : 1 ;
− son nombre maximal de lignes est : 3, alors indice ligne maximal = 3 ;
− son nombre minimal de colonnes est : 1 ;
− son nombre maximal de colonnes est : 4, alors indice colonne maximal = 4.

Puisque M est son identificateur, et il contiendra des réels, alors on le déclare par l’instruction
M [1:3,1:4] : tableau de réel ou M [1..3,1..4] : tableau de réel.

2. La saisie

Elle est similaire à celle des vecteurs, à la différence qu’ici la cellule est repérée par deux
indices : l’indice ligne et l’indice colonne.

Par exemple :

Soient les variables de type entier i et j respectivement l’indice ligne et l’indice colonne du
tableau M [1:3,1:4] de type réel : i varie de 1 à 3, tandis que j varie de 1 à 4.

L’opération de remplissage du tableau se réalise de deux manières :


− soit on adresse directement les cellules dans un ordre quelconque ;
− soit on saisit séquentiellement le tableau de la première cellule à la dernière.

 On saisit le contenu d’une cellule de M, à l’aide de l’instruction

M [i, j] ← < valeur >


On aura par exemples :
M [1,1] ← 25 // la cellule située à la ligne 1 colonne 1 reçoit le réel 25 ;
M [3,2] ← 2.5 // la cellule située à la ligne 3 colonne 2 reçoit le réel 2,5.

La saisie peut s’effectuer dans un ordre quelconque. Mais il faut veiller à ne pas faire de
"débordement", c’est-à-dire à donner des positions de cellules qui ne font pas partie du tableau.
Par exemples : les cellules M [4,2] et M [3,5] n’existent pas dans le dans le tableau M [1:3,1:4].
Pourquoi ?

Page 66
Chapitre 5 : Les tableaux

 Si l’on désire saisir le tableau M de manière séquentielle de la première cellule à la


dernière, on imbrique deux boucles Pour.

La boucle principale (boucle extérieure) parcourt le tableau en ligne tandis que la boucle
intérieure parcourt le tableau en colonne.

Le parcours du tableau s’effectue selon le schéma ci-dessous, l’indice ligne i parcourant le


tableau en ligne, tandis que l’indice colonne j parcourant le tableau en colonne :

D’abord i "se positionne" sur la ligne 1 puis "s’y bloque", pendant que sur cette ligne, j parcourt
les colonnes de la première à la dernière. C’est la raison pour laquelle la valeur de i sur la
première ligne ne varie pas tandis que celle de j s’incrémente d’une colonne à une autre.
Ensuite, dès que j atteint la dernière colonne, i passe à la deuxième ligne et "s’y bloque", en
attendant que j parcourt toutes les colonnes à nouveau.
Ainsi de suite jusqu’à ce que i parcourt toutes les lignes.
Voici le bloc d’instructions pour la saisie séquentielle d’un tableau M à deux dimensions :

Pour (i ← 1 à < indice ligne maximal >) Faire


Pour (j ← 1 à < indice colonne maximal >) Faire
< instructions >
lire (M [i, j])
< instructions >
FinPour j
FinPour i

3. L’affichage

Cette opération est similaire à l’affichage du contenu d’un tableau unidimensionnel.


On affiche :
− soit le contenu d’une cellule du tableau ; − soit
le contenu de tout ou partie du tableau.

• Pour afficher le contenu de la cellule de la ligne i et de la colonne j :

Page 67
Chapitre 5 : Les tableaux

écrire (M [i, j])

Pour afficher le contenu de tout le tableau :



Pour (i ← 1 à < indice ligne maximal >) Faire
Pour (j ← 1 à < indice colonne maximal >) Faire
< instructions >
écrire (M [i, j])
< instructions >
FinPour j
FinPour i

Il faudra bien sûr éviter les "débordements".

Remarque

M étant un tableau à deux dimensions, la notation M [i, j] désigne à la fois :


− la cellule située à l’intersection de la ligne i et de la colonne j ;
− et le contenu de cette cellule.

Exercice d’application 1 : Utilisation d’une matrice carrée

Écrire un algorithme qui remplit de réels une matrice carrée d’ordre 3, puis l’affiche.

Analyse et méthode

D’abord, une matrice n’est rien d’autre qu’un tableau de dimension 2 ; elle est donc constituée
de lignes et de colonnes. Ensuite, si le nombre de lignes est égal au nombre de colonnes alors
cette matrice est carrée. Et enfin, l’ordre indique le nombre de lignes (ou de colonnes).

On doit donc d’abord déclarer un tableau de 3 lignes et 3 colonnes de réels, ensuite le remplir
et enfin l’afficher. Il est plus commode de renseigner le tableau de manière séquentielle. On
imbrique alors deux structures Pour.

La difficulté réside au niveau de la façon de guider l’utilisateur lors de la saisie.


En effet, il faut lui indiquer la position de la cellule active (c’est-à-dire celle qui va recevoir la
donnée), dans une imbrication de boucle Pour, à l’aide de l’indice ligne et de l’indice colonne.

Algorithme SaisirMatrice_AfficherMatrice
Var T[1:3,1:3] : tableau de réel
i, j : entier
Début
écrire ("Saisie et affichage d’une matrice carrée d’ordre 3")
écrire ("Saisie des éléments…")
Pour (i ← 1 à 3) Faire

Page 68
Chapitre 5 : Les tableaux

Pour (j ← 1 à 3) Faire
écrire ("Donnez l’élément de la ligne ", i, " colonne ", j, " : ")
lire (T [i,j])
FinPour j
FinPour i
écrire ("Saisie terminée !")
écrire ("Vous avez saisi…")
Pour (i ← 1 à 3) Faire
Pour (j ← 1 à 3) Faire
écrire (T [i,j])
FinPour j
FinPour i
Fin

Remarque

Puisque la saisie du tableau s’effectue "ligne par ligne", pour la saisie des éléments de la
matrice, on pourrait aussi écrire :

écrire ("Saisie des éléments de la ligne ", i)


Pour (j ← 1 à 3) Faire
écrire ("Donnez l’élément de la colonne ", j, " : ")
lire (T [i,j])
FinPour j
FinPour i

Pour (i ← 1 à 3) Faire

Exercice d’application 2 : Somme de deux matrices carrées

Écrire un algorithme qui effectue la somme de deux matrices carrées d’ordre 3 de réels.

Analyse et méthode

La somme de deux matrices carrées d’ordre n est une matrice carrée d’ordre n.
Alors, il faut déclarer trois matrices carrées de même taille.

Page 69
Chapitre 5 : Les tableaux

Soient :
 A et B, les matrices opérandes, et S la matrice résultat ;
 i et j respectivement l’indice ligne et l’indice colonne qui serviront à parcourir chacune
des matrices.

Comment procéder ?
− d’abord renseigner les tableaux A et B (l’un après l’autre !) ;
− ensuite additionner les contenus des cellules de même position puis stocker le résultat à la
même position dans S. On aura par exemple : S [2,3] ← A [2,3] + B [2,3] ;
− et enfin afficher S.

EN RÉSUMÉ…

• Un tableau est une structure de données linéaire qui permet de stocker un ensemble de
données du même type, et de les manipuler collectivement ou individuellement.

• Les tableaux ont de nombreuses applications. En effet, on les utilise notamment pour
réaliser des calculs statistiques (somme, produit, moyennes, écart-type, recherche
d’extremum, tris) et plus généralement en mathématiques (statistiques, analyse, calcul
matriciel, produit scalaire, résolution de systèmes d’équations, géométrie euclidienne,
géométrie de l’espace).

• Si la résolution d’un problème nécessite l’utilisation d’un tableau, l’approche du


problème guidera le choix du nombre de dimensions et de la taille de chacune des
dimensions de ce tableau.

• Selon la dimension d’un tableau, chacune de ses cellules est repérée par un ou plusieurs
indices.

 Il existe des tableaux de dimension supérieure ou égale à deux : ce sont les tableaux
multidimensionnels. Dans ces tableaux, toute cellule est repérée par au moins deux
indices.
Exemple : Soit E est un tableau à trois dimensions de tailles respectives 3, 4 et 5. E contient
des réels. On déclare E par l’instruction : E [1:3, 1:4, 1:5] : tableau de réel. Toute cellule de E
est repérée par trois indices.

 Toutes les opérations réalisées sur les tableaux unidimensionnels peuvent l’être sur
aussi les tableaux multidimensionnels.

EXERCICES D’ENTRAINEMENT

Statistiques et tri d’un tableau

Page 70
Chapitre 5 : Les tableaux

Énoncé 1 : Travaux statistiques

Écrire un algorithme qui réalise les tâches ci-dessous :


− saisir 10 nombres strictement positifs ;
− déterminer la somme, le produit, la moyenne et les extrema de ces nombres ;
− classer ces nombres dans l’ordre décroissant.

Fusion de tableaux

Énoncé 2 : Fusion de deux tableaux

On considère deux tableaux A et B tels que :  A est


de dimension 1 et contient 10 nombres ;  B est de
dimension 1 et contient 10 mots.
Écrire un algorithme qui fusionne les tableaux A et B en un tableau C.

Énoncé 3 : Fusion de deux tableaux sans tri

On considère deux tableaux A et B tels que :


 A est de dimension 1 et contient 4 réels ;
 B est de dimension 1 et contient 6 entiers.
Écrire un algorithme qui fusionne les tableaux A et B en un tableau C.

Énoncé 4 : Fusion de deux tableaux avec tri

On considère deux tableaux A et B :


 A est de dimension 1 et contient 4 nombres triés dans l’ordre croissant lors de la saisie ;  B
est de dimension 1 et contient 6 nombres triés dans l’ordre croissant lors de la saisie. Écrire un
algorithme qui fusionne les tableaux A et B en un tableau C trié.

Calculs matriciels (voir cours de mathématiques)

Énoncé 5 : Produit scalaire de deux vecteurs

Écrire un algorithme qui calcule le produit scalaire de deux vecteurs de taille 3.

Énoncé 6 : Produit d’une matrice carrée par un vecteur

Écrire un algorithme qui effectue le produit d’une matrice carrée d’ordre 3 par un vecteur de
taille 3.
Énoncé 7 : Produit de deux matrices quelconques

Page 71
Chapitre 5 : Les tableaux

Écrire un algorithme qui effectue le produit de deux matrices quelconques.

Énoncé 8 : Produit de deux matrices carrées

Écrire un algorithme qui effectue le produit de deux matrices carrées.

Énoncé 9 : Déterminant d’une matrice carrée d’ordre 3

Écrire un algorithme qui calcule le déterminant d’une matrice carrée d’ordre 3.

Situation de gestion

Énoncé 10 : Bilan d’une opération immobilière

La société immobilière Cases d’Eburnie, dans le cadre de son projet Habitat 2025, met à
la disposition du public 3 modèles de maisons dont la vente est assurée par 4 vendeurs.
Pour la gestion des ventes, on utilise un tableau qui regroupe les informations ci-dessous :
− le nombre de maisons vendues par modèle et par chaque vendeur ;
− le total de maisons vendues par modèle ;
− le prix de vente de chaque modèle de maison ;
− le chiffre d’affaires (CA) réalisé sur chaque modèle de maison ;

Écrire un algorithme qui réalise les tâches ci-dessous :


1. calculer le nombre de maisons vendues par modèle ;
2. déterminer le chiffre d’affaires réalisé par modèle de maison ;
3. calculer le chiffre d’affaires de l’opération immobilière à un instant donné.

Page 72
Chapitre 6 : Les sous-algorithmes

CHAPITRE 6

LES SOUS-ALGORITHMES

Page 73
Chapitre 6 : Les sous-algorithmes

Leçon 1 : Généralités sur les algorithmes modulaires

1. Exemple introductif

On veut déterminer le minimum et le maximum d’un ensemble de trois nombres, et suivant


l’ordre de saisie de ces nombres, résoudre l’équation du premier degré associée au premier
couple de nombres, et rechercher les racines du polynôme du second degré associé à ce triplet.

Solution

Algorithme MultiTaches
Var a, b, c, min, max, delta, sol1, sol2 : réel
Début
écrire ("Un peu de maths") écrire
("Saisie des nombres") écrire ("Donnez le
premier nombre : ")
lire (a)
écrire ("Donnez le deuxième nombre : ")
lire (b)
écrire ("Donnez le troisième nombre : ")
lire (c)
écrire ("Résultats des différents traitements")
écrire ("Recherche du minimum des nombres", a, ",", b, " et ", c)
min ← a
Si b < min
Alors min ← b
FinSi
Si c < min
Alors min ← c
FinSi
écrire ("Le minimum est ", min)
écrire ("Recherche du maximum des nombres", a, ",", b, " et ", c)
max ← a

Page 74
Chapitre 6 : Les sous-algorithmes

Si b > max
Alors max ← b
FinSi
Si c > max
Alors max ← c
FinSi
écrire ("Le maximum est ", max)
écrire ("Résolution de l’équation ", a, "x + ", b, " = 0")
Si (a = 0)
Alors Si (b = 0)
Alors écrire ("L’ensemble des solutions est R")
Sinon écrire ("L’ensemble des solutions est l’ensemble vide")
FinSi
Sinon écrire ("La solution est ", (-b/a))
FinSi

écrire ("Recherche des racines de l’équation ", a, "x² + ", b, "x + ", c, " = 0")
Si (a = 0)
Alors Si (b = 0)
Alors Si (c = 0)
Alors écrire ("Infinité de solutions")
Sinon écrire ("Pas de solution")
FinSi
Sinon écrire ("Une solution unique : ", -c/b)
FinSi
Sinon delta ← b*b – 4*a*c
Si (delta < 0)
Alors écrire ("Pas de solution")
Sinon Si (delta = 0)
Alors écrire ("Une solution unique : ", -b/(2*a))
Sinon écrire ("Deux solutions distinctes")
écrire ("Première solution : ", (-b - delta^0.5) / (2*a))
écrire ("Seconde solution : ", (-b + delta^0.5) / (2*a))
FinSi
FinSi
FinSi
Fin

1.1. Quelques commentaires

On peut émettre trois remarques au sujet de cet algorithme :


− il est long (au moins une page) ;
− il contient des traitements similaires (par exemple : la recherche des racines d’un
polynôme du second degré inclut la résolution d’une équation du premier degré) ;
− il est peut être difficile à comprendre vu sa longueur.

Page 75
Chapitre 6 : Les sous-algorithmes

1.2. Une autre façon d’écrire les algorithmes

On écrit un bloc d’une ou plusieurs instructions pour réaliser une tâche précise (par exemples :
rechercher les racines d’une équation, afficher un menu, calculer le carré d’un nombre). Ce
bloc d’instructions effectue donc un traitement particulier, et constitue un module.

Un algorithme peut alors regrouper plusieurs modules. S’il est écrit d’un seul tenant, il pourrait
être difficile à comprendre, dès qu’il dépasse (ou même avoisine) une ou deux pages. Il serait
alors intéressant de le décomposer en modules.

Chaque module constitue alors un sous-algorithme.


Un sous-algorithme étant d’abord un algorithme, alors il en possède les caractéristiques. Bien
qu’autonome, il est cependant exécuté (ou activé) par un autre algorithme.

Décomposer un algorithme en modules revient à écrire un algorithme modulaire.

1.3. Ébauche de la solution selon le nouveau concept

L’algorithme à écrire doit effectuer les tâches ci-dessous :


− rechercher le minimum de trois nombres ;
− rechercher le maximum de trois nombres ;
− résoudre une équation du premier degré ;
− rechercher les racines d’un polynôme du second degré.

Chaque tâche constitue un sous-algorithme.


Puisque chaque sous-algorithme a un nom, alors il peut être appelé et exécuté (par un autre
algorithme) comme une action simple (ou comme une instruction élémentaire). On dit qu’un
tel algorithme est une action nommée.

On a quatre sous-algorithmes, dans l’ordre : minimum, maximum, premierDegre et


secondDegre. On pourrait en créer plus, mais il faudrait en montrer la pertinence. Voici
une esquisse de la solution :

Algorithme EssaiAlgoModulaire
Var nbre1, nbre2, nbre3, min, max, delta, sol1, sol2 : réel
Début
écrire ("Un peu de maths")
écrire ("Saisie des nombres à traiter")
écrire ("Donnez le premier nombre : ")
lire (nbre1)
écrire ("Donnez le deuxième nombre : ")
lire (nbre2)
écrire ("Donnez le troisième nombre : ")
lire (nbre3)

Page 76
Chapitre 6 : Les sous-algorithmes

écrire ("Résultats des différents traitements")


minimum
maximum
premierDegre
secondDegre
Fin

2. Pourquoi écrire des algorithmes modulaires ?

Écrire un algorithme modulaire offre de nombreux avantages. Notamment :


− la rapidité dans l’écriture des algorithmes complexes ;
− la suppression des séquences d’instructions répétitives ;
− la brièveté et la lisibilité de l’algorithme final ;
− la facilité des opérations de mise à jour ou de maintenance.

2.1. La rapidité dans l’écriture des algorithmes complexes

Lorsque l’on décompose un problème en plusieurs sous-problèmes, chaque sous-problème


constitue une unité logique de traitement. Dès lors, on obtient rapidement une esquisse de la
solution.

2.2. La suppression des séquences d’instructions répétitives

Si dans l’algorithme des séquences d’instructions se répètent, il faut les regrouper en un ou


plusieurs modules.
Par exemple, si dans un même algorithme, on doit résoudre plusieurs équations du second degré,
on n’écrira pas autant de fois les instructions permettant de résoudre une équation du second
degré. On regroupera les instructions de ce traitement dans un module qui sera activé chaque
fois que cela s’avèrera nécessaire.
Donc ce regroupement permet de supprimer des séquences d’instructions répétitives.

2.3. La brièveté et la lisibilité de l’algorithme final

Pour chaque unité logique de traitement, on écrit les instructions qui lui permettent de réaliser
la tâche pour laquelle elle a été créée. On obtient ainsi les différents modules dont l’assemblage
aboutit à l’algorithme final.
Cet algorithme final est court, lisible et compréhensible.

2.4. La facilité des opérations de mise à jour ou de maintenance

Il est plus facile de corriger ou de modifier un algorithme modulaire. En effet, on sait exactement
à quels endroits (dans l’algorithme final ou dans l’un des modules) il faut apporter les
corrections ou les modifications.

Page 77
Chapitre 6 : Les sous-algorithmes

3. Quelques termes du vocabulaire associé aux algorithmes modulaires

 Un sous-algorithme (ou module ou action nommée) est un algorithme utilisé


par un autre algorithme pour réaliser une tâche précise.

 Un algorithme qui appelle (ou exécute ou active ou utilise) un sous-algorithme


est un algorithme appelant ; et le sous-algorithme est un algorithme appelé.
Un sous-algorithme peut lui aussi appeler un ou plusieurs autres sous-algorithmes. Un
sous-algorithme peut être appelé par plusieurs autres sous-algorithmes.

 L’algorithme qui regroupe et décrit l’enchaînement de tous les sous-algorithmes


(nécessaires à la résolution d’un problème) est appelé algorithme principal.

 Une variable déclarée dans l’algorithme principal est une variable globale. Elle
peut être utilisée dans l’algorithme principal et dans tout sous-algorithme de
l’algorithme principal.

 Une variable déclarée dans un sous-algorithme est une variable locale. Elle ne
peut être utilisée que dans ce sous-algorithme.

 Il y a deux sortes de sous-algorithmes : les procédures et les fonctions.

Généralement lorsqu’un algorithme appelle un sous-algorithme, il lui transmet les données


permettant (au sous-algorithme) de réaliser la tâche pour laquelle il a été appelé. En retour, le
sous-algorithme peut mettre à la disposition de l’algorithme appelant le résultat de sa tâche.
Cette communication se fait par l’intermédiaire de paramètres.

 Un paramètre (ou argument) est une variable qui permet la transmission de


données entre un algorithme appelant et un sous-algorithme.

 Un paramètre effectif (ou paramètre réel) est une variable contenant une valeur
pour laquelle un sous-algorithme s’exécute.

 Un paramètre formel est une variable qui reçoit la valeur du paramètre effectif
transmise à l’appel d’un sous-algorithme.

4. Méthode d’écriture d’un algorithme modulaire

Pour écrire un algorithme modulaire, il faut :

• d’abord, décomposer le problème en sous-problèmes ;

Page 78
Chapitre 6 : Les sous-algorithmes

• ensuite spécifier :
− les sous-algorithmes associés aux sous-problèmes ;
− l’algorithme principal ;
− les variables globales ;
− les variables locales ;
− les constantes

• puis, écrire l’algorithme principal ;

• et enfin, écrire les sous-algorithmes sous la forme de procédure ou de fonction


selon le cas à traiter.

Les algorithmes modulaires mettent en œuvre des procédures et des fonctions.


Qu’est-ce qu’une procédure ? Qu’est-ce qu’une fonction ? Comment les utilise-t-on ? Qu’est-
ce qui les différencie ?

Les leçons suivantes permettront de trouver les réponses à ces questions.

Page 79
Chapitre 6 : Les sous-algorithmes

Leçon 2 : Les procédures

1. Définition

Une procédure est un sous-algorithme auquel est associée une liste de paramètres. Cette
liste de paramètres peut être vide.

2. La déclaration d’une procédure

Une procédure étant un objet algorithmique, on la déclare avant de l’utiliser.


On déclare une procédure en mentionnant son en-tête dans la zone de déclarations de
l’algorithme principal selon la syntaxe ci-dessous :

Procédure <nom de la procédure> (liste des paramètres formels avec leurs types respectifs)

3. La description d’une procédure

La description (ou écriture ou définition) d’une procédure se fait hors des limites de
l’algorithme appelant selon la syntaxe générale ci-dessous :

Procédure < nomProcédure > (liste des paramètres formels : type des paramètres) Const
< identificateurs des constantes > ← < valeurs des constantes > Var
< identificateurs des variables locales > : < types des variables locales >
Début Fin
< instruction(s) ou action(s) >

Dans l’en-tête d’une procédure, on indique obligatoirement les types des paramètres.

4. L’appel d’une procédure

L’appel d’une procédure est l’exécution de cette procédure par un algorithme appelant comme
si ce dernier exécutait une instruction.
On appelle une procédure par son nom, et cet appel s’effectue dans le corps de l’algorithme
appelant selon la syntaxe suivante :

<nomProcédure> (<liste des paramètres réels>)

Dans le corps de l’algorithme appelant, le nom d’une procédure doit être toujours souligné.
L’appel d’une procédure déclenche immédiatement l’exécution des instructions de cette
procédure. Ce qui signifie que si la procédure n’a pas été décrite préalablement, son appel ne
déclenchera aucun traitement.
De plus, lors de son appel, la procédure doit recevoir tous les paramètres dont elle a besoin.

Page 80
Chapitre 6 : Les sous-algorithmes

5. Le passage de paramètres

Lorsqu’un algorithme appelle une procédure, il lui transmet des paramètres : on dit qu’il y a
passage de paramètres (ou transmission de paramètres).
L’utilisation d’une procédure nécessite la connaissance obligatoire de l’ordre des paramètres
formels au lieu de la connaissance de leurs noms.
Il y a deux points de vue pour le passage de paramètres : celui de l’algorithme appelant et celui
de la procédure. En effet :

• du côté de l’algorithme appelant, les valeurs transmises sont les


paramètres effectifs ;

• du côté de la procédure, les variables sont des paramètres formels ;

• à l’appel de la procédure :
− d’abord, la liste des paramètres effectifs est mise en correspondance (ou en
synchronisation) avec la liste des paramètres formels ;
− ensuite, la valeur stockée dans chaque paramètre effectif est copiée dans le
paramètre formel lui correspondant.
La mise en correspondance des paramètres a un double rôle :
− vérifier qu’il y a autant de paramètres effectifs que de paramètres formels ;
− vérifier que tout paramètre effectif est du même type que le paramètre formel avec
lequel il est mis en relation.

• Le mode de transmission entre ces deux contextes est la transmission par


valeur. En effet, lors de la transmission de paramètres, ce sont des nombres, des
caractères, des chaînes de caractères, des booléens qui sont envoyés.

• Lorsqu’une procédure a terminé sa tâche, le déroulement de l’algorithme


appelant reprend à l’instruction qui succède à l’appel de la procédure.

• Les résultats obtenus par une procédure sont exploitables par l’algorithme
appelant par l’intermédiaire des variables globales.

6. Applications

Exercice d’application 1 : Premier algorithme modulaire

On reprend l’exercice de l’exemple introductif :


On veut déterminer le minimum et le maximum d’une série de trois nombres, et suivant l’ordre
de saisie des nombres, résoudre une équation du premier degré et rechercher les racines d’un
polynôme du second degré.

Page 81
Chapitre 6 : Les sous-algorithmes

Proposez un algorithme modulaire pour la résolution de ce problème.

Analyse et méthode

On reprend l’analyse qui a été faite, et on l’adapte à la notion de procédure.

• Au sujet des procédures et de l’algorithme principal

On a retenu quatre sous-algorithmes : minimum, maximum, premierDegre et secondDegre.

On sait que rechercher les racines d’un polynôme du second degré conduit :
− soit à résoudre une équation du second degré (si le premier coefficient du polynôme est
non nul) ;
− soit à résoudre une équation du premier degré (si le premier coefficient du polynôme est
nul).

On a alors besoin d’un autre sous-algorithme qui aura pour tâche d’appeler secondDegre ou
premierDegre selon la valeur du premier coefficient. Soit rechercherRacines ce
sousalgorithme.

On a maintenant cinq sous-algorithmes : minimum, maximum, premierDegre, secondDegre et


rechercherRacines.

L’algorithme principal récupère de l’utilisateur trois nombres qu’il va transmettre à chacun des
sous-algorithmes.

Le sous-algorithme minimum a pour rôle de rechercher le minimum de ces nombres. Ces


nombres lui sont transmis via ses paramètres formels. Puisque le sous-algorithme minimum
reçoit trois nombres réels, alors il a besoin de trois paramètres formels de type réel. D’où son
en-entête complet : Procédure minimum (x : réel, y : réel, z : réel).

Le sous-algorithme maximum a pour rôle de rechercher le maximum de ces nombres. Ces


nombres lui sont transmis via ses paramètres formels. Puisque le sous-algorithme maximum
reçoit trois nombres réels, alors il a besoin de trois paramètres formels de type réel. D’où son
en-entête complet : Procédure maximum (x : réel, y : réel, z : réel).

Le sous-algorithme premierDegre a pour rôle de résoudre une équation du premier degré. Les
coefficients de l’équation doivent lui être fournis par l’algorithme principal ou par le
sousalgorithme rechercherRacines. Ces coefficients lui sont transmis via ses paramètres
formels. Puisque le sous-algorithme premierDegre reçoit deux nombres réels, alors il a besoin
de deux paramètres formels de type réel.
D’où son en-entête complet : Procédure premierDegre (p : réel, q : réel).

Le sous-algorithme secondDegre a pour rôle de résoudre une équation du second degré. Les
coefficients de l’équation doivent lui être fournis par le sous-algorithme rechercheRacines. Ces
coefficients lui sont transmis via ses paramètres formels. Puisque le sous-algorithme

Page 82
Chapitre 6 : Les sous-algorithmes

secondDegre reçoit trois nombres réels, alors il a besoin de trois paramètres formels de type
réel. D’où son en-entête complet : Procédure secondDegre (p : réel, q : réel, r : réel).

Le sous-algorithme rechercherRacine a pour rôle de rechercher les racines d’un polynôme du


second degré. Les coefficients du polynôme doivent lui être fournis par l’algorithme principal.
Ces coefficients lui sont transmis via ses paramètres formels. Puisque le sous-algorithme
rechercheRacines reçoit trois nombres réels, alors il lui faut trois paramètres formels de type
réel. D’où son en-entête complet : Procédure rechercherRacines (e : réel, f : réel, g : réel). Ce
sous-algorithme appelle l’un des sous-algorithmes secondDegre et premierDegre selon la
valeur du premier coefficient du polynôme.

L’en-tête de l’algorithme principal est Algorithme principal AlgoModulaire, AlgoModulaire


étant son identificateur. Toutes les procédures présentées plus haut doivent être regroupées dans
l’algorithme principal qui gèrera leur enchainement.

• Au sujet des variables

L’algorithme principal récupère de l’utilisateur trois nombres qu’il transmet à chacun des
sousalgorithmes. Ces nombres sont stockés dans des variables déclarées dans l’algorithme
principal.
Ces variables sont donc des variables globales.
Les variables nbre1, nbre2 et nbre3 sont alors des variables globales de type réel.

Il est plus intéressant de déclarer les variables min, max, delta, sol1 et sol2 dans les procédures
où elles seront nécessaires. Ce sont alors des variables locales.

D’où l’algorithme final :

Algorithme AlgoModulaire //
déclaration des procédures
Procédure minimum (x : réel, y : réel, z : réel)
maximum (x : réel, y : réel, z : réel)
premierDegre (p : réel, q : réel) secondDegre
(p : réel, q : réel, r : réel) rechercherRacines
(e : réel, f : réel, g : réel)
// déclaration des variables globales
Var nbre1, nbre2, nbre3 : réel Début
écrire ("Un peu de maths") écrire
("Saisie des nombres…")
écrire ("Donnez le premier nombre : ")
lire (nbre1)
écrire ("Donnez le deuxième nombre : ")
lire (nbre2)
écrire ("Donnez le troisième nombre : ")
lire (nbre3)
écrire ("Résultats des différents traitements")

Page 83
Chapitre 6 : Les sous-algorithmes

// appel des procédures


minimum (nbre1, nbre2, nbre3) maximum
(nbre1, nbre2, nbre3)
premierDegre (nbre1, nbre2)
rechercherRacines (nbre1, nbre2, nbre3)
Fin

// description des différentes procédures

Procédure minimum (x : réel, y : réel, z : réel)


Var min : réel // déclaration d’une variable locale
Début
écrire ("Recherche du minimum des nombres", x, ",", y, " et ", z)
min ← x Si y < min
Alors min ← y
FinSi
Si z < min
Alors min ← z
FinSi
écrire ("Le minimum est ", min)
Fin

Procédure maximum (x : réel, y : réel, z : réel)


Var max : réel // déclaration d’une variable locale
Début
écrire ("Recherche du maximum des nombres", x, ",", y, " et ", z)
max ← x Si y > max
Alors max ← y
FinSi
Si z > max
Alors max ← z
FinSi
écrire ("Le maximum est ", max)
Fin

Procédure premierDegre (p : réel, q : réel)


Début
écrire ("Résolution de l’équation ", p, "x + ", q, " = 0")
Si (p = 0)
Alors Si (q = 0)
Alors écrire ("L’ensemble des solutions est R")
Sinon écrire ("L’ensemble des solutions est l’ensemble vide")

Page 84
Chapitre 6 : Les sous-algorithmes

FinSi
Sinon écrire ("La solution est ", (-q/p))
FinSi
Fin

Procédure rechercherRacines (e : réel, f : réel, g : réel) Début écrire


("Recherche des racines du polynôme ", e, "x² + ", f, "x + ", g)
Si (e = 0)
Alors premierDegre (f, g) // appel d’une procédure par une procédure
Sinon secondDegre (e, f, g) // appel d’une procédure par une procédure
FinSi
Fin

Procédure secondDegre (p : réel, q : réel, r : réel)


Var delta, sol1, sol2 : réel // déclaration de variables locales
Début
delta ← q*q – 4*p*r Si
(delta < 0)
Alors écrire ("Aucune racine réelle")
Sinon Si (delta = 0)
Alors écrire ("Une racine double : ", (-q/(2*p)))
Sinon sol1 ← (-q - delta^0.5) / (2*p)
sol2 ← (-q + delta^0.5) / (2*p) écrire ("Deux
racines réelles distinctes) écrire ("Première
racine : ", sol1)
écrire ("Deuxième racine : ", sol2)
FinSi
FinSi
Fin

Remarques

1. Appel direct et appel indirect d’une procédure


Les procédures minimum, maximum, premierDegre, et rechercherRacines sont directement
appelées par l’algorithme principal.
La procédure secondDegre n’est jamais appelée par l’algorithme principal, elle est plutôt
appelée par la procédure rechercherRacine. Donc l’algorithme principal appelle indirectement
la procédure secondDegre.

2. Nommage des paramètres et transmission de paramètres


Pour éviter toute confusion, les paramètres effectifs et les paramètres formels ne sont pas
désignés par les mêmes identificateurs. Seuls le critère d’ordre des paramètres et les critères
de correspondance des paramètres sont importants.

Page 85
Chapitre 6 : Les sous-algorithmes

Pour illustrer cela, observons le passage de paramètres entre l’algorithme principal et la


procédure rechercherRacine.
L’algorithme principal transmet trois nombres réels, dans un certain ordre, à la procédure
rechercherRacine. Il le fait via trois paramètres effectifs qui sont les variables de type réel
nbre1, nbre2 et nbre3.
La procédure rechercherRacine a besoin de trois nombres réels pour exécuter sa tâche. La
procédure rechercherRacine reçoit, dans le même ordre ces nombres via ses paramètres formels
qui sont les variables de type réels e, f et g.

Pour que la transmission se réalise correctement, il faut que :

 nbre1 et e soient du même type, nbre2 et f soient du même type, et, nbre3
et g soient du même type ;

 la valeur stockée dans nbre1 soit copiée dans e, la valeur stockée dans
nbre2 soit copiée dans f, et, la valeur stockée dans nbre3 soit copiée dans g.

On ne déclare pas les paramètres formels qui permettent de recevoir les contenus respectifs
des paramètres effectifs. Mais leurs types respectifs doivent être obligatoirement indiqués
dans l’en-tête de la procédure.

Exercice d’application 2 : Activités au choix

Écrire un algorithme qui, à partir de la saisie d’un mot, détermine, selon le choix de l’utilisateur
:
− son nombre de voyelles ;
− ou son anagramme renversée.

Analyse et méthode

Chacune des tâches à effectuer constitue une procédure. Il y en a deux : compterVoyelles et


renverserMot.
L’utilisateur choisit une tâche dans un menu. On peut écrire la procédure afficherMenu pour
afficher le menu. Cette procédure ne recevra aucun paramètre.
Toutes les procédures sont regroupées dans l’algorithme principal EtudeMot qui gère leur
enchaînement.
L’algorithme principal récupère de l’utilisateur le mot à traiter, puis le choix du traitement. Ces
données sont stockées respectivement dans la variable mot de type chaîne de caractères, et dans
la variable choix de type entier. Puisque ces variables sont déclarées dans l’algorithme principal
alors elles sont des variables globales.

Des variables pourront être déclarées dans les procédures si cela est nécessaire. Ces variables
sont des variables locales.

Exercice d’application 3 : Calcul du produit d’un nombre par une factorielle

Page 86
Chapitre 6 : Les sous-algorithmes

Soit g un nombre réel et n un nombre entier naturel, proposer un algorithme qui calcule g × n!

Analyse et méthode

Il y a une factorielle à calculer. On déclare alors la procédure calculerFactorielle dédiée à cette


tâche.
Elle reçoit en paramètre un nombre. Le résultat doit être exploité dans un calcul dans
l’algorithme principal. Donc la procédure doit mettre le résultat de sa tâche à la disposition de
l’algorithme principal via une variable globale.
La procédure a pour en-tête : Procédure calculerFactorielle (nombre : entier).

En résumé …

 Une procédure est un sous-algorithme auquel est associée une liste de


paramètres.

 Une procédure a la structure générale d’un algorithme :


− un en-tête (qui a la particularité de lister les paramètres et leurs types respectifs ;
cependant, la liste des paramètres peut être vide) ;
− une zone de déclarations qui n’admet que des constantes et des variables ;
− un corps.

 L’algorithme principal (ou tout autre algorithme appelant) et la procédure


communiquent à l’aide de paramètres.

 Les paramètres d’une procédure sont des paramètres formels, et ceux de


l’algorithme principal (ou de tout autre algorithme appelant) sont des paramètres
effectifs.

 Pour un passage de paramètres correct et fiable, il faut que :


− les paramètres effectifs et les paramètres formels soient donnés dans le même
ordre ;
− les paramètres effectifs soient mis en correspondance avec les paramètres formels.

 Une procédure peut appeler une ou plusieurs procédures.

 Une procédure peut être appelée par une ou plusieurs procédures.

Page 87
Chapitre 6 : Les sous-algorithmes

Leçon 3 : Les fonctions

1. Définition

Une fonction est une procédure particulière qui génère un seul résultat.
Elle possède deux propriétés fondamentales :
 le résultat généré est directement exploitable dans une instruction ; 
la fonction est elle-même le résultat généré.

2. La déclaration d’une fonction

Il faut déclarer une fonction avant de l’utiliser.


On déclare une fonction en mentionnant son en-tête dans la zone de déclarations de
l’algorithme principal selon la syntaxe ci-dessous :

Fonction < nomFonction > (< liste des paramètres formels > avec leurs types respectifs) : type du résultat

3. La description d’une fonction

La description (ou écriture ou définition) d’une fonction se fait hors des limites de
l’algorithme appelant selon la syntaxe générale ci-dessous :

Fonction <nomActionNommée> (<liste des paramètres formels> : type) : <type du résultat>


Const < identificateurs des constantes > ← < valeurs des constantes > Var
< identificateurs des variables locales > : < types des variables locales >
Début
< instruction(s) ou action(s) >
retourner (r) // r est le résultat de la tâche de la fonction
Fin

Le résultat de la tâche de la fonction est stocké dans la variable r. Ce résultat est transmis à
l’algorithme appelant par l’instruction retourner (r), retourner étant une primitive. On dit
que r est la valeur de retour. La fonction étant elle-même le résultat, alors elle est du type
de r. Le type du résultat est le type de la valeur de retour.
Le résultat est une valeur de type simple (entier, réel, caractère, chaînes de caractères,
booléen).

4. L’appel d’une fonction

L’appel d’une fonction s’effectue dans un algorithme appelant (algorithme principal ou


procédure ou fonction). Il doit se faire dans :

 une instruction
simple − affichage ; − ou
affectation.

Page 88
Chapitre 6 : Les sous-algorithmes

 ou dans une structure


de contrôle − conditionnelle
;
− itérative.

5. Le passage des paramètres

Le passage des paramètres se réalise comme dans le cas des procédures.

Cependant avec les fonctions, puisque la fonction retourne un seul résultat et qu’elle est
ellemême cette valeur de retour, alors on n’a pas besoin de variable globale dédiée au retour
du résultat.

6. Applications

Exercice d’application 1

Écrire un algorithme qui calcule puis affiche le carré et le cube de tout nombre saisi au
clavier. Par exemple : on saisit 2, l’algorithme affiche 4 et 8.

Analyse et méthode

Les fonctions carre et cube reçoivent chacune un nombre réel en paramètre et retournent
chacune un nombre réel. Ces fonctions sont donc de type réel.
D’où leurs en-têtes complets :
Fonction carre (x : réel) : réel et Fonction cube (x : réel) : réel

Puisque a3 = a × a2 alors la fonction cube appellera la fonction carre. D’où :

Page 89
Chapitre 6 : Les sous-algorithmes

Algorithme CarreEtCube
Fonction carre (x : réel) : réel
cube (x : réel) : réel
Var nbre : réel
Début
écrire ("Calcul du carré et du cube d’un nombre")
écrire ("Donnez un nombre : ")
lire (nbre)
écrire ("Le carré de", nbre, " est : ", carre (nbre), " et son cube est : " cube (nbre))
Fin

Fonction carre (x : réel) : réel


Début
retourner (x * x)
Fin

Fonction cube (x : réel) : réel


Début
retourner (x * carre (x)) // appel de la fonction Carre par la fonction Cube
Fin

Autre possibilité

Dans l’algorithme précédent, la fonction Carre est appelée deux fois sur le même nombre. On
peut améliorer cet algorithme en utilisant la fonction Carre une seule fois :

Algorithme CarreEtCube2
Fonction carre (x : réel) : réel
Var nbre, temp : réel
Début
écrire ("Calculer le carré et le cube d’un nombre")
écrire ("Donnez un nombre : ")
lire (nbre)
temp ← carre (nbre)
écrire ("Le carré de", nbre, " est : ", temp, " et son cube est : ", nbre*temp)
Fin

Fonction Carre (x : réel) : réel


Début
retourner (x * x)
Fin

Exercice d’application 2 : Recherche des extrema d’un ensemble de nombres

Rechercher le minimum et le maximum d’un ensemble de dix nombres.

Page 90
Chapitre 6 : Les sous-algorithmes

Analyse et méthode

L’opération nécessite l’utilisation d’un vecteur pour récupérer les nombres à traiter. On
utilisera la fonction rechercherMini pour rechercher le minimum, et la fonction
rechercherMaxi pour rechercher le maximum. Ces fonctions reçoivent chacune en paramètre
un vecteur de type réel, puis elles retournent chacun un nombre. Puisqu’elles retournent un
nombre de type réel alors elles sont de type réel. D’où leurs en-têtes respectifs : Fonction
rechercherMini (V [1:10] : tableau de réel) : réel et Fonction rechercherMaxi (V [1:10] :
tableau de réel) : réel.

Exercice d’application 3 : Test de primalité

Écrire un algorithme qui effectue un test de primalité.

Analyse et méthode

L’algorithme principal récupère un entier naturel qu’il transmet à la fonction testerPrimalite.


Cette dernière renvoie 1 pour "Vrai" (si le nombre est premier) et 0 pour "Faux" (si le nombre
n’est premier pas premier).
L’algorithme principal affiche le message approprié selon la réponse de la fonction.

Page 91
Chapitre 6 : Les sous-algorithmes

Leçon 4 : Notions de récursivité

1. Exemple introductif

Calculer la factorielle d’un entier naturel.

En mathématiques, il existe deux méthodes pour calculer la factorielle d’un entier naturel n.

• Première méthode : selon la formule classique (cf. définition de la factorielle)

Si n = 0 ou n = 1, alors n! = 1
Sinon n! = n × (n -1) × (n -2) × … × 2 × 1 = 1 × 2 × … × (n - 2) × (n - 1) × n.

Ainsi : 5! = 5 × 4 × 3 × 2 × 1 = 1 × 2 × 3 × 4 × 5 = 120.

Les algorithmes mettant en œuvre cette méthode utilisent des boucles. Ce sont des
algorithmes itératifs.

• Deuxième méthode : selon une formule de récurrence

On démontre à partir de la formule précédente que :

Si n = 0 alors n! = 1
Sinon n! = n × (n - 1)!

Or : (n-1)! = (n-1) × (n-2)! avec (n-2)! = (n-2) × (n-3)! et ainsi de suite jusqu’à 0!

Donc :

Calculer la factorielle d’un entier naturel revient à multiplier cet entier naturel par la
factorielle de son précédent : on utilise une factorielle pour calculer une factorielle.

Ainsi : 5! = 5 × 4!
= 5 × (4 × 3!)
= 5 × [4 × (3 × 2!)]
= 5 × [4 × [3 × (2 × 1!)]]
= 5 × [4 × [3 × [2 × (1 × 0!)]]]
= 5 × [4 × [3 × [2 × (1 × 1)]]]
=5×4×3×2×1
5! = 120

Chaque étape demande le calcul d’une autre factorielle. On doit alors écrire un algorithme de
calcul de factorielle qui va s’appeler lui-même : c’est un algorithme récursif.

Page 92
Chapitre 6 : Les sous-algorithmes

2. Définitions

• La récursivité est la propriété pour un algorithme de s’appeler lui-même un


nombre fini de fois. Un algorithme ayant une telle propriété est un algorithme
récursif.

• Un algorithme récursif est algorithme A qui s’appelle lui-même ou qui appelle


un autre algorithme A’ contenant un appel de A.

3. L’intérêt de la récursivité

La récursivité est un puissant outil algorithmique (et mathématique où elle est désignée par le
terme récurrence) qui permet de décomposer un problème en plusieurs problèmes de même
nature mais sur des données plus petites.
Elle est très adaptée à la résolution de certains problèmes n’appartenant pas forcément au
domaine des mathématiques (par exemples : la recherche d’un élément dans un tableau trié, le
jeu des Tours de Hanoï).

4. Propriétés des algorithmes récursifs

Un algorithme récursif a deux propriétés fondamentales :


− il possède des conditions d’arrêt des appels ;
− chaque appel direct ou indirect le rapproche de ses conditions d’arrêt.

5. Les principaux types de récursivité

Il existe plusieurs types de récursivité dont les plus courants sont :

5.1. la récursité directe (ou récursivité simple) Elle


a lieu quand un algorithme s’appelle lui-même.

Exemple : calcul de la factorielle d’un nombre.

5.2. la récursivité multiple


Elle a lieu quand un algorithme s’appelle lui-même au moins deux fois simultanément.

Exemple : calcul d’un terme de la suite de Fibonacci.

5.3. la récursivité imbriquée


Elle a lieu quand un algorithme appelé dans un autre algorithme s’appelle lui-même (donc elle
consiste à effectuer un appel récursif à l’intérieur d’un autre appel récursif).

Exemple : calcul d’une valeur de la fonction d’Ackermann.

Page 93
Chapitre 6 : Les sous-algorithmes

5.4. la récursivité croisée (ou récursivité indirecte ou récursivité mutuelle)


Elle a lieu quand un algorithme est appelé via une série d’appels d’algorithmes qu’il a
luimême initiés. (Cas simple : l’algorithme A1 appelle l’algorithme A2, et A2 appelle A1.)

Exemple : détermination de la parité d’un nombre.

Remarque
Le terme algorithme récursif fait référence aux sous-algorithmes récursifs, c’est-à-dire aux
procédures récursives et fonctions récursives. Toutefois, dans la suite du livre, on ne traitera
que des fonctions récursives, ces dernières étant plus utilisées que les procédures récursives.

6. Concevoir et écrire une fonction récursive

Écrire une fonction récursive est délicat. Il faut suivre rigoureusement certaines règles :

6.1. vérifier la décomposabilité du problème

Le problème doit être décomposable en problèmes de même nature sur des données plus
petites.

6.2. déterminer la (les) condition(s) d’arrêt des appels

Il faut déterminer la (ou les) condition d’arrêt (ou cas de base) afin de définir le (les) cas pour
lequel la fonction ne s’appelle pas elle-même. Si on ne définit pas la (les) condition(s) d’arrêt,
la fonction ne terminera pas, c’est-à-dire que la fonction s’appellera indéfiniment. Une
condition d’arrêt provoque l’arrêt des appels récursifs.

6.3. déterminer la (les) condition(s) de continuité des appels

Il faut déterminer la (les) condition(s) de continuité (ou cas inductif) afin de définir le (les) cas
pour lequel la fonction s’appelle elle-même.
Une condition de continuité provoque un appel récursif.

6.4. écrire la fonction récursive

Dans le corps de la fonction récursive, on écrit l’instruction (ou les instructions) contenant le
(les) cas de base avant celle(s) contenant le (les) cas inductif(s).
Chaque appel récursif doit "se rapprocher" d’un cas de base de sorte à favoriser la
terminaison de la fonction.
Techniquement, on utilise la fonction que l’on n’a pas encore écrite en supposant qu’elle
donne déjà un résultat. Une fonction récursive se compose de deux parties :
− la (les) condition(s) d’arrêts des appels récursifs : dans cette partie les valeurs à
déterminer sont directement connues ;
− un (des) appel(s) récursif(s).

Page 94
Chapitre 6 : Les sous-algorithmes

D’où le schéma général d’une fonction récursive :

Fonction frecursiv (liste des paramètres formels avec leurs types) : type de la valeur de retour
Début
Si (condition d’arrêt)
Alors retourner (r) // valeur de retour de la condition d’arrêt
Sinon retourner (frecursiv (liste des nouveaux paramètres))
FinSi
Fin

L’instruction contenant l’appel récursif peut se présenter sous deux formes telles que :

• la fonction récursive retourne, sans aucun autre calcul, la valeur obtenue par
son appel récursif. On parle alors de récursivité terminale.

• la fonction récursive retourne, après un autre calcul, la valeur obtenue par son
appel récursif. On parle alors de récursivité non terminale.
Exemple : l’appel récursif de la fonction de calcul de la factorielle d’un nombre.

7. Applications

Exemple d’application 1 : Calcul récursif de la factorielle d’un nombre

Écrire une fonction qui calcule la factorielle d’un entier naturel n selon la formule de
récurrence n! = n × (n-1)! sachant que 0! = 1.

Analyse et méthode

On utilisera une fonction de type entier. De plus :

• puisque n! = n × (n-1)! et que (n-1) décroît jusqu’à atteindre la valeur 0, alors


le problème est décomposable en problèmes de même nature sur des données plus
petites ;

• le résultat de 0! est directement fourni par la formule de récurrence, alors 0 est


le cas de base ; en effet 0! = 1 ;

• pour n ≥ 1, le calcul de n! nécessite une décomposition en un produit contenant


une factorielle, alors tout entier naturel supérieur ou égal à 1 est un cas inductif.

Donc : la fonction peut être écrite sous forme récursive avec pour cas de base : n = 0, et pour
cas inductif : n ≥ 1.

Page 95
Chapitre 6 : Les sous-algorithmes

Puisque cette fonction s’appelle elle-même directement jusqu’à l’atteinte de sa condition


d’arrêt alors c’est un cas de récursivité directe (ou récursivité simple).

Fonction factorielle (n : entier) : entier


Début
Si (n = 0)
Alors retourner (1)
Sinon retourner (n*factorielle (n - 1)) // appel récursif de la fonction factorielle
FinSi
Fin

La fonction récursive retourne la valeur obtenue par son appel récursif après un autre calcul
(n*factorielle (n - 1)). Cette fonction est alors une fonction récursive non terminale.

Exemple d’application 2 : Calcul d’un terme de la suite de Fibonacci

Écrire une fonction qui calcule le terme de la suite Fn de Fibonacci pour le nombre n sachant
que, n étant un entier naturel :

 si n = 0 ou n = 1 alors Fn = n 
si n > 1 alors Fn = Fn – 1 + Fn –2.

Exemple d’application 3 : Calcul d’une valeur de la fonction d’Ackermann

Étant donné les entiers naturels 𝑚𝑚 et 𝑛𝑛, on définit la fonction d’Ackermann 𝐴𝐴(𝑚𝑚, 𝑛𝑛)
par :
 𝐴𝐴(𝑚𝑚, 𝑛𝑛)=𝐴𝑚𝑚− 1; 𝐴𝐴(𝑚𝑚 ; 𝑛𝑛− 1) 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑚𝑚 > 0 𝑒𝑒𝑒𝑒 𝑛𝑛 > 0
 𝐴𝐴(0, 𝑛𝑛) = 𝑛𝑛 + 1 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑛𝑛 > 0
 𝐴𝐴(𝑚𝑚, 0) = 𝐴𝐴(𝑚𝑚− 1 ; 1) 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑚𝑚 > 0

On considère que cette fonction retourne la valeur 1 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑚𝑚 = 0 𝑒𝑒𝑒𝑒 𝑛𝑛 = 0.

Écrire une fonction qui calcule une valeur de la fonction d’Ackermann.

Exercice d’application 4 : Tester la parité d’un nombre

On suppose que l’on ne connait que la parité du nombre 0 (0 est un nombre pair). Alors pour
tester la parité de tout entier naturel n, on utilise les fonctions pair et impair telles que définies
ci-dessous :

Page 96
Chapitre 6 : Les sous-algorithmes

Écrire un algorithme qui :


− d’abord reçoit un entier naturel n ;
− ensuite affiche l’affirmation "n est pair" ;
− et enfin affiche "VRAI" ou "FAUX" en réponse à l’affirmation précédente.

Page 97
Chapitre 6 : Les sous-algorithmes

CHOIX DU SOUS-ALGORITHME

À quel moment utiliser une procédure ou une fonction ?

On utilisera :

 une procédure dans les cas suivants :

− le sous-algorithme ne reçoit aucun paramètre (exemples : afficher un menu,


afficher un message) ;

− le sous-algorithme reçoit un ou plusieurs paramètres, et le résultat de sa tâche est


composé de plusieurs données (exemple : le résultat de la résolution d’une
équation du second degré) ;

− le sous-algorithme reçoit un ou plusieurs paramètres, et le résultat de sa tâche est


composé d’une seule donnée que le sous-algorithme ne retourne pas à
l’algorithme appelant (exemple : le résultat du calcul d’une factorielle) ;

 une fonction dans les conditions suivantes :

− le sous-algorithme reçoit 0 ou 1 ou plusieurs paramètres ;

− le sous-algorithme retourne un résultat à l’algorithme appelant ;

− le résultat est constitué d’une seule donnée (exemples : le résultat du calcul


d’une factorielle, le résultat de la recherche d’un extrémum d’une série de
nombres, le résultat d’un test de primalité, le résultat du calcul d’une racine
d’une équation).

Pour s’entrainer…

Exercice 1 : Une comparaison bizarre

Écrire un algorithme qui affiche le plus grand d’un ensemble de 10 nombres s’il est pair.

Page 98
Chapitre 6 : Les sous-algorithmes

Exercice 2 : Calcul d’images par des fonctions mathématiques

Soit les fonctions numériques 𝑓𝑓, 𝑔𝑔 et ℎ définies sur l’intervalle 𝐷𝐷 = ]−∞ ; 1/2] ∪ [1 ;
+∞[

par 𝑓𝑓(𝑥𝑥) = 2𝑥𝑥2 − 3𝑥𝑥 + 1, 𝑔𝑔(𝑥𝑥) = √2𝑥𝑥2 − 3𝑥𝑥 + 1 et ℎ(𝑥𝑥) = 𝑓𝑓(𝑥𝑥) + 𝑔𝑔(𝑥𝑥).

Montrer que 𝐷𝐷 est l’ensemble de définition de 𝑔𝑔. (voir cours de mathématiques)


Écrire un algorithme qui calcule l’image du réel 𝑥𝑥 par 𝑓𝑓, 𝑔𝑔 et ℎ, sachant que le réel x est
saisi au clavier.

Exercice 3 : Calcul de la puissance entière d’un réel

x étant un réel non nul et k un entier relatif non nul, on veut calculer xk. Écrire
un algorithme qui effectue ce calcul.

Exercice 4 : Calcul de la somme d’une suite de fractions bizarres…

n étant un entier naturel non nul et impair, on pose S 23 25 27 2𝑛𝑛

Écrire un algorithme qui calcule S pour n saisi au clavier.

Exercice 5 : Recherche de nombres premiers d’un intervalle

Écrire un algorithme qui affiche les nombres premiers d’un intervalle d’entiers naturels,
l’intervalle étant défini par l’utilisateur.

Exercice 6 : Générer un nombre de Mersenne

Un nombre de Mersenne est un nombre m tel que m = 2p – 1 où p est un nombre premier.

Écrire un algorithme qui, à la saisie d’un nombre premier, d’abord génère le nombre de
Mersenne correspondant, et ensuite vérifie si le nombre de Mersenne obtenu est aussi premier.

Énoncé 7 : Calculs au choix

Page 99
Chapitre 6 : Les sous-algorithmes

Proposer un algorithme qui permet de déterminer, selon le choix de l’utilisateur :


− la factorielle d’un nombre ;
− la table de multiplication d’un nombre ;
− la parité d’un nombre ;

Exercice 8 : Étude d’un mot

On veut écrire un algorithme pour l’étude des mots.


Un mot étant saisi, cet algorithme devra indiquer, à l’affichage :
1. le mot saisi
2. son nombre de lettres
3. son nombre de voyelles
4. son nombre de consonnes
5. son anagramme renversée
6. s’il est un palindrome

Indications

 On admettra qu’un mot est une chaîne de caractères alphabétiques non


accentués ayant un sens ou non. Cette chaîne doit être non vide.

 L’anagramme renversée d’un mot est le mot (ayant un sens ou non) obtenu par
renversement de l’ordre des lettres de ce mot.
Par exemples : L’anagramme renversée de tracé est écart.
Celle de nacre est ercan.

 Un mot palindrome est un mot qui garde le même sens lorsqu’il est lu de
gauche à droite ou de droite à gauche. Par exemples : non, sas, radar.

 Si par exemple, l’utilisateur saisit le mot trace, l’algorithme devra afficher :

MOT À ÉTUDIER : trace


LONGUEUR :5
NOMBRE DE VOYELLES :2
NOMBRE DE CONSONNES :3
ANAGRAMME RENVERSÉE : ecart
PALINDROME ? : non

Page 100

Vous aimerez peut-être aussi