Support de cours
ALGORITHMIQUE &
STRUCTURES DE DONNEES 1
Support de cours adressé aux étudiants de la première année licence en ingénierie des réseaux
et systèmes informatique
Préface
Sommaire
PRÉSENTATION DU COURS...............................................................................................1
BUT DU COURS : OBJECTIFS GÉNÉRAUX ET SPÉCIFIQUES...................................2
CHAPITRE 1 : NOTIONS FONDAMENTALES.................................................................9
I. DÉFINITIONS....................................................................................................................9
II. DÉMARCHE D’ÉCRITURE D’ALGORITHMES......................................................................9
III. CONSTANTES ET VARIABLES...........................................................................................9
IV. TYPES............................................................................................................................10
V. LES EXPRESSIONS..........................................................................................................11
VI. LES INSTRUCTIONS DE BASE..........................................................................................12
VII. STRUCTURE GÉNÉRALE D’UN ALGORITHME..............................................................14
CHAPITRE 2 : LES STRUCTURES CONDITIONNELLES...........................................17
I. INTRODUCTION..............................................................................................................17
II. LES STRUCTURES CONDITIONNELLES SIMPLES..............................................................17
III. LES STRUCTURES CONDITIONNELLES MULTIPLES..........................................................18
CHAPITRE 3 : LES STRUCTURES ITÉRATIVES..........................................................22
I. INTRODUCTION..............................................................................................................22
II. BOUCLE POUR..............................................................................................................22
III. LA BOUCLE TANT QUE...............................................................................................23
IV. LA BOUCLE REPETER … JUSQU’A...........................................................................24
V. PASSAGE D’UNE STRUCTURE ITÉRATIVE À UNE AUTRE.................................................25
CHAPITRE 4 : LES CHAÎNES DE CARACTÈRES.........................................................27
I. INTRODUCTION..............................................................................................................27
II. LE TYPE CARACTÈRE.....................................................................................................27
III. LE TYPE CHAÎNE DE CARACTÈRES.................................................................................28
IV. PROCÉDURES ET FONCTIONS STANDARDS SUR LES CHAÎNES........................................29
CHAPITRE 5 : LES PROCÉDURES ET LES FONCTIONS...........................................32
I. INTRODUCTION..............................................................................................................32
II. PROCÉDURE...................................................................................................................32
III. FONCTIONS....................................................................................................................35
CHAPITRE 6 : LES TABLEAUX........................................................................................37
I. INTRODUCTION..............................................................................................................37
II. TABLEAUX UNIDIMENSIONNELS....................................................................................37
III. TABLEAUX MULTIDIMENSIONNELS................................................................................43
CHAPITRE 7 : LES ENREGISTREMENTS......................................................................46
I. INTRODUCTION..............................................................................................................46
II. SYNTAXE.......................................................................................................................46
III. MANIPULATION DES VARIABLES DE TYPE ENREGISTREMENT.......................................47
CHAPITRE 8 : LES FICHIERS...........................................................................................49
Algorithmique et Structure de données 1
I. INTRODUCTION..............................................................................................................49
II. DÉFINITION....................................................................................................................49
III. LES FICHIERS SÉQUENTIELS...........................................................................................50
IV. LES FICHIERS TEXTE.....................................................................................................52
RÉFÉRENCES BIBLIOGRAPHIQUES.......................ERREUR ! SIGNET NON DÉFINI.
Algorithmique et Structure de données 1ere année LIRI
Présentation du cours
Mots-Clés
Algorithme, Structures de contrôle, Tableau, Matrice, Chaîne, Fonction, Procédure,
Récursivité, Tri, Enregistrement et Fichier.
Pré-requis
Néant.
Eléments de contenu
Les Préalables à l’algorithmique.
Actions simples : Lecture, Ecriture et Affectation, Structures Alternatives : les
schémas Si et Selon.
Structures Répétitives (Boucles) : Répéter, Tant que et Pour, Les Types Tableau,
Matrice et Chaîne de caractères, Les Algorithmes de Recherche : Séquentielle et
Dichotomique, Les Fonctions et les Procédures, Les Algorithmes de Tri et les types
Enregistrement et Fichier.
Moyens et outils pédagogiques
Supports : Résumé du cours, TD.
1 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Opérations opérations
2 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
signification. utilisation.
La structure Tant Connaitre la syntaxe
que…Faire de la boucle Tant que
et les conditions de
son utilisation.
la structure Connaitre la syntaxe
de la boucle Répéter
3 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Maitriser les
TD notions vues en
cours
Chapitre 5: Comprendre la Introduction Connaitre la notion de
les procédures nécessité de la module
et les fonctions décomposition (programmation par
d’un problème en module).
sous problèmes.
4 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
5 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
6 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
7 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Cha
pitre
1
Notions Fondamentales
Objectifs
8 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
1. Définition 1
Le mot algorithme vient du nom latinisé du mathématicien perse Al-Khawarizmi,
surnommé « le père de l'algèbre ».
Le domaine qui étudie les algorithmes est appelé l'algorithmique.
2. Définition 2
L'algorithme est le résultat d'une démarche logique de résolution d'un problème pour la mise
en œuvre pratique sur ordinateur et afin d'obtenir des résultats concrets.
3. Définition 3
Un algorithme décrit une succession d'opérations qui, si elles sont fidèlement exécutées,
produiront le résultat désiré.
II. Démarche d’écriture d’algorithmes
Pour résoudre un problème on commence par identifier les données, les résultats recherchés
et par quel moyen on peut obtenir les résultats à partir des données. C’est l’étape d’analyse du
problème qui aboutit à un procédé de résolution appelé algorithme (figure I.1).
Analyse
Problème Algorithme
Exemple :
Pi = 3.14
TVA = 0.18
2. Variables
9 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Une variable est un identificateur auquel on assigne une valeur. La variable peut changer de
valeur durant l’exécution d’un programme. Une variable est identifiée par un nom, une valeur
et un type.
IV. Types
Le type attribué à une variable permet de définir l’ensemble de valeurs que peut prendre la
variable ainsi que les opérations qu’on peut appliquer sur celle-ci.
Les principaux types utilisés en algorithmique sont :
- Le type entier
- Le type réel
- Le type caractère
- Le type logique ou booléen
La syntaxe de déclaration est la suivante :
Variable 1, Variable 2, … : Type
1. Le type entier
Ce type désigne les entiers relatifs et supporte les opérations suivantes :
- Addition : +
- Soustraction : -
- Multiplication : *
- Division entière : DIV
- Modulo (reste de division) : MOD
Exemples :
15 div 6 = 2
15 mod 6 = 3
15 * 6 = 90
15 – 6 = 9
15 + 6 = 21
2. Le type réel
Ce type désigne les valeurs appartenant à R et supporte les opérations suivantes :
- Addition : +
- Soustraction : -
- Multiplication : *
- Division : /
Exemples :
10 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
V. Les expressions
Une expression est la combinaison entre des constantes et des variables à l’aide d’opérateurs
arithmétiques ou logiques. L’expression obtenue exprime un calcul ou une relation.
11 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
signe négatif –
parenthèses ( )
puissance ^
multiplication et division * et /
addition et soustraction + et -
Remarque :
Si dans une expression l’ordre d’évaluation entre deux ou plusieurs opérateurs est le même,
l’évaluation se fait de gauche à droite.
2. Les expressions logiques
Une expression logique exprime une condition qui peut être formulée à l’aide :
- de variables et de constantes reliées par des opérateurs relationnels (<, >, =, <=, >=, #)
- de variables et de constantes logiques reliées par des opérateurs logiques (NON, ET, OU)
La priorité des opérateurs logiques est la suivante allant du plus prioritaire au moins
prioritaire :
NON
ET
OU
La priorité des opérateurs relationnels est la suivante allant du plus prioritaire au moins
prioritaire :
>
>=
<
<=
=
#
VI. Les instructions de base
1. La lecture
L’opération de lecture permet la réception de données de l’utilisateur à partir de périphériques
d’entrée (clavier), pour les ranger ensuite dans des cases mémoires réservées aux variables.
Syntaxe :
LIRE (variable1 [[, variable2] …])
Exemple :
12 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Syntaxe :
Variable1 variable2 | expression | constante
Remarques :
A gauche d’une affectation ne peut apparaître qu’une variable. Les constantes et les
expressions sont interdites.
Après une affectation la valeur de la variable à gauche de l’affectation est écrasée et
remplacée par la valeur à droite.
13 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Exemple :
A 5
B3
CB–A
VII. Structure générale d’un algorithme
ALGORITHME nom_algorithme
CONST
{Définition des constantes}
VAR
{Déclaration de variables}
DEBUT
{Suite d’instructions}
FIN
Exemple :
1.
ALGORITHME Hello_world
DEBUT
ECRIRE ("Hello World")
FIN
2.
ALGORITHME total
CONST
coefficient = 3
VAR
x, t : entier
DEBUT
ECRIRE ("donner un entier")
LIRE (x)
t x * coefficient
ECRIRE ("Le total est = ", t)
FIN
14 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
2
15 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Les Structures
Conditionnelles
Objectifs
16 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
FIN SI
Dans cette primitive les instructions ne sont exécutées que si la condition est vérifiée
(figure II.1).
SI
FAUX
Condition
VRAI
Séquence d’instructions
Suite de l’algorithme
Figure. II.1 : Instruction conditionnelle simple
Exemple :
Le tarif d’un bus est de 0.550 DT pour les voyageurs de plus de 6 ans. Les voyageurs âgés de
moins de 6 ans bénéficient d’une réduction de 50%.
Ecrire un algorithme qui lit l’âge du voyageur et qui affiche le prix de son ticket.
2. Forme alternative
Syntaxe :
SI <Condition> ALORS
<Séquence d’instructions 1>
SINON
<Séquence d’instructions 2>
FIN SI
Cette primitive permet d’exécuter la séquence d’instruction 1 si la condition est
vérifiée, sinon elle exécute la séquence d’instructions 2.
SI
VRAI FAUX
Condition
Suite de l’algorithme
17 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Ecrire un algorithme qui permet de lire un nombre réel à partir du clavier, et dire s'il est
positif ou strictement négatif.
Remarque :
L’un ou les deux blocs d’instructions de l’instruction si peuvent contenir d’autres instructions
si on parle alors d’instructions si imbriquées.
Exemple 2:
Ecrire un algorithme qui permet de lire un nombre réel à partir du clavier, et dire s'il est
positif, négatif ou nulle.
III. Les structures conditionnelles multiples
Cette structure est appelée aussi à choix multiple ou sélective car elle sélectionne entre
plusieurs choix à la fois, et non entre deux choix alternatifs (le cas de la structure SI).
Syntaxe :
SELON <sélecteur> FAIRE
liste de valeurs 1 : <Séquence d’instructions 1>
liste de valeurs 2 : <Séquence d’instructions 2>
………………………….
liste de valeurs n : <Séquence d’instructions n>
SINON
<Autre séquence d’instructions>
FIN SELON
Remarques :
Le sélecteur peut être une variable ou expression de type scalaire (le résultat est un
entier ou un caractère)
La structure SELON évalue le "sélecteur", compare celui-ci respectivement avec les
valeurs dans les listes de valeurs. En cas d'égalité avec une valeur, les actions
correspondantes, qui sont devant cette valeur seront exécutées.
liste de valeurs (i) peut y avoir une seule valeur, une suite de valeurs séparées par des
virgules et/ou un intervalle de valeurs.
Le sélecteur doit avoir le même type que les valeurs dans les liste de valeurs.
Le type de ces valeurs ne doit être, ni réel ni chaîne de caractères.
Après avoir traité la suite d'actions correspondante, l'exécution se poursuit après le
FIN.
18 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Exemple :
Ecrire un algorithme qui lit un chiffre de 0 à 9 puis affiche le chiffre en toute lettre.
Remarque :
Le même traitement peut être écrit à l’aide d’instructions si imbriqué mais l’algorithme
devient très lourd.
ALGORITHME chiffre
VAR
chiffre : entier
DEBUT
ECRIRE ("donner un chiffre")
LIRE (chiffre)
SI chiffre = 0ALORS
ECRIRE ("Zéro")
SINON
SI chiffre = 1ALORS
ECRIRE ("Un")
SINON
SI chiffre = 2ALORS
ECRIRE ("Deux")
SINON
SI chiffre = 3 ALORS
ECRIRE ("Trois")
SINON
…
FIN SI
FIN SI
FIN SI
FIN SI
FIN
19 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
3
20 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Les Structures
Itératives
Objectifs
21 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
POUR
c vi
VRAI FAUX
c <= vf
c vi + p
Remarques :
Si vi ≤ vf alors p > 0
Si vi ≥ vf alors p < 0
La valeur par défaut du pas p est 1
Le nombre d’itérations d’une boucle POUR est connu à l’avance (= vf – vi + 1)
Une boucle « pour » peut être exécutée 0, 1 ou n fois
Exemple1 :
On veut afficher les nombres (>0) pairs et inférieurs à 20 :
Solution 1 :
POUR i DE 1 A 20 FAIRE
SI (i MOD 2 = 0) ALORS
ECRIRE (i)
FIN SI
FIN POUR
22 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Exercice :
Ecrire un algorithme qui permet de lire les notes de 20 étudiants et de calculer la moyenne de
la classe pour une matière donnée.
III. La boucle TANT QUE
1. Syntaxe
TANT QUE condition FAIRE
Traitement
FIN TQ
Où condition est une expression ou une variable a valeur booléenne.
2. Principe de fonctionnement
TANT
QUE
FAUX
Condition?
VRAI
Traitement Suite de l’algorithme
23 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
2. Principe de fonctionnement
Le traitement de cette boucle est exécuté au moins une fois et il est ensuite répété jusqu'à ce
que la condition de sortie soit vérifiée.
REPETER
Traitement
Condition?
FAUX
VRAI
Suite de l’algorithme
Remarque :
Dans cette boucle, le traitement est exécuté au moins une fois avant l'évaluation de la
condition d'arrêt.
Exercice
Réécrire l’algorithme qui permet de lire les notes de 20 étudiants et de calculer la moyenne de
la classe pour une matière donnée, à l’aide d’une boucle REPETER :
Remarque :
La condition de la boucle REPETER est l’inverse de la condition de la boucle TANT
QUE.
V. Passage d’une structure itérative à une autre
Le passage d’une boucle « répéter » ou « tantque » à une boucle « pour » n’est
possible que si le nombre de parcours est connu à l’avance.
Lors du passage d’une boucle « pour » ou « tantque » à une boucle « répéter », faire
attention aux cas particuliers (le traitement sera toujours exécuté au moins une fois).
24 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
4
les chaînes de
caractères
Objectifs
25 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
1. Définition
Ce type s’applique à tous les caractères du code ASCII (American Standard Code for
Information Interchange).
La liste comprend :
Les lettres : ”A”… ”Z” et ”a”…”z”
Les chiffres : ”0”…”9”
Les caractères spéciaux : ”/” ; ”*” ; ”?” ; ”&” ; etc.
Les caractères de contrôle : <Retour Chariot> ; <Echap> ; etc.
Chaque caractère est défini par son numéro d’ordre unique compris entre 0 et 255
2. Fonctions standards sur les caractères
Asc(c) : retourne le code ASCII du caractère c .
Exemple :
i Asc(”A”)
i contiendra 65
Car(i) : retourne le caractère dont le code ASCII est égal à i.
Exemple :
c Car(65)
c contiendra ”A”
Succ(c) : retourne le successeur du caractère c .
Exemple :
c Succ(”a”)
c contiendra ”b”
Pred(c) : retourne le prédécesseur du caractère c.
Exemple :
c Pred(”b”)
c contiendra ”a”
Majus(c) :retourne le majuscule du caractère c.
Exemple :
c Majus(”a”)
c contiendra ”A”
Exercice :
Ecrire un algorithme qui lit 10 caractères puis affiche leurs codes ASCII, leurs prédécesseurs,
leurs successeurs et l’équivalent en majuscule de leurs successeurs.
26 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
27 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
28 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
ch1 ”or”
ch2 ” Algorithmique”
n Position(ch1,ch2)
n contiendra 3
29 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
5
30 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Les sous-problèmes peuvent a leurs tours être décomposés jusqu’à atteindre des traitements
élémentaires facile à implémenter.
Ce type de programmation s’appelle programmation modulaire ou chaque module traite un
sous-problème et qui peut être soit une procédure soit une fonction.
II. Procédure
Une procédure est un sous algorithme ayant une structure semblable à celle d’un algorithme et
qui possède un ensemble de paramètres et permet de transmettre un ensemble de résultats.
1. Syntaxe
PROCEDURE nom_procédure ([liste des paramètres])
CONST
{Définition des constantes}
VAR
{Déclaration de variables}
DEBUT
{Suite d’instructions}
FIN
Remarque :
Les variables déclarées dans le bloc VAR d’une procédure sont appelées variables
locales et ne peuvent être utilisées qu’à l’intérieure de celle-ci.
31 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
VAR
n :entier
DEBUT
ECRIRE ("donner un entier")
LIRE (n)
diviseurs(n)
FIN
Remarques :
La structure d’une procédure est similaire à celle d’un algorithme.
Elle possède un entête, une partie déclarative et un corps.
Le paramètre N de la procédure est un paramètre formel, alors que le paramètre n de la
procédure dans l’algorithme principale est un paramètre effectif.
Lors de l’appel d’une procédure il faut respecter le nombre, l’ordre et le type des
paramètres.
Une variable globale est déclarée au début de l’algorithme. Elle peut être utilisée dans
le corps principal de l’algorithme ou par les différents modules.
3. Modes de passage des paramètres
La substitution des paramètres effectifs aux paramètres formels s’appelle passage de
paramètres. Elle correspond au transfert d’information entre l’algorithme et la procédure
appelée. Les paramètres des procédures peuvent être de trois types : données, résultats,
données-résultats.
Un paramètre « donnée » est une information nécessaire pour le fonctionnement de la
procédure. Il ne subit aucun changement au cours de l’exécution de la procédure.
Un paramètre « résultat » est un paramètre qui est l’aboutissement d’un traitement. Sa
valeur initiale n’a aucune signification.
Un paramètre « donnée-résultat » est un paramètre qui est à la fois une donnée et un
résultat c'est-à-dire que sa valeur sera changée au cours de l’exécution de la procédure.
Pour chaque type de paramètre on indique dans le tableau ci-dessus le mode de
passage. Le passage par variable est mentionné à l’aide du mot clé VAR :
Type de paramètre Sens de transfert Mode de passage
Donnée AlgorithmeProcédure Par valeur
Résultat AlgorithmeProcédure Par variable
Donnée-résultat AlgorithmeProcédure
(Par adresse)
Exemple :
32 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
III. Fonctions
Une fonction est une procédure particulière qui possède un seul résultat. Une fonction possède
en plus un type de retour qui le type de son résultat.
1. Syntaxe
FONCTION nom_fonction([liste des paramètres]) : type_de_la_valeur_de_retour
33 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
{Déclarations}
DEBUT
{Suite d’instructions}
Nom_fonction←résultat
FIN
Remarques :
Dans une fonction tous les paramètres sont passés par valeurs.
Le nom de la fonction joue un double rôle il est nom et variable locale à la fois.
Dans le corps de la fonction il doit exister une instruction qui affecte le résultat au
nom de la fonction.
2. Appel d’une fonction
L’appel d’une fonction se fait toujours dans une expression.
Exemple :
FONCTION min (a, b : entier) : entier
DEBUT
SI a<b ALORS
min a
SINON
min b
FIN SI
FIN
Exemple :
x2
y6
zmin(x,y)
ECRIRE (min(x, y))
SI (min(x, y)>0) ALORS …
34 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
6
Les Tableaux
Objectifs
35 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Ceci suppose qu’on doit sauvegarder toutes les notes pour calculer la moyenne et faire ensuite
la recherche de celles supérieure à la cette moyenne.
Ce genre de traitement comporte deux inconvénients majeurs :
Le nombre de variables de l’algorithme devient très élevé.
On doit réécrire le même traitement (comparaison à la moyenne et affichage éventuel)
pour chaque variable.
L’algorithmique offre une solution qui s’appelle tableau qui permet de combiner
plusieurs valeurs de même type sous un même nom permettant ainsi d’optimiser leur
traitement.
II. Tableaux unidimensionnels
Un tableau à une dimension peut être considéré comme un vecteur (mathématique). Le
tableau est une structure de données est une structure de données constituée d’un nombre fini
d’éléments de même type et directement accessibles par leurs indices.
1. Déclaration
Pour définir une variable de type tableau, il faut préciser :
le nom (identifiant du tableau)
l’indice (généralement de type entier ou caractère)
le type des éléments (entier, réel, caractère, etc.)
Exemple :
On veut déclarer un tableau T de dix entiers :
T : Tableau [1 .. 10] de entier
Remarque :
On peut aussi déclarer un tableau comme suit :
CONST
N=10
TYPES
Tab=Tableau [1 .. N] de entier
VAR
T : Tab
2. Accès aux éléments d’un tableau
Soit T : Tableau [1 .. 10] de entier
T[4] est le 4ème élément du tableau
T[i] est le ième élément du tableau avec 1≤i≤10
36 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
37 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
c. Recherche
La recherche d’un élément dans un tableau consiste à retourner la position de sa première
occurrence :
FONCTION recherche (T : tab, E :entier) : entier
VAR
i, pos : entier
DEBUT
pos 0
i←0
Répéter
ii + 1
Jusqu’à ((T[i] = E) ou (i > N))
SI (T[i] = E) ALORS
Posi
FIN SI
Recherchepos
FIN
4. Tri d’un tableau
Le tri d’un tableau est l’organisation de tous ces éléments dans un ordre croissant ou
décroissant.
Il existe plusieurs algorithmes qui permettent de trier les éléments d’un tableau. Parmi ces
algorithmes on va étudier :
Le tri par sélection.
Le tri à bulle.
Le tri par insertion.
a. Le tri par sélection (par minimum)
Le principe de fonctionnement consiste à :
Chercher l’indice du plus petit élément du tableau T [1 .. N] et permuter l’élément
trouvé avec l’élément d’indice 1.
Chercher l’indice du plus petit élément du tableau T [2 .. N] et permuter l’élément
trouvé avec l’élément d’indice 2.
Faire le même travail pour le reste du tableau
Enfin chercher l’indice du plus petit élément du tableau T [N-1 .. N] et permuter
l’élément trouvé avec l’élément d’indice (N-1).
38 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
permut Vrai
FIN SI
FIN POUR
Jusqu’à (permut = Faux)
FIN
c. Le tri par insertion.
Le principe de fonctionnement consiste à prendre les éléments du tableau un par un et insérer
chacun dans sa bonne place de façon que les éléments traités forment un sous-tableau trié.
Comparer et permuter si nécessaire T[1] et T[2] de façon à placer le plus petit dans la
case du tableau d’indice 1.
Comparer et permuter si nécessaire l’élément T[3] avec ceux qui le précèdent dans
l’ordre (T[2] puis T[1]) afin de former une sous-tableau trié T[1..3].
Faire le même travail pour le reste du tableau.
Enfin comparer et permuter si nécessaire l’élément T[n] avec ceux qui le précèdent
dans l’ordre (T[n-1], T[n-2], T[n-3], …) afin d’obtenir un tableau trié.
PROCEDURE Tri_Insertion(Var T : Tab)
VAR
i, j, x, pos : Entier
DEBUT
POUR i de 2 à n FAIRE
x ← T[i]
j←i
TANTQUE (j>0 et T[j-1]>x) FAIRE
T[j]T[j-1]
j j-1
FIN TQ
T[j]x
FIN POUR
FIN
5. Recherche dichotomique
Soit T un tableau contenant n éléments triés dans le sens croissant, on veut écrire une
procédure qui affiche l’indice de la première apparition d’un élément x dans le tableau s’il
existe.
40 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
41 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
42 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
43 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
7
Les Enregistrements
Objectifs
44 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
On a vu jusqu’ici que les variables peuvent être de type simple tel que les caractères et les
réels.
On a vu ensuite qu’un tableau permet de rassembler un ensemble d’éléments de même type
sous un même nom.
Un enregistrement permet de rassembler plusieurs informations de types différents sous un
nom unique.
Le type enregistrement forme donc un type composé.
II. Syntaxe
Types
Nom_enreg=ENREG
Var 1 : type 1
Var 2 : type 2
…
Var i : type i
…
Var n : type n
FINENREG
VAR
Enrg1 : Nom_enreg
Remarques :
La déclaration ci-dessus constitue une définition d’un nouveau type Nom_type de type
enregistrement.
Les Var i constituent les membres de l’enregistrement qui sont appelés champs.
Les champs peuvent être de type simple, Tableau ou enregistrement.
Exemple :
date=ENREG
jour : entier
mois : chaîne
annee : entier
FIN ENREG
Var
dt :date
III. Manipulation des variables de type enregistrement
45 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
On ne peut pas référencés globalement un enregistrement dans une instruction car ils
sont composés d’éléments de types différents. Par contre, il est possible de faire
référence à chaque élément d’un enregistrement.
Pour cela, il est nécessaire de préciser le nom (identificateur) de l’enregistrement,
suivi d’un suffixe indiquant l’identificateur du champ concerné.
Les deux identificateurs sont séparés par un point.
Exemple :
dt.jour 12
dt.moisjuin
dt.annee 2012
Remarques :
Il est possible d’affecter un enregistrement à un autre de même type:
Exemple :
date1, date2 : date
date1 date2 date1.jourdate2.jour
date1.moisdate2.mois
date1.anneedate2.annee
on peut effectuer une comparaison égalitaire ou inégalitaire entre deux
enregistrements de même type :
Exemple :
SI (d1=d2) Alors
Exercice :
On veut représenter un étudiant identifié par un matricule, un nom, un prénom et une date de
naissance.
1. Définir la structure de donné représentant un étudiant et une date.
2. Ecrire une procédure qui permet de remplir un tableau de 20 étudiants.
46 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Chapitre
8
Les Fichiers
Objectifs
I. Introduction
Jusqu’ici les données utilisées étaient stockées de manière temporaire, mais souvent on a
besoin de stocker les données et les résultats des programmes de façon permanente. Parmi les
moyens utilisés qui permettent de stocker les données de façon permanente sont les bases de
données et les fichiers.
Dans ce chapitre on va s’intéresser aux fichiers.
II. Définition
Un fichier structuré est une collection d’informations de même type stockées les unes à la
suite des autres sur un support physique (disque dur, cd, dvd, etc.…) et terminé par une
marque de fin de fichier.
On peut faire l’analogie avec un fichier manuel comportant des fiches chaque fiche
correspond à une information et le fichier correspond à la boite d’archive.
Exemples :
Un fichier d’étudiants
Un fichier d’articles
Un fichier d’employé
1. Caractéristiques d’un fichier
Un fichier a un nom, un mode d’organisation et un mode d’accès.
On ce qui concerne le nom d’un fichier on distingue le nom interne qui est le nom
avec lequel un fichier est identifié dans un algorithme et un nom externe qui comporte
le chemin du fichier (nom du support physique), le nom du fichier ainsi que son
d’extension.
Pour le mode d’organisation d’un fichier on trouve le mode séquentiel, le mode
séquentiel indexé, le mode relatif ou sélectif.
Pour le mode d’accès d’un fichier on trouve l’accès séquentiel et l’accès direct.
Un fichier séquentiel permet uniquement d'accéder aux données dans l'ordre de leur
écriture (accès séquentiel).
Un fichier à accès direct (fichier à organisation relative) correspond à un tableau en
mémoire : toutes ses composantes ont la même taille, on peut donc accéder
directement au Nème enregistrement. Comme pour un tableau, les insertions et les
suppressions nécessitent des décalages des composantes du fichier.
48 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Pour les fichiers séquentiels indexés ou sélectifs Les composantes sont stockées dans
le fichier dans l'ordre de leur création. On utilise alors un tableau d'index, donnant en
première position le numéro de la première composante, puis de la seconde, etc.
III. Les fichiers séquentiels
1. Déclaration d’un fichier séquentiel
Syntaxe :
Types
Nom_fichier= Fichier de type
Var
F : Nom_ficher
Exemple :
Types
Voiture=ENREG
Marque : chaîne
Prix: réel
Nserie : entier
Fin ENREG
Fichier_Voiture=Ficher de voiture
Var
V : Voiture
F : Fichier_Voiture
2. Manipulation des fichiers séquentiels
a. Ouverture d’un fichier
Syntaxe :
Ouvrir (Nom_fichier, mode)
Remarques :
On peut ouvrir un fichier pour consultation on appelle ça mode lecture(L).
On peut l’ouvrir pour modification on appelle ça mode écriture(E).
Après l’ouverture du fichier on aura un pointeur qui pointe sur la 1ère donnée du
fichier.
Exemple :
Ouvrir (F, E)
49 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
On va ouvrir le fichier F qui est un fichier de voiture en mode écriture afin d’ajouter,
de modifier ou de supprimer des voitures.
b. Lecture d’un Fichier
Syntaxe :
Lire (Nom_fichier, x)
Remarque :
Lors de la lecture d’un fichier on commence toujours par la 1ère donnée du fichier.
Chaque donnée lue est récupérée dans une variable (tampon) qui a le même type que
les éléments du fichier.
Si on veut lire une donnée particulière il faut commencer depuis le début jusqu’à
atteindre l’information voulue.
c. Ecriture dans d’un Fichier
Syntaxe :
Ecrire (Nom_fichier, x)
Exemple :
V.Marque fiat
V.Prix 15000
V.Nserie 100
Ecrire (F, V)
Le contenu de l’enregistrement V sera copié dans le fichier F.
Remarque :
Dans un fichier séquentiel l’insertion se fait toujours à la fin du fichier.
d. Fermeture d’un fichier
Syntaxe :
Fermer (Nom_fichier)
Remarque :
Apres toute utilisation du fichier on doit obligatoirement le fermer.
Exemple :
Fermer(F)
50 AJILI Sondes
Algorithmique et Structure de données 1ere année LIRI
Remarque :
Pour tester si on a atteint la fin du fichier ou non, on utilise cette fonction qui retourne
vrai si c’est le cas sinon elle retourne faux.
Exercice 1:
Écrire une procédure qui permet de remplir un fichier de 10 articles, un article et caractérisé
par son libellé, son prix et sa quantité.
Exercice 2 :
Écrire une procédure qui permet d’afficher le contenu d’un fichier d’un article.
IV. Les fichiers Texte
1. Définition
Les fichiers de texte se sont des fichiers séquentiels.
Souvent sont des fichiers à accès direct aux caractères (on peut accéder directement au N ème
caractère d’une ligne), mais l'accès est séquentiel au niveau des lignes (pour accéder à la N ème
ligne, il faut lire le fichier depuis le début, jusqu'à compter N-1 signes de fin de ligne).
Les fichiers de texte peuvent également être utilisés pour stocker des valeurs numériques (les
nombres sont alors formatés pour être écrits en décimal à l'aide de caractères ASCII).
Remarques :
Le retour chariot a 13 comme code ASCII.
Le saut de ligne a 10 comme code ASCII.
Syntaxe :
Types
Nom_fichier= Fichier de caractères
Var
F : Nom_fichier
Remarques :
Un fichier texte est une suite de caractère organisée en ligne.
Un fichier texte peut être traité caractère par caractère ou ligne par ligne.
Pour lire une ligne on utilise la procédure suivante Lire_lig (Nom_fichier, x) qui
permet de lire une ligne du fichier et copier son contenu dans la variable x qui est de
type chaine.
Exercice :
Écrire une procédure qui permet d’afficher le contenu d’un fichier texte.
51 AJILI Sondes