Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION
EXERCICES D’APPLICATION
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
L’ART DE LA PROGRAMMATION
OPTIMISATION D’UN PROGRAMME
TRAVAUX DIRIGES
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
EXERCICES D’APPLICATION
INTRODUCTION
EXERCICES D’APPLICATION
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
EXERCICES D’APPLICATION :
EXEMPLE COMPLET
EXERCICES D’APPLICATION
6
CHAPITRE VI LES STRUCTURES DE DONNEES DYNAMIQUES
INTRODUCTION
1. Un Arbre
a. Taille
b. Hauteur
2. Les graphes
Relations graphes et informatique
7
CHAPITRE I : INTRODUCTION A L’ALGORITHMIQUE
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
1. Définition
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.
2. Algorithmique et programmation
9
3. Convention d’écriture d’un algorithme
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
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.
EXERCICES D’APPLICATION
11
4. De quoi est constitué un programme informatique ?
« 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
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.
PROCEDURE nom_procédure ;
DEBUT
Instruction1 ;
.
.
. LE CORPS
Instruction n ;
FIN
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.
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.
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.
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.
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.
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’ ;
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.
INSTRUCTION1
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………
INSTRUCTION2
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………
INSTRUCTION3
sera exécutée si et seulement si…………………………….....
………………………………………………………………………………………
Ils permettent de faire des comparaisons. Ce sont : >, >=, <, =<, ≠, =
18
EXERCICES D’APPLICATION
Exercice 1 :
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 :
………………………………………………………………………………………………
………………………………………………………………………………………………
……………………………………………………………………………………………….
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.
I. L’INSTRUCTION D’AFFECTATION
1. Syntaxe et signification
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.
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
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 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*)
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
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.
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.
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
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
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
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
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 ;
…
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é.
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.
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
Ex. : Action
TANT QUE (a= b) ET (c < 0) FAIRE
DTQ
d a +b+c ;
AFFICHER (‘ La valeur de d est :’, d) ;
FTQ
OU
34
Compteur valeur initiale
Si faux
Action
Compteur Compteur+PAS
EX. :
J 1 ;
TANT QUE (J< = 5) FAIRE
DTQ
AFFICHER (‘BONJOUR’) ;
J J+1 ;
FTQ
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
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
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 :
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).
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.
39
OBJET : Ce chapitre traite des la décomposition des programmes informatique en
sous partis, appelés sous programmes.
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 :
DEBUT _ FONCTION
< Bloc d’instruction> ;
FIN _ FONCTION
Syntaxe
Variable nom_fonction (arguments) ;
Ex : x calcul (a, b) ;
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
41
1- L’entête
Syntaxe
PROCEDURE nom_procédure (paramètres :types) ;
2- Partie déclarative
Idem que pour la fonction.
3- Le corps
Syntaxe
DEBUT _ PROCEDURE
<bloc d’instruction>
FIN_PROCEDURE
DEBUT _ PROCEDURE
< bloc d’instruction>
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 ;
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
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
Syntaxe
Fonction Nom fonction (paramètre muet : type) : type
Ex : Fonction PP (x : entier) : entier ;
44
Syntaxe
Nom _ fonction (VAR paramètre muet : type) : type ;
5
a a $FFF
5
$FFF
x 5 x
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
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.
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) ;
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.
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.
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’’
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 ‘’
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.
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.
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.
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
QUESTIONS REPONSES
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.
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.
Ainsi
T [5] 20 ; T[2] 55 ;
1 2 3 4 5 6
55 20
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.
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
……………………………………………… ………………………………………….
……………………………………………… …………………………………………..
……………………………………………… …………………………………………..
……………………………………………… ………………………………………….
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.
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 ;
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
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) ;
Ex2. : CONST T: TABLEAU [3] [4] de CARACTERE = ((‘c’, ‘r’, ‘j’, ‘k’), (‘o’, ‘p’, ‘h’,
‘u’), (‘e’, ‘f’, ‘y’, ‘g’));
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 ;
(*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 :
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 :
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
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
2. Déclaration
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 ;
Ex1. : TYPE
Lettres = ENSEMBLE de carctères ;
Premier = ENSEMBLE de 1 .. 250 ;
65
Ex2. : TYPE
Note = ( ab, fb, tu, ik, lp) ;
Pert = ENSEMBLE de Note ;
1 .Définition
2. Déclaration
Syntaxe :
TYPE
Nom_enregistrement=enregistrement
66
Champs1 : type1 ;
Champs2 : type2 ;
………………..
Champsn : type n ;
Fin_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
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é.
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 ;
VAR
Etudiant : T ;
68
I :entier ; Som : réel ;
(*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.
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
C’est ce dernier type de fichier qui est le plus utilisé et donc va faire l’objet de
notre étude.
FICHIER
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
Ex. : TYPE
Personne = ENREGISTREMENT
Nom : CHAINE ;
Contact : CHAINE ;
FIN
VAR Rept : FICHIER de Personne ;
Id : Personne ;
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.
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
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.
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.
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.
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.
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
FERMER cpteclt
77
// Récupérer l'article courant dans l'enregistrement en mémoire centrale
LIRE (cpteclt,compte)
Fermer cpteclt
78
FINTANTQUE
POUR i 1 à n FAIRE
Si tabcompte[i].num <> 1268
Ecrire (cpteclt, tabcompte[i])
FINSI
FINPOUR
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.
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…
Listes chainées
Linéaires piles
Arbres
Non linéaires
Graphes
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.
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
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.
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 :
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.
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.
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
b. Hauteur
Hauteur (arbre) = 1 + la plus grande des hauteurs des fils (ou 0 s’il n’y en a pas)
2. Les graphes
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.
87