Vous êtes sur la page 1sur 87

1

INTRODUCTION

CHAPITRE I : INTRODUCTION A L’ALGORITHMIQUE


I.DEFINITION DE L’ALGORITHMIQUE
II. NOTION D’ALGORITHME
1. Définition
2. Algorithmique et programmation
3. Convention d’écriture d’un algorithme

III. ANALYSE DU PROBLEME


1. Enoncer le problème
2. Poser le problème
3. Le cheminement
4. Les éléments de l’Algorithme
5. Les caractéristiques de l’Algorithme

EXERCICES D’APPLICATION

CHAPITRE II : INTRODUCTION AUX ELEMENTS DE L’ALGORITHME

I. STRUCTURE GENERALE DE L’ALGORITHME


1. Structure d’un Algorithme
2. Syntaxe générale d’un Algorithme

II. LES OBJETS : VARIABLES ET CONSTANTES


1. Déclaration
a. L’identificateur ou nom 
b. Les types
b.1 Types numériques classiques
b.2 Autres types numériques
b.3 Type alphanumérique
b.4 Type booléen
c. La valeur
2. Déclaration de variables
3. Déclaration de constante

III. LES OPERATEURS


1. Opérateurs numériques :
2. Opérateur alphanumérique : &
3. Opérateurs logiques (ou booléens)
4 .Les opérateurs relationnels

EXERCICES D’APPLICATION
2
CHAPITRE III : LES INSTRUCTIONS DE CONTRÔLE
I. L’INSTRUCTION D’AFFECTATION
1. Syntaxe et signification
2. Ordre des instructions
II. LES INSTRUCTIONS D’INCREMENTATION ET DE DECREMENTATION
III. INSTRUCTION D’AFFICHAGE ET DE SAISIE
1. Instruction d’affichage ou de sortie
2. Instruction de saisie ou d’entrée

EXERCICES D’APPLICATION

IV. LES SEQUENCES OU BLOCS D’INSTRUCTIONS


V. LES INSTRUCTIONS ALTERNATIVES OU DE DECISION :
1. Structure alternative réduite : SI…ALORS
2. Structure alternative complète : Si … Alors … Sinon
3. Les imbrications de Si … Alors et Si … Alors …Sinon
VI. STRUCTURE A CHOIX MULTIPLE
VII. STRUCTURES ITERATIVES
1. Structure POUR … FAIRE
2. Structure TANT QUE…FAIRE
3. Structure : REPETER….JUSQU’A

L’ART DE LA PROGRAMMATION
OPTIMISATION D’UN PROGRAMME

TRAVAUX DIRIGES

CHAPITRE IV : LES SOUS PROGRAMMES

I.LES FONCTIONS

3
1. L’entête
2. Partie déclarative
3. Le corps de la fonction
4. Appel d’une fonction

II.LES PROCEDURES
1. L’entête
2. Partie déclarative
3. Le corps

III. LES VARIABLES GLOBALES ET LOCALES


1. Variable globale
2. Variable locale

IV. LES PARAMETRES


1. Paramètre effectif
2. Paramètre muet
3. Passage de paramètre
a- Passage par valeur
b- Passage par adresse

EXERCICES D’APPLICATION

CHAPITRE V : LES STRUCTURES DE DONNÉES STATIQUES

INTRODUCTION

I. LES CHAINES DE CARACTERES


1. Définition
2. L’affectation
3. Parcourt de la chaîne
4. Les fonctions applicables sur une chaîne de caractères
5. Les opérateurs applicables sur une chaîne de caractères

EXERCICES D’APPLICATION

II. LES TABLEAUX


1. Définition
2. Les différents types de tableaux
2.1. Les tableaux à une dimension.
a. Définition
b. Déclaration
c. Renseignement ou affectation d’un tableau
d. Edition d’un tableau
4
e. Différentes opérations possibles sur les tableaux
2.2. Tableaux de dimension 2
a. Définition
b. Déclaration
c. Affectation
2.3. Imbrication des tableaux
2.4. Définition de constante de type Tableau
2.5. Passage de tableau en paramètre, à une fonction ou à une procédure

EXERCICES D’APPLICATION

5
III. LE TYPE ENUMERE
1. Définition
2. Déclaration

IV.LES INTERVALLES
1. Définition
2. Déclaration

V. LES ENSEMBLES
1. Définition
2. Déclaration

VI. LES ENREGISTREMENTS


1. Définition
2. Déclaration
3. Intérêt
4. Opérations portant sur le type enregistrement
5. Imbrication d’enregistrements
6. Passage d’enregistrement en paramètre à une fonction

EXERCICES D’APPLICATION :

CHAPITRE VI : LES FICHIERS


INTRODUCTION
I. DEFINITION
II. DECLARATION

III. LES MODES D’ACCES AU FICHIER


1. Les fichiers à accès séquentiel
2. Les fichiers à accès direct

IV. OPERATIONS SUR LES FICHIERS


1. Création De Fichier Ou Assignation
2. L’ouverture et la fermeture du fichier
3. Les différentes opérations sur un fichier
a. L’écriture dans un fichier
b. La lecture du Fichier
c. Recherche de données dans le Fichier

EXEMPLE COMPLET

EXERCICES D’APPLICATION

6
CHAPITRE VI LES STRUCTURES DE DONNEES DYNAMIQUES

INTRODUCTION

I. LES STRUCTURE DE DONNEES LINEAIRES

1. La liste chainée : LES POINTEURS


2. Les piles 
3. la file

II. . LES STRUCTURES DE DONNEES NON LINEAIRES

1. Un Arbre

a. Taille

b. Hauteur
2. Les graphes
Relations graphes et informatique

7
CHAPITRE I : INTRODUCTION A L’ALGORITHMIQUE

OBJET : Ce chapitre explique ce que c’est que l’algorithmique et l’algorithme.


OBJECTIFS : A la fin de ce chapitre, vous devez être à mesure de connaître :
 Ce qu’est l’algorithmique ;
 Ce que c’est l’algorithme, son rôle, son intérêt et ses
caractéristiques.

I. DEFINITION DE L’ALGORITHMIQUE

« Un langage de programmation est une convention pour donner des ordres à un
ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils. Ca, ce
sont les caractéristiques de la magie. »
- Dave Small

L’algorithmique est un terme d’origine arabe, comme algèbre, amiral ou zénith.


C’est la discipline qui traite des méthodes permettant d’écrire les règles, les
méthodes à observer pour concevoir un algorithme.
Le problème de l’algorithmique est de faire réaliser par l’ordinateur une tâche
complexe (problème) alors que ce dernier n’est capable que d’exécuter des actions
élémentaires. Il convient donc pour cela de décomposer cette tâche complexe en
une suite de tâches élémentaires qu’on appelle algorithme que l’ordinateur sera
capable d’interpréter et d’exécuter directement. Cette méthode de décomposition de
problème permet de passer avec un maximum de chances de réussite de la
description du problème initial complexe à sa résolution.

II. NOTION D’ALGORITHME

1. Définition

Avez-vous déjà fait la cuisine? Avez-vous déjà déchiffré une notice en


anglais pour faire fonctionner un appareil électronique ? Si oui, sans le savoir, vous
avez déjà exécuté des algorithmes.
Plus fort : avez-vous déjà indiqué son chemin à une personne égarée ? Avez-vous
fait chercher un objet à quelqu’un par téléphone ? Si oui, vous avez déjà créé et fait
exécuter des algorithmes.
Comme quoi, l’algorithmique n’est pas un savoir ésotérique réservé à quelques
rares initiés touchés par la grâce divine, mais une aptitude partagée par la totalité de
l’humanité. Donc, pas d’excuses.
Un algorithme, c’est une suite d’instructions, qui une fois exécutée
correctement, conduit à un résultat donné. Il est écrit dans un langage naturel

8
(français, anglais, arabe, allemand…) et est inintelligible à l’ordinateur. Si l’algorithme
est juste, le résultat est le résultat voulu.
Le terme algorithme vient du mathématicien Arabe MUHAMMAD IBN MUSA AL
KHAREZMI (fin VIIIe siècle, début IX e siècle) qui rédigea un traité exhaustif sur le
système de chiffres et de numération hindou d’où est tiré le nôtre. À partir de ce
moment, l’utilisation des chiffres et des modes de calcul hindou fût connu sous le
nom d’ALGORISMI.

Complétons toutefois cette définition. Après tout, en effet, si l’algorithme, comme


on vient de le dire, n’est qu’une suite d’instructions menant celui qui l’exécute à
résoudre un problème, pourquoi ne pas donner comme instruction unique : « résous
le problème », et laisser l’interlocuteur se débrouiller avec ça ? A ce prix, n’importe
qui serait champion d’algorithmique sans faire aucun effort. Ce serait trop facile.
Pour fonctionner, un algorithme doit donc contenir uniquement des
instructions compréhensibles par celui qui devra l’exécuter.

2. Algorithmique et programmation

Pourquoi apprendre l’algorithmique pour apprendre à programmer ? En quoi a-t-


on besoin d’un langage spécial, distinct des langages de programmation
compréhensibles par les ordinateurs ?
Parce que l’algorithmique exprime les instructions résolvant un problème
donné indépendamment des particularités de tel ou tel langage. Pour prendre
une image, si un programme était une dissertation, l’algorithmique serait le plan, une
fois mis de côté la rédaction et l’orthographe. Or, vous savez qu’il vaut mieux faire
d’abord le plan et rédiger ensuite que l’inverse…
Apprendre l’algorithmique, c’est apprendre à manier la structure logique d’un
programme informatique. Cette dimension est présente quelle que soit le langage de
programmation ; mais lorsqu’on programme dans un langage (en C, en Visual Basic,
etc.) on doit en plus faire attention aux problèmes de syntaxe, ou de types
d’instructions, propres à ce langage. Apprendre l’algorithmique de manière séparée,
c’est donc sérier les difficultés pour mieux les vaincre.
A cela, il faut ajouter que des générations de programmeurs, souvent
autodidactes, ayant directement appris à programmer dans tel ou tel langage, ne font
pas mentalement clairement la différence entre ce qui relève de la structure logique
générale de toute programmation (les règles fondamentales de l’algorithmique) et ce
qui relève du langage particulier qu’ils ont appris. Ces programmeurs, non seulement
ont beaucoup plus de mal à passer ensuite à un langage différent, mais encore
écrivent bien souvent des programmes qui même s’ils sont justes, restent laborieux.
Car on n’ignore pas impunément les règles fondamentales de l’algorithmique…
Alors, autant l’apprendre en tant que telle !
Savoir programmer, c’est plus savoir trouver l’algorithme à un problème que
de connaître toutes les instructions d’un langage de programmation. La base
de la programmation est l’algorithme.

9
3. Convention d’écriture d’un algorithme

Historiquement, plusieurs types de notations ont représenté des algorithmes.


Il y a eu notamment une représentation graphique, avec des carrés, des losanges,
etc. qu’on appelait des organigrammes. Aujourd’hui, cette représentation est
quasiment abandonnée, pour deux raisons. D’abord, parce que dès que l’algorithme
commence à grossir un peu, ce n’est plus pratique du tout du tout. Ensuite parce que
cette représentation favorise le glissement vers un certain type de programmation,
dite non structurée que l’on tente au contraire d’éviter.
C’est pourquoi on utilise généralement une série de conventions appelée
«  pseudo-code », qui ressemble à un langage de programmation authentique dont
on aurait évacué la plupart des problèmes de syntaxe. Ce pseudo-code est
susceptible de varier légèrement d’un livre (ou d’un enseignant) à un autre. C’est
bien normal : le pseudo-code, encore une fois, est purement conventionnel ; aucune
machine n’est censée le reconnaître. Donc, chaque cuisinier peut faire sa sauce à sa
guise, avec ses petites épices bien à lui, sans que cela prête à conséquence.

III. ANALYSE DU PROBLEME

En amont de toute programmation se trouve nécessairement un problème. En fait


c’est la résolution du problème en utilisant l’ordinateur qui amène à la
programmation. Donc pour mieux cerner le problème à résoudre, il ya des étapes à
suivre. Ainsi l’analyse d’un problème consiste à :
*Enoncer le problème ;
*Poser le problème ;
*Décrire le cheminement pour la résolution du problème.

1. Enoncer le problème

Il consiste à répertorier toutes les données, les situations initiales et aussi les
résultats. En plus de cela il s’agit majoritairement de comprendre à fond la nature et
le contenu du problème. Vous devrez vous poser ces quelques questions :
De quoi est-il question dans le problème ?
 Qu’est ce qu’on me demande ?
 Quels sont les éléments contenus dans le problème et que je dois utiliser
pour sa résolution ?
 il ya-t-il un calcul à effectuer (si oui poser la formule du calcul et déduire les
éventuelles variables) ?
 Quelle est la finalité du problème ?

10
2. Poser le problème

C’est décrire les grandes lignes de la résolution du problème posé, c’est-à-dire


pour passer des données aux résultats tout en respectant les hypothèses de travail.
Il s’agit simplement de dégager les grandes lignes de la résolution du problème. Ceci
est l’étape qui précède la résolution proprement dite du problème.

3. Le cheminement

Il s’agit de décrire de façon non ambiguë et détaillée les différentes étapes pour
passer des données aux résultats tout en respectant les hypothèses de travail. En
fait, c’est ici que l’on résout le problème posé. Ce cheminement devra être formulé
dans un langage naturel mais non intelligible à l’ordinateur appelé ALGORITHME.
Bref, c’est ici que l’on écrit l’algorithme.

4. Les éléments de l’Algorithme

Un algorithme se caractérise par deux sous ensembles qui sont :


*L’ensemble des objets (données et résultats)
*L’ensemble des opérations ou actions
L’objet désigne une entité du problème. Il est caractérisé par son identificateur (son
nom) et par son titre (l’ensemble des opérations applicables à cet objet).Les actions
sont appliquées sur les données pour produire les résultats.

5. Les caractéristiques de l’Algorithme

*Formel : langage qui utilise un ensemble de termes et de règles syntaxiques


pour permettre de communiquer sans ambiguïté.
*Inintelligible à l’ordinateur : L’ordinateur ne comprend pas l’algorithme (écrit
dans un langage naturel (espagnol, baoulé, bété, dioula…) donc il va falloir le
traduire dans un langage que l’ordinateur comprend (langage de programmation)
pour que l’ordinateur puisse l’exécuter.
* Indépendant à la fois de l’ordinateur qui l’exécute (à travers les programmes) et
des langages de programmation.

EXERCICES D’APPLICATION

1. Quel est l’intérêt d’un algorithme ?

2. Quelles sont les qualités attendues d’un programmeur ?

3. « Savoir programmer c’est plus savoir trouver l’algorithme à un problème que


de connaître toutes les instructions d’un langage de programmation ».
Commentez ce passage.

11
4. De quoi est constitué un programme informatique ?

5. Quelles sont les grandes lignes de la résolution d’un problème ?

6. Pourquoi pour la résolution d’un problème par l’ordinateur, nous devons le


décomposer en éléments très simples et détaillés ?

7. Quelles sont les étapes lors de l’analyse d’un problème ?

CHAPITRE II : INTRODUCTION AUX ELEMENTS DE L’ALGORITHME


OBJET : Ce chapitre présente la structure de l’algorithme et les objets servant à
l’élaboration de celui-ci, c’est-à-dire les différents éléments sur lesquels les actions
vont porter.

OBJECTIFS : A la fin de ce chapitre, vous serez à mesure de maîtriser :


 La structure d’un algorithme ;
 Les différents éléments de l’algorithme sujets aux traitements ;
 Les différents opérateurs.

« A l’origine de toute erreur attribuée à l’ordinateur, vous trouverez au moins deux
erreurs humaines. Dont celle consistant à attribuer l’erreur à l’ordinateur. »

- Anonyme

I. STRUCTURE GENERALE DE L’ALGORITHME

1. Structure d’un Algorithme

La mise en place d’un algorithme respecte un certains nombres de règles .Ainsi


la structure d’un algorithme se subdivise en trois parties dont l’ordre est à respecter.
Les trois grandes parties sont :

 L’entête : Cette partie permet tout simplement de donner un nom à notre


algorithme. Ce nom n’influence en rien le bon déroulement de l’algorithme. En
générale il faut donner des noms parlants à nos algorithmes, ceci pour
permettre au lecteur d’avoir une idée de ce que fera l’algorithme qu’il lira.
Ecrire ce nom en :
 ne mettant pas d’espace ou utiliser l’Under-score (le tiret du 8 au clavier), pour
séparer les mots composant le nom de l’algorithme ;
 ne mettant pas d’accent ou mettre en majuscule pour éviter les caractères
accentués ;
 ne mettant pas de chiffre au début ;
 n’utilisant pas de symboles (ex. : ω, ≠, β, $, %, &, @, *, €, £…)

 Partie déclarative : c’est une liste exhaustive des objets, grandeurs utilisés
et manipulés dans le corps de l’algorithme. Cette liste est placée en début
d’algorithme. On parle de déclaration de variables, de constantes, les
structures de données, les fonctions et procédures.
12
 le corps de l’algorithme : il est obligatoire et débute par le mot clé DEBUT
et se termine par le mot clé FIN. C’est dans cette partie de l’algorithme que
sont placées les tâches (instructions opérations …) à exécuter par notre
algorithme en utilisant les éléments déclarés éventuellement dans la partie
déclarative.

Tous les mots clés sont de préférable mis en lettre majuscule.

2. Syntaxe générale d’un Algorithme

ALGORITHME nom_algorithme ; L’ENTETE

VAR nom_variable : type ;

CONST nom_constante=valeur ; PARTIE DECLARATIVE

FONCTION nom_fonction () : type; facultatif

PROCEDURE nom_procédure ;

DEBUT

Instruction1 ;
.
.
. LE CORPS
Instruction n ;

FIN

II. LES OBJETS : VARIABLES ET CONSTANTES

Dans un programme informatique, on va avoir en permanence besoin de stocker


provisoirement ou constamment des valeurs. Il peut s’agir de données issues du
disque dur, fournies par l’utilisateur (frappées au clavier). Il peut aussi s’agir de
résultats obtenus par le programme, intermédiaires ou définitifs. Ces données
peuvent être de plusieurs types (on en reparlera) : elles peuvent être des nombres,
du texte, etc. Toujours est-il que dès que l’on a besoin de stocker une information au
cours d’un programme, on utilise un objet.
Pour employer une image, cet objet est une boîte, que le programme (l’ordinateur)
va repérer par une étiquette. Pour avoir accès au contenu de la boîte, il suffit de la
désigner par son étiquette.

13
En réalité, dans la mémoire vive de l’ordinateur, il n’y a bien sûr pas une vraie
boîte, et pas davantage de vraie étiquette collée dessus (j’avais bien prévenu que la
boîte et l’étiquette, c’était une image). Dans l’ordinateur, physiquement, il y a un
emplacement de mémoire, repéré par une adresse binaire. Si on programmait dans
un langage directement compréhensible par la machine, on devrait désigner nos
données par de superbes 10011001 et autres 01001001, de tels langages existent !
Ils portent le nom d’assembleur mais ce ne sont pas les seuls langages disponibles.
Les langages informatiques plus évolués (ce sont ceux que presque tout le monde
emploie) se chargent précisément, entre autres rôles, d’épargner au programmeur la
gestion fastidieuse des emplacements mémoire et de leurs adresses. Et, comme
vous commencez à le comprendre, il est beaucoup plus facile d’employer les
étiquettes de son choix, que de devoir manier des adresses binaires.

1. Définition et caractéristique d’objet


La première chose à faire avant de pouvoir utiliser un objet est de créer la boîte
et de lui coller une étiquette. Ceci se fait tout au début de l’algorithme, avant même
les instructions proprement dites. C’est ce qu’on appelle la déclaration des objets.
Lorsqu’on déclare un objet (variable ou constante), il ne suffit pas seulement de
créer une boîte (réserver un emplacement mémoire) ; encore doit-on préciser ce que
l’on voudra mettre dedans, car de cela dépendent la taille de la boîte (de
l’emplacement mémoire) et le type de codage utilisé.
La déclaration des objets se fait à l’aide des éléments suivants :
*L’identificateur ou nom ;
*le type ;
*et éventuellement sa valeur (constante).

a. L’identificateur ou nom 
Le nom de l’objet (l’étiquette de la boîte) obéit à des impératifs changeant selon
les langages. Toutefois, une règle absolue est qu’un nom de variable peut comporter
des lettres et des chiffres (pas de chiffre au début du nom), mais qu’il exclut la
plupart des signes de ponctuation, en particulier les espaces et les accents (voir
règles pour le nom de l’algorithme). Un nom de variable correct commence
également impérativement par une lettre. Quant au nombre maximal de caractères
pour un nom de variable, il dépend du langage utilisé.
En pseudo-code algorithmique, on est bien sûr libre du nombre de caractères pour
un nom d’objet, même si pour des raisons purement pratiques, on évite
généralement les noms à rallonge.

b. Les types
C’est l’intervalle des différentes valeurs que peuvent prendre l’objet. Ainsi suivant
le type qu’on va attribuer à l’objet (qui est d’ailleurs fonction du problème qu’on aura
à résoudre), celui-ci pourra prendre telles valeurs ou ne pourra pas prendre telles
autres valeurs.

14
b.1 Types numériques classiques
Commençons par le cas très fréquent, celui d’un objet destiné à recevoir des
nombres. Si l’on réserve un octet pour coder un nombre, je rappelle qu’on ne pourra
coder que 28 = 256 valeurs différentes. Cela peut signifier par exemple les nombres
entiers de 1 à 256, ou de 0 à 255, ou de –127 à +128… Si l’on réserve deux octets,
on a droit à 65 536 valeurs ; avec trois octets, 16 777 216, etc. Et là se pose un autre
problème : ce codage doit-il représenter des nombres décimaux ? Des nombres
négatifs ?
Bref, le type de codage (autrement dit, le type d’objet) choisi pour un nombre va
déterminer :

 les valeurs maximales et minimales des nombres pouvant être stockés dans la
variable
 la précision de ces nombres (dans le cas de nombres décimaux).

Tous les langages, quels qu’ils soient offrent une panoplie de types numériques,
dont le détail est susceptible de varier légèrement d’un langage à l’autre. On retrouve
cependant les types suivants :
 
Type Numérique Plage
Byte (octet) 0 à 255
Entier simple -32 768 à 32 767
Entier long -2 147 483 648 à 2 147 483 647
-3,40x1038 à -1,40x1045 pour les valeurs négatives
Réel simple
1,40x10-45 à 3,40x1038 pour les valeurs positives
1,79x10308 à -4,94x10-324 pour les valeurs négatives
Réel double
4,94x10-324 à 1,79x10308 pour les valeurs positives

Pourquoi ne pas déclarer toutes les objets numériques en réel double, histoire
de bétonner et d’être certain qu’il n’y aura pas de problème ? En vertu du
principe de l’économie de moyens. Un bon algorithme ne se contente pas de
« marcher » ; il marche en évitant de gaspiller les ressources de la machine.
Sur certains programmes de grande taille, l’abus de variables
surdimensionnées peut entraîner des ralentissements notables à l’exécution,
voire un plantage pur et simple de l’ordinateur. Alors, autant prendre dès le
début de bonnes habitudes.

En algorithmique, on ne se tracassera pas trop avec les sous-types de variables


numériques. On se contentera donc de préciser qu'il s'agit d'un nombre, en gardant
en tête que dans un vrai langage, il faudra être plus précis.

b.2 Autres types numériques


Certains langages autorisent d’autres types numériques, notamment :

15
 le type monétaire (avec strictement deux chiffres après la virgule)
 le type date (jour/mois/année).

Nous n’emploierons pas ces types dans ce cours ; mais je les signale, car vous ne
manquerez pas de les rencontrer en programmation proprement dite.

b.3 Type alphanumérique

Fort heureusement, les boîtes que sont les objets peuvent contenir bien d’autres
informations que des nombres. Sans cela, on serait un peu embêté dès que l’on
devrait stocker un nom de famille, par exemple.
On dispose donc également du type alphanumérique (également appelé type
caractère, type chaîne ou en anglais, le type string –Dans un objet de ce type, on
stocke des caractères, qu’il s’agisse de lettres, de signes de ponctuation, d’espaces,
ou même de chiffres. Le nombre maximal de caractères pouvant être stockés dans
un seul objet  string dépend du langage utilisé.
Un groupe de caractères (y compris un groupe de un, ou de zéro caractères), qu’il
soit ou non stocké dans un objet, est donc souvent appelé chaîne de caractères.
En pseudo-code, une chaîne de caractères est toujours notée entre guillemets
pour éviter deux sources principales de  possibles confusions :

 la confusion entre des nombres et des suites de chiffres. Par exemple, 323
peut représenter le nombre 323 (trois cent vingt-trois), ou la suite de caractères 3, 2,
et 3. Et ce n’est pas du tout la même chose ! Avec le premier, on peut faire des
calculs, avec le second, point du tout. Dès lors, les guillemets permettent d’éviter
toute ambiguïté : s’il n’y en a pas, 323 est trois cent vingt trois. S’il y en a, "323"
représente la suite des chiffres 3, 2, 3.
 Mais ce n'est pas le pire. L'autre confusion, bien plus grave - et bien plus
fréquente – consiste à se mélanger les pinceaux entre le nom d'un objet et son
contenu. Pour parler simplement, cela consiste à confondre l'étiquette d'une boîte et
ce qu'il y a à l'intérieur.

b.4 Type booléen


Le dernier type d’objet est le type booléen: on y stocke uniquement les valeurs
logiques VRAI et FAUX.
On peut représenter ces notions abstraites de VRAI et de FAUX par tout ce qu'on
veut : de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Peu importe. Ce qui
compte, c'est de comprendre que le type booléen est très économique en termes de
place mémoire occupée, puisque pour stocker une telle information binaire, un seul
bit suffit.

c. La valeur
C’est ce que vaut l’objet à un instant donné. C’est son contenu.

2. Déclaration de variables

16
Une variable est un objet dont la valeur est susceptible de varier tout au long du
déroulement du programme d’où le terme « variable ».En fait, l’on peut lui attribuer
une valeur x et après lui attribuer une autre valeur y, ainsi de suite.

En pseudo-code, une déclaration de variables aura ainsi cette tête :


Var nom_variable: type ;

Ex. : var x : entier ;

3. Déclaration de constante
Une constante est un objet dont la valeur (le contenu) ne change pas au cours du
traitement, et donc son contenu reste identique durant tout le programme ; d’où le
terme « constante ». Elle conserve la valeur qu’on lui a attribuée au départ, sans
aucune possibilité de modification.
SYNTAXE : CONST nom_constante = valeur ;
Ex. : CONST x = 25 ;
Val=3.5 ;
Cat = ‘c’ ;

III. LES OPERATEURS


On va maintenant détailler ce que l’on entend par le terme d’opérateur.
Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.

1. Opérateurs numériques :
Ce sont les quatre opérations arithmétiques, tout ce qu’il y a de classique.
+ : addition
- : soustraction
* : multiplication
/ : Division
mod : ex. : a = x mod y ; signifie que a est le reste de la division entière de x par y
Mentionnons également le ^ qui signifie « puissance ». 45 au carré s’écrira
donc 45 ^ 2
Enfin, on a le droit d’utiliser les parenthèses, avec les mêmes règles qu’en
mathématiques. La multiplication et la division ont « naturellement » priorité sur
l’addition et la soustraction. Les parenthèses ne sont ainsi utiles que pour modifier
cette priorité naturelle.
Cela signifie qu’en informatique, 12 * 3 + 5 et (12 * 3) + 5 valent strictement la
même chose, à savoir 41. Pourquoi dès lors se fatiguer à mettre des parenthèses
inutiles ?

17
En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96. Rien de difficile là-dedans, que du
normal.

2. Opérateur alphanumérique : &


Cet opérateur permet de concaténer, autrement dit d’agglomérer, deux chaînes
de caractères. Par exemple :
A vaut "BENE" ;
B vaut "DICTION" ;
si C vaut A & B ;

La valeur de C à la fin de l’algorithme est "BENEDICTION"

3. Opérateurs logiques (ou booléens) :

Ce sont les conjonctions de coordination utilisées en programmation. Ils


permettent de relier des conditions pour en faire une seule
Il s’agit du ET, du OU (OU inclusif), du NON (négation) et du XOR (OU exclusif),
dont seuls les trois premiers sont les plus utilisés.
EX. :
*SI (E>1) ET (J=3) ALORS INSTRUCTION1 ;

INSTRUCTION1
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI (A=B) OU (X>Y) ALORS INSTRUCTION2 ;

INSTRUCTION2
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI NON (P=T) ALORS INTRUCTION3 ;

INSTRUCTION3
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………

*SI (T≠0) XOU (B>A) ALORS INSTRUCTION 4 ;


L’instruction 4 sera exécutée si et seulement une et une seule des conditions est
vraie.

4 .Les opérateurs relationnels

Ils permettent de faire des comparaisons. Ce sont : >, >=, <, =<, ≠, =

18
EXERCICES D’APPLICATION

Exercice 1 :

1. Quel est l’intérêt des objets au niveau de l’algorithme ?

2. Pour le nom d’un algorithme ou d’une variable dire lesquelles des déclarations
suivantes sont correctes : Ba_4, mon_enf, étudiant, note1, mami, 1bac,
maçon, ma classe, id, âge, nom_etudiant, debut, fin.

Noms corrects :………………………………………………………………………………

Noms incorrectes :………………………………………………………………………….

Exercice 2 :

1. Si l’on déclare la variable a comme un entier peut on lui attribuer n’importe


quelle valeur ?
Réponse :………………………………………………………………………………………

2. Si l’on déclare la variable c comme un caractère peut on lui attribuer n’importe


quelle valeur ?
Réponse :………………………………………………………………………………………

3. En programmation à quoi servent les booléens ?

………………………………………………………………………………………………

………………………………………………………………………………………………

……………………………………………………………………………………………….

19
CHAPITRE III : LES INSTRUCTIONS DE CONTRÔLE
OBJET : Ce chapitre présente les différents traitements, les différentes actions qu’on
va utiliser pour agir sur les données afin de les manipuler.

OBJECTIFS : A la fin de ce chapitre, vous serez à mesure de connaître :


 Les différentes actions de l’algorithme ;
 Les actions de l’algorithme à utiliser dans des situations précises ;

La difficulté dans la réussite d’un algorithme se situe à deux niveaux :


 Les différentes instructions de l’algorithme qu’il faut face à une
situation ;
 L’agencement de ces différentes instructions dans une certaine logique
pour résoudre un problème.

I. L’INSTRUCTION D’AFFECTATION

1. Syntaxe et signification

La seule chose qu’on puisse faire avec une variable, c’est l’affecter, c’est-à-


dire lui attribuer une valeur.
En pseudo-code, l'instruction d'affectation se note avec le signe ←

Ainsi : 24
Y ← 24 ;
Attribue la valeur 24 à la variable Y.

Y
Cela sous-entend impérativement que Y soit une variable de type numérique. Si Y
a été défini dans un autre type, il faut bien comprendre que cette instruction
provoquera une erreur. On peut en revanche sans aucun problème attribuer à une
variable la valeur d’une autre variable, telle quelle ou modifiée.
Par exemple :
T← Y ; Signifie que la valeur de T est maintenant celle de Y.

Notez bien que cette instruction n’a en rien modifié la valeur de Y : une
instruction d’affectation ne modifie que ce qui est situé à gauche de la flèche.
T ← Y + 4 ;
Si Y contenait 12, T vaut maintenant 16. De même que précédemment, Y vaut
toujours 12.
T ← T + 1 ;

20
Si T valait 6, il vaut maintenant 7. La valeur de T est modifiée, puisque T est la
variable située à gauche de la flèche.

Pour revenir à présent sur le rôle des guillemets dans les chaînes de caractères,
comparons maintenant deux algorithmes suivants :

Exemple 1
Début
Rire ← "Loulou"
beni ← "Rire"
Fin

Exemple 2
Début
Rire ← "Loulou"
beni ← Rire
Fin
La seule différence entre les deux algorithmes consiste dans la présence ou dans
l’absence des guillemets lors de la seconde affectation. Et l'on voit que cela change
tout !
Dans l'exemple 1, ce que l'on affecte à la variable beni, c'est la suite de caractères  
R- i -r - e. Et à la fin de l’algorithme, le contenu de la variable beni est donc « Rire ».
Dans l'exemple 2, en revanche, Rire étant dépourvu de guillemets, n'est pas
considéré comme une suite de caractères, mais comme un nom de variable. Le sens
de la ligne devient donc : « affecte à la variable beni le contenu de la variable Rire ».
A la fin de l’algorithme n°2, la valeur de la variable beni est donc « Loulou ».  Ici,
l’oubli des guillemets conduit certes à un résultat,  mais à un résultat différent.
A noter, car c’est un cas très fréquent, que généralement, lorsqu’on oublie les
guillemets lors d’une affectation de chaîne, ce qui se trouve à droite du signe
d’affectation ne correspond à aucune variable précédemment déclarée et affectée.
Dans ce cas, l’oubli des guillemets se solde immédiatement par une erreur
d’exécution.
Ceci est une simple illustration. Mais elle résume l’ensemble des problèmes qui
surviennent lorsqu’on oublie la règle des guillemets aux chaînes de caractères. 

2. Ordre des instructions


Il va de soi que l’ordre dans lequel les instructions sont écrites va jouer un rôle
essentiel dans le résultat final. Considérons les deux algorithmes suivants :
Exemple 1
Variable A en Numérique
Début
A ← 34 ;
A ← 12 ;
Fin

21
Exemple 2
Variable A en Numérique
Début
A ← 12;
A ← 34 ;
Fin

Il est clair que dans le premier cas la valeur finale de A est 12, dans l’autre elle est
34.
Il n’y a aucun intérêt à affecter une variable pour l’affecter différemment juste après.
En l’occurrence, on aurait tout aussi bien atteint le même résultat en
écrivant simplement :
Exemple 1:
Variable A : Numérique;
Début
A ← 12;
Fin
Exemple 2 :
Variable A en Numérique
Début
A ← 34 ;
Fin

II. LES INSTRUCTIONS D’INCREMENTATION ET DE DECREMENTATION

L’incrémentation est l’opération qui consiste à accroitre par addition, la valeur d’une
variable à partir de son ancienne valeur.
Syntaxe : nom_variable1← nom_variable1+α(α réel ou entier positif)
Exemples : b ← b+1 ; Q←Q+2 ;
Explications : b ← b+1 ; signifie « prendre la valeur de la variable b à laquelle il
faudra ajouter 1, et le résultat ainsi obtenu sera la nouvelle valeur de b ».
Soit la situation suivante :

10 11

b b
La décrémentation est l’opération qui consiste à décroitre par soustraction la valeur
d’une variable à partir de sa valeur initiale.
Syntaxe : nom_variable1← nom_variable1- α(α réel ou entier positif)
Exemples : k ← k-1 ; d← d- 3 ;
Explications : k ← k -1 ; signifie « prendre la valeur de la variable k à laquelle il
faudra retrancher 1, et le résultat ainsi obtenu sera la nouvelle valeur de b ».
Soit la situation suivante :

31 30

k k
III. INSTRUCTION D’AFFICHAGE ET DE SAISIE

22
1. Instruction d’affichage ou de sortie

 Pour afficher du texte à l’écran on utilise deux mots clés :


AFFICHER ou ECRIRE et on procède comme suit :

Syntaxe 1 : AFFICHER (″insérer le texte à afficher″) ;


Ex. : AFFICHER (″nous sommes en salle de cours.″) ;
ECRIRE (″BONJOUR″) ;
Le texte en griffe apparait tel à l’écran.

 Pour afficher le contenu d’une cellule mémoire, une variable on met le nom de
la variable simplement sans griffe.
Syntaxe 2 : AFFICHER (nom_variable) ;
Ex. :
VAR x, y : entier ;
x ← 6 ; y ← 4 ;
AFFICHER(x) ; (*on verra 6 afficher à l’écran*)
ECRIRE(y) ; (*on verra 4 afficher à l’écran*)
AFFICHER(x, y) ; (*on verra 6 4 afficher à l’écran*)

 On peut afficher en même temps du texte et des variables.


Syntaxe 3 : AFFICHER (″insérer le texte à afficher″, nom_variable) ;
Ex. :
VAR x : entier ;
x ← 12 ; y ← 2 ; 
AFFICHER (″le résultat est : ″, x) ; (*on verra afficher à l’écran le résultat est 12*)
AFFICHER (″la somme de″, x, ″et de″, y, ″est : ″, x+y) ;
*on verra afficher à l’écran la somme de 12 et de 2 est 14
NB. : Ici les textes entre ″ ″ et les variables sans ″ ″ sont séparés par une virgule.

2. Instruction de saisie ou d’entrée

Elle permet de ranger ou mémoriser une valeur que l’on vient de saisir pour un
usage ultérieur. On saisi toujours une valeur considérée comme le contenu d’une
variable. Pour cela deux mots clés sont utilisés, ce sont : SAISIR ou LIRE
Syntaxe : SAISIR (nom_variable) ; ou LIRE (nom_variable) ;

Ex. :

23
VAR x : entier ;
AFFICHER (″Entrer une valeur ″)
SAISIR (x) ;
*Permet de ranger la valeur que l’utilisateur va saisir dans la variable x

Simulation : A l’écran on a
L’utilisateur saisi
Entrer une valeur
24
24 sera rangé dans Ecran
La variable
(Cellule mémoire) x

24 Unité centrale

Cellule mémoire x

NB. : DEUX REMARQUES POUR TERMINER

 En mathématiques, une « variable » est généralement une inconnue, qui


recouvre un nombre non précisé de valeurs. Lorsque j’écris :
y = 3 x + 2 ;
Les « variables » x et y satisfaisant à l’équation existent en nombre infini
(graphiquement, l’ensemble des solutions à cette équation dessine une droite).
Lorsque j’écris :
ax² + bx + c = 0
La « variable » x désigne les solutions à cette équation, c’est-à-dire zéro, une ou
deux valeurs à la fois…
En informatique, une variable possède à un moment donné une valeur et une
seule. A la rigueur, elle peut ne pas avoir de valeur du tout (une fois qu’elle a été
déclarée, et tant qu’on ne l’a pas affectée. A signaler que dans certains langages, les
variables non encore affectées sont considérées comme valant automatiquement
zéro). Mais ce qui est important, c’est que cette valeur justement, ne « varie » pas à
proprement parler. Du moins ne varie-t-elle que lorsqu’elle est l’objet d’une
instruction d’affectation.
 La deuxième remarque concerne le signe de l’affectation. En algorithmique,
comme on l’a vu, c’est le signe ←. Mais en pratique, la quasi totalité des
langages emploient le signe égal (=). Et là, pour les débutants, la confusion
avec les maths est également facile. En maths, A = B et B = A sont deux
propositions strictement équivalentes. En informatique, absolument pas,
puisque cela revient à écrire A ← B et B ← A, deux choses bien différentes.
De même, A=A+1, qui en mathématiques, constitue une équation sans

24
solution, représente en programmation une action tout à fait licite (et de
surcroît extrêmement courante). Donc, attention  ! ! ! La meilleure des
vaccinations contre cette confusion consiste à bien employer le signe ← en
pseudo-code, signe qui a le mérite de ne pas laisser place à l’ambiguïté.
Une fois acquis les bons réflexes avec ce signe, vous n’aurez plus aucune
difficulté à passer au = des langages de programmation.

EXERCICES D’APPLICATION

Exercice 1 :
Exercice 1.1
Quelles seront les valeurs des variables A et B après exécution des instructions
suivantes ?
ALGORITHME ECHANGE
Var A, B : Entier ; CORRECTION
DEBUT
A ← 1 ; A=3 B=4
B ← A + 3 ;
A ← 3 ;
FIN
Exercice 1.2
Quelles seront les valeurs des variables A, B et C après exécution des instructions
suivantes ?
ALGORITHME ECHANGE
Var A, B, C : Entier ;
DEBUT
A ← 5 ;
…………………………………………………………………………………
B ← 3 ; …………………………………………………………………………………
C ← A + B ; ………………………………………………………………………..
A ← 2 ;
C ← B – A ;
FIN

Exercice 1.3

25
Quelles seront les valeurs des variables A et B après exécution des instructions
suivantes ?
ALGORITHME ECHANGE
Var A, B : Entier ;
DEBUT
A ← 5 ; …………………………………………………………………………………
…………………………………………………………………………………
B ← A + 4 ;
………………………………………………………………………..
A ← A + 1 ;
B ← A – 4 ;
FIN

Exercice 1.4
Quelles seront les valeurs des variables A et B après exécution des instructions
suivantes ?
ALGORITHME valeur
Var A, B : Entier ;
DEBUT
A ← 5 ;
…………………………………………………………………………………
B ← 2 ; …………………………………………………………………………………
A ← B ; ………………………………………………………………………..
B ← A ;
FIN
Moralité : les deux dernières instructions permettent-elles d’échanger les deux
valeurs de B et A ? Si l’on inverse les deux dernières instructions, cela change-t-il
quelque chose ?
Exercice 1.5
Ecrire un algorithme permettant d’échanger les valeurs de deux variables A et B, et
ce quel que soit leur contenu préalable.
Exercice 1.6
Une variante du précédent : on dispose de trois variables A, B et C. Ecrivez un
algorithme transférant à B la valeur de A, à C la valeur de B et à A la valeur de C
(toujours quels que soient les contenus préalables de ces variables).
Exercice 1.7

26
Que produit l’algorithme suivant ?
ALGORITHME ECHANGE
Var A, B, C : Caractères ;
DEBUT
A ← "423" ;
L’algorithme produit le résultat suivant :
B ← "12" ;
C aura comme contenu ‘’42312’’ car le signe +
C ← A + B ;
permet aussi de concatener deux chaînes.
FIN
Exercice 1.8
Que produit l’algorithme suivant ?
ALGORITHME ECHANGE
Var A, B, C : Caractères ;
DEBUT
A ← "423" ; …………………………………………………………………………………
B ← "12" ; …………………………………………………………………………………
C ← A & B ; ………………………………………………………………………..

FIN

Exercice 2
Ecrire un algorithme qui permet de calculer la moyenne par matière et la moyenne
générale d’un étudiant selon les règles de gestion suivantes :
*Algorithme : 2 notes coefficient 2, 1 note coefficient 1 ;
*Mathématique : 2 notes coefficient 1, 1 note coefficient 2.

Exercice 3 : Proposer un algorithme qui permet de calculer le volume d’un cylindre.


Exercice 4 : Ecrire un programme pour calculer le carré d’un entier saisi au clavier.
Exercice 5 :
Ecrire un programme qui calcule le montant brut d'un achat d’un article pour une
ce144rtaine quantité.

IV. LES SEQUENCES OU BLOCS D’INSTRUCTIONS

27
Une séquence ou bloc d’instructions est une suite d’instructions juxtaposées et
délimitées par les mots clés DEBUT et FIN. Elle est localisée à l’intérieur du corps de
l’algorithme ou au sein d’une fonction ou d’une procédure. Lorsque des instructions
concourent à la réalisation d’une tâche donnée, alors celle-ci sont mises en bloc.
Syntaxe
Enchaînement
DEBUT
ACTION 1
ACTION 1 ;
ACTION 2 ;
FIN
ACTION 2
Les actions sont exécutées les unes à la suite des
autres dans l'ordre d'écriture.

V. LES INSTRUCTIONS ALTERNATIVES OU DE DECISION :

1. Structure alternative réduite : SI…ALORS

Si la condition est vraie alors l'action est exécutée, sinon elle ne l'est pas.

Syntaxe 1 :
Sélection Si faux
CONDITION

SI Condition ALORS
DSI
ACTION ; Si vrai
FSI
ACTION 1

Exemple 1 Exemple 2 Exemple 1

28
A 11 ; A 4 ; A 11 ;B 11 ;
Si A > 9 Alors Si A > 7 Alors Si (A > 9) ET (B< 0) Alors
DEBUTSI DEBUTSI DEBUTSI
F b+ A ; K c * A ; F b+ A ;
FINSI FINSI FINSI
D A * 2 ; D A * 2 ; D A * 2 ;
Commentaires Commentaires Commentaires
Les instructions Les instructions comprises Les instructions
comprises Entre DEBUTSI et FINSI ne comprises
Entre DEBUTSI et FINSI seront Pas exécutées Entre DEBUTSI et FINSI
seront exécutées Car A< 7. Par contre ne seront Pas exécutées
Car A > 9. Et après après avoir sauté Car certes A> 9
cette Exécution, l’on va Tout ce qui est entre Mais B n’est pas <0 ;
exécuter D A * 2 ; DEBUTSI et FINSI ; Par contre, l’on va
car elle n’est pas liée à l’on va exécuter exécuter D A * 2 ;
la condition de Si D A * 2 ; car elle n’est car elle n’est pas liée à
Pas Liée à la condition de la condition de Si
Si

2. Structure alternative complète : Si … Alors … Sinon

Si la condition est vraie alors l'action1 est exécutée, sinon c'est l'action 2 qui sera exécutée.

Syntaxe 2
SI (condition1) ALORS CONDITION Si vrai
DEBUTSI
Action1 ;
SINON
Action2 ; Si faux
FSI
ACTION 2 ACTION 1

3. Les imbrications de Si … Alors et Si … Alors …Sinon

29
Lorsque l’on veut envisager un choix parmi n possibilités, il est alors possibles d’utiliser plusieurs
structures Si mais en les imbriquant c’est-à-dire en faisant apparaître des Si à l’intérieur d’autres
comme suit.

Syntaxe 3 :
SI (condition1) ALORS
DEBUTSI
Action1 ;
SINONSI (condition2) ALORS
Action2 ;
FSI

Syntaxe 4 :
Sélection (suite)
SI (condition1) ALORS
DEBUTSI
Action1 ;
SINON
SI (condition2) ALORS
DEBUTSI
Action2 ;

SINON

SI (condition N) ALORS
DEBUTSI
Action N ;
FSI
FSI

FSI

VI. STRUCTURE A CHOIX MULTIPLES

30
Lorsque l’on veut envisager un choix parmi n possibilités, il est également possible d’utiliser la
structure SUIVANT… FAIRE.
 Cas ou valeur doivent être un entier, un caractère, une chaîne de caractère ou un
booléen. Ils ne peuvent pas être des réels car les réels sont écrits avec une valeur
approchée…
 Cas ou valeur peuvent être une constante, une liste de constante ou un intervalle, de
même type que la variable condition ou CHOIX pour respecter la compatibilité de
type.
 Lorsque la variable CHOIX a son contenu qui correspond à une valeur ou un cas
alors l’instruction en face de ce cas est exécutée. Après cela l’on sort de la structure
SUIVANT … FAIRE. Mais si la variable CHOIX a son contenu qui ne correspond pas
à une valeur ou un cas alors dans ce cas aucune instruction n’est exécutée.

Syntaxe CAS 1
SELON condition ACTION 1
Cas 1 : action 1 ;
Cas 2 : action 2 ;
……
Cas n : action n ; CAS 2
FINSI ACTION 2

OU
SUIVANT (CHOIX) Faire CAS 3
DEBUTSUIVANT ACTION 3
Valeur 1 : action 1 ;
Valeur 2 : action 2 ;

Valeur N : action N ;

SINON

Action ;

FINSUIVANT

Ex. :
……………………
A, B, C : entier ;
AFFICHER (‘Entrer un nombre’) ;
SAISIR (C) ;
SUIVANT C FAIRE

31
1 : AFFICHER (‘ le nombre saisi est petit’) ;
2, 3, 4 : AFFICHER (‘ le nombre est juste moyen’) ;
5.. 10 : AFFICHER (‘ le nombre saisi est moyen’) ;
SINON
AFFICHER (‘ le nombre saisi n’est pas autorisé’) ;
FINSUIVANT

EXPLICATION :
Si C vaut 1 alors exécuter le bloc d’instruction : afficher le nombre saisi est petit.
Dans le cas contraire si elle vaut 2 ou 3 ou 4 alors afficher le nombre est juste moyen
Dans le cas contraire si elle est comprise entre 5 et 10 alors exécuter le bloc
d’instruction : afficher le nombre saisi est moyen;
Dans si C ne correspond à aucune des valeurs alors afficher le nombre saisi n’est
pas autorisé.

VII. STRUCTURES ITERATIVES

Elles permettent de répéter un certain nombre de fois une instruction ou un bloc


d’instructions tant qu’une condition est vérifiée.
En effet, lors de la résolution de problèmes, nous sommes souvent amenés à
répéter des actions un certain nombre de fois. Par exemple dans la vie courante,
pour construire une maison, le maçon pose des briques une à une et il répète cette
même action jusqu’à ce que le mur atteigne une certaine hauteur voulue. Et après
cela, l’on pose la charpente de la maison. C’est pareil en algorithme. Par exemple,
lors de l’acquisition des données, l’on voudrait éviter la saisie des valeurs négatives.
Dans ce cas tant que l’utilisateur n’entre pas de valeurs positives, l’on va continuer à
l’inviter à saisir des valeurs positives.
Les boucles sont au nombre de trois ( 3 ) :
 POUR … FAIRE
 TANT QUE … FAIRE
 REPETER … JUSQU'A

1. La structure POUR … FAIRE

Cette structure s’utilise de préférence lorsque l’on connaît exactement le nombre d’itérations
c’est-à-dire le nombre de fois que l’on doit répéter le bloc d’instruction.

Syntaxe

32
POUR index valeur initiale à valeur finale [Pas] FAIRE
DPOUR
Action ;
FPOUR

NB. :
*L’index est aussi appelé compteur car c’est lui qui compte à chaque fois que
l’on parcourt le bloc d’instruction. Il est généralement de type entier et jamais
réel car avec les réels la boucle ne va jamais s’arrêter parce que par exemple
dans l’intervalle 1..2, il existe une infinité de réels ; cet index prendra
successivement les comprises entre la valeur initiale comprise et la valeur
finale comprise.

*Le compteur est initialisé à  « valeur initiale » et à chaque parcours du bloc


d’instructions il est incrémenté ou décrémenté de la valeur du PAS
automatiquement jusqu’à à atteindre « valeur finale ». Après quoi, l’on sort du
bloc d’instructions pour la suite de l’algorithme. Mais avant tout l’on vérifie
d’abord si le compteur est > valeur final. Si tel n’est pas le cas, l’on exécute le
bloc d’instructions, puis l’on revient à nouveau vérifier la condition. Par contre
si tel est le cas, l’on saute le bloc d’instructions et l’on poursuit l’exécution du
programme juste après le bloc d’instructions.

*PAS : c’est la valeur α à ajouter ou soustraire de l’index, quand ce PAS vaut


1 on ne le mentionne pas tandis que quand il diffère de 1 on le mentionne
entre les crochets.

Exemple 1 : Exemple 2 :


POUR i 0 à 50 FAIRE POUR i 0 à 50 [2] FAIRE
DPOUR DPOUR
AFFICHER (‘’ BONJOUR’’) ; AFFICHER (i) ;
FPOUR FPOUR

Permet de répéter l’affichage Per met d’afficher tous les nombres


de « BONJOUR » 51 fois pairs de à 50

2. Boucle TANT QUE…FAIRE

33
Cette structure permet la répétition d’une ou plusieurs actions tant qu’une condition est satisfaite.
La condition est testée avant la première exécution de l’action définie. Une boucle TANT QUE
n'est pas exécutée si la condition est fausse au début

Syntaxe 1 Condition si faux


TANT QUE Condition FAIRE
DTQ
Action ; si vrai
FTQ

Ex. : Action
TANT QUE (a= b) ET (c < 0) FAIRE
DTQ
d a +b+c ;
AFFICHER (‘ La valeur de d est :’, d) ;
FTQ

OU

Syntaxe 2 qui s’apparente à la structure POUR…FAIRE

Compteur valeur initiale ;


TANT QUE (Compteur < = valeur final) FAIRE
DTQ
Action ;
Compteur Compteur+PAS ;
FTQ

34
Compteur valeur initiale

Compteur > valeur finale Si vrai

Si faux
Action

Compteur Compteur+PAS

EX. :
J 1 ;
TANT QUE (J< = 5) FAIRE
DTQ
AFFICHER (‘BONJOUR’) ;
J J+1 ;
FTQ

NB. : Vous avez remarqué que dans la syntaxe 2 de TANT QUE…FAIRE


l’instruction J J+1. Cela est dû au fait que contrairement à la structure
POUR…FAIRE où le compteur s’incrémente de la valeur du PAS
automatiquement à chaque parcours de la boucle, dans la structure TANT
QUE… FAIRE, ce n’est pas le cas. Nous devons nous même l’incrémenter de
façon explicite.

3. Structure : REPETER….JUSQU’A

Cette structure permet la répétition d’une action jusqu’à ce qu’une condition soit vérifiée. Elle
ressemble à la structure itérative tant que, à cette différence près que la condition exprimée
permet l’arrêt du traitement. De plus, elle n’est testée qu’après la première exécution de l’action
définie. L’action est exécutée au moins une fois avant que l’on vérifie la condition.

35
Syntaxe

Compteur valeur initiale


REPETER
Action ;
JUSQU'A (condition vraie)
Action

Exemple 1:

S 1; Compteur Compteur+PAS
REPETER
Si Faux
A C+ 4;
B d mod C;
S S + 1; Compteur > valeur finale Si Vrai

JUSQU’ A S = 10;

Exemple 2:
Compteur 1 ;

REPETER

AFFICHER (‘’ BONJOUR’’) ;

Compteur Compteur +1 ;

JUSQU'A (Compteur › 50)

*On va exécuter le bloc d’instructions jusqu’à ce que S vale 10 dans l’exemple 1


*et jusqu’ à ce que le compteur soit supérieur à 50 dans l’exemple 2.

36
L’ART DE LA PROGRAMMATION

Cette partie est très importante dans la réussite de l’élaboration de vos algorithmes.
Certes, nous devons concevoir des algorithmes mais pas n’importe comment.
L’élaboration de l’algorithme suit des directives qui ne sont pas obligatoire mais vous
aidera énormément dans la compréhension et la lisibilité de vos algorithmes. De
surcroît ces directives vous aideront énormément dans la recherche d’erreurs dans
votre algorithme.
Voici quelques démarches à suivre :

1. Le DEBUT et la FIN de l’algorithme ou d’une structure doivent être sur la


même colonne. Cela permet de mieux structurer l’algorithme et de savoir où
un traitement débute et où il se termine.

2. Faire toujours des décalages vers la droite lorsqu’on débute un traitement lié à
une structure et aligner les instructions liées à un même traitement, sur la
même colonne. Cela permet de mieux structurer l’algorithme et de l’aérer.

3. Avant l’écriture de l’algorithme, il faudra toujours voir s’il n’ya pas de cas
particulier (s). S’il y en a, il faudra gérer ce(s) cas particulier(s) avant de gérer
le cas général (exemple pour la division de a/, le cas particulier est lorsque
b=0).

4. La lisibilité : débarrassez-vous des instructions non nécessaires à la résolution


d’un problème, au niveau du programme et commentez souvent vos lignes
d’instructions.

5. L’exactitude : c’est l’aptitude d’un programme à fournir le résultat voulu et à


répondre aux spécifications du problème posé.

OPTIMISATION D’UN PROGRAMME

Optimiser un programme informatique, c’est le rendre de telle sorte qu’il :


 Occupe moins de place dans la mémoire centrale lors de son chargement en
vue de son exécution ;
 Que le microprocesseur mette moins de temps pour l’exécuter.

Comment optimiser un programme ?


 Utiliser le moins de variable possible ;
 Eviter d’allonger inutilement le programme par l’utilisation d’instructions non
nécessaires ;
 Utiliser les solutions les plus simples pour l’exécuter.

TRAVAUX DIRIGES D’ALGORITHME

37
Exercice 0
Ecrire un programme qui échange la valeur de deux variables.
Exemple, si a = 2 et b = 5, le programme donnera a = 5 et b = 2.

Exercice 1
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et
affiche le carrée de ce nombre.

Exercice 2
Ecrire un programme qui lit le prix HT d’un article, le nombre d’articles et le taux de
TVA, et qui fournit le prix total TTC correspondant. Faire en sorte que des libellés
apparaissent clairement.

Exercice 3
Ecrire un algorithme qui après saisi d’un temps en seconde, converti ce temps en
heure(H), minute (mn) et seconde(s). Ex.: 4000s = 1h 06 mn 40 s

Exercice 4
Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si
leur produit est négatif ou positif (on laisse de coté le cas où le produit est nul).
Attention toutefois : on ne doit pas calculer le produit des deux nombres.

Exercice 5 :
Un magasin d’impression de document facture 25fcfa les 10 premières impressions,
20fcfa les 30 suivantes, et 10fcfa au-delà .Ecrivez un algorithme qui demande à
l’utilisateur le nombre d’impression à effectuer et qui affiche la facture
correspondante.

Exercice 6
Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe
de sa catégorie :
* ”Poussin” de 6 à 7 ans
*”Pupille” de 8 à 9 ans
*”Minime” de 10 à 11 ans
*”Cadet” après 12 ans

Exercice 7
Ecrire un algorithme qui permet de résoudre et afficher les résultats de l’équation du
second degré suivante : ax2+bx+c=0.

Exercice 8
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que
la réponse convienne. En cas de réponse supérieure à 20, on fera apparaitre un
message : Plus petit ! , et inversement, Plus grand ! Si le nombre est inférieur à 10.

Exercice 9
Proposer un algorithme qui permet de calculer et afficher le gain de vendeurs de
journaux qui vendent uniquement un et un seul type de journal. Les règles de gestion
sont les suivantes :
- Vendeurs de journaux journaliers : gain d’une commission de 10% par journal ;

38
- Vendeurs de journaux hebdomadaires : gain d’une commission de 5% par
journal ;
- Vendeurs de journaux mensuels : gain d’une commission de 20% par journal.

Exercice 10
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des
entiers jusqu’`a ce nombre. Par exemple, si l’on entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul.

Exercice 11
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.
NB : la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

Exercice 12
Ecrire un algorithme qui effectue la multiplication de deux (2) nombres entiers positifs
saisis au clavier en utilisant uniquement l’addition. Afficher le résultat du calcul.

Exercice 13
Proposer un algorithme qui à partir d’un réel noté x et d’une valeur entière appelée n,
retourne x à la puissance n en utilisant une boucle répétitive.

Exercice 14
Une compagnie de transport pratique ses tarifs en fonction de la catégorie du
voyageur :
 Voyageur normal (N) : plein tarif ;
 Abonné à la compagnie (A):40% de réduction ;
 Enfants de moins de 10 ans (E) : gratuit ;
 Employé de la compagnie (T) : gratuit ;
 Parent d’un employé (P) : 50% de réduction ;
 Personne âgée de 70 ans et plus (V) : 30% de réduction.
Ecrire un algorithme qui permet, connaissant le tarif de base normal du voyage, de
calculer le prix à payer par un voyageur donné.

Exercice 15
Réaliser un programme « distributeur automatique de billets de banque ».
L’automate contient des billets de 1000f, 2000f, 5000f et de 10 000. Etant donnée
une demande de retrait de l’utilisateur, le programme calcule et affiche le nombre de
billets de chaque valeur. Le programme devra minimiser le nombre de billets
distribués. Réaliser l’algorithme de ce distributeur automatique de billets de banque.

CHAPITRE IV : LES SOUS PROGRAMMES

39
OBJET : Ce chapitre traite des la décomposition des programmes informatique en
sous partis, appelés sous programmes.

OBJECTIF : A la fin de ce chapitre, vous serez à mesure de maîtriser la


programmation modulaire et l’intérêt de cette modulation

Définition
Un programme écrit en un seul bloc est difficile de maintenance. Pour pallier ce
problème l’on va subdiviser le programme en plusieurs blocs appelés : Sous-
programme.
Ces sous-programmes est appelés de façon individuelle par un programme dit
programme principale.
Selon le résultat retourné par ces sous-programmes et leurs fonctionnalités,
on distingue deux grandes catégories qui sont :
* Les fonctions ;
* les procédures.

I-LES FONCTIONS

Une fonction est un sous-programme qui retourne une valeur vers le programme
appelant. Elle comporte également 3 parties.

1. L’entête

Syntaxe
Fonction nom_fonction (Paramètre1 : type1,…, Paramètre n : type n) : type ;
Ex : Fonction calcul(x : entier , y : réel) : réel ;
Fonction calcul (Var x : entier, Var y : réel) : Réel ;

2. Partie déclarative
Idem que celle d’un algorithme normal mais pour une fonction, elle est généralement
facultative lorsque l’on utilise uniquement les valeurs des paramètres de la fonction
ou les valeurs des paramètres provenant de l’algorithme principal pour effectuer les
opérations internes de la fonction.

3. Le corps de la fonction

Syntaxe
Début _ fonction
< bloc d’instruction> ;
Fin _ fonction

40
La syntaxe générale de la fonction est donc :

FONCTION nom_fonction (paramètre : type) : type ;

Var nom_variable : type ;

DEBUT _ FONCTION
< Bloc d’instruction> ;
FIN _ FONCTION

4. Appel d’une fonction


La caractéristique principale d’une fonction est qu’après l’exécution de lignes
d’opération, elle retourne une valeur vers le programme appelant .Mais pour cela il
faudrait au préalable l’appeler ou la solliciter. Cela s’écrit comme suit :

 Appel : dans le programme appelant

Syntaxe
Variable nom_fonction (arguments) ;
Ex : x calcul (a, b) ;

 Retourner un résultat vers le programme appelant : dans la fonction

Syntaxe
Nom fonction résultat d’opération ;
FONCTION CARRE (y : entier) : entier ;
Ex : Calcul c + d ;
DEBUT _ FONCTION
CARRE y * y ; (*retour*)
Programme appelant
FIN_ FONCTION
ALGORITHME OPERATION
Var x, c : entier ;
DEBUT
Afficher (‘’entrer un entier ’’) ;
Saisir (x) ;
C CARRE(x) ; (*Appel*)
Afficher (‘’Le carrée de :’’, x, ‘’est : ‘’, c) ;
FIN

II- LES PROCEDURES

Ce sont des sous-programmes qui ne retournent pas de valeur au programme


appelant .En son sein on peut effectuer des saisies, des traitements et afficher des
résultats d’opération. Elles sont souvent considérées comme un programme
complet. Elles comportent aussi 3 parties :

41
1- L’entête

Syntaxe
PROCEDURE nom_procédure (paramètres :types) ;

Ex : PROCEDURE affiche(x : entier) ;

2- Partie déclarative
Idem que pour la fonction.

3- Le corps

Syntaxe
DEBUT _ PROCEDURE
<bloc d’instruction>
FIN_PROCEDURE

Syntaxe générale d’une procédure


PROCEDURE nom _ procédure (paramètre : type) ;

Var nom variable : Type ;

DEBUT _ PROCEDURE
< bloc d’instruction>
FIN _ PROCEDURE

 Appel d’une procédure : dans le programme appelant

Syntaxe : NOM_ PROCEDURE (argument) ;


PROCEDURE Valeur () ;
Ex. : Affiche(y) ;
DEBUT _ PROCEDURE
afficher (‘’entrer un entier’’) ;
ALGORITHME OPERATION Saisir(x) ;
Var x, c : entier FIN_PROCEDURE
DEBUT
Valeur () ;
C  carré (x) ;
PROCEDURE affiche (y : entier) ;
Affiche (c) ; DEBUT _ PROCEDURE
FIN afficher (‘’ Le résultat est : ‘’ ,y) ;
FIN _ PROCEDURE

Exercice d’application
Ecrire un programme qui permet de calculer le périmètre d’un rectangle en utilisant
une fonction pour le calcul du périmètre et une procédure pour afficher le résultat.

42
Résolution
ALGORITHME PERIMETRE
VAR l, L, P : réels ;
DEBUT
DIMENSION () ;
P=P_ REC (l, L) ;
AFFICHAGE(P) ;
FIN

(*Sous-programme*)
PROCEDURE DIMENSION () ;
DEBUT _ PROCEDURE
Ecrire (‘’ Entrer la longueur et la largeur ‘’) ;
Lire (L, l) ;
FIN _ PROCEDURE ;

FONCTION P_ REC (x, y : réels) : réels ;


DEBUT _ FONCTION
P _ REC = 2 * (L + l) ;
FIN _ FONCTION

PROCEDURE AFFICHAGE (z : réel) ;


DEBUT _ PROCEDURE
AFFICHER (‘’ Le périmètre est :’’, z) ;
FIN _ PROCEDURE

III- LES VARIABLES GLOBALES ET LOCALES

1- Variable globale
Une variable globale est une variable déclarée dans la partie déclarative du
programme principale. Elle peut être utilisée aussi bien dans le corps du
programme principal que dans le corps des sous –programmes. Sa durée de vie est
la durée de vie du programme principale.

2- Variable locale
Une variable locale est une variable déclarée dans la partie déclarative d’un sous-
programme. Elle est utilisée uniquement dans le sous-programme ou elle a été
déclarée et dans d’autre sous-programme de celui-ci. Sa durée de vie est la durée
de vie du sous-programme.

43
Exemple
ALGORITHME VLG
Var a, b, x : réel ;
Variable Globale x
FONCTION VL () : réel
Var y : entier
DEBUT_ FONCTION
y x + 1 ;
FIN _ FONCTION Variable Locale y

DEBUT
x a+ b ;
FIN

IV- LES PARAMETRES

1- Paramètre effectif
Un paramètre effectif est une variable globale dont la valeur sera effectivement
utilisée dans un sous-programme. Cette valeur est généralement le contenue d’une
variable globale ou d’une variable d’un sous-programme qui appel un autre sous-
programme. Cette valeur est transmise à un paramètre du sous- programme appelé.

2- Paramètre muet
C’est un paramètre se trouvant entre les parenthèses en face du nom du sous-
programme. Il est muet tout simplement parce qu’il reçoit son contenu d’un
paramètre effectif.

3- Passage de paramètre

c- Passage par valeur


Ici, c’est la valeur du paramètre effectif qui est affecté directement au muet.

Syntaxe
Fonction Nom fonction (paramètre muet : type) : type
Ex : Fonction PP (x : entier) : entier ;

d- Passage par adresse


Ici, c’est l’adresse du paramètre effectif qui est passée au paramètre muet.

44
Syntaxe
Nom _ fonction (VAR paramètre muet : type) : type ;

Ex : Fonction PP (VAR x : entier) : entier ;

5
a a $FFF
5

$FFF
x 5 x

Passage par valeur Passage par adresse

Exercice d’application
Ecrire un programme qui permet de calculer le tarif du transport d’une société selon
les critères suivants :
- Enfant : réduction 50% ;
- Handicapé : réduction 10% ;
- Adulte : Tarif normal ;
NB :* Veuillez utiliser la structure suivant… faire.
*Utiliser des procédures pour les affichages et les saisies et des fonctions pour
les calculs.

Résolution
ALGORITHME TRANSPORT
Var tarif, clt : entier ;
DEBUT
Affiche 1 () ;
Tarif calcul (tarif, clt) ;
Affiche 2 (tarif) ;
FIN
(*Sous-programme*)
PROCEDURE Affiche 1 ()
DEBUT_PROCEDURE
Afficher (‘’ Entrer le montant du transport ‘’) ;
Saisir (tarif) ;
Afficher (‘’ Pour les enfants taper 1 ‘’) ;
Afficher (‘’ Pour les handicapés taper 2‘’) ;

45
Afficher (‘’ Pour les adultes taper 3 ‘’) ;
Saisir (clt) ;
FIN_PROCEDURE

FONCTION calcul (x, y : entier) : entier ;


DEBUT_FONCTION
Suivant y faire
‘’1’’: Calcul x – (x *0.5);
‘’2’’: Calcul x – (x *0.1);
‘’1’’: Calcul x;
FIN_FONCTION

PROCEDURE Affiche 2 ()
DEBUT_PROCEDURE
Afficher (‘’le tarif du transport à payer est :’’, tarif) ;
FIN_PROCEDURE

EXERCICES D’APPLICATION

Reprendre ces deux exercices d’application en utilisant des FONCTIONS pour les
opérations et des PROCEDURES pour les affichages et les saisies de données.

Exercice 1
Proposer un algorithme qui permet de calculer et afficher le gain de vendeurs de
journaux qui vendent uniquement un et un seul type de journal. Les règles de gestion
sont les suivantes :
- Vendeurs de journaux journaliers : gain d’une commission de 10% par journal ;
- Vendeurs de journaux hebdomadaires : gain d’une commission de 5% par
journal ;
- Vendeurs de journaux mensuels : gain d’une commission de 20% par journal.

Exercice 2
Une compagnie de transport pratique ses tarifs en fonction de la catégorie du
voyageur :
 Voyageur normal (N) : plein tarif ;
 Abonné à la compagnie (A):40% de réduction ;
 Enfants de moins de 10 ans (E) : gratuit ;
 Employé de la compagnie (T) : gratuit ;
 Parent d’un employé (P) : 50% de réduction ;
 Personne âgée de 70 ans et plus (V) : 30% de réduction.
Ecrire un algorithme qui permet, connaissant le tarif de base normal du voyage, de
calculer le prix à payer par un voyageur donné.

46
CHAPITRE V : LES STRUCTURES DE DONNÉES STATIQUES

OBJET : Ce chapitre traite des variables plus évoluées que celles déjà vues (entier,
réel, caractère, booléen) et nécessaires pour résoudre certains problèmes.

OBJECTIF : A la fin de ce chapitre, vous devrez être à mesure de savoir utiliser les
chaînes de caractères, les tableaux, les intervalles, les ensembles, les énumérés, les
enregistrements.

INTRODUCTION
Dans les chapitres précédents, nous avons présenté quatre types simples ou
scalaires c’est-à-dire des variables qui ne peuvent contenir une et une seule valeur à
la fois. Ces types simples permettent de manipuler aisément des nombres ou des
caractères.
En effet, il arrive fréquemment que l’on ait besoin de manipuler non plus une simple
variable de ces types scalaires mais une suite de variables de ceux-ci. Ainsi nous
pouvons être amenés à traiter d’autres sortes d’informations, par exemples :des mois
de l’année, les jours de la semaine, les marques de voiture, des informations sur une
personne…
Pour répondre à de tels besoins, l’on a mis en place des structures pour pouvoir
accueillir ces données : LES STRUCTURES DE DONNEES, permettant de donner
un nom, non plus à une seule valeur, mais à un ensemble de valeurs.
En clair LES STRUCTURES DE DONNEES STATIQUES sont des variables
évoluées car elles peuvent contenir plusieurs valeurs à la fois et une fois leur
taille fixée, il est impossible de la modifier durant le programme, d’où le terme
« statique ».
Dans ce chapitre nous en étudierons six :
 Les chaînes de caractères ;
 Les tableaux ;
 Les intervalles ;
 Les ensembles ;
 Les énumérés ;
 Les enregistrements.

I. LES CHAINES DE CARACTERES


1. Définition

Une chaîne de caractères est une suite de caractères juxtaposés, c’est-à-dire les
différents caractères sont collés les uns aux autres. Exemple :’’Seigneur ‘’.
47
Une chaîne de caractères est définie par son nom, sa taille (le nombre maximal de
caractères que cette chaîne peut contenir).
Syntaxe de déclaration :
VAR
Nom_chaîne : CHAINE [longueur maximale] ; (*avec longueur maxi dans
l’intervalle [1 ; 255]*)
Ex. : VAR nom : CHAINE [30] ;
Nous venons de déclarer une chaîne de caractères nommée nom et pouvant
contenir au maximum 30 caractères. La variable nom peut contenir entre 1 et 30
caractères mais pas plus de 30.

2. L’affectation

C’est le fait d’attribuer une valeur à une chaîne de caractères. Nous pouvons le faire
de trois manières :
Syntaxe 1 : Nom_chaîne  ‘’valeur de type chaîne de caractères’’ ;
Syntaxe 2 : Nom_chaîne1  Nom_chaîne2 ;
Syntaxe 3 : SAISIR (Nom_chaîne) ; 

Ex. : VAR Nom : CHAINE [30] ; PSEUDO : CHAINE [20] ;


……………………………
Syntaxe 1 : Nom ‘’ Le Sikafouè’’ ;
Syntaxe 2 : PSEUDO Nom ;
Syntaxe 3 : AFFICHER (‘’Entrer votre nom et pseudo’’) ;
SAISIR (Nom, PSEUDO) ;

3. Parcourt de la chaîne

L’on peut parcourir ou atteindre les différents éléments d’une chaîne de caractères
(les caractères qui la composent) grâce à un indice (entier >0) débutant par 1.
Syntaxe : Nom_ chaîne[indice] 
En fait l’indice ici est la position de cet élément, le caractère dans la chaîne de
caractère.

Ex. : Pour Nom ‘’ Le Sikafouè’’ ;


Nom [1] désigne le ‘L’ ; Nom [2] désigne le ‘e’ ; Nom [3] désigne le ‘└┘’ espace
entre e de Le et le S de Sikafouè…

4. Les fonctions applicables sur une chaîne de caractères

 LONGUEUR(M) : Détermine la longueur de la chaîne de caractères M c’est-


à-dire le nombre de caractères qu’elle contient réellement.

48
Ex. : VAR Nom : CHAINE [30] ;
Nom ‘’ Le Sikafouè’’ ;
Ainsi LONGUEUR (Nom) affichera 11.On compte tous les caractères qui se trouvent
dans la chaîne de caractères y compris les espaces car ils sont aussi des caractères.

 COPIER (M, i, j) : Permet de copier j caractères de la chaîne de caractères


M à partir de son caractère n° i inclus, dans une autre chaîne de caractères.

  Ex. : VAR Texte : CHAINE [30] ; C : CHAINE [20] ;


……………………..
Texte ‘’ Merci Seigneur mon Dieu’’ ;
C COPIER (Texte, 7, 8) ;(*cette instruction demande de copier 8
caractères de la chaîne Texte à partir de son caractère n ° 7 inclus*)
On aura donc C qui contiendra ‘’ Seigneur’’.

 CONCATENER (A, B) : Permet de concaténer, souder les chaînes de


caractères A et B, c’est-à-dire prendre la 2 e chaîne ici B et la coller à la 1ere
chaîne de caractères ici A. Puis mettre le résultat de cette opération dans
une autre chaîne de caractères.
Donc CONCATENER (A, B) ≠ CONCATENER (B, A).

Ex. : VAR Nom : CHAINE [20] ; Prenom: CHAINE [20] ; Nom_C : CHAINE [45] ;
…………….
Nom ‘’ Treich’’ ; Prenom ‘’ Ville ‘’ ;
Nom_C CONCATENER (Nom, Prenom) ;
Nom_C contiendra alors ‘’TreichVille’’. Vous que les deux mots collés. Si d’aventure
l’on désire les séparer, il faudra mettre un espace matérialiser par le symbole └┘.
Nom_C CONCATENER (Nom,’’└┘‘’ ,Prenom) ;
Nom_C contiendra désormais ‘’Treich Ville’’

 INSERER (L, M, K) : Permet d’insérer la chaîne de caractères L dans la


chaîne de caractères M mais à partir de son caractère n° k c’est-à-dire juste
après le caractère n° k-1 de la chaîne de caractères M.

Ex. : Nom ‘’ Treich’’ ; Prenom ‘’ Ville ‘’ ;


Nom_C INSERER (Nom, Prenom, 4) ; (* Cette instruction
ordonne de prendre le contenu de la chaîne Nom et de l’insérer dans la chaîne
Prenom à partir de son caractère n°4 c’est-à-dire juste après le caractère n° 3 de la
chaîne de caractères Prenom*) .
La Prenom contiendra finalement ‘’ TreVilleich’’.

 EFFACER (M, i, j) : Permet d’effacer j caractères de la chaîne de caractères


M à partir de son caractère n° i inclus.

49
Ex. : VAR Nom : CHAINE [20] ;
………………………….
Nom ‘’ Trinité’’ ;
EFFACER (Nom, 6, 2) ; (* Cette instruction ordonne de se positionner sur
le 6e caractère de la chaîne Nom et à partir de ce 6 e caractère inclus,
d’effacer 2 caractères, vers la droite*).
Ainsi la chaîne de caractères Nom contiendra finalement ‘’Trini ‘’

5. Les opérateurs applicables sur une chaîne de caractères

Ce sont : +, =, ≠, <, >, ≤, ≥.


 + : joue le même rôle que la concaténation.
Ex. : Nom_C Nom + Prenom ;
 = : Permet de comparer deux chaînes. Ex. : Si Nom = Prenom Alors …. ;
 ≠ : Permet de différencier deux chaînes. Ex. : SI Nom ≠ Prenom Alors … ;
 <, >, ≤, ≥ : Permettent de savoir si une chaîne précède ou succède une autre,
alphabétiquement. Ex. : Si Nom < Prenom Alors … Ainsi ‘’Amani < ‘’Youan’’.

EXERCICES D’APPLICATION

Exercice 1
Ecrire un algorithme qui permet de saisir une phrase terminée par un point (.) et de
compter et afficher le nombre de mots de cette phrase.
Cette phrase ne comportera que des virgules et un point comme ponctuation.

Exercice 2
Proposer un programme qui permet dans une phrase saisie de pouvoir remplacer
une lettre par une autre. L’utilisateur saisira la lettre à remplacer et la lettre
remplaçante.

Exercice 3
Ecrire un algorithme permettant de calculer le nombre de caractères d’un mot saisi
au clavier.

Exercice 4
Ecrire un algorithme qui permet après saisi du nom et prénoms d’un étudiant
d’extraire et afficher les initiales du nom et prénoms.

50
II. LES TABLEAUX

1. Définition
En informatique, un tableau (array en anglais) est une structure de
données de base qui est un ensemble d'éléments (des variables ou autres entités
contenant des données), auquel on a accès à travers un numéro d'index (ou indice).
Dans les langages classiques, tous les éléments d'un tableau doivent être du même
type des entiers, des réels, des booléens, des chaînes de caractères, des tableaux,
des enregistrements…
Dans les langages de plus haut niveau (comme Python, APL, etc.), cette restriction
n'existe plus.

Un tableau est caractérisé par :


 Son nom ;
 Sa taille : nombre maximal d’éléments du tableau ;
 Et le type des éléments.

2. Les différents types de tableaux

L’on distingue des tableaux à une (1) dimension, à deux (2) dimensions, à trois (3),
…, à n dimensions. Dans ce document nous aborderons les tableaux dimension 1 et
dimension 2.

2.1. Les tableaux à une dimension.

a. Définition
Un tableau aussi appelé un vecteur est une structure de donnée linéaire qui permet
de stocker des données de même type. Chacune des valeurs est repérée par un
indice indiquant la position de la donnée dans le tableau.

b. Déclaration
Un tableau est déclaré comme un type de donnée. Nous lui donnons un nom, une
valeur d’indice minimale et une valeur d’indice maximale correspondant au nombre

51
maximal de cases le composant. Nous déclarons également l’indice qui permet
d’adresser les différentes cases. L’indice doit obligatoirement être du type entier.

Syntaxe : nom_tableau: TAB [nombre de cases maxi] DE TYPE ;

Exemple :
Les moyennes de dix étudiants d’une classe sont stockées dans un tableau linéaire
suivant :

1 2 3 4 5 6 7 8 9 10
MOY 5 12 14 7.5 10 9.5 13 8 6 10

On accède au contenu de chaque case comme suit :


nom_tableau [l’indice de la case]
Par conséquent :
Le premier étudiant a pour moyenne : MOY [1] = 5
Le deuxième étudiant a pour moyenne : MOY [2] = 12
Mais nous déclarons ce tableau de la manière suivante
VAR MOY : TAB [10] de réels ;

Exercice d’application : Soit le tableau de valeurs suivant :


1 2 3 4 5 6 7 8 9 10 11 12 13
T 15 12 14 7 10 19 13 20 6 10 17 11 18

QUESTIONS REPONSES

1. Quel est la valeur de l’indice minimal ?..............................................................


2. Quel est la valeur de l’indice maximal ?.............................................................
3. A quel indice se trouve la valeur 20 ?................................................................
4. Quelle valeur se trouve à l’indice 12 ?...............................................................
5.  A quel indice se trouve la plus petite et la plus grande valeur ?.......................
6. Quelle est la moyenne des 3 valeurs situées aux indices 7, 9, et 13 ?.............

Remarque :
Le nom d’un tableau n’est jamais utilisé seul, dans toutes les instructions (saisie,
affichage, calcul, test), il est toujours suivi d’un indice, entouré de crochets.

c. Renseignement ou affectation d’élément dans un tableau

Le renseignement d’un tableau consiste en un remplissage des différentes cases


qui le constituent. Cette opération peut se faire de deux manières différentes :
*en renseignant les cases une à une à partir de la première ;
*en adressant les cases directement, et ce dans un ordre quelconque.

52
L’affectation c’est le fait d’attribuer une valeur à une case du tableau et cette
affectation se fait case par case. Nous pouvons le faire de trois manières différentes.

Ex1. : Tableau à une dimension


nom_tableau[n° de case] valeur ; ou
nom_tableau[n° de case j] nom_tableau[n° de case k] ; ou
SAISIR (nom_tableau[n° de case]) ;

 Ainsi
T [5] 20 ; T[2] 55  ;

1 2 3 4 5 6
55 20

 Soit P une variable de type entier


P T [2] ; Permet de prendre le contenu de la 2e case du tableau T et de
la mettre dans la variable P.
Aussi T [6] T [5] ; Permet de prendre le contenu de la 5e case du
tableau T et de la mettre dans la 6e case de celui-ci.
 SAISIR (T [3]) ; Permet de ranger ce qui sera saisi dans la 3 e cellule du
tableau T

Exemple : Ecrire un algorithme qui permet de renseigner un tableau de dimension 1


de 10 entier.

ALGORITHME SAISI_TABLEAU
VAR t : tab [10] de entier ;
n : entier ;
DEBUT
POUR i 1 à 10 FAIRE
DPOUR
AFFICHER (‘’Entrer le nombre n° ‘’, i) ;
SAISIR(t[i]) ;
FPOUR
FIN

Exercice d’application
Ecrire un programme qui permet de stocker dans un tableau les noms des
élèves saisi de façon aléatoire. Le programme devra permettre d’insérer le nom d’un
élève dans le tableau après saisi de son numéro.

d. Edition d’un tableau

53
Nous parcourons les différentes cases du tableau en faisant varier l’indice et nous
affichons leur contenu au fur et à mesure.
Exemple : Ecrire l’algorithme permettant d’éditer le contenu du tableau suivant :

A b c d e f g h i j

Correction
……………………………………………… ………………………………………….
……………………………………………… …………………………………………..
……………………………………………… …………………………………………..
……………………………………………… ………………………………………….

e. Différentes opérations possibles sur les tableaux

Sur la structure de données de type tableau, il est possible de faire plusieurs


traitements, comme par exemple le recherche du minimum ou du maximum des
cases, le produit, la moyenne …

Exemple 1 : Somme des entiers d’un tableau


Ecrire un algorithme qui permet de calculer la somme des nombres
d’un tableau de dimension 1 de 35 entiers

Exemple 2 : Moyenne des entiers d’un tableau


Reprendre l’exercice précédent en calculant cette fois le produit et la moyenne
des valeurs stockées dans le tableau

Exemple 3 : Recherche d’un élément dans un tableau

Pour rechercher un élément dans un tableau, nous disposons de deux solutions :


 Soit nous connaissons l’indice de la case où il figure .Il suffit alors de vérifier
que le contenu est bien celui que l’on recherche.
 Soit nous connaissons le contenu de la case mais pas son indice.
Il paraît évident que la première recherche est très simple, aussi nous nous
attèlerons à présenter la 2e à l’aide des exemples suivants :

1. Rechercher dans un tableau de 20 noms de chanteurs, un nom saisi au clavier.


2. Rechercher le nombre d’occurrence d’un Réel saisi au clavier

Exemple 4 : tri d’un tableau

54
1. Ecrire un algorithme qui permet de ranger en ordre croissant les 20 entiers d’un
tableau de dimension 1.
2. Ecrire un algorithme qui permet de ranger en ordre décroissant les 25 entiers d’un
tableau de dimension 1.
3. M. ANANDE voudrait avoir pour le réseau de sa structure le bilan de toutes ses
adresses IP.
Chaque PC est caractérisé par :

 Son groupe
 Son nom
 Son adresse
 Sa classe de réseau
Les 3 sous réseaux de la structure ont pour adresse : classe A 100.124.10.0
classe B 150.120.14.0 classe C 192.168.10.0.
Proposer un algorithme qui permettra de déterminer le sous réseau, la classe
d’adresse d’un PC après saisi de son adresse IP dans un tableau de
dimension 1.

Exemple 5 : produit scalaire


Ecrire un programme qui permet de calculer le produit scalaire de deux vecteurs de
Dimension 1 de N éléments.

Exemple 6 : redimensionnement de tableau


Ecrire un algorithme qui demande de renseigner un tableau T de dimension 1 de 15
entiers positifs (le programme devra le contraindre à saisir des entiers positifs) puis
d’affecter tous les entiers pairs dans un tableau T2 et les entiers impairs dans un
tableau T3 tout en redimensionnant T2 et T3 à chaque affectation.

Exemple 7: redondance de caractères dans un tableau


Proposer un algorithme qui permet après remplissage d’un tableau de caractères de
calculer et afficher le pourcentage d’apparition d’un caractère dans le tableau puis
d’afficher le tableau en l’inversant.

2.2. Tableaux de dimension 2

a. Définition
Lorsqu’un traitement utilise plusieurs tableaux à une dimension, subissant le
même traitement, on utilise un seul tableau à 2 dimensions. Cette nouvelle forme de
tableau possède un identifiant unique. Chaque case est identifiée par deux indices :
l’un indiquant la ligne et l’autre la colonne.

b. Déclaration

55
Syntaxe : VAR nom_tableau : TAB [nombre de ligne] [nombre de colonne] DE
TYPE ;

Exemples :
VAR T : TAB [10] [15] DE ENTIER ;

Accès à un élément du tableau : Soit BTS le tableau à 2 dimensions suivant :


Colonne
1 2 3 4 5
Ligne 1 a b d f t
2 j u p m k

‘u’ se situe à la ligne 2 colonne 2.On note BTS [2] [2].


Veuillez indiquer la position des autres lettres
…………………………………………………………………………………………………
…………………………………………………………………………………………………
NB. : Pour parcourir un tableau de dimension 2, on procède comme suit :
*Soit on maintient une ligne et on parcourt toutes les colonnes avant de passer
à la ligne suivante.
*Soit on maintient une colonne et on parcourt toutes les lignes avant de passer
à la colonne suivante.
*Pour cela, il est conseillé d’utiliser 2 boucles, l’une à l’intérieur de l’autre.

Exemple : Proposer un algorithme qui permet de faire la somme des entiers d’un
tableau de dimension 2 de 20 éléments.

ALGORITHME SOMME_TABLEAU
VAR T : TAB [5] [4] DE ENTIER ;
i, j , som :entier ;
DEBUT
(*initialisation de la somme*)
Som 0 ;
(*renseignement du tableau*)
POUR i 1 à 5 FAIRE
Dpour
POUR j 1 à 4 FAIRE
Dpour
ECRIRE (‘’entrer l’entier de ligne’’, i, ‘’et de colonne’’,j) ;
LIRE(T[i][j]) ;

(* Traitement *)
som som+ T[i][j] ;
Fpour
Fpour

56
(*Affichage du résultat*)
ECRIRE (‘’la somme de tous les entiers du tableau est :’’,som) ;
FIN

c. Affectation

Ex. : Tableau à deux dimensions

nom_tableau[n° de ligne] [n° de colonne] valeur ; ou


nom_tableau[n° ligne j] [n° colonne k] nom_tableau[n° ligne S] [n° colonne L] ;
ou SAISIR (nom_tableau[n° de ligne] [n° de colonne]) ;

 T [1] [3] ‘D’ ; T [4] [7] ‘H’ ;


 T [1] [3] T [4] [7] ; Permet d’attribuer le contenu de la case se trouvant
à l’intersection de la ligne 4 et de la colonne 7, à la case se trouvant à
l’intersection de la ligne 1 et de la colonne 3.
 SAISIR (T [3][7]) ; Permet de ranger ce que l’utilisateur saisi dans la cellule se
trouvant à l’intersection de la ligne 3 et de la colonne 7.

2.3. Imbrication des tableaux

Un tableau peut en imbriquer un autre c’est-à-dire qu’un tableau peut se retrouver à


l’intérieur d’un autre tableau.
Dans ce cas les tableaux à imbriquer doivent nécessairement être déclarés
dans la partie TYPE
Ex. : TYPE
P : TABLEAU [7] de CHAINE ;
L : TABLEAU [8] de P ;
VAR
M : L;

2.4. Définition de constante de type Tableau

Il est souvent nécessaire, dans la résolution de certains problèmes, de définir des


constantes de type tableau. Ici en effet, l’on déclare le tableau et l’on l’initialise en
même temps c’est-à-dire qu’on lui attribue déjà ses valeurs. Mais une fois les valeurs
du tableau attribués, on ne pourra plus les modifier car l’on a défini le tableau dans la
partie CONST (donc ses éléments sont des constantes).

SYNTAXE
CONST
Nom_cste : TABLEAU [taille_tableau] de type_éléménts = (éléménts1,
éléménts2,…, éléménts n) ;

57
Ex1. : CONST T: TABLEAU [3] de ENTIER = (14, 25, 17) ;

On aura T comme suit :


14 25 17

Ex2. : CONST T: TABLEAU [3] [4] de CARACTERE = ((‘c’, ‘r’, ‘j’, ‘k’), (‘o’, ‘p’, ‘h’,
‘u’), (‘e’, ‘f’, ‘y’, ‘g’));

2.5. Passage de tableau en paramètre, à une fonction ou à une procédure

Méthode 1 :
VAR nom_tableau[taille] de Type_élément.
Ici le tableau doit avoir la même taille et le même type d’éléments que le tableau
utilisé lors de l’appel de la fonction ou de la procédure.
Pour passer un tableau en paramètre réel à une fonction ou une procédure lors de
l’appel de ces dernières, on le fait en mentionnant simplement le tableau.

Ex :
ALGORITHME test1 ;
VAR T: TABLEAU [10] de REEL ;
I :ENTIER ; Som : REEL ;

FONCTION Calculer_somme(VAR p : TABLEAU [10] de REEL) : REEL (*même


taille et même type que le tableau T*)
VAR e : entier ; S : réel ;
DEBUT_FONCTION
S 0 ;
Pour e 1 à 10 FAIRE
Dpour
S S + p [e];
Fpour
Calculer_somme S ;
FIN_FONCTION

DEBUT (*Programme principal*)

(*renseignement du tableau*)
POUR I 1à 10 FAIRE
Dpour
AFFICHER( ‘’ Entrer la valeur n°’’ , I) ;
SAISIR ( T[I]);
Fpour
(* Appel de la fonction en mentionnant simplement le nom du tableau T*)

58
S Calculer_somme(T); 
AFFICHER(‘’ La somme est :’’, s) ;
FIN.

Méthode 2 :

Déclarer dans la partie TYPE, un tableau. Au niveau du paramètre formel, déclarer


une variable de type, le tableau déclaré dans la partie TYPE. Au niveau du
paramètre réel, utiliser une variable déclarée dans la partie VAR, de type, le tableau
déclaré dans TYPE et utiliser cette dernière.
Ex. :
ALGORITHME test2;
TYPE
T: TABLEAU [10] de REEL ;
VAR
D : T ;
I :entier ; Som : réel ;

FONCTION Calculer_somme(VAR p : T) : REEL (*p de type T déclaré dans la


partie TYPE*)
VAR e : entier ; S : réel ;
DEBUT_FONCTION
S 0 ;
Pour e 1 à 10 FAIRE
Dpour
S S + p [e];
Fpour
Calculer_somme S ;
FIN_FONCTION

DEBUT (*Programme principal*)


(*renseignement du tableau*)
POUR I 1à 10 FAIRE
Dpour
AFFICHER( ‘’ Entrer la valeur n°’’ , I) ;
SAISIR ( D[I]);
Fpour
(* Appel de la fonction en mentionnant simplement le nom du tableau D*)
S Calculer_somme(D); 
AFFICHER(‘’ La somme est :’’, s) ;
FIN.

59
TD SUR LES TABLEAUX

Exercice 1
Ecrire un algorithme qui permet de déterminer et afficher le minimum d’un tableau de
dimension 1.

Exercice 2
Ecrire un algorithme qui permet de déterminer et afficher le maximum d’un tableau
de dimension 2.

Exercice 3
Ecrire un algorithme qui permet d’effectuer la somme de deux tableaux de même
dimension et de stocker le résulter dans un troisième tableau.
Ex. :
2 6 7 1

+ = 4 12 9 10
2 6 2 9
Exercice 4
La SODEXAM voudrait pour ces 5 derniers mois avoir un bilan des régions sinistrées
par la forte pluie qui a sévi en Côte d’Ivoire.
Proposer un algorithme qui affichera L’ensemble des régions sinistrées (région dont
la pluviométrie est > 250). Pour cela utilisez un tableau de dimension 1 contenant
les 10 pluviométries des régions. Les régions sont reconnues par les indices des
cases.
Exercice 5

60
Ecrire un algorithme qui permet de calculer le schoutrumpf de deux tableaux de
dimension 1.
Ex. : T1 2 5 3

T2 2 6 7 1
Scht=2*2+2*5+2*3+6*2+6*5+6*3+7*2+7*5+7*3+1*2+1*5+1*3

Exercice 6
Proposer un programme qui permet, après avoir renseigné un tableau de dimension
1 demande le numéro de la case à supprimer, supprime le contenu de la case et fait
un décalage vers la gauche.

Exercice 7 : Ecrire un Algorithme qui permet de ranger en ordre croissant les 20
entiers d’un tableau de dimension 1.

Exercice 8
Proposer un programme qui permet de faire le produit des entiers se trouvant sur les
deux diagonales principales d’une matrice carrée de 36 entiers.
Ex. : Soit T3
12 15
1 4
0
3
6 4

5 1 Produit_diag1=12*10*3*4*1
Produit_diag2=15*4*3*6*5

Exercice 9
Ecrire un algorithme qui permet de faire le produit des entiers se trouvant sur la 3 e
ligne d’une matrice carrée de 25 entiers.

Exercice 10
1. Définir une constante de type tableau d’une dimension, de 6 cases et contenant
des chaînes de caractères au choix d’au plus 10 caractères, Puis l’afficher.
2. Définir une constante de type tableau de dimension 2, de 4 lignes et 8 colonnes
et contenant des réels au choix, Puis l’afficher.
Exercice 11
Proposer un algorithme qui permet de permuter le premier et le quatrième élément
dans un tableau de Dimension 1 de 4 Entiers.

61
III. LE TYPE ENUMERE

1. Définition
C’est un ensemble ordonné d’éléments. C’est en fait un ensemble dans lequel l’on
énumère tous ses éléments avec un ordre d’énumération des éléments qui est très
important. Ce n’est véritablement pas une structure de données.

2. Déclaration
Un type énuméré est défini dans la partie TYPE de l’algorithme. La syntaxe de
déclaration est la suivante :

TYPE Nom_type_énuméré=(Identificateur 1, Identificateur 2, …, Identificateur


n) ;

Avec les identificateurs qui sont semblables aux noms des variables.
Note :
Tout type déclaré dans la partie TYPE, ne peut être utilisé comme tel. II faudrait
nécessairement déclarer dans la partie VAR, une variable de type, le type déclaré
dans la partie TYPE, et c’est cette variable qui sera utilisé par la suite dans le
programme.

Ex. : TYPE
days = (Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi) ;
SM = (celibataire, marie, veuf, separe) ;
Chimie = (C,CO2, O, H, H2O);
VAR
P : days; (*Déclaration de la variable P de type days. P ne pourra recevoir que
les valeurs citées entre parenthèses dans days mais une seule à la foi *)

62
F :SM ; (*Déclaration de la variable F de type SM. F ne pourra recevoir que les
valeurs citées entre parenthèses dans SM, mais une seule à la foi *)
Mt : Chimie ; (*Déclaration de la variable Mt de type Chimie. Mt ne pourra
recevoir que les valeurs citées entre parenthèses dans Chimie mais une seule à la
foi *)

C’est donc les variables P, F, Mt qui seront utilisées par la suite dans le programme.

Ex. :
ALGORITHME TEST
TYPE  marque = (ford, renault, mercedes, bmw, peugeot, jaguar, hummer) ;
VAR pt : marque ;
DEBUT
POUR pt ford à hummer FAIRE
DPOUR
SI (pt = ford) OU (pt=hummer) ALORS
DSI
AFFICHER (‘’marque américaine ‘’) ;
FSI
SI (pt = mercedes) OU (pt=bmw) ALORS
DSI
AFFICHER (‘’marque allemande ‘’) ;
FSI

SI (pt = jaguar) ALORS


DSI
AFFICHER (‘’marque britannique ‘’) ;
FSI
SI (pt = renault) OU (pt=peugeot) ALORS
DSI
AFFICHER (‘’marque Française ‘’) ;
FSI
FPOUR

Note :
 Il est impossible d’utiliser AFFICHER et SAISIR avec les variables de type
énuméré.
 Il est également impossible de les utiliser comme indice de tableau.
 Les identificateurs ne peuvent pas être des constantes .Un identificateur ne
peut appartenir à deux types différents dans la partie déclaration de TYPE.

63
IV.LES INTERVALLES

1. Définition

Contrairement au type énuméré où nous sommes obligés de définir tous ses


éléments, le type intervalle permet de définir un ensemble de valeurs par la simple
connaissance de la valeur initiale et de la valeur finale.

2. Déclaration

Syntaxe : nom_intervalle = valeur_initiale . . valeur_finale ;

Avec valeur_initiale et .valeur_finale des constantes (entier, caractère, énuméré)


telles que
valeur_initiale < valeur_finale .

Ex. : TYPE
Age = 1 .. 150 ;
VAR
Age_pere : Age ;

Note :

64
 age_pere ne pourra recevoir seulement que les valeurs comprises entre 1 et
150 compris mais une seule valeur à la fois.
 Un intervalle est forcément ordonné et continu
 Il est possible d’utiliser des constantes de type énuméré pour constituer un
intervalle.
Ex. : TYPE
days= (Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi,
Samedi) ;
Jours_travail= lundi .. vendredi ;
Week_end= samedi .. dikmanche ;

V. LES ENSEMBLES

1. Définition

Un ensemble est une collection non ordonnées d’éléments de même type, c’est-à-
dire le rang des éléments n’a aucune importance.

2. Déclaration

Syntaxe :
TYPE nom_type_ensemble = ENSEMBLE de type_de_base ;
Ou
VAR nom_type_ensemble = ENSEMBLE de type_de_base ;

Avec type_de_base un type ordinal entier , reél, caractère, énuméré.

Ex1. : TYPE
Lettres = ENSEMBLE de carctères ;
Premier = ENSEMBLE de 1 .. 250 ;

VAR Ft :Lettres ; P :Premier ;

65
Ex2. : TYPE
Note = ( ab, fb, tu, ik, lp) ;
Pert = ENSEMBLE de Note ;

VAR Ft :Lettres ; P :Premier ;


Ou
TYPE
Note = ( ab, fb, tu, ik, lp) ;
VAR Pert = ENSEMBLE de Note ;

VI. LES ENREGISTREMENTS

1 .Définition

La structure du type enregistrement est un traitement qui s’effectue sur un


ensemble de valeurs de types différents (entier, réel, chaîne…).En fait une variable
de type enregistrement peut contenir plusieurs données à la fois mais de types
différents.
Dans le soucis de vouloir traiter une base de donnée qui généralement peut
contenir des informations détaillées sur une entité a permis de penser et mettre en
place une telle structure.
Dorénavant l’on ne serait plus contraint à travailler sur un ensemble de données
de même type comme c’est le cas pour les structures de tableaux mais de pouvoir
traiter un ensemble de données de types différents tels que le nom, l’age,le
matricule… d’une personne

2. Déclaration

Syntaxe :
TYPE
Nom_enregistrement=enregistrement

66
Champs1 : type1 ;
Champs2 : type2 ;
………………..
Champsn : type n ;
Fin_enregistrement ;

Var nomvariable : nom_enregistrement ;

NB. : Il est impératif de toujours déclarer une variable qui aura pour type le nom du
nouveau type que nous venons de créer.

3 . Intérêt

Le type enregistrement sert à identifier tous les détails d’une entité donnée.
Par exemple pour définir le type enregistrement PRODUIT l’on procèdera comme
suit :

TYPE
PRODUIT = ENREGISTREMENT
Nom : chaîne ;
Prix : entier ;
Référence : chaîne ;
FIN_ENREGISTREMENT
VAR P : PRODUIT

4. Opérations portant sur le type enregistrement

L’on manipule les différents champs d’un enregistrement séparément l’un après
l’autre :
 On accède aux différents champs d’une variable de type enregistrement en
précisant le nom de la variable suivi d’un point et du nom du champs en
question.
Ex. : P.Prix P .Nom P.Référence
 L’écriture consiste à affecter une valeur à un champs donné et la lecture
consiste à afficher le contenu d’un champs donné.

Ex. : ECRITURE : P.Nom ‘’bénédicte’’ ;


LIRE(P.Prix) ;

LECTURE : ECRIRE(‘’Le nom recherché est’’ ,P.Nom) ;

5. Imbrication d’enregistrements

67
Une structure de données Enregistrement peut en imbriquer d’autres c’est-à-dire des
enregistrements peuvent figurer à l’intérieur d’autre enregistrement.

Ex. : TYPE
Contact = ENREGISTREMENT
Telephone : CHAINE [15] ;
Boite_Postale : CHAINE [10] ;
Lieu_habitation : CHAINE [25] ;
FIN ;
Personne = ENREGISTREMENT
Nom : CHAINE [15] ;
Prenom : CHAINE [25] ;
Taille : Réel ;
Ct : Contact ; (* Imbrication*)
FIN ;
VAR
P : Personne ;

Ainsi on aura par exemple :


P.Nom “Anande’’;
P.Prenom “Christ Ariel’’;
P.Taille 1, 80;
P.Ct.Telephone “09 10 44 78”;
P.Ct. Boite_Postale  “14 bp 478 abidjan 14”;
P.Ct.Lieu_habitation  “ abidjan, Cocody, Angre’’ ;

6. Passage d’enregistrement en paramètre à une fonction

Au niveau du paramètre formel, déclarer une variable de type, le type Enregistrement


déclaré dans la partie TYPE. Au niveau du paramètre réel, utiliser une variable
déclarée dans la partie VAR, de type l’enregistrement déclaré dans TYPE et utiliser
cette dernière.
Ex. :
ALGORITHME test3;
TYPE
T = ENREGISTREMENT ;
Nom_p : CHAINE [20] ;
Classe : CHAINE [10] ;
Moy : réel ;
FIN_ENRG ;

VAR
Etudiant : T ;

68
I :entier ; Som : réel ;

PROCEDURE Calculer_moyenne(VAR p : T) ; (*p de type T déclaré dans la partie


TYPE*)
VAR e : entier ; S, note : réel ;
DEBUT_PROCEDURE
S 0 ;
Pour e 1 à 3 FAIRE
Dpour
AFFICHER (‘’ Entrer la note n°’’, e) ;
SAISIR (note);
S S + note;
Fpour
p.moyenne S/3 ;
AFFICHER (‘’La moyenne de l’étudiant’’, p.Nom_p, ‘’est’’, p.Moy) ;
FIN_ PROCEDURE

DEBUT (*Programme principal*)

(*parcours de 20 étudiants*)
POUR I 1à 20 FAIRE
Dpour
AFFICHER (‘’ Entrer le nom de l’étudiant n°’’, I) ;
SAISIR (Etudiant.Nom_p);
AFFICHER (‘’ Entrer la classe de l’étudiant n°’’, I) ;
SAISIR (Etudiant.classe);
Calculer_moyenne(Etudiant) ; (*Appel de la fonction en mentionnant
simplement le nom de la variable Etudiant*)
Fpour
S AFFICHER (‘’ La somme est :’’, s) ;
FIN.

EXERCICES D’APPLICATION :

Exercice 1 :
Ecrire un algorithme qui permet de gérer 50 produits et d’afficher ‘’bon client’’ si le
prix d’achat est supérieur à 10 000f.

Exercice 2 :
Pour le calcul de salaire de ses 200 employés la société Medi@net consulting tient
compte des paramètres suivants :
 Prime de transport : catégorie A ….50 000 fcfa, catégorie B…..35000,
catégorie C……25000.
 Prime de logement.

69
 Prime de rendement qui dépend de la note de chaque employé : note<10 pas
de prime, 10<=note<14….50 000 fcfa, note>=14…..75 000 fcfa
 Prime d’ancienneté qui vaut 1% du salaire de base chaque année.
Proposer un algorithme qui permettra de déterminer le salaire mensuel
de chaque employé et le salaire annuel global sur 5 ans.
N.B. : utiliser une structure enregistrement pour traiter chaque
travailleur.

Exercice 3 :
Proposer un algorithme qui affiche la liste des étudiants du groupe cefiat(3000
étudiants) qui ont un âge inférieur à 20 ans.

Exercice 4 :
Ecrire un programme qui permet d’afficher l’ensemble des employés de la société
Anande Sa qui ont plus de 20 ans d’embauche.
Exercice 5 :
Le Ministère de l’enseignement supérieur voudrait encourager l’excellence en
octroyant des prix aux meilleurs étudiants .Le Ministère pour a présélectionné 10
classes parmi celles existantes dans les différents établissements privés de Côte
d’Ivoire. Chacune des 10 classes comporte 25 étudiants. Le test de sélection des 10
meilleurs est basé sur 5 matières de coefficient 1 chacune. Le classement est
effectué par classe et l’on affiche le nom, la moyenne, et le rang de l’élève par ordre
de mérite.

CHAPITRE VI : LES FICHIERS


OBJET : Ce chapitre traite d’une structure de donnée plus évoluée permettant de
sauvegarder des données sur un support de sauvegarde (Disque dur, disquette, clé
USB…), lors de l’exécution d’un programme informatique.

OBJECTIF : A la fin de ce chapitre, vous devrez être à mesure de percevoir l’intérêt


de la structure de donnée FICHIER et de pouvoir l’utiliser, pour résoudre un
problème.

INTRODUCTION
Les structures de données étudiés jusqu’ici, servaient à décrire, à manipuler des
informations situées en mémoire centrale. Ainsi après avoir quitté la fenêtre
d’exécution de notre programme, les données que nous avons saisies et qui ont
servies à l’exécution de notre programme, sont perdues et donc aucune possibilité
de las conserver.
Pour palier cet état de fait, puisque nous avons besoin très souvent de conserver des
données (par exemples des données de comptes bancaires, des données
personnelles…), l’on a introduit une structure de données qui va permettre de

70
manipuler (créer ou utiliser) des informations sur un support externe tel que le disque
dur, la disquette, la clé USB… Supports capables de conserver les données et de les
restituer à temps voulu : la structure de donnée FICHIER.

I. DEFINITION

Un fichier est un ensemble ordonné de données présentant une même structure et


pouvant être consultées individuellement. Cet ensemble de données (fichier) est
sauvegardé généralement sur le disque dur (support de sauvegarde par excellence),
bien que cet ensemble de données puisse être également sauvegardé sur une
disquette ou une clé USB. La sauvegarde est effectuée sur un support de masse afin
de permettre un usage ultérieur des données même après un long temps.

Il existe deux catégories de fichiers : les fichiers systèmes (qui appartiennent au


système d’exploitation) et les fichiers de flux de données.
Les fichiers de flux de données se subdivisent en deux parties :
 Les flux de texte : fichiers constitués de suite de caractères, interprétés
comme données intrinsèques ou comme composants de chaîne de
caractères.
 Les flux binaire : fichier dont les données sont en blocs donc structurés et où
tous les blocs du même fichier ont une taille identique et fixe.

C’est ce dernier type de fichier qui est le plus utilisé et donc va faire l’objet de
notre étude.

La structure de base des informations stockées dans un fichier est


l’enregistrement.
Enregistrement Enregistrement Enregistrement ……………….. Enregistrement
n°0 n°1 n°2 n°n

FICHIER

Les numéros des enregistrements débutent toujours par zéro (0).

C’est en fait une base de données que nous allons créer par programmation. En
effet, on saisit d’abord les données dans la structure de données Enregistrement,
puis l’on se sert de la structure de données Fichier pour pouvoir sauvegarder ces
données saisies, sur le support de masse. Ainsi une fois les données sont
mémorisées sur le support de masse, pour les manipuler (consultation, destruction,
modification, insertion…), l’on va également se servir de la structure de données
Fichier. C’est donc une structure de données un peu particulière.

71
Le terme fichier ici est pratiquement semblable à la notion de fichier en système
d’exploitation.

II. DECLARATION

La structure de données FICHIER est généralement déclarée dans la partie VAR


mais il faut auparavant déclarer l’enregistrement qui sera la structure de base du
fichier (dans la partie TYPE).

Syntaxe : VAR nom_var_fichier : FICHIER de enregistrement_de_base ;

Ex. : TYPE
Personne = ENREGISTREMENT
Nom : CHAINE ;
Contact : CHAINE ;
FIN
VAR Rept : FICHIER de Personne ;
Id : Personne ;

III. LES MODES D’ACCES AU FICHIER

On appelle mode d'accès à un fichier la façon de retrouver une donnée dans ce


fichier. Il existe deux modes d'accès principaux:
- l'accès séquentiel: possible sur tous les types de support et avec tous les types de
fichiers. Pour accéder à un article particulier, on doit avoir parcouru tous les articles
précédents sur le support.
- l'accès direct: possible seulement sur support adressable avec des fichiers
structurés. On peut se positionner directement sur l'enregistrement voulu à partir de
son emplacement sur le support (ou à partir d’une clé). Un fichier à accès direct peut
être vu en quelque sorte comme un énorme tableau stocké sur support non volatile.

L’utilisation d’un fichier est précédée des deux étapes suivantes :


- La création du fichier ;
- L’ouverture du fichier

1. Les fichiers à accès séquentiel

Un fichier séquentiel est un fichier dont les données ne sont accessibles que de
manière consécutive sur le support. Leur accès est donc séquentiel. Contrairement
aux éléments d'un tableau ou aux champs d'un enregistrement, les données d'un
fichier séquentiel ne sont pas accessibles directement, ni par un indice, ni par un
nom. Pour accéder à un enregistrement particulier, il faut parcourir le fichier
séquentiel depuis le début jusqu'à trouver l'enregistrement recherché.

72
On peut se représenter un fichier séquentiel comme une bande de papier contenant
des articles cote à cote. Cette bande défile sous une tête de lecture qui ne peut lire
qu’un seul article à la fois. Pour accéder à un article, on est obligé de positionner la
tête de lecture sur cet article, en faisant défiler la bande en dessous.

2. Les fichiers à accès direct

Dans un fichier à accès direct, tous les enregistrements ont la même longueur. Vous
pouvez donc lire un enregistrement quelconque sans lire tout le fichier.
Pour que chaque enregistrement ai la même taille, vous devez utiliser les variables
personnalisées

IV. OPERATIONS SUR LES FICHIERS

1. Création De Fichier Ou Assignation

La création d’un fichier consiste à aménager un espace sur un support de


sauvegarde (disque dur, disquette et clé USB…) afin d’y enregistrer le contenu de ce
fichier, dans le cas où il s’agit d’un nouveau fichier que l’on crée. Dans le cas où le
fichier existe déjà, l’assignation dans ce cas consiste à créer un nouveau lien pour
atteindre ledit fichier. En programmation, la création d’un fichier nécessite deux
noms :

 Le nom physique : qui est le nom réel du fichier sur le support de


sauvegarde. Il s’agit de spécifier le chemin d’accès complet de ce fichier c’est-
à-dire de préciser le support de sauvegarde sur lequel nous allons enregistrer
ledit fichier, ensuite si l’on veut l’éventuel répertoire dans lequel nous allons y
mettre le fichier et ensuite le nom même du fichier.
Ex. : C : \ algo \ devoirs.txt ici le support de sauvegarde est le disque dur
( C :)
Le répertoire dans lequel nous allons mettre notre fichier est ‘algo’ et le nom
Même du fichier est ‘devoirs’.

 Le nom logique du fichier ou nom de travail, qui est le nom utilisé dans le
programme. Il s’agit d’un nom simple comme un nom de variable.
L’intérêt d’utiliser le nom logique dans le programme, est que celui-ci a
généralement une écriture simple et donc évite de traîner le nom physique
généralement long, durant tout le programme.

La création d’un fichier se fait en utilisant le mot clé ASSIGNER comme suit :
Syntaxe : ASSIGNER ( nom_logique_du_fichier, ‘nom_physique_du_fichier) ;
Ex. : ASSIGNER (fg, ‘C :\algo\devoirs.txt’) ; Ainsi c’est fg qui sera utilisé pour
désigner le fichier ‘C :\algo\devoirs.txt’ dans tout le programme.

73
Cette instruction crée donc le fichier devoir.txt qui se trouve dans le répertoire algo
et qui à son tour est sur le disque dur C : . Le fichier ainsi créé portera le nom fg dans
tout le programme.

2. L’ouverture et la fermeture du fichier

Comme un fichier ne se trouve pas en mémoire centrale (mais en périphérique), il


n'est pas accessible directement par le programme (seule la mémoire centrale est
accessible directement). Il est nécessaire de l'ouvrir avant de pouvoir l'utiliser.
L'ouverture permet la réservation d'une mémoire tampon en mémoire centrale pour
les échanges entre le disque et la mémoire centrale.

Syntaxe : Ouvrir nom_fichier en mode_ouverture ;


Ex: Ouvrir personnel en lecture

Après utilisation, un fichier doit être fermé, de façon à libérer la mémoire tampon
allouée lors de l'ouverture et ainsi enregistrer les dernières données du tampon non
encore transférées.

Syntaxe : Fermer nom_fichier


Ex. : Fermer personnel ;

3. Les différentes opérations sur un fichier

Une opération sur un fichier est une action que nous pouvons effectuer sur ce fichier.
Dans ce document, nous nous limiterons aux opérations suivantes :
 L’écriture dans un fichier ;
 La lecture du contenu du fichier ;
 La modification des données d’un fichier existant ;
 La recherche de données dans un fichier ;
 La destruction d’un fichier.

a. L’écriture dans un fichier

L’écriture c’est l’opération qui nous permet de créer un fichier dans lequel
enregistrer des résultats. Cet enregistrement de données peut se faire à la fin du
fichier ou à tout autre endroit du fichier. Si le fichier existe déjà, son ancien contenu
est détruit .

Syntaxe :
ECRIRE (nom_logique_du_fichier , nom_variable_type_enregistrement) ;

74
Ex. : TYPE
Personne = ENREGISTREMENT
Nom : CHAINE ;
Contact : CHAINE ;
FIN
VAR Rept : FICHIER de Personne ;
Id : Personne ;
…………………………………………………………………….
ECRIRE (Rept, Id) ;
………………………………………………………………………..

Note :
Pour utiliser un fichier en écriture pour la 1ere fois (nouveau fichier vierge), il faudra
suivre les instructions suivantes :
 L’assignation du fichier (dans ce cas il s’agit de créer à proprement dit le
fichier sur le support de sauvegarde car c’est un nouveau fichier) :
ASSIGNER ;
 L’ouverture du fichier avec écrasement : REECRIRE (car c’est un nouveau
fichier) ;
 L’écriture proprement dite : ECRIRE .Elle consiste à inscrire des données
dans le fichier ;
 La fermeture du fichier : Le mot clé utilisé est FERMER. En effet après
l’utilisation d’un fichier, il faut nécessairement le fermer avant de quitter le
programme. En fait la fermeture du fichier consiste à supprimer la mémoire
tampon créée par l’ouverture du fichier.

Pour un fichier contenant déjà des données, les étapes sont identiques aux
précédentes mais à une petite différence près :
 L’assignation du fichier ;
 L’ouverture du fichier sans écrasement : RELIRE (car on aimerait pas écraser
les données du fichier) ;
 L’écriture proprement dite 
 La fermeture du fichier 

b. La lecture du Fichier

C’est l’opération qui consiste à prendre possession des données se trouvant dans le
Fichier, une partie ou la totalité du fichier. En fait, c’est une simple copie des
données.
Pour utiliser un Fichier en lecture, il faudra suivre l’ordre, les étapes suivantes :
 L’assignation du fichier (dans ce cas il s’agit de créer un lien pour atteindre le
fichier existant) : ASSIGNER ;
 L’ouverture du fichier sans écrasement : RELIRE;
75
 La lecture proprement dite : LIRE. Elle consiste à lire le fichier enregistrement
après l’enregistrement ;
Syntaxe :
LIRE (nom_logique_du_Fichier, nom_variable_type_Enregistrement) ;
Ex. : LIRE (Rept, Id) ;
 Affichage si nécessaire des données lues du fichier : AFFICHER
Syntaxe :
AFFICHER ( champ_de _l’_enregistrement_constituant_le_Fichier) ;
Ex. : AFFICHER (id.contact) ;
Ici l’affichage se fait champ par champ.
 La fermeture du fichier : Le mot clé utilisé est FERMER.

c. Recherche de données dans le Fichier

Il s’agit de rentrer en possession des données d’un enregistrement en utilisant le


numéro de l’enregistrement.
La recherche peut s’effectuer de deux façons :
 L’accès direct, c’est-à-dire que l’on va se positionner directement sur
l’enregistrement dont le numéro a été fourni. Ici, on saisi le n° de
l’enregistrement désiré et l’on se positionne là-dessus pour lire les données
s’y trouvant. Donc un seul enregistrement est concerné, celui dont le n° a été
saisi. Pour l’accès direct, le mot clé utilisé est : RECHERCHER
Syntaxe :
RECHERCHER (nom_logique_du_Fichier, n°_enregistrement) ;
Ex. : RECHERCHER (Rept, 3) ; Ainsi l’on va se positionner sur
l’enregistrement n°3 (c’est-à-dire l’Enregistrement 4 car les n° débutent par 0)
du Fichier dont le nom logique est Rept.
 L’accès séquentiel, c’est-à-dire que l’on va parcourir tout le fichier à la
recherche des données répondant à un critère. Ici, il n’ya pas de mot clé. On
se contente de parcourir seulement le Fichier.
Ainsi les étapes pour la recherche de données dans un Fichier, dans l’ordre, sont :
 L’assignation ;
 L’ouverture du fichier sans écrasement ;
 La recherche des données par accès direct ou séquentiel ;
 La lecture des données ;
 L’affichage de ces données ;
 La fermeture du fichier.

EXEMPLE COMPLET

ALGORITHME comptes_clients
TYPE
76
tcompte = ENREGISTREMENT
num: entier
etat: caractère (*N pour normal, I pour impayé, C pour contentieux*)
solde: réel
FINENREG
VAR
compte : tcompte ;
cpteclt : fichier séquentiel de tcompte ;
rep: caractère ;
n, i : entier ;
tabcompte : tableau[1..100] de tcompte ; //tableau d’enregistrement pour le
chargement en mémoire

DEBUT
/* création et remplissage du fichier */
OUVRIR cpteclt en écriture

// On saisit les informations sur les clients et on les écrit dans le fichier
Répéter

// On saisit les champs de l'enregistrement


Afficher "Numéro?"
Saisir compte.num
Afficher "etat?"
Saisir compte.etat
Afficher "solde?"
Saisir compte.solde
Afficher "Autre compte? (O/N)"
Saisir rep

// On recopie l'enregistrement dans le premier article vide du fichier


ECRIRE (cpteclt, Compte)
Jusqu'à rep <>"O"

FERMER cpteclt

/* lecture des articles du fichier */

OUVRIR cpteclt en lecture


// On lit les articles et les affiche tant qu'on a pas atteint la fin du fichier
TANT QUE non eof( ) FAIRE

77
// Récupérer l'article courant dans l'enregistrement en mémoire centrale
LIRE (cpteclt,compte)

// Afficher les champs de l'enregistrement


Afficher "Numéro: ", compte.num
Afficher "Solde: ", compte.solde
Afficher "Etat:"
Suivant compte.etat Faire
"N": Afficher "Normal"
"I": Afficher "Impayé"
"C": Afficher "Contentieux"
FinSuivant
FINTANTQUE

Fermer cpteclt

/* ajout d'un compte client à la fin du fichier */


Ouvrir cpteclt en mode ajout

// On saisit un enregistrement correspondant à l'article à ajouter


Afficher "Numéro?"
Saisir compte.num
Afficher "etat?"
Saisir compte.etat
Afficher "solde?"
Saisir compte.solde
Afficher "Autre compte? (O/N)"
Saisir rep

// on recopie l'enregistrement sur le fichier


Ecrire (cpteclt, compte)

/*modification d'un compte client, le 5689*/

// Chargement en mémoire centrale, dans le tableau d’enregistrements


tabcompte et modification
Ouvrir cpteclt en lecture
n 0
TANTQUE non eof( ) FAIRE
n n+1
Lire (cpteclt, tabcompte[n])
Si tabcompte[n].num = 5689
Alors tabcompte[n].solde tabcompte[n].solde – 500
FinSi

78
FINTANTQUE

// Sauvegarde du tableau dans le fichier


Ouvrir cpteclt en ecriture

// n contient le nombre d’enregistrements


POUR i 1 à n FAIRE
Ecrire (cpteclt, tabcompte[i])
FINPOUR

/*Suppression d'un compte, le 1268*/


//chargement
Ouvrir cpteclt en lecture
n 0
TANTQUE non eof( ) FAIRE
n n+1
Lire (cpteclt, tabcompte[n])
FINTANTQUE

//sauvegarde (sauf le compte 1268)


Ouvrir cpteclt en ecriture

POUR i 1 à n FAIRE
Si tabcompte[i].num <> 1268
Ecrire (cpteclt, tabcompte[i])
FINSI
FINPOUR

/* stockage dans un fichier séparé du numéro de tous les clients en


contentieux.*/

// Ajouter dans la partie déclaration des variables:


// cltcont : fichier séquentiel d'entiers
// Fichier contenant des numéros de clients

Ouvrir cpteclt en lecture


Ouvrir cltcont en écriture

TANTQUE non eof ( cpteclt ) FAIRE


Lire (cpteclt, compte)
Si compte.etat = "C" Alors
Ecrire (cltcont, compte.num)

79
FINSI
FINTANTQUE
Fermer cpteclt, cltcont
FIN

EXERCICES D’APPLICATION

Exercice 1
Concevoir un algorithme permettant de rechercher les données d’un enregistrement
quelconque, par la saisie du n° de cet enregistrement, du fichier déjà existant,
portant le nom physique C:\etud

Exercice 2
Soit un fichier de chemin d’accès C : \TEST\Articles.txt contenant déjà des données
sur les articles. Chaque article est identifié par son nom, sa référence et son prix
unitaire de vente.
Ecrire un algorithme permettant de faire une mise à jour du prix de vente d’un article
donné. La recherche de l’article se fera sur la base de son nom.

Exercice 3

80
Ecrire un algorithme qui permet de créer séquentiellement un fichier nommé
répertoire comportant pour chaque personne :
 Nom 15 caractères maxi ;
 Prénom 25 caractères maxi ;
 Age ;
 Contact.
Cet algorithme devra permettre de lire le fichier créé.

Exercice 4
L’Etat de Côte d’Ivoire vous sollicite pour développer une application de gestion des
passeports. On prendra en compte le numéro du passeport, le nom de l’intéressé, la
date et lieu de naissance, le nom du père et de la mère.
Cet algorithme permettra à partir d’un menu :
 D’ajouter des données ;
 De modifier des données ;
 D’en faire des consultations ;
 De supprimer des données.
Proposer un algorithme pour satisfaire votre client.

CHAPITRE VI LES STRUCTURES DE DONNEES DYNAMIQUES

OBJET : Ce chapitre traite de structures de données beaucoup plus évoluées.

OBJECTIF : A la fin du chapitre, vous aurez une notion sur les structures de données
dynamique et être capable de manipuler les POINTEURS outil principal de ces
structures

INTRODUCTION

81
Le terme dynamique indique que la taille de ces structures de données n’est pas
figée. Elle peut s’agrandir ou diminuer au besoin et donc permet de gérer l’espace
mémoire de manière optimale.

En général c’est avec les structures de données dynamiques que l’on conçoit les
jeux informatiques (awalé, jeu de dame…), les logiciels de compression et de
décompression, les shareware, les freeware, les logiciels libres…

Présentation des structures de données : tableaux (structure statique)

Listes chainées

Linéaires piles

Structure de données files

Arbres

Non linéaires

Graphes

I. LES STRUCTURE DE DONNEES LINEAIRES

Elles possèdent une notion de séquence entre leurs éléments (premier,


second….) . Ceux qu’on abordera dans ce chapitre sont :

 Les listes chainées (gérées par les pointeurs) 


 Les piles 
 Les files

1. La liste chainée : LES POINTEURS

La séquence est donnée par une variable appelée POINTEUR, qui indique l’adresse
où réside le suivant d’un élément. Cette structure ne fait jamais appel aux
algorithmes de décalages vers la droite ou la gauche, c’est un avantage car le
glissement des éléments est coûteux en temps d’exécution machine.

Un pointeur est une variable qui contient l’adresse mémoire d’un objet: il permet
de désigner directement une zone de la mémoire et donc l'objet dont la valeur est
rangée à cet endroit.
Un pointeur est souvent typé de manière à préciser quel type d'objet il désigne
dans la mémoire.
82
Un type pointeur est défini par le symbole ^ suivi par le nom du type de l'objet
pointé:
VAR  P: ^ENTIER 
ET1: ^ETUDIANT
 A sa création un pointeur contient une valeur qui ne représente rien (NUL).
 Pour désigner l'objet pointé par un pointeur, il suffit d'utiliser
l'opérateur ^ après le nom de l'objet pointeur.
 On utilise l'opérateur @ pour obtenir l'adresse d'une variable déjà existante.
 Pour attribuer une valeur à un objet pointé il faut d’abord réserver l’espace
mémoire de cet objet par la syntaxe : NOUVEAU (nom_de_variable) ; et
ensuite lui attribuer la valeur par la syntaxe : nom_variable_pointeur^  
valeur ;
Exemple:
ALGORITHME ESSAI
VAR P :^ENTIER
E : ENTIER
DEBUT
E  1 (* E=1*)
P @E (* On met dans P l'adresse de E → E est l'objet pointé par P *)
P^  2 (* Affectation : On met dans l'objet pointé par P la valeur 2 →E=2 *)
FIN
 Les opérations possibles sur un pointeur sont : + et - . Ces opérateurs s’appui
sur l’espace mémoire occupé par les différents types : 1 caractère occupe 1
octet , 1 entier occupe 2 octets, 1 réel occupe 4 octets. Soit P un pointeur sur
un objet de k octets. P+1 fait pointer le pointeur P sur la case mémoire
suivante en sautant tout d’abord k octets depuis la case pointée initialement
par P.

 Utilisation d'un pointeur


On utilise un pointeur pour mémoriser l'emplacement d'une autre variable. Il
est très rare d'affecter directement une adresse à un pointeur. On affecte en
général l'adresse d'une variable existante.
Pour cela, en algorithmique, on utilise l'expression "adresse de" alors qu'en C,
on utilise l'opérateur d'adresse & .

Ex. :
ALGORITHMIQUE test ;
VAR
va : entier

83
pent: pointeur sur entier
pcar: pointeur sur caractère

DEBUT
pcar 0x3fffd14 //affectation directe 0x3fffd14 est une adresse mémoire
pent adresse de va
………
FIN

 Déréférencer un pointeur consiste à extraire la valeur de la variable sur


laquelle il pointe.

 Attention à toujours initialiser un pointeur. Un pointeur qui n'est pas initialisé


s'appelle un pointeur pendant. Un pointeur pendant ne pointe pas nul part
mais n'importe où. Si l'on déréférence ce pointeur et qu'on affecte une
nouvelle valeur, on va écraser un emplacement mémoire quelconque, et on
risque de faire planter le programme. Si on veut que le pointeur pointe nul
part, il faut l'initialiser à NIL (not identified link) ou NULL en C/C++. C'est
l'équivalent de 0 pour les pointeurs. Mais attention, il ne faut jamais
déréférencer un pointeur nul. Avant de déréférencer un pointeur, il faut
toujours s'assurer qu'il n'est pas nul.

Ex. :
p: pointeur sur entier
p NIL //p pointe nulle part

 Le fait qu'un pointeur pointe sur une variable s'appelle indirection (comme
accès indirect). Quand un pointeur pointe sur un autre pointeur, il y a double
indirection.

Les pointeurs typés


Le pointeur est un nouveau type au même titres que les entiers, les caractères,
chaînes de caractères, booléens et autres abordés en algorithmique impérative.
Il convient cependant de distinguer les pointeurs typés des pointeurs non-typés
(également appelés génériques).
Un pointeur typé indique le type de la donnée qu'il pointe. Il y a donc des pointeurs
vers des entiers, des pointeurs vers des caractères, etc. Il convient d'affecter à des
variables de types pointeur vers T uniquement des expressions de types pointeur
vers T (tout comme on doit assigner à une variable de type entier une expression
entière).

Les pointeurs génériques


Un pointeur générique est un type de pointeur particulier puisqu'il ne donne pas
d'information sur ce qu'il pointe. C'est simplement une adresse vers une zone
mémoire.

84
2. Les piles 

Cette structure restrictive de liste chainée ne permet les ajouts et les suppressions
qu’à une de ses extrémités appelée « sommet », et les suppressions à l’autre
extrémité appelée « queue ».C’est une structure de liste LIFO (last in first out), gérée
comme une pile d’assiette, ajout au dessus, suppression au dessus. Les piles sont
couramment utilisées par le système d’exploitation, en particulier par l’unité
arithmétique et logique lors de ses calculs. Elles servent aussi à créer les menus
dans les téléphones portables ou ordinateurs, à gérer les appels de sous-
programme. Les différentes opérations sur une pile sont :

 l’empilement ou l’insertion d’élément : on place l’élément au sommet de la


pile ;
 le dépilement ou la suppression : on enlève l’élément se trouvant au sommet
de la pile.

3. la file

Cette structure restrictive de la liste chainée ne permet les ajouts qu’à une de ses
extrémités appelée « tête »,et les suppressions à l’autre extrémité appelée
« queue ».C’est une structure de liste FIFO(first in first out),gérée comme une file
d’attente à un bus, ajout à la fin de la file, suppression au début.les files sont
couramment en attente du processeur ou en attente de la disponibilité de
l’imprimante.

II. LES STRUCTURES DE DONNEES NON LINEAIRES

Elles permettent de relier un élément à plusieurs autres suivants et non plus à un


seul.

 L’arbre : Cette structure associe 0, 1 ou 2 suivants à un élément. Elle permet


par exemple d’effectuer des tris rapides.
 Le graphe : Cette structure associe un ensemble d’éléments en créant un
nombre quelconque de relations deux à deux. Elle permet par exemple
d’effectuer des calculs d’optimisation dans l’enchainement de travaux gérés
par PERT.

1. Un Arbre

Un arbre est une structure constituée de noeuds, qui peuvent avoir des enfants (qui
sont d'autres noeuds). Sur l'exemple, le noeud B a pour enfant les noeuds D et E, et
est lui-même l'enfant du noeud A.
A
G

85
B C
H
D E
F

Deux types de noeuds ont un statut particulier : les noeuds qui n'ont aucun enfant,
qu'on appelle des feuilles, et un noeud qui n'est l'enfant d'aucun autre noeud, qu'on
appelle la racine. Il n'y a forcément qu'une seule racine, sinon cela ferait plusieurs
arbres disjoints. Sur l'exemple, A est la racine et D, E, G, H, sont les feuilles.

Bien sûr, on ne s'intéresse en général pas seulement à la structure de l'arbre (quelle


est la racine, où sont les feuilles, combien tel noeud a d'enfants, etc.), mais on veut
en général y stocker des informations. On considérera donc des arbres dont chaque
noeud contient une valeur (par exemple un entier, ou tout autre valeur représentable
par votre langage de programmation préféré).

Comme pour les listes, on peut définir les arbres récursivement : "un arbre est
constitué d'une valeur et d'une liste d'arbre (ses enfants)". Vous pouvez remarquer
qu'avec cette description, le concept d'"arbre vide" n'existe pas : chaque arbre
contient au moins une valeur. C'est un détail, et vous pouvez choisir une autre
représentation permettant les arbres vides, de toute manière ce ne sont pas les plus
intéressants pour stocker de l'information 

a. Taille

On cherche à savoir combien un arbre contient de noeuds. Le raisonnement est très


simple : un arbre, c'est un noeud et la liste de ses fils, donc sa taille est un (le
noeud), plus la taille des arbres partant de chaque fils :

Taille (arbre) = 1 + la somme de la taille des fils

b. Hauteur

On voudrait maintenant connaître la hauteur de l'arbre. La hauteur d'un arbre est la


plus grande distance qui sépare un noeud de la racine. La distance d'un noeud à la
racine (la hauteur de ce noeud) est le nombre de noeuds sur le chemin entre les
deux.

Hauteur (arbre) = 1 + la plus grande des hauteurs des fils (ou 0 s’il n’y en a pas)

Remarque : on parle parfois de profondeur plutôt que de hauteur : cela dépend de si


vous imaginez les arbres avec la racine en haut et les feuilles en bas, ou (ce qui est
plus courant dans la nature) la racine en bas et les branches vers le haut.

2. Les graphes

La notion de graphe est une structure combinatoire permettant de représenter de


nombreuses situations rencontrées dans des applications faisant intervenir des
mathématiques discrètes et nécessitant une solution informatique. Circuits

86
électriques, réseaux de transport (ferrés, routiers, aériens), réseaux d'ordinateurs,
ordonnancement d'un ensemble de tâches sont les principaux domaines
d'application où la structure de graphe intervient.

Relations graphes et informatique

Les relations entre graphes et informatique sont à double sens :

1. l'informatique, outil de résolution de problèmes de graphes

2. les graphes, outil de modélisation de problèmes informatiques.

On aboutit donc, dans certaines situations, à l'informatique comme outil de résolution


de ses propres problèmes (via la modélisation en termes de graphes).

87

Vous aimerez peut-être aussi