Académique Documents
Professionnel Documents
Culture Documents
Ce cours peut être utile à toute personne désirant s'initier à la programmation et aux
bases de données. Il s'adresse donc à des débutants et ne demande aucune connaissance
préalable dans ces deux domaines.
Commentez
Les bases de la programmation par Eric Thirion
À propos de l'auteur.................................................................................................................................................... 7
Note de la rédaction de Developpez.com..............................................................................................................7
Premières notions de programmation......................................................................................................................... 7
But de ce chapitre.................................................................................................................................................. 7
Un peu d'histoire.................................................................................................................................................... 8
L'ordinateur............................................................................................................................................................. 8
Codage binaire.................................................................................................................................................. 8
Le bit............................................................................................................................................................ 8
Le transistor................................................................................................................................................. 8
L'octet et autres unités.............................................................................................................................. 10
Le codage des nombres entiers en base 2.........................................................................................10
Le codage du texte en ASCII.............................................................................................................. 11
Mémoire vive et adresse................................................................................................................................ 12
Langage machine et programme exécutable............................................................................................12
Processus........................................................................................................................................................ 14
Les entrées-sorties..........................................................................................................................................15
Les interruptions..............................................................................................................................................16
Les Interfaces graphiques.................................................................................................................................... 17
Historique.........................................................................................................................................................17
Interface du système.......................................................................................................................................19
Le curseur.................................................................................................................................................. 19
Gestion du clic........................................................................................................................................... 19
Fenêtre d'une application................................................................................................................................20
Les évènements.............................................................................................................................................. 20
Les zones de texte......................................................................................................................................... 21
La programmation.................................................................................................................................................22
Notion de programme..................................................................................................................................... 22
Notion de langage...........................................................................................................................................23
Fichiers sources.............................................................................................................................................. 23
Compilation......................................................................................................................................................24
Notion de compilateur................................................................................................................................24
Exemple de compilation............................................................................................................................ 25
Interprétation.........................................................................................................................................26
Les EDI............................................................................................................................................................27
La programmation évènementielle..................................................................................................................28
Lazarus................................................................................................................................................................. 29
Notion de formulaire........................................................................................................................................29
Génération automatique de code................................................................................................................... 30
Programmation évènementielle.......................................................................................................................34
Ordre d'exécution des instructions............................................................................................................ 35
Notice d'utilisation........................................................................................................................................... 35
Les variables.........................................................................................................................................................36
La notion de variable...................................................................................................................................... 36
Les noms de variables en Pascal............................................................................................................. 36
La notion de type............................................................................................................................................ 37
Déclaration d'une variable...............................................................................................................................38
Déclaration d'une variable en Pascal........................................................................................................39
Syntaxe générale..................................................................................................................................39
Déclaration d'un entier......................................................................................................................... 39
Le type double......................................................................................................................................39
Déclaration d'une chaîne de caractères.............................................................................................. 39
Regroupement des déclarations.......................................................................................................... 39
Où faut-il déclarer les variables ?........................................................................................................ 39
Lecture et affichage..............................................................................................................................................40
Données et résultats d'un traitement..............................................................................................................40
L'image du sourd-muet qui ne sait pas additionner.................................................................................. 40
Pour un ordinateur.....................................................................................................................................40
Exemple du programme d'addition............................................................................................................41
-2-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Historique.........................................................................................................................................................42
La procédure writeln.................................................................................................................................. 42
La procédure readln.................................................................................................................................. 43
ETBib............................................................................................................................................................... 44
Exemple d'utilisation des procédures de ETBib........................................................................................44
Lecture des variables........................................................................................................................... 45
Affichage des variables........................................................................................................................ 45
Effacement des zones de texte........................................................................................................... 45
Argumentation pédagogique......................................................................................................................46
Les expressions....................................................................................................................................................46
Les littéraux..................................................................................................................................................... 47
Les littéraux numériques........................................................................................................................... 47
Les littéraux chaînes de caractères.......................................................................................................... 48
Les constantes................................................................................................................................................ 48
Déclaration d'une constante en Pascal.....................................................................................................48
Opérateur.........................................................................................................................................................48
La concaténation........................................................................................................................................49
Validité d'une expression................................................................................................................................ 50
Expressions valides de type chaîne de caractères...................................................................................50
Expressions valides de type numérique................................................................................................... 51
Affichage d'expression.................................................................................................................................... 51
Expression de type chaîne de caractères.................................................................................................51
Expression numérique............................................................................................................................... 52
Traitement sans variables-résultats...........................................................................................................52
L'affectation........................................................................................................................................................... 53
Écriture d'une instruction d'affectation en Pascal........................................................................................... 53
Exemple de code Pascal avec des affectations....................................................................................... 54
Affectation récursive........................................................................................................................................54
Traitement itératif.............................................................................................................................................55
Exemple et conseils............................................................................................................................................. 56
Exemple de programme et conseil.................................................................................................................57
Cahier des charges................................................................................................................................... 57
Déclaration des constantes....................................................................................................................... 57
Conception de l'interface graphique..........................................................................................................57
Lecture et déclaration des données..........................................................................................................58
Traitement, résultats intermédiaires et finals.............................................................................................59
Le code de la procédure en entier............................................................................................................60
Synthèse..........................................................................................................................................................60
Exercices...............................................................................................................................................................60
Sous-programmes...................................................................................................................................................... 61
But de ce chapitre................................................................................................................................................ 61
Introduction........................................................................................................................................................... 61
Découpage d'un programme en sous-programmes....................................................................................... 61
Sous-programmes non évènementiels........................................................................................................... 62
Les unités........................................................................................................................................................ 63
Procédures et fonctions.................................................................................................................................. 63
Portée des variables.............................................................................................................................................64
Exemple 1 (fichier : Global/ProjetGlobal.lpi)................................................................................................... 64
Exemple 2 (fichier : Local0/ProjetLocal0.lpi)...................................................................................................65
Exemple 3 (fichier : Local1/ProjetLocal1.lpi)...................................................................................................66
Exemple 4 (fichier : Local2/ProjetLocal2.lpi)...................................................................................................67
Synthèse..........................................................................................................................................................68
Définition.................................................................................................................................................... 68
Portée.........................................................................................................................................................68
Durée de vie.............................................................................................................................................. 69
Déclarations locales multiples................................................................................................................... 69
Déclaration simultanée en local et en global............................................................................................ 69
Exemple d'utilisation de sous-programmes..........................................................................................................69
-3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
-4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
-5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Format........................................................................................................................................................... 119
Les fichiers texte........................................................................................................................................... 119
Les fichiers structurés................................................................................................................................... 120
Opérations sur les fichiers................................................................................................................................. 120
Les erreurs d'accès.......................................................................................................................................120
Ouverture et fermeture d'un fichier...............................................................................................................121
À quoi sert l'ouverture d'un fichier ?........................................................................................................121
À quoi sert la fermeture d'un fichier ?.....................................................................................................121
Accès direct et accès séquentiel.................................................................................................................. 121
Accès direct............................................................................................................................................. 121
Accès séquentiel......................................................................................................................................122
Manipulation des fichiers texte..................................................................................................................... 123
Ouverture d'un fichier texte..................................................................................................................... 123
Opérations sur les lignes.........................................................................................................................124
Manipulation des fichiers structurés............................................................................................................. 124
Ouverture d'un fichier structuré............................................................................................................... 124
Accès séquentiel......................................................................................................................................124
Accès direct............................................................................................................................................. 124
Manipulation de fichiers texte en Pascal........................................................................................................... 124
Déclaration.....................................................................................................................................................124
Assignation.................................................................................................................................................... 125
Création d'un fichier texte............................................................................................................................. 125
Ouverture en écriture...............................................................................................................................125
Écriture d'une ligne.................................................................................................................................. 125
Lecture d'un fichier texte...............................................................................................................................126
Ouverture d'un fichier texte en lecture.................................................................................................... 126
Lecture d'une ligne et test de fin de fichier.............................................................................................126
Les fichier structurés en Pascal.........................................................................................................................126
Déclaration.....................................................................................................................................................126
Assignation.................................................................................................................................................... 127
Ouverture et fermeture..................................................................................................................................127
Écriture séquentielle......................................................................................................................................128
Lecture séquentielle...................................................................................................................................... 128
Lecture jusqu'en fin de fichier................................................................................................................. 129
Exercices.............................................................................................................................................................129
-6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
À propos de l'auteur
Eric Thirion, titulaire d'un doctorat en informatique et d'un Capes de mathématiques, a passé plusieurs années à
l'étranger (de 1990 à 1994 à l'Université Heriot-Watt d'Édimbourg, puis de 1994 à 1996 à l'université de Leuven en
Belgique) dans le cadre de contrats de recherche en vision par ordinateur.
Auteur d'une vingtaine de publications, il a enseigné la programmation à l'école des Mines de Nancy, à l'IUT de Nancy
et à l'université Louis Pasteur de Strasbourg.
La relecture des différentes parties du cours a été réalisée par Cédric DUPREZ, Claude Leloup, f-leb et Philippe
DUVAL.
But de ce chapitre
Dans ce cours, j'ai tout d'abord rassemblé les notions qui m'ont semblé utiles à introduire avant de commencer
proprement dit le cours de programmation.
En particulier, comme la programmation est conditionnée par la manière dont fonctionne un ordinateur, il m'a semblé
logique de commencer par une présentation très sommaire de cette machine : sa structure, son fonctionnement, et
du seul langage qu'elle est capable de comprendre : le langage machine.
J'aborde ensuite les principes d'interaction homme-machine via une souris, un clavier et un écran graphique. Cela me
permet d'introduire la programmation évènementielle, avant de parler de l'environnement de développement intégré
Lazarus, spécialement conçu pour ce type de programmation.
Le cours de programmation proprement dit porte sur les instructions permettant de rentrer des données dans la
mémoire d'un ordinateur (la lecture, l'affectation) ou d'afficher des informations à l'écran, ce qui demande au préalable
d'introduire les notions de variables, de type et d'expressions.
-7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Un peu d'histoire
De la machine de Turing à UML, retrouvez les moments-clés de l'histoire de l'informatique dans cette série de slides :
téléchargez le document Projo-Histoire.pdf.
L'ordinateur
Un ordinateur est une machine utilisant et produisant de l'information. Il reçoit de l'information (de l'utilisateur, par
internet…), donne de l'information (informations affichées à l'écran, imprimées…), mémorise de l'information (en
mémoire vive, sur disque dur, clé USB, CD, DVD…) et traite de l'information (calcul mathématique, « raisonnement »
logique…).
Nous allons donc commencer par parler de l'information et plus exactement de la manière dont elle est représentée
dans un ordinateur.
Codage binaire
Le bit
Toute information traitée par un ordinateur est codée en binaire, c'est-à-dire par une suite de bits valant zéro ou un.
La représentation physique du zéro et du un dépend du type de support utilisé : mémoire vive, disque dur, clé USB,
CD, etc. Mais, quel que soit le type de support utilisé, il s'agit toujours d'un point de vue logique, d'une suite de zéros
et de uns.
Le transistor
Pour prendre un exemple, la représentation physique actuelle d'un bit en mémoire vive est un transistor composé
de silicium. La représentation du zéro et du un est basée sur la répartition des charges négative et positive dans
le transistor.
-8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Et voici le un :
De 1970 à 2008, le nombre de transistors sur une puce électronique a augmenté de manière vertigineuse en suivant
la loi de Moore : le nombre de transistors par puce double tous les deux ans pour le même prix de fabrication. Les
transistors deviennent donc de plus en plus petits.
-9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Comme un signal électrique met moins de temps à parcourir une distance plus courte, cette progression a des
répercussions directes sur la vitesse des processeurs (elle double tous les 18 mois). Elle entraîne également une
augmentation constante de la capacité des mémoires vives (la RAM des PC double tous les deux ans environ).
Une suite de huit bits est appelée un octet (ou byte en anglais). C'est l'unité de base permettant de définir la dimension
d'un espace de stockage. Il en dérive des unités plus grandes comme :
La mémoire vive des ordinateurs actuels (2013) est de l'ordre de plusieurs gigaoctets alors que la capacité des
disques durs se compte en téraoctets.
La manière de coder une information en binaire dépend du type d'information. Les informations numériques, par
exemple, ne sont pas codées de la même manière que le texte ou que les images ou le son.
Le codage binaire des nombres entiers est basé sur l'écriture des nombres en base 2 (en utilisant uniquement les
chiffres 0 et 1).
- 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le principe est le même que celui de l'écriture d'un nombre entier en base 10. c'est-à-dire l'écriture habituelle d'un
nombre utilisant les 10 chiffres de 0 à 9. Rappelons que dans ce système, chaque chiffre est associé à une puissance
0 1 2
de 10. Il y a un chiffre pour les unités (10 ), un chiffre pour les dizaines (10 ), un pour les centaines (10 ), un pour
3 3 2 1 0
les milliers (10 ), etc. Par exemple, 2013 signifie : 2 × 10 + 0 × 10 + 1 × 10 + 3 × 10 .
L'écriture d'un nombre entier en base 2 utilise le même principe, sauf que les puissances de 10 sont remplacées par
5 3
des puissances de 2. Le nombre 40, s'écrira par exemple : 101000. Car 40 = 32 + 8 ou autrement dit 2 + 2 et donc
5 4 3 2 1 0
40 = 1 × 2 + 0 × 2 + 1 × 2 + 0 × 2 + 0 × 2 + 0 × 2 .
Comme 40 n'a que six chiffres en base 2, on peut représenter ce nombre sur un octet comme suit :
• jusqu'à 64 000 environ avec 2 octets pour les entiers non signés (32 000 avec signe) ;
• jusqu'à 4 milliards environ avec 4 octets pour les entiers non signés (2 milliards avec signe).
Les informations textuelles (suite de caractères) sont souvent codées en ASCII. Dans ce codage, chaque caractère
est représenté par un octet de valeur prédéfinie dans une table de correspondance.
La « valeur » est en fait l'interprétation du codage binaire de l'octet en nombre entier, comme nous l'avons vu au
paragraphe précédent.
Prenons par exemple, le caractère « ( ». Dans la table de correspondance ASCII, on voit que sa valeur est 40.
Autrement dit, le codage binaire du caractère « ( » est :
Il ne le peut pas !
En effet, la simple connaissance d'une suite de 0 et de 1 ne permet pas de savoir ce que représente cette suite. Tout
dépend de la manière dont elle est interprétée.
Si on donne l'octet précédent à un ordinateur, il y verra le nombre 40, si à ce moment-là il s'attend à un nombre et
il y verra le caractère « ( », si à ce moment-là, il s'attend à un caractère.
- 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
La mémoire vive (ou RAM pour Random Access Memory) d'un ordinateur peut être vue comme une suite continue
d'octets.
Chaque octet possède un numéro. Le numéro du premier est 0, du deuxième 1, etc. Ce numéro s'appelle l'adresse
de l'octet.
Une plage mémoire est une suite d'octets consécutifs. Elle peut donc être définie par une plage d'adresses (adresses
minimale et maximale) ou bien par l'adresse de début (ou autrement dit, l'adresse minimale) de la zone et du nombre
d'octets qu'elle contient.
Voici, par exemple, une plage mémoire de trois octets, démarrant à l'adresse 2 :
Le processeur d'un ordinateur exécute en permanence des instructions que l'on appelle instructions machine. Il
contient (en outre) des mémoires de petite taille (quelques octets), appelées registres, qui servent à transférer des
données de la mémoire vers le processeur (ou inversement) en vue d'effectuer des opérations sur ces données.
- 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Par exemple :
Nous avons vu plus haut que toute information traitée par un ordinateur est codée en binaire. Il en de même des
instructions machine. Une instruction machine est codée en binaire sur quelques octets (4 ou 8 dans les machines
actuelles). Une partie du codage définit le type d'opération à effectuer et une autre, les objets (les registres, par
exemple) sur lesquels cette opération doit agir.
Il est important de noter que le langage machine est le seul langage directement exécutable par un ordinateur. Les
langages de programmation (comme C, Java, PHP…) ne le sont pas !
Les programmes exécutables peuvent se trouver en mémoire (on dit qu'ils sont résidents) ou sur le disque, sous
la forme de fichiers (reconnaissables sous Windows par leur extension .exe). Mais pour pouvoir être exécutés, ils
doivent forcément être chargés en mémoire :
- 13 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Nous avons dit plus haut qu'un programme exécutable est une suite d'instructions.
En fait, pour être plus exact, il faudrait définir un programme exécutable comme un mélange de zones de code
contenant des instructions machine et de zones de données servant à stocker provisoirement les informations
traitées (données ou résultats).
Processus
La mémoire d'un ordinateur contient plusieurs programmes que le processeur exécute à tour de rôle à une telle
vitesse que l'on a l'impression qu'ils sont exécutés en même temps.
Chacun de ces programmes résidents possède donc ses propres zones d'instructions et de données.
- 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Parmi les processus résidents figurent nécessairement les processus système, qui servent (entre autres) à gérer
les périphériques (clavier, souris, écran, disque, lecteur de CD, imprimantes, etc.) et les fichiers.
Les entrées-sorties
Jusqu'à présent, nous avons essentiellement décrit l'ordinateur du point de vue du processeur et de la mémoire vive.
Le processeur exécute en permanence des programmes chargés en mémoire. Ces programmes sont des suites
d'instructions machine et de plages mémoire réservées aux données.
Mais si les instructions exécutées par le processeur ne font que transférer des informations entre la mémoire vive et
les registres, comment peut-il communiquer avec le clavier ? Avec la souris ? Avec l'écran ?
Comment les plages mémoire réservées aux données peuvent-elles recevoir les données de l'utilisateur ?
Pour répondre à ces questions, il nous faut tout d'abord compléter notre vision d'un ordinateur et considérer les
éléments externes à l'unité centrale que l'on appelle les périphériques (écran, clavier, souris, disque, lecteur de CD,
clé USB, imprimante, etc.).
Les périphériques ont leurs propres circuits spécialisés appelés interfaces d'entrées-sorties. Pour l'écran, par
exemple, il s'agit de la carte graphique. Ces circuits peuvent avoir leurs propres registres, leur propre mémoire et
même leurs propres processeurs.
Ils communiquent avec le processeur et la mémoire par un ensemble de fils que l'on appelle le bus de données.
- 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
En réalité, les instructions exécutées par le processeur ne se limitent pas à la mémoire centrale. Certaines
instructions spéciales, appelées instructions d'entrée-sortie, permettent de transférer des données entre les
interfaces d'entrée-sortie et les registres du processeur ou directement avec la mémoire vive.
Ceci explique très sommairement comment se fait la communication entre le processeur et les périphériques
et indirectement, comment un programme peut envoyer des informations vers un périphérique ou recevoir des
informations provenant d'un périphérique.
Mais cela n'explique pas l'interaction avec l'utilisateur. En effet, vous remarquerez que votre ordinateur réagit
instantanément (ou quasiment) lorsque vous éjectez un CD, introduisez une clé USB, bougez la souris, appuyez sur
une touche du clavier, etc.
Ces actions physiques de l'utilisateur sur l'ordinateur peuvent se produire à n'importe quel moment, alors que le
processeur est occupé à exécuter les instructions machine d'un programme quelconque. Or c'est nécessairement
le processeur qui doit réagir à ces actions.
Il faut donc qu'il soit capable d'interrompre l'exécution du programme en cours pour réagir immédiatement à n'importe
quelle action de l'utilisateur.
Les interruptions
Une interruption (physique) est un signal envoyé au processeur par un dispositif externe à
l'unité centrale.
Le clavier va par exemple envoyer un signal d'interruption au processeur chaque fois qu'une touche est appuyée. La
souris envoie une interruption chaque fois qu'elle est déplacée ou que l'utilisateur effectue un clic.
Le processeur possède des entrées spécialement prévues pour recevoir ces signaux.
- 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Lorsqu'il reçoit une interruption, il interrompt provisoirement le programme qu'il est en train d'exécuter pour exécuter
des instructions du système d'exploitation prévues, pour traiter ce type d'interruption. Il existe par exemple des
instructions prévues pour traiter les interruptions clavier, d'autres pour traiter des interruptions souris, etc.
Le système ne gère pas entièrement les interruptions ; elles sont sous-traitées par les pilotes (drivers en anglais)
des périphériques. Un pilote est un programme spécialisé dans la gestion d'un périphérique spécifique. Il ne fait pas
partie du système d'exploitation, car il est généralement produit par le fabricant du périphérique.
Une fois l'interruption traitée, le processeur reprendra ce qu'il était en train de faire à l'endroit exact où il s'était arrêté.
Pour donner une image, on pourrait comparer ce mécanisme au réflexe humain. Prenons par exemple une personne
lisant un livre. Le cerveau de cette personne joue le rôle du processeur. Le programme exécuté est la lecture du
livre. Soudain, une abeille pique la personne. La douleur perçue est le signal d'interruption envoyé au cerveau (le
processeur). Par réflexe, la personne lâche le livre. C'est une réaction préprogrammée dans l'inconscient (le système
d'exploitation). Après avoir soigné la piqûre (traitement de l'interruption), la personne reprend la lecture du livre à
l'endroit où elle s'était arrêtée.
Historique
Les premières interfaces graphiques sont apparues avec l'invention de la souris (1967) et des écrans graphiques,
c'est-à-dire capables d'afficher des images.
Avant cela, les écrans d'ordinateur n'affichaient que du texte et ressemblaient plutôt à ceci :
- 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
En 1973 apparaît le premier ordinateur avec interface graphique : la station graphique Xerox Alto fabriquée en
Californie, à Palo Alto, par la société Xerox (par ailleurs à l'origine de la machine à photocopier).
En 1983, cet ordinateur a inspiré le premier PC de Apple, le LISA, ancêtre des Macintosh puis en 1985, le premier
système Windows (Windows 1.0) de Microsoft.
Le Lisa
- 18 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
C'est ainsi que sont apparus les premiers systèmes d'exploitation munis d'interfaces graphiques, dans lesquelles les
applications apparaissent sous forme de fenêtres ou d'icônes sur lesquelles on peut agir grâce à la souris.
Interface du système
De manière générale, l'interface graphique d'un programme est la manière dont il se présente visuellement à l'écran
lorsqu'il s'exécute.
Dans cette partie, nous décrivons plus particulièrement l'interface graphique du système qui apparaît au démarrage
d'un ordinateur. Dans Windows, par exemple, elle est constituée du bureau et d'une barre de tâches.
Le bureau contient des icônes de différents programmes. La barre des tâches donne accès (entre autres) au menu
Démarrer, par l'intermédiaire duquel on peut accéder à différents composants du système, configurer l'ordinateur,
arrêter l'ordinateur, etc.
Le curseur
On voit également apparaître le curseur, qui se présente généralement sous la forme d'une petite flèche. Le curseur
permet d'indiquer sur quel élément de l'interface graphique on veut agir.
Lorsque l'utilisateur déplace la souris, il provoque une interruption gérée par le système d'exploitation. Le traitement
par défaut de cette interruption consiste à déplacer le curseur.
Gestion du clic
Comme nous l'avons vu, un clic provoque une interruption, qui est tout d'abord interceptée par le système
d'exploitation. Le traitement de cette interruption dépendra de la position du curseur. Nous reviendrons là-dessus
plus en détail un peu plus loin.
Lorsque l'on clique sur l'icône d'un programme, par exemple, le système le charge en mémoire et lance son exécution.
L'interface graphique de ce programme s'affiche alors à l'écran.
- 19 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'interface graphique d'un programme se présente généralement sous la forme d'un rectangle, appelé fenêtre, dans
lequel apparaissent des composants ou contrôles. Les composants sont par exemple des menus, des barres
d'outils, des zones de texte…
Les zones de texte sont des zones rectangulaires de l'écran dans lesquelles il est possible de taper du texte sur une
ligne. Nous reviendrons plus en détail sur ce composant graphique.
À un moment donné, l'écran contient une (ou plusieurs) fenêtre(s) pour chaque application ouverte. Par exemple,
une fenêtre pour Internet Explorer, une fenêtre pour Word, une autre pour Photoshop, etc. Mais parmi toutes ces
fenêtres, il y a une seule fenêtre active : c'est la fenêtre qui apparaît au premier plan et qui contient le curseur.
Les évènements
Lorsqu'il se produit une interruption souris (déplacement de la souris ou clic) ou clavier (touche appuyée ou relâchée),
il y a deux possibilités :
1 Il n'y a aucune fenêtre active. Dans ce cas, l'interruption est directement gérée par le système. Sous
Windows, c'est par exemple le cas lorsque vous cliquez sur le bureau ;
2 Il y a une fenêtre active. Dans ce cas, le système intercepte tout d'abord l'interruption, mais il ne la gère pas
forcément entièrement. Une partie de la gestion de l'interruption est sous-traitée à l'application associée
à cette fenêtre. Pour cela, il communique toutes les informations utiles à l'application sous la forme d'un
- 20 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
évènement. Les parties d'une l'application qui interceptent les évènements et les gèrent sont appelés des
gestionnaires d'évènements.
Un évènement est lié à un composant particulier de la fenêtre, que l'on pourrait appeler le composant actif : c'est
le composant contenant le curseur au moment de l'évènement.
Une application pourra ainsi savoir sur quel composant l'utilisateur a cliqué ou quel était le composant actif lorsqu'il
a appuyé sur telle touche du clavier.
Les interfaces graphiques sont généralement conçues pour éviter au maximum de taper du texte. Mais il arrive que
ce soit inévitable. Par exemple, pour donner le nom d'un fichier, une adresse web, une recherche par mots-clés, etc.
Dans une interface graphique, la saisie de texte se fait par l'intermédiaire des zones de texte, zones rectangulaires
dans lesquelles il est possible de « rentrer » du texte.
Pour cela, l'utilisateur doit tout d'abord activer la zone de texte en cliquant dedans. Le curseur change alors de forme.
En général, il se transforme en une barre verticale clignotante, ce qui signifie que la zone de texte est active et prête
à recevoir du texte.
Lorsqu'une zone de texte est active, les caractères frappés au clavier viennent s'afficher à l'écran à l'intérieur de
celle-ci. On a ainsi l'impression que les caractères sont directement transférés du clavier vers l'écran. En réalité, ils
sont tout d'abord transférés en mémoire par le système d'exploitation.
En effet, à chaque zone de texte est associée une plage mémoire, appelée buffer, destinée à mémoriser les
caractères frappés.
Supposons qu'une zone de texte soit active et que l'utilisateur appuie sur la touche « s ». Le système va alors
transférer le caractère « s » dans le buffer associé à cette zone de texte, puis dans un deuxième temps, afficher le
contenu du buffer à l'écran à l'intérieur de la zone de texte.
- 21 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
S'il appuie ensuite sur la touche « t », le caractère « t » va être rajouté dans le buffer après le « s », puis le buffer
va être réaffiché.
Ce mécanisme est très important, car c'est essentiellement de cette manière que des données sont communiquées
à un programme. Nous reviendrons là-dessus lorsque nous parlerons de la lecture des données.
La programmation
Les langages de programmation ont été introduits pour éviter l'écriture directe de programmes en langage machine
(tâche extrêmement fastidieuse, pour ne pas dire impossible !).
Notion de programme
Un programme écrit dans un langage de programmation se présente sous la forme d'un texte
dans lequel figurent les instructions à exécuter. Dans ce texte, les plages mémoire contenant
des données portent un nom. Ce sont les variables du programme.
somme := x + y;
Cette instruction signifie : additionner les nombres contenus dans les variables x et y et stocker le résultat dans la
variable somme.
Dans les cours de programmation, un programme est souvent défini comme une suite d'instructions. Cette définition
n'est pas tout à fait exacte, car les programmes contiennent également des déclarations. Une déclaration permet
(entre autres) de définir la nature des variables sur lesquelles le programme doit travailler.
- 22 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Ici le programmeur a déclaré que les variables x, y et somme doivent contenir des nombres entiers.
Notion de langage
Ces conventions comprennent des conventions syntaxiques (comparables à la grammaire d'une langue naturelle) et
lexicales (comparables à l'orthographe d'une langue naturelle).
Elles sont évidemment différentes d'un langage à l'autre. Voici par exemple l'instruction d'addition vue plus haut
traduite dans différents langages de programmation :
On constate que dans certains langages (comme PHP et LISP), les déclarations de variables ne sont pas obligatoires.
Ces langages sont dits non typés.
Tous les langages de programmation possèdent des mots spéciaux, que l'on appelle des mots-clés (dans l'exemple
ci-dessus, ces mots figurent en gras). Les mots-clés ont une signification particulière prédéfinie dans le langage de
programmation. Ils ne peuvent donc pas être utilisés par le programmeur pour signifier autre chose.
Fichiers sources
Un programme écrit dans un langage de programmation se présente sous la forme d'un ou plusieurs fichiers appelés
fichiers sources (par opposition aux fichiers exécutables).
Ces fichiers contiennent les programmes tels qu'ils ont été initialement écrits par les développeurs. Ce sont des textes
écrits en un langage de programmation particulier, que l'on peut visualiser à l'aide d'un éditeur de texte (WordPad,
par exemple).
Mais, comme nous l'avons déjà dit plus haut, le seul langage de programmation directement exécutable par un
ordinateur est le langage machine adapté à son processeur.
- 23 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les fichiers sources doivent donc être traduits en langage machine avant de pouvoir être exécutés. On appelle cela
la compilation. Mais nous verrons plus loin que la compilation n'est pas la seule approche possible : il en existe
une autre appelée interprétation.
Compilation
Notion de compilateur
Certains langages, le C par exemple, ne peuvent être que compilés. Les langages de ce type sont appelés langages
compilés. Pour pouvoir les utiliser, vous devez avoir installé sur votre ordinateur un compilateur spécifique à ce
langage.
Par exemple, pour pouvoir programmer en C, vous devez nécessairement avoir installé un compilateur C sur votre
machine.
Après avoir été compilé, le programme peut être exécuté en chargeant sa version exécutable en mémoire :
- 24 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Exemple de compilation
Pour fixer un peu les idées, reprenons le programme d'addition en Pascal et voyons comment il pourrait être traduit
en langage machine.
Les variables déclarées sont tout d'abord associées à des plages mémoires :
Les instructions sont ensuite traduites en instructions machine portant sur les registres et les plages mémoire
associées aux variables :
- 25 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Dans cet exemple, nous n'avons pas donné le code binaire des instructions machine, car il serait sans intérêt. On
voit qu'une simple instruction écrite en langage de programmation peut correspondre à de nombreuses instructions
machine.
Interprétation
Les programmes écrits en langages interprétés (Java, Visual Basic, PHP…) peuvent être exécutés sans avoir été
auparavant entièrement traduits en langage machine.
Il existe, par exemple, un interpréteur Java, un interpréteur Visual Basic, un interpréteur PHP…
Contrairement aux programmes compilés, les programmes interprétés ne sont pas directement exécutés par
l'ordinateur, mais par l'interpréteur (qui, lui, est exécuté par la machine !).
Pour exécuter un programme interprété, il faut tout d'abord lancer l'interpréteur, puis charger le code source du
programme en mémoire. Ce code source peut ensuite être exécuté par l'interpréteur :
- 26 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Notez que certains interpréteurs (comme Visual Basic) peuvent également fonctionner en tant que compilateur. Cela
permet d'obtenir une version plus rapide et commercialisable du programme, lorsque la mise au point est terminée.
En effet :
• l'exécution d'un programme compilé est beaucoup plus rapide que son interprétation ;
• sous sa forme exécutable, un programme peut être vendu sans divulguer les fichiers sources, ainsi qu'à des
utilisateurs ne possédant pas l'interpréteur sur leur machine.
Les EDI
Le développement d'application (ou si vous préférez la programmation) se fait aujourd'hui grâce à des logiciels
appelés EDI (pour Environnement de Développement Intégré) ou IDE en anglais. Un EDI peut être adapté à un
langage de programmation particulier (Delphi, Lazarus pour le langage Pascal, Visual C++ pour le langage C++) ou
à plusieurs langages (Eclipse pour Java, PHP, JavaScript).
Un EDI comprend en général un éditeur de texte spécialement adapté au langage, un compilateur et/ou un
interpréteur, un débogueur (outil de mise au point) et, surtout, un outil de développement d'interface graphique.
- 27 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Avant l'existence des EDI, la conception de l'interface graphique d'un programme était extrêmement fastidieuse, car
le développeur devait lui-même préciser dans le programme les positions et dimensions de tous les composants de
l'interface.
Avec un EDI cela se fait simplement en « dessinant » en quelque sorte l'interface graphique à l'aide de la souris.
Évidemment, les instructions permettant d'afficher l'interface existent toujours, mais au lieu d'être données par le
programmeur, elles sont générées automatiquement par l'EDI.
La programmation évènementielle
Avec l'apparition des interfaces graphiques dans les années 80, la programmation est devenue plus complexe. Les
programmes devaient d'une part produire tout le design de l'interface et d'autre part pouvoir réagir aux évènements,
c'est-à-dire aux actions de l'utilisateur sur les différents composants de cette interface.
Il est alors apparu une nouvelle manière de programmer, appelée programmation évènementielle, qui consiste à
associer des gestionnaires d'évènements aux composants de l'interface.
Un des premiers langages permettant la programmation évènementielle a été le langage Visual Basic de Alan Cooper
(première version en 1991) et son environnement de développement intégré (un des premiers également). Le concept
a ensuite été repris par Borland avec Delphi.
Un des points les plus intéressants des EDI est qu'ils facilitent la programmation évènementielle. Rappelons qu'avec
un EDI, l'interface graphique peut être « dessinée » par le programmeur. Il peut ensuite associer un gestionnaire
d'évènements (initialement vide) à un composant de l'interface en cliquant sur celui-ci.
- 28 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Lazarus
Lazarus est un environnement de développement intégré associé au langage Pascal Objet. C'est la version open
source du logiciel Delphi de Borland. Ce logiciel facilite en particulier la création d'interfaces graphiques et la
programmation évènementielle par un mécanisme de génération automatique de code.
Notion de formulaire
- 29 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Nous avons vu que les zones de texte permettent à l'utilisateur de saisir des données. En fait, elles servent également
à afficher des résultats.
Dans notre exemple, les deux zones de texte étiquetées X et Y servent à saisir les deux nombres à additionner. Ce
sont les données du programme. La zone de texte étiquetée X+Y sert à afficher la somme de ces deux nombres.
C'est le résultat du programme produit par l'ordinateur.
Les étiquettes servent donc en principe à indiquer à l'utilisateur quelle donnée il doit introduire dans la zone de texte
située juste à côté ou bien quel résultat y sera affiché.
Lorsque l'utilisateur clique sur le bouton Additionner, après avoir saisi les deux nombres dans les zones de texte
prévues à cet effet, le programme affiche le résultat dans la zone de texte étiquetée X+Y.
Un bouton sert donc à déclencher un traitement d'information particulier (dans notre cas, l'addition de deux nombres).
La création d'une nouvelle application engendre automatiquement la création d'un formulaire (initialement vide)
associé à un fichier source Pascal appelé unité (Unit en anglais).
- 30 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le formulaire de départ
Par défaut, ce formulaire s'appelle Form1 et l'unité Pascal associée, Unit1. Si le développeur ne la renomme pas
autrement, elle sera représentée sur disque par le fichier Unit1.pas.
Dès la création du formulaire, l'unité qui lui est associée contient du code Pascal généré automatiquement.
Le voici :
- 31 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Au fur et à mesure que le programmeur ajoute des composants sur le formulaire, leurs noms apparaissent
automatiquement dans le code source. Avec l'exemple précédent du programme d'addition, ce serait Label1, Label2,
Label3 pour les étiquettes ; Edit1, Edit2, Edit3 pour les zones de texte ; Button1 pour le bouton.
Voici le code source de l'unité associée au programme d'addition, après que le programmeur a déposé les différents
composants sur le formulaire :
- 32 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Ces noms permettront d'accéder aux composants par programme. Il ne faut pas les confondre avec leurs libellés.
Les libellés apparaissent sur l'interface graphique. Les noms quant à eux sont invisibles.
Par exemple, le nom du bouton est Button1, mais son libellé est Additionner.
Pour pouvoir plus facilement identifier les composants dans le programme, le développeur peut leur donner des
noms plus significatifs que ceux générés automatiquement par Lazarus. Par exemple, BoutonAdditionner au lieu
de Button1 pour le bouton, ZoneTexteX et ZoneTexteY pour les zones de texte contenant les deux nombres à
additionner, ZoneTexteSomme pour la zone de texte contenant la somme des deux nombres.
La modification des noms des composants se fait via l'interface graphique de Lazarus. Ils sont alors automatiquement
modifiés dans le code.
- 33 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Programmation évènementielle
Rappelons que la programmation évènementielle consiste à associer des gestionnaires d'évènements à des
évènements de l'interface graphique. Un évènement est défini par un composant de l'interface et un type
d'interruption. Par exemple, un bouton (composant) et un clic sur ce bouton (interruption). Lorsque cet évènement a
effectivement lieu, les instructions contenues dans le gestionnaire d'évènements sont automatiquement exécutées.
Pour associer une procédure évènementielle à un composant, le développeur n'a besoin de taper aucune ligne de
code. Il lui suffit en gros de cliquer sur le composant et éventuellement de sélectionner le type d'interruption. Un
double-clic sur un composant sélectionne l'interruption par défaut. La déclaration de la procédure évènementielle
est alors automatiquement générée dans le code avec un nom formé à partir du nom du composant et du nom de
l'interruption.
Supposons que le développeur souhaite associer une procédure évènementielle au bouton Additionner, qui serait
activée lorsque l'utilisateur clique sur ce bouton.
- 34 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Pour cela, il lui suffit de faire un double-clic sur ce bouton et la déclaration de cette procédure évènementielle sera
automatiquement générée dans le code source, avec aucune instruction à l'intérieur.
Le nom de cette procédure est BoutonAdditionnerClick. Il est formé à partir du nom du composant (ici
BoutonAdditionner) et du nom de l'interruption (Click = clic de souris).
Le développeur complètera ensuite ce gestionnaire d'évènements en plaçant des instructions à l'intérieur (entre begin
et end), qui seront automatiquement exécutées lorsque l'utilisateur cliquera sur ce bouton.
En général, un programme ne s'exécute pas dans l'ordre des lignes du code source, c'est-à-dire de la première à
la dernière ligne du fichier.
Dans le code source, on a d'abord la procédure évènementielle du bouton B, puis celle du bouton A, puis celle du
bouton C. Mais l'ordre d'exécution de ces procédures est totalement indépendant de l'ordre dans lequel elles figurent
dans le fichier source. Cela dépend évidemment de l'ordre dans lequel l'utilisateur cliquera sur les boutons A, B et
C. Une même procédure peut même être exécutée plusieurs fois.
Lorsqu'une procédure évènementielle a fini de s'exécuter, le programme retourne dans un état d'attente d'évènement.
Notice d'utilisation
- 35 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les variables
La notion de variable
Une variable peut être vue comme une plage mémoire dans une zone de données d'un
programme. Elle porte un nom et possède à un instant donné une valeur.
On peut donc parler de l'adresse d'une variable : c'est l'adresse du début la plage mémoire qui lui est réservée.
Voici par exemple quatre variables nommées Age, Nom, NombreEnfant et Prenom.
La valeur d'une variable varie lors de l'exécution d'un programme (d'où le nom de variable justement !). La variable
NombreEnfant pourra par exemple valoir successivement 2, 0, 3, 1, 0, 4…
Par contre, le nom d'une variable ne change pas : il est le même du début à la fin de l'exécution d'un programme.
Règle2 : les seuls caractères autorisés sont les lettres (sans accents), les chiffres et « _ » ;
- 36 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Attention : la casse n'a pas d'importance, c'est-à-dire que le Pascal ne distingue pas les
minuscules des majuscules. Nom_Eleve, nom_Eleve, nom_eleve désignent donc la même
variable.
La notion de type
Le type d'une variable définit la manière dont elle est représentée en mémoire et les
opérations que l'on peut faire dessus.
Il existe, par exemple, des variables de type chaîne de caractères, qui vont servir à stocker du texte en mémoire.
La variable Prenom pourrait, par exemple, être de ce type. À un instant donné, sa valeur pourrait être 'Astérix', à
un autre moment 'Obélix' ou encore à un autre moment 'Abraracourcix'.
Il existe aussi des variables de type entier. Ce pourrait, par exemple, être les variables Age, ou NombreEnfant.
La représentation en mémoire d'une variable dépend de son de type. En particulier, deux variables de types distincts
n'occupent pas en général la même place mémoire :
- 37 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
D'autre part, les opérations que l'on peut faire sur deux variables de types différents ne sont pas les mêmes. Par
exemple, on ne pourra pas multiplier deux chaînes de caractères, alors que l'on peut très bien multiplier deux entiers.
La déclaration d'une variable sert à définir son type et, par conséquent, la manière dont elle
sera représentée en mémoire. Elle a pour effet de réserver une plage mémoire pour stocker
la valeur de cette variable. Le type de la variable définit la taille de cette plage et la manière
de coder ses valeurs.
Toute variable doit (en principe) être déclarée, avant de pouvoir être utilisée. En Pascal, la déclaration est
obligatoire. D'autres langages (comme Visual Basic) autorisent une déclaration implicite avec un type par défaut.
Malheureusement, cela autorise également des erreurs de programmation…
La manière de déclarer une variable dépend évidemment du langage de programmation, mais on y trouve toujours
les mêmes ingrédients : le nom de la variable et son type.
- 38 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Syntaxe générale
Une déclaration de variable en Pascal utilise le mot-clé Var suivi du nom de la variable, du caractère « : », puis du
nom du type et d'un point-virgule.
En Pascal, le type entier s'appelle Integer. La déclaration de la variable Age se ferait donc comme ceci :
Le type double
Les nombres entiers ne sont pas les seuls nombres avec lesquels un ordinateur peut calculer. Il y a également les
nombres décimaux (comme 0.5 ou 3.14 par exemple). Ces nombres peuvent par exemple (il y a d'autres possibilités)
être représentés par le type Double en Pascal.
En Pascal, le type chaîne de caractères s'appelle String. La déclaration de la variable Prenom s'écrira donc :
Remarquez qu'il est inutile de répéter le mot-clé var. De plus, les variables de même type peuvent être regroupées :
on sépare les noms des variables par des virgules puis on précise leur type par : nom du type ;
Exemple :
Pour qu'une variable soit utilisable à n'importe quel endroit d'une unité Pascal, elle doit être déclarée entre var et
implementation, comme dans l'exemple suivant :
var
Form1: TForm1;
// Déclaration des variables globales
x, y , somme : integer;
implementation
- 39 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les variables déclarées de cette manière sont appelées variables globales. Cela signifie qu'elles peuvent être
utilisées dans tout le code du fichier où elles sont déclarées.
Lecture et affichage
De nombreux traitements informatiques peuvent se schématiser suivant les trois étapes suivantes :
Pour bien comprendre le sens des termes lecture, traitement et affichage, mettez-vous à la place de l'ordinateur.
Votre rôle est d'additionner mentalement deux nombres pour un sourd-muet qui ne sait pas calculer (l'utilisateur).
Comme il ne peut pas parler, il vous écrit les deux nombres à additionner sur un bout de papier, qui joue le rôle
de l'écran.
Vous ne pouvez pas additionner les deux nombres si vous ne les connaissez pas. Il faut donc commencer par les
lire. C'est la première étape de lecture des données.
À présent, les deux nombres à additionner sont dans votre mémoire. Vous pouvez donc effectuer le traitement, qui
consiste à additionner mentalement ces deux nombres. C'est l'étape de traitement des données.
Vous avez le résultat. Mais si vous ne le communiquez pas à l'utilisateur, c'est comme si vous n'aviez rien fait. Comme
il est sourd, vous allez écrire le résultat sur le bout de papier. C'est la troisième étape : l'affichage des résultats
du traitement.
Pour un ordinateur
1 Lire les données signifie transférer des informations affichées à l'écran vers la mémoire, ou plus précisément
vers une variable-donnée, c'est-à-dire une variable prévue pour stocker une donnée du traitement.
2 Traiter les données signifie grosso modo faire des calculs qui dépendent des données pour produire des
résultats. En principe, mais ce n'est pas obligatoire, chaque résultat est stocké dans une variable-résultat.
- 40 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
La programmation de cette étape sera vue plus loin dans le cours lorsque nous parlerons d'expression et
d'affectation.
3 Si les résultats ont été sauvegardés dans des variables-résultats, Afficher les résultats signifie afficher la
valeur de chacune de ces variables à l'écran. Il est également possible d'afficher les résultats d'un traitement
sans les avoir au préalable sauvegardés dans des variables. Mais il serait difficile pour l'instant d'expliquer
comment. Nous verrons cela un peu plus loin.
Lire les données signifierait dans ce cas lire les valeurs des deux nombres à additionner depuis (par exemple) deux
zones de texte pour les stocker dans deux variables données X et Y.
Traiter les données signifierait additionner les valeurs des variables X et Y, puis mémoriser le résultat dans une
variable Somme.
- 41 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Enfin, afficher les résultats signifierait afficher la valeur de la variable somme dans la zone de texte prévue à cet effet.
Historique
Avant l'apparition des interfaces graphiques, tous les langages de programmation avaient des procédures (cette
notion sera abordée dans le chapitre sous-programmes) pour lire et afficher.
En Pascal, par exemple, elles s'appellent readln (pour la lecture) et writeln (pour l'écriture).
La procédure writeln
La procédure writeln vous permettait d'afficher un texte à l'écran. Par exemple l'instruction :
vous affichait le texte « Hello Word » à l'écran, comme ceci (en supposant que l'écran était vide avant l'exécution
de l'instruction) :
- 42 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Avec la procédure writeln, vous pouviez également afficher la valeur d'une variable à l'écran. Par exemple, en
supposant que la variable Somme contienne la valeur 2013, l'instruction :
writeln (Somme);
Chaque writeln affichait donc une nouvelle ligne à la suite des lignes déjà affichées à l'écran.
La procédure readln
La procédure readln permettait de lire la valeur d'une variable tapée au clavier (et donc affichée à l'écran).
- 43 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
readln (X);
Dès que l'instruction est exécutée, le programme est momentanément interrompu. Le système d'exploitation prend
alors la main et range chaque caractère saisi par l'utilisateur dans un buffer associé au clavier. Dès que l'utilisateur
appuie sur la touche Entrée, le contenu du buffer est renvoyé au programme qui stocke alors la valeur correspondante
dans la variable X et continue son exécution.
ETBib
ETBib est une unité Pascal que j'ai écrite afin d'introduire des procédures équivalentes à readln et writeln
fonctionnant avec une interface graphique.
• Lire, LireEntier et LireNombre : pour lire une variable depuis une zone de texte ;
• Afficher, AfficherEntier, et AfficherNombre : pour afficher une variable dans une zone de texte ou une
zone de liste ;
• Effacer : pour effacer le contenu d'une zone texte ou d'une zone de liste.
Ces procédures ont été introduites pour des raisons pédagogiques (explications pour le lecteur averti). Donc
gardez bien à l'esprit qu'elles ne font pas partie du langage Pascal.
Pour expliquer le fonctionnement des procédures de ETBib, nous allons prendre un exemple de programme qui
permet de lire et d'afficher trois variables :
• Ville, de type String, est destinée à contenir le nom d'une ville. Sa valeur sera lue et affichée dans la zone de
texte ZT_Ville ;
• CP, de type integer, pour le code postal de la ville, lue et affichée dans la zone de texte ZT_CodePostal ;
• NH, de type double, pour le nombre d'habitants de la ville exprimé en milliers. Remarquez que ce
nombre n'est pas forcément entier : 264,2 représente par exemple 264 200 habitants. La zone de texte
correspondante se nomme ZT_Hab.
- 44 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
La lecture des trois variables est déclenchée par le bouton Lire. Voici la procédure évènementielle associée :
La procédure de lecture à utiliser dépend du type de la variable : Lire pour lire une variable de type String, LireEntier
pour lire une variable de type Integer et LireNombre pour lire une variable de type Double.
Rappelez-vous que chaque zone de texte est associée à un buffer, qui se remplit avec les caractères frappés au
clavier.
Lorsque la variable est de type chaîne de caractères, la procédure de lecture ne fait que recopier ces caractères
dans la variable.
S'il s'agit d'une variable de type Integer ou Double, il ne suffit pas de recopier le buffer dans la variable. Le contenu
du buffer est tout d'abord codé en base 2, puis c'est le résultat de ce codage qui est stocké dans la variable.
L'affichage des trois variables se fait par le bouton Afficher, dont voici la procédure évènementielle :
Comme pour la lecture, il faut choisir la procédure d'affichage en fonction du type de la variable : Afficher pour
afficher une variable de type String, AfficherEntier pour une variable de type integer et AfficherNombre pour une
variable de type Double.
Dans les parenthèses, on précise le nom de la variable à afficher, puis le nom de la zone de texte dans laquelle
on souhaite l'afficher.
La procédure Afficher recopie simplement le contenu de la variable dans le buffer, qui est ensuite affiché dans la
zone de texte par le système d'exploitation.
Dans le cas des procédures AfficherNombre et AfficherEntier, un décodage préalable est nécessaire avant de
recopier la chaîne de caractères représentant le nombre dans le buffer.
L'effacement des zones de texte s'effectue avec le bouton Effacer, dont voici la procédure évènementielle :
- 45 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Argumentation pédagogique
Cette section s'adresse au lecteur averti (professeur ou élève avancé) désirant comprendre la raison pour laquelle
j'ai introduit les procédures de lecture et d'affichage.
Reprenons notre exemple. Voici comment lire les trois variables sans utiliser les procédures Lire, LireEntier et
LireNombre :
Ce qui me gêne ici est l'utilisation obligatoire de la programmation objet. On accède à l'attribut Text de la classe TEdit.
C'est encore pire lorsqu'il s'agit d'afficher du texte dans une zone de liste, puisqu'il faut alors appliquer la méthode
Add à l'attribut items (objet de la classe TStringList) d'un objet de la classe TListBox.
Or, je pense que l'on peut difficilement commencer un cours de programmation avec des notions de programmation
objet. À mon sens, la programmation objet ne peut être abordée qu'après avoir bien assimilé les types structurés
(puisque les objets sont en quelque sorte des types structurés étendus) et les sous-programmes (puisque les
méthodes sont des sous-programmes associés à des classes).
Mis à part la programmation objet, d'autres arguments peuvent être ajoutés en faveur de l'utilisation des procédures
de lecture et d'affichage :
Les expressions
Vous connaissez déjà tous les expressions mathématiques dans lesquelles on retrouve des nombres, des opérateurs
de calculs (+, -, etc.) et des variables. Par exemple :
(a + b) × (a - 17)
Dans les langages de programmation, on retrouve également cette notion d'expression sous une forme un peu
différente et plus générale.
Une expression est une écriture possédant une valeur et un type, dans laquelle figurent
(entre autres) des littéraux, des constantes, des opérateurs et des noms de variables.
- 46 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Vous savez déjà ce que sont les variables. Par contre, nous n'avons pas encore défini les littéraux, les constantes
et les opérateurs.
La valeur d'une expression est le résultat du calcul de cette expression, en tenant compte des valeurs des variables
qu'elle contient. Son type est le type du résultat.
L'écriture Age+1, est, par exemple, une expression de type entier, car :
(Age + 1) * 2
Voilà différentes valeurs des expressions Age+1 et (Age+1)*2 pour différentes valeurs de la variable Age :
Les littéraux
L'écriture des littéraux obéit à un certain nombre de conventions qui dépendent du type et du langage de
programmation.
• une simple suite de chiffres. Cette écriture ne convient que pour les nombres entiers positifs. Exemple :
2012 ;
• pour pouvoir représenter des entiers relatifs, il faut autoriser la présence d'un signe + ou - devant cette suite
de chiffres. Exemple : -15, +320 ;
• pour pouvoir représenter des nombres non entiers, on utilise le point. La partie entière du nombre est suivie
d'un point puis d'une autre suite de chiffres. Exemples : 3.141559, -5.33333 ;
• pour pouvoir représenter des nombres très grands ou très petits, on autorise également la notation
scientifique. Exemple : 1.7E+308.
- 47 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Par exemple : 'Il fait beau', '4012', '(3 x + 1)', 'VisualC++', '@%^šÂ€' sont des littéraux de type chaîne de caractères.
On remarquera que tous les caractères sont autorisés entre les quotes sauf les quotes eux-mêmes ! Pour mettre une
quote dans une chaîne de caractères, il faut la faire précéder par une autre quote. Par exemple :
L''horaire d''été'
Parmi les chaînes de caractères, il y en a une qui joue un rôle particulier : la chaîne vide.
La chaîne vide est une chaîne qui ne contient aucun caractère. On l'écrit '' (deux quotes).
Les constantes
Une constante est un littéral portant un nom. Avant la compilation (ou l'interprétation) du
code, ce nom sera remplacé par le littéral dans tout le code.
Une constante est donc en quelque sorte le synonyme d'une valeur. On pourra par exemple introduire une constante
PI représentant le nombre 3.14159. Avant la compilation du code (cette étape s'appelle en fait la précompilation),
toutes les occurrences du mot PI seront remplacées par 3.14159.
Comme son nom l'indique, la valeur d'une constante ne peut pas varier durant l'exécution d'un programme.
Le nom d'une constante obéit aux mêmes règles que le nom d'une variable.
Exemple :
Const PI = 3.14159 ;
CLEF_USB = 'F:' ; DISQUE_DUR = 'C:';
Opérateur
En informatique, un opérateur est généralement représenté par un ou deux caractères représentant une certaine
opération.
Voici, par exemple, quelques opérateurs fréquemment rencontrés dans les langages de programmation : + - / *
^ = ++ ! %
Dans ce cours, nous nous concentrerons pour l'instant sur les opérateurs suivants :
- 48 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Vous connaissez déjà les quatre premiers opérateurs, puisqu'il s'agit des opérateurs mathématiques classiques. Mais
si vous n'avez jamais fait de programmation, vous ignorez probablement le sens de l'opérateur de concaténation.
La concaténation
Par exemple, si je concatène la chaîne 'para' avec la chaîne 'pluie', j'obtiens la chaîne 'parapluie'.
Par exemple, 'Je suis '+Prenom est une expression de type chaîne de caractères constituée d'un littéral ('Je suis
'), de l'opérateur de concaténation + et d'un nom de variable (Prenom).
On peut concaténer autant de chaînes de caractères qu'on le souhaite. Par exemple, dans l'expression 'Je suis
'+Prenom+' '+Nom il y a quatre chaînes de caractères.
- 49 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'écriture d'une expression dans un certain langage de programmation doit nécessairement obéir aux règles propres
à ce langage.
Une expression de type T est valide si elle peut être « comprise » par l'interpréteur (ou
le compilateur) comme un calcul d'une valeur de type T ou plus généralement comme la
construction d'un objet de type T.
Nous donnons ici, un certain nombre de règles non exhaustives permettant d'écrire des expressions valides en
Pascal.
Les règles suivantes permettent de construire des expressions de type chaîne de caractères valides :
Règle1 : un nom de variable est une expression valide si et seulement cette variable est de
type chaîne de caractères ;
Règle2 : un littéral (ou une constante représentant ce littéral) est une expression valide si et
seulement si il est du type chaîne de caractères ;
Règle3 : A+B est valide si et seulement si A et B sont deux expressions valides de type
chaîne de caractères ;
Règle4 : un littéral, une constante ou un nom de variable ne pas être suivi immédiatement
d'un littéral, d'une constante ou d'un nom de variable.
Exemples d'application de ces règles (Nom et Prenom sont des chaînes de caractères et Age est un entier) :
- 50 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les règles suivantes (non exhaustives) permettent de construire des expressions numériques valides :
Règle1 : une variable est une expression numérique valide si et seulement si elle est de type
numérique (integer ou double par exemple) ;
Règle2 : un littéral (ou une constante représentant ce littéral) est une expression numérique
valide si et seulement si il est de type numérique ;
Règle3 : les écritures A+B, A-B, A*B, A/B sont des expressions numériques valides si et
seulement si A et B sont des expressions numériques valides ;
Règle4 : un littéral, une constante ou un nom de variable ne peut pas être suivi immédiatement
d'un littéral, d'une constante ou d'un nom de variable ;
Règle5 : (A) est une expression numérique valide si et seulement si A est une expression
numérique valide ;
Règle6 : chaque parenthèse ouvrante correspond à une et une seule parenthèse fermante.
Exemples d'application de ces règles (avec Nom de type String, Age de type Integer et Poids de type Double) :
Affichage d'expression
Les procédures d'affichage de l'unité ETBib permettent d'afficher la valeur d'une expression. Selon le type de
l'expression, on utilisera Afficher, AfficherEntier ou AfficherNombre.
Pour afficher une expression E de type chaîne de caractères dans une zone de texte ou zone de liste Z, on utilisera
l'instruction :
Afficher ( E, Z);
- 51 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Exemple : la variable Nom contient le nom d'une personne et la variable Adresse son adresse. L'instruction suivante
permet d'afficher le nom et l'adresse de la personne sur une seule ligne dans la zone de liste ZL_Client :
Expression numérique
Pour une expression numérique dont le résultat est toujours un nombre entier, on peut utiliser AfficherEntier ou
AfficherNombre. Par contre, si le résultat n'est pas forcément entier, il faudra utiliser AfficherNombre.
Exemple 1 : un hôtel propose des chambres à 47 euros. La variable NJ contient le nombre de jours. L'instruction
suivante permet d'afficher le prix du séjour dans la zone de texte ZT_PrixSejour :
AfficherEntier ( NJ * 47 , ZT_PrixSejour);
Dans cet exemple, on peut utiliser la procédure AfficherEntier, car le prix à payer est forcément un nombre entier.
Exemple 2 : supposons à présent que le prix d'une chambre soit variable et pas forcément entier. Ce prix est stocké
dans une variable P de type double. Dans ce cas, on ne sait pas si le prix du séjour est un nombre entier. Il faut
donc utiliser l'instruction :
AfficherNombre ( NJ * P , ZT_PrixSejour);
Revenons sur le schéma lecture-traitement-affichage. À présent, nous pouvons expliquer comment afficher les
résultats d'un traitement sans les sauvegarder dans des variables : il suffit d'écrire l'expression du traitement à
l'intérieur de l'instruction d'affichage !
Voilà par exemple comment écrire le programme d'addition sans sauvegarder le résultat dans une variable :
var
Form1: TForm1;
// Déclaration des variables globales
x, y : integer;
implementation
{ TForm1 }
end;
Dans des cas simples, cette manière de programmer peut être utilisée. Mais de manière générale, essayez autant
que possible de séparer le traitement des données et l'affichage. Vous obtiendrez ainsi des programmes plus lisibles
et plus faciles à modifier.
- 52 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'affectation
L'affectation est une instruction qui permet de modifier la valeur d'une variable. Plus précisément :
Affecter une valeur à une variable signifie enregistrer cette valeur dans la plage mémoire
allouée à cette variable.
Affecter une valeur à une variable modifie donc l'état de la zone mémoire qui lui est allouée, ou autrement dit son
« contenu ».
Reprenons notre exemple avec les quatre variables Age, NombreEnfant, Nom et Prenom. Supposons qu'à un
instant donné l'état de la mémoire soit le suivant :
Et la zone mémoire allouée à la variable Age restera inchangée jusqu'à ce qu'une valeur différente lui soit affectée.
En Pascal, on représente l'affectation par l'opérateur :=. Le nom de la variable figure à gauche de := et la valeur
qu'on veut lui affecter, à droite.
Age := 33 ;
De manière générale, ce qui figure à droite de := est une expression. Une affectation s'écrit donc sous la forme :
Une affectation est toujours exécutée de droite à gauche. c'est-à-dire que l'expression figurant à droite du signe :=
est d'abord évaluée et que sa valeur est ensuite enregistrée dans la variable dont le nom figure à gauche du :=.
- 53 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Ce code commence par la déclaration de deux variables de type entier (Age et MonAge). Après la partie déclaration,
on a cinq instructions d'affectation.
Remarque : la première valeur de la variable MonAge est indéterminée. Tant que l'on n'a pas
affecté de valeur à une variable, on ne sait pas ce qu'elle contient.
Affectation récursive
Dans une affectation, l'expression affectée à la variable peut elle-même contenir la variable. On dit alors que
l'affectation est récursive.
Exemple 1
Ajouter le prix d'un article au prix total, se traduit par l'affectation récursive suivante :
Exemple 2
Augmenter une variable de 1, se dit incrémenter. C'est un cas particulier d'affectation récursive très fréquemment
utilisé en programmation.
NombreArticle := NombreArticle + 1 ;
- 54 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Traitement itératif
Les affectations récursives sont en général utilisées dans des traitements itératifs, c'est-à-dire des traitements que
l'on répète plusieurs fois. Chaque répétition d'un traitement itératif s'appelle une itération.
Considérons un programme permettant de calculer la durée totale des morceaux d'un album. Voici son interface
graphique :
Le bouton Ajouter ajoute le nouveau titre saisi dans la zone de liste et augmente la durée totale de l'album par la
durée de ce morceau.
Nous avons ici un exemple de traitement itératif, puisque les mêmes opérations vont être effectuées chaque fois que
l'utilisateur ajoute un album. Ou autrement dit, chaque fois qu'il clique sur le bouton Ajouter.
//--- Affichage
AfficherEntier (Numero, ZL_Num);
- 55 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
end;
Le traitement consiste à :
Mais que vaut la durée totale au départ ? Quel est le numéro du premier morceau ?
Cela dépend de la valeur de ces variables avant la première itération, c'est-à-dire au démarrage du programme.
Il faudrait donc pouvoir affecter des valeurs de départ (on dit initialiser) aux variables DureeT et Numero. Sinon,
on ne pourra pas connaître leur valeur initiale.
Mais avec ce que nous avons vu jusqu'à présent, nous n'avons aucun moyen de faire exécuter des instructions à
l'ordinateur avant le premier clic sur un bouton.
Heureusement, il existe une procédure évènementielle qui est appelée dès le démarrage du programme. Elle
s'appelle Form_Create. Pour l'ajouter au code, il suffit de double-cliquer sur le fond du formulaire.
C'est donc dans la procédure Form_Create, qu'il faut initialiser les variables.
Comme cette procédure est déclenchée dès le démarrage du programme, nous saurons que la durée totale et le
numéro seront nuls avant la première itération.
Exemple et conseils
L'objectif de la programmation n'est pas seulement de faire des programmes qui marchent.
En réalité, un programme n'est jamais terminé (du moins un programme volumineux tel que vous en rencontrerez en
entreprise). Il faut donc pouvoir le modifier facilement, sachant que le développeur qui sera chargé de la mise à jour
de votre programme ne sera pas forcément vous-même. Cela a deux conséquences :
1 Votre code doit être lisible, c'est-à-dire qu'en le lisant on devine facilement ce qu'il fait. ;
2 D'autre part, il doit être facilement modifiable.
Dans cette partie du cours, je vous donne à travers un exemple quelques conseils permettant de rendre un programme
plus lisible et plus facile à modifier.
- 56 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Mises à part la lisibilité et la facilité de modification, il existe d'autres critères importants en programmation que nous
n'aborderons pas ici :
• la rapidité d'exécution du code. Cet aspect est le sujet essentiel de l'algorithmique, qui peut être vue
comme la science de résoudre un problème par un programme de manière à ce que ce programme s'exécute
le plus rapidement possible. Sachez simplement que la manière de programmer peut jouer énormément sur
la vitesse d'exécution ;
• la concision du code, c'est-à-dire la résolution d'un problème avec un programme le plus court possible.
Certains programmeurs sont capables d'écrire en deux lignes ce que d'autres écrivent en vingt lignes. Cet
aspect est à mon avis moins important que les autres dans la mesure où un code concis est souvent peu
lisible.
La réalisation d'un projet informatique démarre en général avec un cahier des charges. C'est en gros une description
de ce que devrait faire le logiciel.
On souhaiterait écrire un programme qui calcule la surface à peindre dans une pièce rectangulaire possédant des
portes et des fenêtres.
Pour simplifier, on supposera que les murs ont 2m50 de hauteur et que toutes les fenêtres ont la même dimension
(1.4 × 1.2) et de même pour les portes (0.9 × 2.1).
const
LargeurFenetre = 1.4;
HauteurFenetre = 1.2;
LargeurPorte = 0.9;
HauteurPorte = 2.1;
HauteurMur = 2.5;
On pourrait se passer de ces déclarations et mettre directement les valeurs 1.4, 1.2, etc. dans les calculs, mais on
obtiendrait ainsi un code moins lisible et plus difficile à mettre à jour.
S'il faut corriger la hauteur des portes par exemple, il suffit de changer la valeur de la constante et cette modification
sera automatiquement répercutée dans tout le code (dans tous les calculs où la hauteur des portes intervient).
Essayez de procéder de cette manière dès que vous avez des valeurs fixées. Déclarez des
constantes au lieu d'écrire les valeurs dans les instructions.
La surface à peindre dépendra donc de la taille de la pièce ainsi que du nombre de portes et de fenêtres. Ce seront
les données du programme. On en déduit l'interface graphique suivante :
- 57 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les zones de texte sont nommées ZT_Largeur (largeur de la pièce), ZT_Longueur (longueur de la pièce), ZT_NF
(nombre de fenêtres), ZT_NP (nombre de portes) et ZT_SP (surface à peindre).
Les noms des zones de texte sont tous préfixés par ZT_. Cette manière de procéder permet d'éviter des conflits avec
des noms de variables. En programmation, un même nom ne peut désigner qu'une seule chose. Vous ne pouvez
pas, par exemple, nommer une zone de texte Largeur et utiliser par ailleurs une variable de même nom. Je vous
propose de préfixer les noms des zones de texte par ZT_, ceux des zones de liste par ZL_ et ceux des boutons par
BT_. Vous pouvez bien sûr avoir vos propres conventions. L'essentiel est d'en avoir une.
Associons une variable à chaque donnée : LargeurPiece, LongueurPiece, NFenetre et NPorte. D'où les
déclarations :
Je n'ai pas besoin de vous expliquer ici la signification de chaque variable, car les noms
choisis permettent de deviner la fonction de chacune d'entre elles. Pour obtenir un code lisible,
il est recommandé de procéder de cette manière : utilisez des noms de variables parlants.
Cette remarque est évidemment également valable pour les noms de constantes et pour, de
manière générale, n'importe quel nom utilisé dans un programme.
Nous pouvons à présent écrire les instructions de lecture de données dans la procédure évènementielle du bouton
Calculer :
- 58 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Il nous faut maintenant réfléchir à la manière de calculer la surface à peindre. Pour simplifier le problème, nous allons
le découper le traitement en plusieurs étapes :
Le résultat de chaque étape sera sauvegardé dans une variable : SurfaceDesMurs, SurfaceDesFenetres,
SurfaceDesPortes, SurfacePeinture.
Essayez également de procéder de cette manière lorsque vous avez un calcul compliqué.
Découpez le calcul en plusieurs parties et sauvegardez le résultat de chacun de ces calculs
dans une variable. À la fin, écrivez le calcul du résultat final en utilisant les résultats des calculs
intermédiaires. Cette manière de programmer simplifie la résolution du problème et rend le
programme plus lisible.
Vous pouvez également procéder de cette manière. Il est en général difficile de prévoir dès
le début toutes les variables que l'on aura besoin d'utiliser dans un programme. Ajoutez vos
déclarations de variable au fur et à mesure des besoins.
SurfaceDesMurs :=
2 * (LargeurPiece+LongueurPiece) * HauteurMur;
SurfaceDesFenetres :=
NFenetre * LargeurFenetre * HauteurFenetre;
SurfaceDesPortes :=
NPorte * LargeurPorte * HauteurPorte;
SurfacePeinture :=
SurfaceDesMurs - SurfaceDesFenetres - SurfaceDesPortes;
- 59 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
SurfaceDesMurs :=
2 * (LargeurPiece+LongueurPiece) * HauteurMur;
SurfaceDesFenetres :=
NFenetre * LargeurFenetre * HauteurFenetre;
SurfaceDesPortes :=
NPorte * LargeurPorte * HauteurPorte;
SurfacePeinture :=
SurfaceDesMurs - SurfaceDesFenetres - SurfaceDesPortes;
AfficherNombre (SurfacePeinture,ZT_SP);
end;
Le code de cette procédure est bien séparé en trois parties : lecture des données, traitement
des données, puis affichage des résultats. Essayez également de procéder de cette manière.
Écrivez votre code en séparant bien la lecture, le traitement et l'affichage.
Synthèse
Exercices
•
recherches complémentaires sur internet ;
•
prise en main de Lazarus ;
- 60 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
•
programme sans interface graphique ;
•
exercices de programmation ;
•
exercices complémentaires ;
•
exercices théoriques.
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
Sous-programmes
But de ce chapitre
Les sous-programmes existent dans tous les langages de programmation, depuis les origines. En effet, les
développeurs se sont vite rendu compte que dans la programmation on retrouve très souvent des traitements
similaires. Avec les sous-programmes, il devient possible de regrouper ces traitements en un seul bout de code
réutilisable, ce qui permet une économie de temps considérable. D'autre part, l'utilisation de sous-programmes rend
le code plus lisible et plus facile à mettre à jour. C'est donc une bonne manière de programmer.
Dans ce chapitre, nous verrons comment écrire et utiliser des sous-programmes. Nous verrons également qu'il est
possible de déclarer des variables à l'intérieur d'un sous-programme et que ces variables, appelées variables locales,
se différencient subtilement des variables globales que nous avons déjà rencontrées dans le premier cours.
Introduction
Le but de la programmation n'est pas seulement de faire des programmes qui marchent. Ils doivent également être
lisibles, faciles à mettre à jour et plus concis.
Écrire du code à l'aide de sous-programmes est avant tout une manière de programmer : au lieu de concevoir un
programme en un seul bloc, on le découpe en plusieurs parties aussi indépendantes que possible. Chacune de ces
parties porte un nom : ce sont les sous-programmes.
Bien entendu, cette manière de programmer n'est pas obligatoire. On peut très bien programmer sans jamais écrire
de sous-programmes, mais cela donne des programmes très longs, peu lisibles et difficiles à mettre à jour.
Par analogie, on pourrait comparer ceci au découpage d'une entreprise en plusieurs services. Chaque service
ayant un rôle particulier à jouer dans l'entreprise. De même, on peut concevoir un programme en plusieurs sous-
programmes réalisant chacun un traitement particulier.
- 61 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le PC est une autre analogie intéressante. Dans un PC, chaque partie est facilement remplaçable par une autre :
vous pouvez remplacer l'écran par un autre écran, la carte son par une autre carte son, le clavier par un autre clavier,
etc. Cette possibilité de remplacer chaque partie par une autre partie compatible est possible grâce à la conception
modulaire du PC. Un programme sans sous-programme est comme un PC en un seul bloc : impossible d'interchanger
les parties.
Lorsque l'utilisateur clique sur le bouton, la procédure évènementielle BoutonAdditionnerClick est automatiquement
exécutée.
Une autre catégorie de sous-programmes, que j'appellerais sous-programmes non évènementiels, ne peuvent
s'exécuter que s'il existe quelque part une instruction spéciale : l'appel de sous-programme.
LireEntier et AfficherEntier sont en fait des sous-programmes (non évènementiels). Dans cet exemple, les trois
instructions marquées d'une flèche sont des appels de sous-programme. LireEntier est donc appelé deux fois et
AfficherEntier, une fois.
Par contre, le code du projet Addition ne contient aucun appel du sous-programme BoutonAdditionnerClick.
Comme il s'agit d'un sous-programme évènementiel, son exécution sera déclenchée par un évènement ; en
l'occurrence, un clic sur le bouton Additionner.
- 62 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Évidemment, l'exécution des sous-programmes LireEntier et AfficherEntier est également déclenchée, mais de
manière indirecte. Si BoutonAdditionClick ne contenait pas des instructions d'appel de ces procédures, elles ne
seraient jamais exécutées !
Les unités
Un projet Lazarus est généralement composé de plusieurs fichiers source Pascal appelés unités.
De manière générale, chaque formulaire est associé à une unité contenant les procédures évènementielles. C'est
l'unité qui gère l'interface graphique du programme. Dans notre exemple, c'est l'unité UnitAddition. Mais il peut y
avoir plusieurs autres unités contenant le code de sous-programmes non évènementiels. Dans notre exemple, il n'y
a qu'une seule unité de ce type. C'est l'unité entrees_sorties.
Procédures et fonctions
Jetons un Âœil dans le fichier entrees_sorties. On y trouve, par exemple, le code du sous-programme AfficherEntier
que voici :
Pour l'instant, vous ne comprenez pas grand-chose à ce code, car il fait appel à plein de notions que vous n'avez
pas encore vues (structures de contrôles, programmation objet). Notez simplement que la première ligne commence
par le mot-clé procedure, suivi du nom du sous-programme. Cela signifie que le sous-programme appartient à la
catégorie des procédures.
À droite du nom de la procédure, on trouve les paramètres. Dans cet exemple, il y a deux paramètres : x de type
integer et c de type TObject.
Toute la première ligne du sous-programme constitue l'entête : elle contient donc le nom du sous-programme et ses
éventuels paramètres. Tout ce qui suit est le corps du sous-programme. À l'intérieur du corps du sous-programme
figurent donc les instructions que le sous-programme doit exécuter.
Les paramètres sont les données d'un sous-programme. Dans le cas de la procédure AfficherEntier, x est le nombre
à afficher et c le composant de l'interface graphique (zone de texte ou zone de liste) dans lequel on souhaite afficher x.
Nous reviendrons plus en détail sur cette notion de paramètres. Pour l'instant, sachez que tout sous-programme peut
avoir des paramètres ou ne pas en avoir.
D'autres sous-programmes du fichier commencent par le mot-clé function. Ce sont les fonctions. C'est par exemple
le cas du sous-programme ZoneDeTexteVide :
- 63 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Nous avons donc deux catégories de sous-programmes : les procédures et les fonctions. Les différences entre ces
deux catégories seront vues dans la suite du cours.
Une variable peut être de portée locale ou globale. Elle est globale si elle est déclarée en dehors de tout sous-
programme. Au contraire, une variable locale est déclarée à l'intérieur d'un sous-programme.
Mais pour l'instant, nous n'avons pas défini ce qu'est un sous-programme de manière générale. Par contre, vous
savez ce qu'est une procédure évènementielle. Or, les procédures évènementielles représentent une catégorie
particulière de sous-programme.
Nous allons donc, pour l'instant, baser nos explications concernant la portée des variables en utilisant uniquement
les procédures évènementielles. Gardez toutefois à l'esprit que ces explications seront valables pour n'importe quel
type de sous-programme.
Les variables locales et globales ne se comportent pas de la même manière, notamment en ce qui concerne leur
durée de vie.
Pour illustrer la différence entre une variable locale et une variable globale, nous commencerons par quelques
exemples de programmes, que vous pouvez télécharger sur le site de l'auteur :
• exemple 1 ;
• exemple 2 ;
• exemple 3 ;
• exemple 4.
Vous pouvez donc les ouvrir et les exécuter pour vous aider à mieux comprendre ou pour vous convaincre.
- 64 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
var
Form1: TForm1;
x : integer;
implementation
Dans ce premier exemple, la variable x est déclarée à l'extérieur de tout sous-programme. Il s'agit donc d'une variable
globale.
• x peut être utilisée dans tout le fichier de code où elle est déclarée et, par conséquent, à l'intérieur
de toutes les procédures définies dans ce fichier. Dans notre exemple, la variable x est utilisée dans
les deux procédures évènementielles BoutonAffecterClick et BoutonAfficherClick. La procédure
BoutonAffecterClick affecte la valeur 1961 à x et la procédure BoutonAfficherClick affiche la valeur de x ;
• x a une durée de vie égale à celle de l'exécution du programme : dès le démarrage du programme, de
l'espace mémoire est alloué à la variable x. Lorsque le programme s'arrête, cet espace mémoire n'est plus
réservé à la variable et on peut donc considérer qu'elle cesse d'exister. Pour vous en convaincre, lancez
le programme, affectez la valeur 1961 à x. Vérifiez que x a bien la valeur 1961. Arrêtez le programme et
relancez-le. Vous constaterez que x n'a plus la valeur 1961.
Déclarons cette fois-ci la variable x à l'intérieur de la procédure BoutonAffecterClick. On obtient le résultat suivant :
- 65 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Lazarus affiche un message d'erreur Identifier not found « x ». Cette erreur est localisée dans l'instruction
AfficherEntier(x, ZoneTexteX) de la procédure BoutonAfficherClick.
Lazarus prétend ne pas connaître l'identificateur x dont on parle dans cette instruction.
Le problème vient du fait qu'une variable locale n'est accessible qu'à l'intérieur du sous-programme où elle est
déclarée. Autrement dit, la portée d'une variable locale est limitée à ce sous-programme.
Dans notre exemple, x n'est donc définie qu'à l'intérieur de la procédure BoutonAffecterClick et nulle part ailleurs.
Voici à présent une version légèrement modifiée du programme précédent, dans laquelle la variable x est déclarée
au début du programme ainsi qu'à l'intérieur de la procédure BoutonAffecterClick :
var
Form1: TForm1;
x : integer;
implementation
Vous vous demandez peut-être comment une telle chose est possible, car a priori une variable ne peut pas être
déclarée deux fois. On devrait avoir un message d'erreur. Or il n'en est rien !
En réalité, il y a deux variables distinctes : la variable x déclarée en global et celle déclarée en local dans la procédure
BoutonAffecterClick.
Bien qu'elles portent le même nom, ces deux variables sont totalement indépendantes.
Mais si Lazarus rencontre une instruction utilisant x, comment peut-il savoir de quelle variable il s'agit ?
• l'affectation x := 1961, dans BoutonAffecterClick doit agir sur la variable locale x car x est défini dans cette
procédure ;
- 66 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
• par contre, l'instruction AfficherEntier(x, ZoneTexteX) dans BoutonAfficherClick agit sur la variable globale
x car cette procédure ne contient aucune déclaration de la variable x ;
• de même, les instructions x := 1935 et AfficherEntier (x, ZoneTexteX) dans FormCreate agissent sur la
variable globale.
De manière générale :
Autrement dit, si une variable globale est redéclarée à l'intérieur de certains sous-programmes alors :
Lorsque vous lancez le programme, Lazarus exécute tout d'abord la procédure FormCreate. Celle-ci affecte la valeur
1935 à la variable x déclarée en globale, puis affiche la valeur de cette même variable.
Lorsque vous cliquez sur le bouton Affecter la valeur 1961 à X, il exécute la procédure BoutonAffecterClick, dans
laquelle x est déclarée en local. Cette même procédure affecte la valeur 1961 à x. Mais comme x est déclarée dans
cette procédure, cette affectation agit sur la variable x déclarée dans cette procédure et non pas sur la variable x
déclarée en global.
Enfin, lorsque vous cliquez sur le bouton Afficher X, il exécute la procédure BoutonAfficherClick, dans laquelle
ne figure aucune déclaration locale de la variable x. Cette procédure affiche donc la valeur de la variable globale x
qui est toujours égale à 1935.
Cette fois-ci, nous déclarons x en local dans toutes les procédures, mais pas en global :
var
Form1: TForm1;
implementation
- 67 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
var x : integer;
begin
x := 1935;
AfficherEntier (x, ZoneTexteX);
end;
Nous avons en réalité ici trois variables locales x indépendantes : celle de la procédure BoutonAffecterClick, celle
de la procédure BoutonAfficherClick et celle de la procédure FormCreate.
Explications :
Lorsque vous lancez le programme, Lazarus exécute FormCreate. Ce sous-programme affecte la valeur 1935 à la
variable locale x, puis affiche la valeur de cette même variable.
Lorsque vous cliquez sur le bouton Affecter la valeur 1961 à X, il exécute le sous-programme BoutonAffecterClick,
qui affecte la valeur 1961 à la variable locale x de cette procédure.
Enfin, lorsque vous cliquez sur le bouton Afficher X, il exécute le sous-programme BoutonAfficherClick, qui affiche
la valeur de la variable locale x de cette procédure. Comme aucune valeur n'est affectée à x dans cette procédure,
cette variable a donc une valeur indéfinie.
Synthèse
Voilà en résumé ce qu'il faut retenir sur les variables locales et globales :
Définition
Par définition, une variable est locale si elle est déclarée à l'intérieur d'un sous-programme.
Elle est globale dans le cas contraire.
Portée
Une variable globale est utilisable par tous les sous-programmes contenus dans le fichier où
elle est déclarée.
Une variable locale, au contraire, n'est utilisable qu'à l'intérieur du sous-programme dans
lequel elle est déclarée.
- 68 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Durée de vie
La durée de vie d'une variable globale est égale à celle du programme. La zone mémoire
allouée pour cette variable lui reste allouée tant que le programme s'exécute.
La durée de vie d'une variable locale est celle d'une exécution du sous-programme dans
lequel elle est déclarée. Elle peut donc avoir plusieurs vies : elle renaît chaque fois que le
sous-programme s'exécute et meurt chaque fois qu'il se termine.
Si une « même » variable est déclarée dans plusieurs sous-programmes, tout se passe
comme si on avait donné des noms de variables distincts pour ces différentes déclarations.
Autrement dit, chaque déclaration engendre une variable totalement indépendante des autres.
• dans les sous-programmes où cette variable n'est pas déclarée, c'est la déclaration
globale qui est prise en compte ;
• à l'intérieur des sous-programmes où cette variable est déclarée, c'est la déclaration
locale qui est prise en compte.
Exemple 1
- 69 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Rappelons que ce programme permet de calculer la surface à peindre d'une pièce rectangulaire, connaissant les
dimensions de la pièce (longueur, largeur), le nombre de fenêtres et le nombres de portes.
Cet exemple nous avait justement servi à illustrer le principe du découpage d'un traitement en sous-traitements.
Lorsqu'un calcul est trop complexe, on a intérêt à le découper en plusieurs calculs intermédiaires et sauvegarder les
résultats intermédiaires dans des variables.
Nous avons ici un exemple de code qui peut très facilement se réécrire à l'aide de sous-programmes. Associons un
appel de procédure à chaque traitement, cela nous donne :
- 70 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Comparez ce code à celui de la version précédente : il est devenu plus court et plus lisible.
Écrivons à présent le code des procédures de calcul. Ce code doit être écrit avant la procédure évènementielle
BT_CalculClick. Il suffit d'écrire une entête pour chaque procédure, puis de copier en-dessous l'affectation
correspondante enrobée de begin end. On obtient :
Programmation descendante
Remarquez que l'on aurait pu procéder ainsi dès le départ : notre problème est de calculer la surface à peindre. Ce
problème peut être décomposé en quatre sous-problèmes : calculer la surface des murs, la surface des fenêtres, la
surface des portes et finalement la surface à peindre.
On associe à chaque problème une procédure, ce qui nous permet d'écrire le code du programme sans nous occuper
des détails, c'est-à-dire avant même d'avoir résolu les sous-problèmes.
- 71 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Lorsqu'une procédure évènementielle a fini de s'exécuter, le programme retourne automatiquement à un état d'attente
d'évènement.
Dans le cas d'un sous-programme non évènementiel, c'est un peu différent : l'ordinateur revient à l'instruction qui suit
l'appel. Dans le cas du projet Peinture, on obtient ceci :
Exemple 2
Dans le premier exemple d'utilisation des procédures, nous avons réécrit le projet Peinture à l'aide de procédures
sans paramètres.
- 72 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'exemple présenté ici introduit les procédures avec paramètres. Il s'agit d'un programme (sans intérêt autre que
pédagogique !) qui permet d'afficher le mail d'une personne de nom et prénom donnés :
Le bouton SFR affiche le mail chez SFR, alors que le bouton FREE affiche le mail chez Free. Voici le code de la
procédure évènementielle associée au bouton FREE :
On constate que le code des deux procédures évènementielles associées aux boutons SFR et FREE se ressemble
énormément. La seule chose qui change est le nom de l'opérateur.
Pour transformer ces deux traitements quasiment identiques en un seul traitement, on peut utiliser un sous-
programme paramétré par le nom de l'opérateur. Voici le code de ce sous-programme :
- 73 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le code des deux procédures évènementielles se résume alors à l'appel de cette procédure avec deux valeurs de
paramètres différents :
Les valeurs des paramètres à l'appel ('sfr' et 'free' dans notre exemple) sont les paramètres effectifs à ne pas
confondre avec les paramètres formels : ce sont les paramètres déclarés dans l'entête de la procédure. Dans notre
exemple, il n'y a qu'un seul paramètre formel (operateur de type string).
Détail technique
Un petit détail technique pour terminer la présentation de cet exemple. Vous remarquerez que dans le code de la
procédure AfficherLeMailChez, les zones de texte sont toutes préfixées par Form1 :
De manière générale, pour accéder aux composants d'une interface graphique depuis un sous-programme non
évènementiel, il est nécessaire de préfixer les noms de ces composants par le nom du formulaire.
À ce stade, nous ne pouvons pas expliquer pourquoi cela est nécessaire car l'explication fait appel à des notions
de programmation objet.
L'exemple présenté ici reprend le projet Peinture en l'écrivant avec des fonctions. Ce nouvel exemple se trouve
dans le répertoire Exemple-Sous-Programme/PeintureAvecFonctions, que vous pouvez télécharger sur le site
de l'auteur.
- 74 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Rappelons que le projet Peinture permet de calculer la surface à peindre d'une pièce rectangulaire, connaissant les
dimensions de la pièce (longueur, largeur), le nombre de fenêtres et le nombre de portes.
Les dimensions des fenêtres, des portes et la hauteur des murs sont des constantes (LargeurFenetre=1,4 ;
HauteurFenetre=1,2 ; LargeurPorte=0,9 ; HauteurPorte=2,1 ; HauteurMur=2,5).
La dernière version (répertoire Exemple-Sous-Programme/Peinture) nous avait servi à introduire les procédures.
Nous n'avions alors aucune notion de variables locales, ni de paramètres. Cette version du projet avait donc été
écrite en utilisant uniquement des variables globales et des procédures sans paramètre.
Pour calculer la surface à peindre à l'aide de procédures, nous avions procédé par programmation descendante en
découpant le problème en quatre sous-problèmes :
Nous avions associé une procédure à chacun de ces traitements. Voici le code de ces procédures :
- 75 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
et voici l'appel de ces procédures dans la procédure évènementielle associée au bouton Calculer :
La nouvelle version que nous allons présenter ici n'utilise au contraire aucune variable globale et effectue des calculs
par l'intermédiaire de fonctions.
Surface_A_Peindre :=
SurfaceDesMurs(LargeurPiece,LongueurPiece)
- SurfaceDesFenetres(NFenetre)
- SurfaceDesPortes(Nporte);
AfficherNombre (Surface_A_Peindre,ZT_SP);
end;
- 76 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le calcul de la surface à peindre se fait à présent en une seule affectation. Plus précisément, il est représenté par
l'expression qui appelle trois fonctions :
1 SurfaceDesMurs : cette fonction calcule la surface des murs à partir des dimensions de la pièce ;
2 SurfaceDesFenetres : elle calcule la surface des fenêtres à partir du nombre de fenêtres ;
3 SurfaceDesPortes : idem pour les portes à partir du nombre de portes.
L'entête d'une fonction commence nécessairement par le mot clé function. Ce dernier est suivi du nom de la fonction
puis, optionnellement, de la liste des paramètres. Enfin, l'entête se termine par le type du résultat produit par la
fonction. Dans notre cas, il s'agit du type double, car le résultat produit est un nombre a priori non entier.
Une fonction se distingue d'une procédure par le fait qu'elle retourne un résultat. Pour comprendre ce que signifie
« retourner un résultat », il faut voir comment l'ordinateur exécute une expression contenant des appels de fonctions.
Nous reviendrons là-dessus un peu plus loin.
Dans notre exemple, chaque fonction ne contient qu'une seule instruction. Ce n'est pas vrai en général. Le corps
d'une fonction peut contenir plusieurs instructions. Comment savoir alors quel est le résultat de la fonction ? En
Pascal, le résultat d'une fonction est déterminée par la dernière exécution d'une affectation de la forme :
Il faut donc nécessairement qu'une affectation de ce type soit présente dans le corps de la fonction afin que le résultat
retourné par celle-ci soit défini.
Vous constaterez que, dans notre exemple, chaque fonction contient bien une instruction de ce type.
Retour du résultat
Voyons maintenant ce que signifie « retourner un résultat ». Pour cela, nous allons voir comment est évaluée
l'expression contenant les appels de fonctions :
SurfaceDesMurs(LargeurPiece,LongueurPiece)
- SurfaceDesFenetres(NFenetre)
- SurfaceDesPortes(Nporte);
- 77 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'expression est évaluée de gauche à droite. L'ordinateur va donc commencer par évaluer l'appel de la fonction
SurfaceDesMurs. Supposons que LargeurPiece = 3,6 et LongueurPiece = 4,3.
Comme dans les appels de procédures, les paramètres formels sont remplacés par les paramètres effectifs. Donc
ici, LaP va prendre la valeur 3,6 et LoP, la valeur 4,3. Puis le corps de la fonction est exécuté avec ces valeurs. La
fonction effectue donc le calcul suivant :
2
Avec une hauteur de mur de 2,50 m, cela fait 39,5 m .
À la fin de l'exécution de la fonction, ce résultat va « retourner » dans l'expression qui l'a appelée. Tout se passe
comme si la valeur 39,5 remplaçait à présent l'appel de fonction dans cette expression. c'est-à-dire qu'il faut à présent
évaluer l'expression :
39,5 - SurfaceDesFenetres(NFenetre)
- SurfaceDesPortes(Nporte);
Mais l'évaluation de l'expression n'est pas terminée. L'ordinateur va à présent exécuter l'appel de la fonction
SurfaceDesFenetres. Supposons que le nombre de fenêtres soit égal à trois ; nf, le paramètre formel de cette
fonction, va donc prendre la valeur 3 et la fonction va faire le calcul suivant :
2
Avec une largeur de fenêtre de 1,4 m et une hauteur de fenêtre de 1,2 m, cela donne 5,04 m .
Ici, l'ordinateur va d'abord effectuer la différence 39,5 - 5,04. Cela fait 34,46. Nous nous retrouvons donc avec
l'expression :
34,46 - SurfaceDesPortes(Nporte);
Il reste donc à évaluer l'appel de la fonction SurfaceDesPortes. Supposons deux portes ; le paramètre formel np
prend la valeur 2 et la fonction effectue le calcul suivant :
2
Avec une largeur de porte de 0,9 m et une hauteur de porte de 2,1 m, cela fait 3,78 m . En ramenant ce résultat
dans l'expression de départ nous obtenons :
34,46 - 3,78;
2
Ce qui fait 30,68 m . Vous pouvez vérifier que c'est bien le résultat affiché par le programme :
- 78 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
La première ligne est l'entête de la procédure, formée du mot-clé procedure suivi du nom de la procédure et d'une
liste optionnelle de paramètres entre parenthèses.
Entête
On peut obtenir une écriture plus concise en regroupant les paramètres consécutifs de même type, mais dans ce cas
chaque groupe de paramètres doit être séparé du suivant par un point virgule, sachant qu'un groupe de paramètres
s'écrit :
- 79 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Variables locales
Toute procédure n'utilise pas nécessairement des variables locales, mais si c'est le cas, elles doivent être déclarées
entre l'entête et le premier begin.
L'appel d'une procédure est formé du nom de cette procédure suivi d'une liste de paramètres
effectifs entre parenthèses.
Dans l'exemple que nous avons présenté, les paramètres effectifs étaient des chaînes de caractères. De manière
générale, la liste des paramètres effectifs est constituée d'expressions quelconques séparées par des virgules :
expression1,...., expressionN
Pour que l'appel de procédure soit compilable (et exécutable !), le type de ces expressions doit être compatible avec
celui des paramètres formels :
Voici par exemple une procédure qui possède trois paramètres formels (p, n ,o) de type chaîne de caractères :
En supposant que Prenom1, Prenom2 et Nom soient des variables de type chaîne de caractères, elle pourrait être
appelée de la manière suivante :
Le premier paramètre effectif est une expression de type chaîne de caractères, le deuxième une variable de type
chaîne de caractères et le troisième, un littéral de type chaîne de caractères. Ces trois paramètres effectifs sont donc
compatibles avec les paramètres formels.
Par contre, elle ne pourra être appelée d'aucune des manières suivantes :
En effet, dans le premier appel, le nombre de paramètres effectifs n'est pas égal au nombre de paramètres formels et
dans le deuxième, le type du troisième paramètre effectif (numérique) n'est pas compatible avec le type du troisième
paramètre formel.
- 80 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Un appel de procédure est toujours contenu dans une autre procédure, que nous appellerons la procédure
appelante.
Les paramètres formels d'un sous-programme peuvent être considérés comme des variables locales.
- 81 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
En supposant que les variables Prenom1, Prenom2 et Nom aient respectivement pour valeur 'Jean', 'Sebastien' et
'Bach', cet appel donnerait lieu aux opérations suivantes :
NomDeLaFonction := expression;
Appel de fonction
- 82 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Comme pour les procédures, le nombre de paramètres effectifs doit être égal au nombre de paramètres formels et
le type d'un paramètre effectif quelconque doit être compatible avec celui du paramètre formel de même position.
Un appel de fonction est une expression dont la valeur est celle retournée par la fonction. Un appel de procédure, au
contraire, n'est pas une expression mais une instruction. L'exécution d'une procédure ne retourne aucune valeur.
Une appel de fonction figure en général à l'intérieur d'une instruction ou d'une expression. Par exemple, si Moyenne
est une fonction calculant la moyenne de deux nombres, on peut écrire :
(Moyenne(A,B) + Moyenne(C,D)) / 2
Un appel de procédure, au contraire, ne peut pas figurer à l'intérieur d'une instruction, ni d'une expression.
Comme tous les langages, le Pascal offre une multitude de fonctions prédéfinies. Ces fonctions réalisent en général
des opérations très fréquemment utilisées afin de faciliter la tâche du programmeur. On y trouve en particulier les
fonctions mathématiques ( exemples) et les fonctions de manipulation de chaîne de caractères ( exemples).
En Pascal, elles sont réparties dans différentes unités de code. Pour pouvoir les utiliser dans une unité d'un projet,
le nom de ces unités doit figurer dans la liste des unités importées, c'est-à-dire après uses.
Par défaut, Lazarus importe huit unités dans une unité associée à un formulaire :
- 83 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Comme toutes les fonctions prédéfinies ne figurent pas dans ces huit unités, il faut dans certains cas étendre la liste
des unités importées.
Prenons par exemple la fonction floor. Cette fonction retourne la partie entière d'un nombre. Elle figure dans l'unité
Math.pas (fonctions mathématiques). Pour pouvoir utiliser floor dans une unité, il faut donc ajouter Math dans la
liste des unités importées par celle-ci :
- 84 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Comme nous l'avons déjà dit, un appel de fonction est une expression dont la valeur est celle retournée par la fonction.
Cela nous permet d'élargir la notion d'expression valide abordée dans le premier cours.
Un appel de fonction est une expression valide de type T, si les paramètres effectifs sont
compatibles avec les paramètres formels de la fonction et que cette fonction retourne un
résultat de type T.
Cette nouvelle règle, en conjonction avec les règles déjà vues, nous permet de construire des expressions faisant
intervenir des fonctions. Voici quelques exemples utilisant les fonctions prédéfinies :
- 85 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Exercices
•
exercices sous Lazarus ;
•
exercices sur papier.
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
Les tableaux
But de ce chapitre
Jusque là, nous n'avons que très peu de moyens de représenter les données d'un programme. Une donnée en
mémoire est soit une variable de type Integer, soit une variable de type Double, String ou Boolean. Pour chaque
donnée du programme, nous avons donc ainsi une unique variable.
En réalité, comme nous allons le voir dans ce cours et le suivant (cours concernant les types structurés), une même
variable peut contenir un ensemble de données. En particulier, lorsque toutes ces données sont de même type, il est
possible de les stocker dans une variable de type tableau.
L'objectif de ce cours est de vous apprendre à définir et à utiliser cette nouvelle manière de représenter les données.
Exemple introductif
Supposons qu'on ait le problème suivant : on voudrait écrire une procédure permettant de multiplier dix nombres
entiers par 3.
Les dix entiers sont des variables globales. Il faut donc tout d'abord déclarer dix variables globales :
- 86 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
.
N10 := N10 * 3;
End;
Pour dix entiers, cette manière de procéder est envisageable. Mais imaginez qu'on ait le même problème avec un
million d'entiers !
Ne croyez pas, d'ailleurs, que le traitement d'un million d'entiers soit un problème totalement irréaliste, car les
ordinateurs ont souvent à traiter des millions de nombres en même temps. En informatique, ce type de problème
est tout à fait courant.
Malheureusement, on ne peut pas utiliser de boucle pour faire ceci, car on n'a aucun moyen de faire varier le nom
d'une variable !
Var i : Integer;
For i:=1 To 10 Do Var Ni : Integer;
Pour utiliser un tableau, il faut tout d'abord déclarer une variable de type tableau.
Cette écriture revient à déclarer dix entiers N1, N2, … , N10, mais elle est beaucoup plus concise. Lorsqu'un
interpréteur ou un compilateur rencontre une déclaration de tableau dans un programme, il alloue de la mémoire
pour l'ensemble du tableau. Dans notre exemple, il y aurait donc une allocation mémoire de 20 octets en supposant
des entiers 16 bits :
- 87 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
D'autre part, il devient à présent possible de multiplier les dix entiers du tableau par 3 avec une boucle For, comme
ceci :
L'écriture N[i] désigne le ième élément du tableau, autrement dit l'élément d'indice i du tableau N.
Vous constaterez qu'avec un million d'entiers, le code du programme n'est pas plus long :
Le cas général
où indice min et indice max sont deux entiers qui représentent respectivement le plus petit indice et le plus grand
indice des éléments du tableau.
Le type des éléments peut varier d'un tableau à l'autre, mais tous les éléments d'un même tableau sont forcément
du même type.
- 88 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
On pourra ensuite affecter une valeur à un élément du tableau, tout comme on affecte une valeur à une variable.
Par exemple l'instruction :
Prenom[3] := 'Jeanne';
Supposons que vous ayez à modifier un programme très long (plusieurs milliers de lignes, par exemple), qui utilise
un tableau de T de dix entiers déclaré par :
Supposons que dans ce programme figurent des centaines d'instructions faisant référence à la dimension du tableau
T, c'est-à-dire au nombre 10.
Dans toutes ces instructions, il va donc falloir remplacer le nombre 10 par le nombre 20.
Supposons à présent que le programme initial ait été écrit en utilisant une constante DIMENSION, qui représente le
nombre d'éléments du tableau T, déclarée comme suit :
Si le développeur qui a écrit le programme a bien fait les choses, il aura fait référence à la constante DIMENSION
(et non pas 10 !) dans toutes les instructions utilisant la dimension du tableau T.
Un programme écrit de cette manière est beaucoup plus facile à mettre à jour. En effet, pour changer la dimension du
tableau de 10 à 20, il vous suffit à présent de modifier une seule ligne de programme : la déclaration de la constante
DIMENSION. c'est-à-dire que vous allez la remplacer par :
Vous vous demandez peut-être pourquoi on n'aurait pas pu utiliser une variable à la place de la constante. c'est-
à-dire déclarer :
Pourquoi ?
- 89 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Parce que la dimension d'un tableau ne peut pas être modifiée pendant l'exécution d'un
programme.
En effet, un tableau est un objet statique, c'est-à-dire que l'espace mémoire qui lui est alloué ne peut être modifié
en cours d'exécution.
Cela présente un certain nombre d'inconvénients. En particulier, si vous ne connaissez pas a priori la taille de tableau
qu'il vous faudra pour résoudre un problème particulier, la seule solution que vous avez est de prévoir large, de
manière à ce que vous ne risquiez pas d'avoir un dépassement de capacité (taille de tableau insuffisante pour
enregistrer toutes les données).
Nous verrons ultérieurement qu'il existe d'autres manières de représenter les informations en mémoire (on parle de
structures de données), qui permettent d'éviter ce problème.
Représentation
Nous avons vu qu'un tableau est un objet statique, c'est-à-dire que sa dimension ne peut pas être modifiée pendant
l'exécution d'un programme.
Il faut donc toujours prévoir large, c'est-à-dire déclarer un tableau de taille suffisante pour tous les cas de figure.
Cela signifie que l'on va, en général, remplir les tableaux partiellement jusqu'à un certain indice définissant la fin
des données.
Pour représenter un tableau rempli partiellement, il faut donc nécessairement une variable entière qui contiendra à
tout moment l'indice de fin des données.
Pour fixer les idées, prenons une variable T pour le tableau et une variable N pour l'indice de fin. On aura donc les
déclarations suivantes :
Les données utiles sont stockées dans les N premiers éléments du tableau :
- 90 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Adjonction à la fin
Pour ajouter une valeur V à un tableau rempli partiellement, le plus simple est de l'ajouter à la fin. On appelle cette
opération empiler. L'élément qui suit le dernier prend la valeur V et l'indice de fin est incrémenté :
T [N+1] := V;
N := N+1;
Insertion
Insérer une valeur dans un tableau est une opération plus complexe. Supposons que l'on souhaite insérer une valeur
V à l'indice P (P ≤ N) du tableau. Il faut d'abord « faire de la place » pour cette nouvelle valeur, c'est-à-dire décaler
toutes les valeurs entre les indices P et N, d'un cran vers la droite. La valeur V peut ensuite être affectée à l'élément
d'indice P. Puis, comme on a ajouté une valeur, l'indice de fin augmente de 1 :
- 91 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le dernier élément d'un tableau est le plus simple à supprimer ; pour cela, il suffit de dépiler, c'est-à-dire de
décrémenter l'indice de fin de 1 :
N := N - 1;
Supprimer l'élément d'indice P (P < N ) signifie décaler toutes les valeurs qui suivent P d'un cran vers la gauche,
puis décrémenter l'indice de fin :
- 92 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Notion de pile
Un tableau rempli partiellement sur lequel on ne fait que des opérations empiler et dépiler est une structure de
données fondamentale de l'informatique que l'on appelle une pile (stack en anglais).
En particulier, la gestion mémoire des variables locales et des paramètres des sous-programmes utilise une pile : les
valeurs des variables sont empilées lorsque l'on rentre dans le sous-programme et dépilées à la sortie.
Déclaration en Pascal
- 93 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Principe :
for i := 1 to 3 do
begin
for j := 1 to 4 do
begin
Traitement de l'élément T[ i, j ]
end
end
Exemple :
for i := 1 to 3 do
begin
for j := 1 to 4 do
begin
T [ i , j ] := j + 3 * (i - 1) ;
end
end
for j := 1 to 4 do
begin
Traitement de l'élément T[ i, j ]
end
for j:= 1 to 4 do
begin
T [2, j ] := 2 * j ;
end
- 94 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
for i := 1 to 3 do
begin
Traitement de l'élément T[ i, j ]
end
for i := 1 to 3 do
begin
T [ i, 3 ] := 4 - i ;
end
Exercices
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
Structures de contrôle
But de ce chapitre
Avec ce que nous avons vu dans les deux premiers cours (Premières notions et Sous-programmes), un programme
se présente comme un ensemble de sous-programmes qui ne contiennent que deux types d'instructions : des
affectations ou des appels de procédures.
Les programmes de ce type ont deux limitations importantes, qui disparaîtront avec les nouvelles notions introduites
dans ce cours.
- 95 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Premièrement, ils ne peuvent pas s'adapter aux données qu'ils traitent. Ils ne pourront donc jamais traiter différents
cas de figure ni se protéger contre l'introduction de données erronées. Cette limitation disparaîtra avec l'introduction
des conditionnelles.
La deuxième limitation concerne les traitements itératifs dont nous avons déjà eu un aperçu dans le premier cours.
Mais il s'agissait alors de traitements itératifs réalisés manuellement par l'utilisateur. Pour répéter un traitement,
il reclique sur le bouton concerné. En fait, de nombreux problèmes informatiques nécessitent de pouvoir répéter
automatiquement des instructions. Or nous n'avons pour l'instant qu'un seul moyen de le faire : dupliquer ces
instructions dans le code autant de fois que nécessaire. Cette solution n'est évidemment pas très pratique. Et
comment faire alors si le nombre de répétitions dépend des données ?
Les conditionnelles et les boucles utilisent toutes les deux un type d'expression que nous n'avons pas encore étudié :
les expressions logiques.
Variable booléenne
Le type booléen est un type de variable, tout comme les types entier ou chaîne de caractères.
Une variable de ce type sert à représenter une information qui peut être vraie ou fausse.
Par exemple, dans un programme de gestion de marchandises, on pourrait avoir une variable RuptureDeStock qui
nous permettrait de savoir si le stock de marchandises est épuisé.
De manière générale :
Une variable booléenne est une variable qui peut prendre deux valeurs : true (vrai) et false
(faux).
En Pascal, le type booléen se note Boolean et une variable booléenne se déclare de la manière suivante :
La première instruction déclare une variable booléenne nommée RuptureDeStock. La deuxième lui affecte la valeur
True.
Opérateurs logiques
Nous avons déjà vu quelques opérateurs : les opérateurs arithmétiques, qui agissent sur des nombres, ainsi que
l'opérateur de concaténation, qui agit sur des chaînes de caractères.
- 96 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
De la même manière, il existe des opérateurs logiques. Ceux-ci permettent de calculer une valeur logique (donc vrai
ou faux) à partir d'autres valeurs logiques.
La négation
Si quelque chose est vrai, alors son contraire est faux et réciproquement.
La table suivante (que l'on appelle table de vérité) résume l'effet de l'opérateur de négation :
X Not X
True False
False True
Par exemple, avec deux variables booléennes ArticleDisponible et RuptureDeStock, on pourrait écrire :
Si RuptureDeStock vaut true avant cette affectation, alors ArticleDisponible vaudra false après cette affectation.
Réciproquement, si RuptureDeStock vaut False avant cette affectation, alors ArticleDisponible vaudra true après
cette affectation.
La conjonction
La conjonction, représentée en Pascal par l'opérateur And, permet d'exprimer le fait que deux choses sont vraies
simultanément.
X Y X And Y
False False False
False True False
True False False
True True True
Prenons un exemple.
Une autre variable booléenne InterrupteurOn est vraie si et seulement si l'interrupteur est en position On.
- 97 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
la variable LumiereAllumee ne vaudra True que si les variables AmpouleFonctionne et InterrupteurOn valaient
également True juste avant l'affectation.
La disjonction
La disjonction de deux propositions est vraie si et seulement si au moins une de ces deux propositions est vraie.
Autrement dit, la disjonction de deux propositions n'est fausse que lorsque ces deux propositions sont fausses.
Par exemple, la proposition « Il est bête ou il ne comprend pas » ne sera fausse que si l'individu en question n'est
pas bête et a très bien compris.
L'opérateur de disjonction est représenté en Pascal par le mot-clé Or. Voici sa table de vérité :
X Y X Or Y
False False False
False True True
True False True
True True True
Prenons un exemple.
La variable booléenne AmpouleFoutue représente le fait qu'une ampoule électrique ne fonctionne pas.
Une autre variable booléenne InterrupteurOff est vraie si et seulement si l'interrupteur est en position Off.
la variable LumiereEteinte ne vaudra True que si la variable AmpouleFoutue et/ou la variable InterrupteurOff
avaient la valeur True juste avant l'affectation.
Expressions logiques
Une expression logique est une expression de type booléen, c'est-à-dire une expression
pouvant prendre la valeur vrai ou faux.
Vous connaissez déjà un cas particulièrement simple d'expression logique : ce sont les noms de variables
booléennes.
- 98 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Par exemple, si la variable LumiereEteinte est déclarée comme une variable booléenne, le simple nom de variable
LumiereEteinte peut être considéré comme une expression logique.
On peut également construire des expressions logiques en combinant d'autres expressions logiques avec les
opérateurs Not, And, Or.
Supposons, par exemple, que x, y et z soient des variables booléennes. Alors Not x, x And y, x Or y sont des
expressions logiques. Tout comme z Or (x And y), (Not z And x) et (x Or y)…
De manière générale :
• Si E est une expression logique, alors Not E est une expression logique.
• Si E et F sont des expressions logiques, alors E And F est une expression logique.
• Si E et F sont des expressions logiques, alors E Or F est une expression logique.
• Si E est une expression logique, alors (E) est une expression logique.
Il existe encore un autre moyen de construire une expression logique : en utilisant des opérateurs de comparaison.
- 99 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'utilisation la plus fréquente des opérateurs de comparaison est la comparaison d'expressions numériques.
Mais on peut bien sûr comparer des expressions numériques quelconques. Par exemple, pour x = 1 et y = 2, on aurait :
En Pascal, les six opérateurs de comparaison peuvent être utilisés avec des chaînes de caractères, en se basant
sur l'ordre alphabétique. Exemple :
Exercices
•
Énoncés ;
• Pour obtenir les corrigés, rendez-vous au bas de la page.
La conditionnelle
La programmation n'aurait que très peu d'intérêt si elle ne permettait pas aux ordinateurs de réagir différemment
selon différentes conditions.
Une machine programmable doit pouvoir effectuer des traitements différents selon les données qu'elle doit traiter.
Cela est possible grâce à l'existence des structures de contrôle dans les langages de programmation : la
conditionnelle et les boucles.
Le If
- 100 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Le If … Then
If condition Then
Begin
Instructions à exécuter
si la condition est vraie
End;
Les instructions entre begin et end ne seront exécutées que si la condition est vraie.
S'il n'y a qu'une seule instruction à exécuter, on peut omettre les mots-clés begin et end :
Prenons un exemple :
If n > 0 Then n := n - 1;
Si, par exemple, n vaut 5 juste avant l'exécution du If … Then, la condition n > 0 est vérifiée. L'ordinateur va donc
exécuter l'affectation n := n - 1. n vaudra donc 4 à la sortie de la conditionnelle.
Si n vaut -1, par contre, la condition n > 0 n'est pas vérifiée. L'affectation ne sera pas exécutée et n vaudra toujours
-1 à la sortie de la conditionnelle.
Le If … Then … Else
Elle permet d'exécuter certaines instructions si une condition est vraie, et d'autres si elle est fausse.
Voilà sa syntaxe :
If condition Then
begin
Instructions à exécuter
si la condition est vraie
End
Else
begin
Instructions à exécuter
si la condition est fausse
End;
De même, les begin et end ne sont pas nécessaires s'il n'y a qu'une seule instruction.
Prenons un exemple :
If n > 0 Then
n := n - 1
Else
n := n + 1;
- 101 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Remarquez que nous n'avons pas mis de point-virgule après la première affectation. Si nous l'avions fait, le
compilateur aurait généré une erreur de syntaxe, car il aurait interprété ceci comme un if … then simple suivi du
mot-clé else, qui n'aurait rien à voir ici dans ce cas.
Par contre, le point-virgule est nécessaire après la deuxième affectation pour marquer la fin de la conditionnelle.
Supposons, par exemple, que n vaut 5 juste avant l'exécution du If … Then … Else. La condition n > 0 est vérifiée.
L'ordinateur va donc exécuter l'affectation n := n - 1. Par contre, l'affectation n := n + 1 ne sera pas exécutée. n
vaudra donc 4 à la sortie de la conditionnelle.
Si n vaut -1, par contre, la condition n > 0 n'est pas vérifiée. L'affectation n := n - 1 n'est donc pas exécutée. Mais
comme la condition est fausse, l'affectation n := n + 1 sera exécutée. n vaudra donc 0 à la sortie de la conditionnelle.
If imbriqués
Les instructions à l'intérieur d'un If ne sont pas forcément des affectations comme dans les exemples précédents.
On peut également y mettre d'autres structures de contrôle et, en particulier, d'autres If.
Exemple :
If n > 0 Then
n := n - 1
Else
If n >= -3 Then
n := n + 1
Else
n := 2 * n;
Dans l'exemple précédent, on a deux niveaux d'imbrication. Mais on peut avoir autant de niveaux d'imbrication qu'on
le souhaite.
L'instruction Exit
L'imbrication de If peut conduire à des programmes plus rapides (voir l'exercice Min-Max-Med), mais elle peut
également compliquer l'écriture du code, notamment dans la protection d'un programme contre les erreurs.
Prenons par exemple un programme utilisant une date définie par un jour (nombre entier entre 1 et 31), un mois
(nombre entier entre 1 et 12) et une année de ce siècle (nombre entier supérieur à 2000). Ces trois données sont
lues depuis trois zones de texte (respectivement ZT_Jour, ZT_Mois et ZT_Annee) dans des variables entières,
respectivement Jour, Mois, Annee. Ce traitement est effectué par la procédure évènementielle associée au bouton
BT_GererDate.
Pour tester la validité de ces données avec des If imbriqués, on écrirait le code suivant :
- 102 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
begin
LireEntier (Jour, ZT_Jour);
If ( Jour < 1) or (Jour > 31) Then
ShowMessage ('Numéro du jour non valide!')
Else
begin
LireEntier (Mois, ZT_Mois);
If (Mois < 1) or (Mois > 12) Then
ShowMessage('Numéro du mois non valide!')
Else
Begin
LireEntier(Annee,ZT_Annee);
If Annee < 2000 Then
ShowMessage ('Année non valide!')
Else
Begin
Traitement de la date
End
End
End
End;
Pour raccourcir ce genre d'écriture, on peut utiliser l'instruction Exit, qui permet de forcer la fin de l'exécution du sous-
programme qui la contient. Avec cette instruction, l'exemple précédent peut être écrit sans aucune imbrication de If :
LireEntier(Annee,ZT_Annee);
If Annee < 2000 Then
Begin ShowMessage ('Année non valide!'); Exit End;
Traitement de la date
End;
Case
La conditionnelle Case est utilisée lorsque l'on veut effectuer différents traitements selon la valeur d'une expression
quelconque.
Voici sa syntaxe :
Case Expression Of
V1 :
Instructions à exécuter lorsque
l'expression vaut V1 ;
V2 :
Instructions à exécuter lorsque
l'expression vaut V2 ;
.
.
VN :
Instructions à exécuter lorsque
l'expression vaut VN ;
Else
Instructions à exécuter dans les autres cas ;
End;
- 103 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Voici, par exemple, comment déterminer le nom d'un mois en fonction de son numéro avec une instruction Case :
Case NumeroMois Of
1 : NomMois :='janvier';
2 : NomMois :='février';
.
.
12 : NomMois :='décembre';
Else
ShowMessage ('Numéro de mois inexistant!')
End;
Exercices
•
Exercices avec ordinateur ;
•
Exercices sans ordinateur ;
• Pour obtenir les corrigés, rendez-vous au bas de la page.
Les boucles
Tout comme les conditionnelles, les boucles sont des structures de contrôle fondamentales de la programmation.
Par l'intermédiaire d'une boucle, on peut demander à un ordinateur de répéter une partie du code.
Nous allons présenter trois types de boucles : les boucles While, les boucles Repeat et les boucles For.
En fait, la boucle While suffirait à écrire n'importe quel programme. Mais dans certains cas, l'écriture d'une boucle
avec Repeat ou avec For est plus pratique.
Une boucle While permet de répéter du code tant qu'une certaine condition est vraie.
While condition do
begin
Instructions à répéter
tant que la condition est vraie
End;
S := 0;
i := 1;
While i <= n Do
begin
S := S + i;
i := i + 1;
End;
- 104 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Cette boucle permet de calculer la somme S des n premiers entiers : 1 + 2 + 3 + … + n. Pour n = 4, on aura par
exemple S = 1 + 2 + 3 + 4 = 10 à la fin de l'exécution de ce code.
Un peu de vocabulaire :
Dans notre exemple, une itération est une exécution des instructions S := S + i; et i := i + 1;.
Généralement, une boucle est précédée d'un certain nombre d'affectations que l'on appelle
des initialisations. Elles servent à donner des valeurs initiales aux variables de la boucle
(c'est-à-dire toutes celles qui vont varier dans la boucle).
Dans une boucle, on trouve fréquemment une variable qui joue le rôle de compteur (car elle
compte en quelque sorte le nombre d'itérations). La valeur de cette variable est augmentée
de 1 à chaque itération par une instruction de la forme variable := variable + 1, que l'on
appelle une incrémentation.
Dans notre exemple, le compteur est représenté par la variable i. À chaque itération, la valeur de i est incrémentée
par l'affectation i := i + 1.
Déroulement de la boucle
Nous allons à présent dérouler la boucle donnée en exemple, c'est-à-dire détailler toutes les instructions qui seront
exécutées jusqu'à ce que la boucle s'arrête.
Supposons que n vaut 3 avant d'entrer dans la boucle. Voilà exactement ce qui se passe lorsque cette boucle est
exécutée :
Dans une boucle While, la condition d'arrêt est testée avant l'exécution d'une itération.
Donc avant d'entrer la première fois dans la boucle, l'ordinateur va tester la condition i ≤ n. Comme i vaut 1 et n vaut
3, il va rentrer dans la boucle et faire une première itération.
- 105 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
À la fin de la première itération, i vaut 2. La condition i ≤ n est toujours vérifiée. L'ordinateur va donc faire une
deuxième itération.
À la fin de la deuxième itération, i vaut 3. La condition i ≤ n est toujours vérifiée. L'ordinateur va donc faire une
troisième itération.
À la fin de la troisième itération, i vaut 4. Ce sera donc la dernière itération, car à présent la condition i ≤ n est fausse.
Repeat
Instructions à répéter
jusqu'à ce que la condition soit vraie
Until condition
Remarques :
• avec une boucle Repeat, le code à répéter est toujours exécuté au moins une fois ;
• il n'y a pas de Begin … End englobant les instructions à répéter, car Repeat et Until jouent déjà ce rôle.
Voici par exemple comment calculer la somme des n premiers nombres entiers avec une boucle Repeat :
S := 0;
i := 0;
Repeat
i := i + 1;
S := S+ i
Until i = n;
Comme précédemment, supposons que n vaut 3 et voyons ce qui se passe exactement lorsque la boucle Repeat
est exécutée :
À la fin de chaque itération, l'ordinateur va tester si i est égal à n (donc à 3 dans notre exemple).
- 106 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Fondamentalement, une boucle For n'est rien d'autre qu'un raccourci d'écriture pour un certain type de boucle While
que l'on rencontre très fréquemment :
La boucle For permet d'écrire ce type de boucle de manière plus concise, comme suit :
Attention : l'incrémentation du compteur n'est pas écrite, mais elle est bien exécutée.
Voici, par exemple, la somme des n premiers nombres entiers avec une boucle For et avec une boucle While :
Exercices
•
Énoncés ;
• Pour obtenir les corrigés, voyez ci-dessous.
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
- 107 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
Introduction
Dans le cours sur les tableaux, nous avons vu un premier moyen de mémoriser un ensemble de données dans
une variable. Cette manière de procéder est toutefois limitée à des données de même type. Les types structurés
que nous allons présenter dans ce cours permettent de lever cette limitation.
Une autre limitation importante des tableaux est qu'ils sont de dimension fixe. On est donc souvent contraint de les
surdimensionner, afin de s'assurer qu'ils pourront stocker toutes les données à traiter. Dans ce cours, nous allons
voir comment stocker des ensembles de données de taille variable sous formes de listes. Avec cette nouvelle
représentation, il sera possible d'utiliser une place mémoire proportionnelle au nombre de données à mémoriser.
Les concepts manipulés par l'être humain peuvent souvent être décrits par des attributs : un rectangle est caractérisé
par sa largeur et sa longueur ; un livre peut être décrit par son titre, son auteur, son année de publication ; une voiture
par sa marque, sa couleur, son kilométrage, sa puissance, etc.
Pour pouvoir représenter informatiquement de tels concepts, les langages de programmation permettent de définir
des types structurés. Contrairement à un type prédéfini du langage (entier, réel, booléen, etc.), le nom d'un type
structuré est défini par le programmeur. Il pourra par exemple définir un type « Livre », puis déclarer ensuite des
variables de ce type.
Déclaration
Prenons l'exemple du concept « Livre ». Pour représenter informatiquement un livre dans un programme Pascal, on
pourra définir un nouveau type de la manière suivante :
Type Livre =
record
Titre : String;
Auteur : String;
AnneePublication : Integer;
end ;
On a ainsi défini un nouveau type de variable nommé « Livre ». « Titre », « Auteur » et « AnneePublication » sont
les champs de ce type.
- 108 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les champs représentent les attributs du concept que l'on veut définir. Chaque champ est défini par son type. Dans
notre exemple, Titre et Auteur sont des chaînes de caractères et AnneePublication est un entier.
À partir du moment où un nouveau type a été défini, il est possible de déclarer des variables de ce type. Une variable
de type structuré est appelée une structure ou un enregistrement. Cette déclaration se fait comme pour un type
prédéfini.
Par exemple, pour déclarer deux variables l1, l2 de type Livre, on écrira :
Par exemple, pour affecter la valeur « Visual Basic 6 − Le Guide du programmeur » au titre du livre l1, on écrira :
Un champ se manipule exactement comme une variable du même type. Par exemple, l1.AnneePublication se
manipule exactement comme un entier. Pour obtenir l'âge du livre l1, on peut très bien écrire :
Il est possible de définir des types complexes en combinant tableaux et structures, ou bien en combinant les types
structurés entre eux. Donnons quelques exemples.
Le type des éléments d'un tableau peut être quelconque. On peut donc définir un tableau dont les éléments sont des
types structurés, ou autrement dit un tableau de structures.
Les tableaux de structures sont également appelés tables. Ils jouent un rôle important en informatique, puisqu'on les
retrouve dans les bases de données. Nous verrons ultérieurement qu'une base de données n'est rien d'autre qu'un
ensemble de tables stockées dans des fichiers.
Pour représenter l'ensemble des livres présents dans une bibliothèque, on peut par exemple utiliser un tableau dont
les éléments sont de type Livre :
Bibliotheque[6].Auteur
- 109 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Enrichissons un peu notre représentation d'un livre. Pour la gestion d'une bibliothèque, il serait intéressant d'associer
une date d'emprunt à chaque livre :
Type Livre =
record
Titre : String;
Auteur : String;
AnneePublication : Integer;
DateEmprunt : TDate;
end;
Type TDate =
record
Jour : Integer;
Mois : Integer;
Annee : Integer;
end;
Supposons que L soit une variable de type Livre. Pour définir la date d'emprunt de L, comme le 27 janvier 2009,
on écrira :
L.DateEmprunt.Jour := 27;
L.DateEmprunt.Mois := 1;
L.DateEmprunt.Annee := 2009;
Les pointeurs
Rappelons (cf. le chapitre sur les premières notions) qu'une adresse est un entier qui représente la position d'un
octet en mémoire. Cet entier permet donc en particulier de repérer la position, ou autrement dit l'adresse, d'une plage
mémoire :
- 110 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Exemple :
Type Ville =
record
Nom : String;
CodePostal : Integer;
End;
Var PVille : ^Ville;
Dans cet exemple, la variable PVille est un pointeur sur une donnée de type Ville.
Une autre manière de déclarer un pointeur est de définir tout d'abord un type pointeur de la manière suivante :
Type Ville =
record
Nom : String;
CodePostal : Integer;
End;
PointeurSurVille = ^Ville;
Un pointeur permet de créer une variable sans nom, repérée uniquement par l'adresse qu'il contient.
Cette variable est créée par un mécanisme d'allocation dynamique de mémoire, que nous allons décrire à présent.
Les variables générées dynamiquement sont stockées dans une zone spéciale de la mémoire appelée le tas (heap
en anglais).
Si p est un pointeur sur un type T, new(p) va allouer de la place mémoire dans le tas pour une variable de ce type
et affecter à p l'adresse de cette variable.
Avec notre exemple précédent, new(p) réserverait de la place pour une structure de type Ville et affecterait l'adresse
de cette structure à p. Par exemple, si la plage mémoire réservée pour la structure commence à l'adresse 1961, p
contiendra cette adresse :
- 111 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Une fois que la variable est créée, il est possible d'y accéder par l'opérateur ^. Si p est un pointeur, p^ représente
la variable pointée par p.
Avec notre exemple, pour affecter « Strasbourg » au nom de la ville pointé par p, on écrirait :
p^.Nom := 'Strasbourg';
Pour l'instant, le seul moyen dont vous disposez pour représenter un ensemble de données est le tableau. Dans un
tableau, chaque donnée (de même type) possède un indice définissant sa position dans le tableau.
Les listes sont une autre manière de représenter un ensemble de données n'utilisant pas d'indice et basée sur les
pointeurs.
Représentation
Une liste simplement chaînée se représente par un ensemble de structures de même type
possédant un champ contenant l'adresse de l'élément suivant.
Il serait assez difficile et peu pédagogique de présenter les listes chaînées dans un cas général abstrait. Nous allons
donc baser toutes nos explications sur un exemple qui sera facile à généraliser : une liste de structures de type Ville
dont voici la déclaration :
Type
PVille = ^Ville;
Ville = record
Nom : String;
CodePostal : String;
Suivant : PVille;
end;
Le champ Suivant sert à mémoriser l'adresse de l'élément suivant de la liste. Dans le cas général, il peut porter
n'importe quel nom, mais il doit exister un champ jouant ce rôle.
La liste, quant à elle, est également un pointeur qui contient l'adresse de son premier élément.
Dans notre exemple, on pourrait donc représenter une liste de villes par une variable L de type PVille.
- 112 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Voici par exemple une liste simplement chaînée contenant quatre villes :
L contient l'adresse de la première ville (Ribeauvillé). Le champ Suivant de la première ville contient l'adresse de
la seconde (Kingersheim), etc.
Le dernier élément de la liste (Nancy) n'a pas d'élément suivant. Son champ Suivant contient la valeur NIL, qui
représente en Pascal une adresse inexistante.
Une liste vide se représente simplement par un pointeur de liste égal à NIL (L = NIL dans
notre exemple).
Parcours
Pour effectuer un traitement sur chaque élément d'une liste, il est nécessaire de savoir parcourir ses éléments. On
utilisera pour cela un pointeur, qui prendra successivement la valeur des adresses de chaque élément de la liste.
Voici par exemple comment parcourir une liste de villes dont l'adresse est contenue dans le pointeur L :
Var p : Pville;
p := L;
While p <> NIL Do
begin
p := p^.Suivant;
end;
Considérons le problème suivant : on dispose d'une liste de villes L et d'une structure de type Ville pointée par un
pointeur p. Comment procéder pour ajouter cette structure dans la liste ?
En début de liste
p^.Suivant := L;
L := p;
La première affectation « accroche » la structure à la liste et la deuxième met à jour l'adresse de la liste, qui devient
celle de p.
Cette méthode fonctionne également avec une liste vide. En effet, dans ce cas L vaut NIL
avant l'adjonction. Après l'adjonction, on aura bien une liste d'un élément (p^) avec L = p et
p^.Suivant = NIL.
- 113 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Avant l'adjonction :
Après l'adjonction :
Supposons à présent que la liste n'est pas vide et que l'on souhaite insérer un élément après un certain élément
de la liste.
Soit p l'adresse du nouvel élément que l'on souhaite insérer, et Curseur l'adresse de l'élément après lequel on
souhaite insérer p^. Les instructions suivantes permettent d'obtenir ce que l'on souhaite :
p^.Suivant := Curseur^.Suivant;
Curseur^.Suivant := p;
La figure suivante illustre l'insertion d'une structure représentant Strasbourg, après la structure représentant
Kingersheim :
- 114 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Pour supprimer le premier élément d'une liste simplement chaînée, il suffit de remplacer l'adresse de la liste par
l'adresse de l'élément qui suit le premier.
L := L^.Suivant;
Si la liste ne contient qu'un seul élément, ce dernier n'a pas d'élément suivant, mais
l'instruction précédente convient également, car, dans ce cas, L^.Suivant contient NIL et la
liste devient par conséquent vide.
La figure suivante illustre la suppression du premier élément dans une liste de villes :
Après la suppression, L pointe sur la ville qui suivait Ribeauvillé, c'est-à-dire Kingersheim. De ce fait, elle ne contient
plus que les trois villes Kingersheim, Strasbourg et Nancy.
Suppression du suivant
Supposons à présent que l'on souhaite supprimer l'élément qui suit un certain élément de la liste d'adresses donnée.
Appelons Curseur l'adresse de cet élément. L'instruction suivante permet de supprimer l'élément qui suit Curseur^ :
Curseur^.Suivant := Curseur^.Suivant^.Suivant;
La figure suivante illustre ce mécanisme. On supprime ici la ville Strasbourg, en faisant pointer la ville précédente
(Kingersheim) sur la ville qui suit Strasbourg (Nancy). De ce fait, Strasbourg n'existe plus dans la liste.
- 115 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Dans une liste doublement chaînée, chaque élément est lié non seulement au suivant, mais également au précédent.
Cela facilite la suppression d'un élément, puisqu'il faut pour cela avoir l'adresse du précédent. Il devient également
plus simple d'insérer un élément avant un élément donné.
Représentation
Reprenons notre exemple de liste de villes. Voici comment la représenter avec un chaînage double :
Type Ville =
record
Nom : String;
CodePostal : String;
Suivant : PVille;
Precedent : Pville;
end;
PVille = ^Ville;
En début de liste
L'adjonction d'un élément en début de liste nécessite deux instructions supplémentaires, puisqu'il faut mémoriser le
fait que cet élément n'a pas d'élément précédent et qu'il devient à présent le précédent du premier élément de la
liste (avant l'adjonction).
p^.Suivant := L ;
p^.Precedent := NIL;
- 116 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L^.Precedent := p;
L := p;
Exercices
Téléchargez :
•
les exercices sur les types structurés ;
•
les exercices sur les pointeurs et les listes.
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
Les fichiers
But de ce chapitre
En utilisant ce que nous avons vu dans les cours précédents, vous ne pouvez pas réaliser un programme qui serait
capable de conserver ses résultats une fois l'ordinateur éteint. D'autre part, les données doivent être nécessairement
fournies par l'utilisateur à chaque exécution du programme. Ces limitations proviennent du type de mémoire utilisé :
pour l'instant, vous ne savez traiter que des données stockées en mémoire vive. Or, la mémoire vive est volatile :
lorsque l'ordinateur est mis hors tension, tout disparaît !
Ce problème pourrait donc être donc résolu si vous connaissiez les instructions permettant de lire ou d'enregistrer
des données dans des mémoires non volatiles, stockées par exemple sur le disque dur ou sur une clé USB, sous
la forme de fichiers.
L'objectif de ce cours est de vous décrire précisément les procédures Pascal réalisant ceci.
- 117 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Notion de fichier
Le fait qu'un fichier soit toujours stocké sur mémoire auxiliaire a deux conséquences.
Premièrement, les données contenues dans un fichier ne sont pas perdues lorsque l'ordinateur est mis hors tension
(contrairement aux données contenues dans les variables d'un programme !).
Deuxièmement, l'accès à des données stockées dans un fichier est considérablement plus lent qu'un accès à des
données contenues en mémoire vive.
Nom de fichier
La manière de nommer les fichiers dépend fortement du système d'exploitation. Par exemple, sous Windows, tout
fichier possède généralement une extension (.doc, .jpg…) qui permet d'identifier son format.
Chemin d'accès
Le chemin d'accès d'un fichier définit sa localisation sur un périphérique donné. C'est une
chaîne de caractères qui définit la suite des répertoires à parcourir pour atteindre le fichier
depuis la racine du périphérique.
La manière de décrire un chemin dépend du système d'exploitation. Sous Windows, un chemin est une chaîne de
caractères de la forme :
Par exemple :
C:\Utilisateurs\Thirion\Documents
Le nom d'un fichier ne l'identifie pas de manière unique. Par exemple, il peut exister un fichier nommé CV.doc sous
C:\Utilisateurs\Thirion\Documents
- 118 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
et un autre sous
C:\Utilisateurs\Einstein\Documents
Pour identifier un fichier de manière unique, il faut utiliser son chemin concaténé avec le nom (simple) du fichier.
Par exemple :
C:\Utilisateurs\Thirion\Documents\CV.doc
C:\Utilisateurs\Einstein\Documents\CV.doc
désigne le CV de Einstein.
J'utiliserai par la suite le terme de nom complet, pour désigner le chemin concaténé avec le nom du fichier.
Format
Le fichier en lui-même ne permet pas à coup sûr de retrouver son format de manière immédiate : comme toute chose
en informatique, ce n'est qu'une suite de zéros et de uns. Une manière de vérifier si un fichier est bien dans un format
donné est de l'ouvrir avec un logiciel adapté à ce format. Si le logiciel gère correctement le fichier, il est certainement
dans le bon format (mais ce n'est pas une certitude !). Une autre manière est de scruter l'en-tête du fichier à la
recherche d'une signature numérique propre à son format.
Exemple : si je peux ouvrir un fichier avec Word, il s'agit très certainement d'un fichier respectant un des formats
acceptés par Word (.doc, .txt…). Au contraire, si j'essaie d'ouvrir avec Word un fichier qui n'est pas dans un format
accepté par Word, il se produira probablement n'importe quoi.
Sous Windows, le format d'un fichier est repérable par l'extension (.doc pour un fichier Word, .exe pour un fichier
exécutable…). Mais l'extension d'un fichier peut être changée manuellement… L'extension d'un fichier ne donne
donc aucune certitude sur son format !
Les fichiers texte sont des fichiers que l'on peut ouvrir avec un éditeur de texte (comme
WordPad ou le Bloc-notes) afin de modifier leur contenu.
Ce sont par exemple les fichiers d'extension .txt sous Windows, les fichiers sources d'un programme, les fichiers
HTML, etc.).
Un fichier texte est un fichier qui peut être interprété comme une suite de caractères (le plus souvent en code ASCII)
affichables à l'écran.
- 119 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les fichiers structurés sont des fichiers interprétables comme une suite d'enregistrements
d'un certain type. Tous les enregistrements sont forcément de même taille.
Les fichiers structurés peuvent être vus comme la représentation d'un tableau en mémoire auxiliaire. Rappelez-
vous que tous les éléments d'un tableau doivent être de même type. Les éléments du tableau correspondent ici aux
enregistrements.
Certains auteurs utilisent le nom de fichiers séquentiels pour désigner des fichiers structurés. Je trouve ce nom très
mal adapté car il porte à confusion. Nous verrons pourquoi un peu plus loin.
Le système d'exploitation est responsable de la gestion des fichiers d'un ordinateur. Toute opération sur un fichier se
fait donc nécessairement par l'intermédiaire du système d'exploitation. Lorsqu'un programme effectue une opération
sur un fichier, il faut que le système d'exploitation autorise cette opération, sans quoi il se produira une erreur d'accès :
- 120 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Ouvrir un fichier sert (entre autres) à informer le système d'exploitation que l'on a l'intention d'y accéder. C'est à ce
moment-là que le système peut refuser l'accès au fichier, ce qui provoquera une erreur d'exécution du programme.
La fermeture d'un fichier sert (entre autres) à signaler au système d'exploitation que le fichier n'est plus utilisé par le
programme, ce qui permettra à un autre programme (éventuellement d'un autre utilisateur) d'y accéder.
Il y a deux manières d'accéder à un fichier par programmation : l'accès direct et l'accès séquentiel.
Accès direct
L'accès direct n'est possible que pour des fichiers définis comme une suite de blocs de taille fixe que l'on appelle
enregistrements. Il n'est donc possible que pour les fichiers structurés.
- 121 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
L'accès direct signifie qu'il est possible d'accéder directement à un enregistrement à partir de sa position dans le
fichier : lire le énième enregistrement du fichier ou le modifier. Ce type d'accès est par exemple adapté à la gestion
des tables d'une base de données.
Accès séquentiel
Dans l'accès séquentiel, une opération de lecture ou d'écriture se fait toujours juste après la dernière partie du fichier
lue ou écrite.
- 122 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Les fichiers structurés quant à eux autorisent les deux types d'accès (séquentiel ou direct).
Vous comprenez à présent pourquoi le fait d'appeler « fichiers séquentiels » les fichiers
structurés est une source de confusion !
L'ouverture d'un fichier texte se fait en lecture, en écriture ou en ajout. Nous ne traiterons pas ici de l'ouverture en ajout.
Si le fichier est ouvert en lecture, il ne peut y avoir que des lectures jusqu'à la fermeture du fichier.
- 123 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
De même, si le fichier est ouvert en écriture, il ne peut y avoir que des écritures jusqu'à la fermeture du fichier.
Un fichier texte est normalement organisé en lignes. Les langages de programmation contiennent en général une
instruction (ou une procédure) permettant de :
• lire une ligne du fichier en la recopiant dans une variable de type chaîne de caractères. Cette opération n'est
possible que si le fichier est ouvert en lecture. De plus, comme il s'agit d'un accès séquentiel, elle se fait
forcément juste après la dernière ligne lue. Sauf si le fichier vient d'être ouvert. Dans ce cas, la ligne lue est
nécessairement la première ligne du fichier ;
• écrire une chaîne de caractères dans une ligne du fichier. De même, cette opération n'est possible que si le
fichier est ouvert en écriture et se fait forcément juste après la dernière ligne écrite. Exception pour l'écriture
d'une ligne qui suit immédiatement l'ouverture du fichier : ce sera forcément la première ligne du fichier.
Pour ouvrir un fichier structuré, il n'est pas nécessaire de préciser si l'on veut ouvrir le fichier en lecture ou en écriture.
En effet, avec un fichier structuré, ces deux types d'opérations (lecture et écriture) peuvent être mélangées dans
n'importe quel ordre.
Accès séquentiel
L'accès séquentiel dans un fichier structuré consiste à lire ou à écrire un enregistrement sans préciser sa position.
La lecture ou l'écriture se fait nécessairement juste après le dernier enregistrement lu ou écrit. Sauf si le fichier vient
juste d'être ouvert. Dans ce cas, l'enregistrement lu ou écrit sera forcément le premier.
Accès direct
Dans l'accès direct, on accède à un enregistrement par sa position dans le fichier. Il est par exemple possible de lire
le 25e enregistrement, puis de modifier le 122e. On peut parcourir le fichier dans n'importe quel ordre.
Déclaration
Un fichier texte est représenté en Pascal par le type TextFile. Pour pouvoir manipuler un fichier texte, il faut d'abord
déclarer une variable de ce type. Par exemple :
var f : TextFile;
Dans toutes les explications qui suivent, f désignera le fichier déclaré de cette manière.
- 124 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Assignation
Avant de pouvoir ouvrir un nouveau fichier texte, il faut d'abord associer la variable fichier au nom du fichier sur
le disque. Cela se fait par la procédure AssignFile. Voici, par exemple, comment associer f à un fichier nommé
exemple.txt :
AssignFile(f,'exemple.txt');
Ouverture en écriture
Après avoir déclaré une variable de type fichier et assigné cette variable à un nom de fichier, on peut l'ouvrir en
écriture. Cela a pour effet de créer un nouveau fichier vide. Attention : s'il existe déjà un fichier de même nom sur
le disque, le contenu de ce dernier sera perdu !
rewrite(f);
Dès que le fichier est ouvert en écriture, on peut y écrire du texte en utilisant la procédure writeln. Voici, par exemple,
comment créer un fichier texte exemple.txt d'une ligne :
var f: TextFile;
begin
assign (f,'exemple.txt');
rewrite(f);
writeln (f,'Ceci est un fichier d'une ligne.');
CloseFile(f);
end;
Comme on fait de l'accès séquentiel, une écriture se fait forcément après la ligne écrite juste avant. Donc, après
l'exécution du code suivant :
var f: TextFile;
begin
assign(f,'exemple.txt');
rewrite(f);
writeln(f,'Première ligne du fichier exemple.txt');
writeln(f,'Deuxième ligne du fichier exemple.txt');
CloseFile(f);
end;
- 125 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
reset(f);
Comme pour l'ouverture en écriture, il faut que le fichier ait auparavant été assigné à un nom de fichier. Par contre,
si ce fichier n'existe pas, cela provoquera une erreur.
Pour lire une ligne dans le fichier, on utilise la procédure readln, qui affecte la ligne courante à une variable L de
type chaîne de caractères :
readln(f,L);
Il s'agit ici d'un accès séquentiel, donc une lecture de ligne se fait nécessairement juste après la ligne lue
précédemment.
Juste après l'ouverture du fichier, readln transfère la première ligne du fichier dans variable L.
À la deuxième exécution de cette procédure, L contiendra la 2e ligne du fichier et de manière générale, après la
énième exécution, L contiendra la énième ligne du fichier.
Bien entendu, on provoquera une erreur d'exécution si l'on essaie de lire au-delà de la fin du fichier. Par exemple, si
le fichier exemple.txt ne contient que 10 lignes, la 11e exécution de readln(f,L); provoquera une erreur d'exécution.
Pour éviter cette erreur, il faut utiliser la fonction eof, qui permet de tester si l'on se trouve en fin de fichier. Par
exemple, le code suivant permet de lire toutes les lignes du fichier exemple.txt afin d'effectuer un certain traitement
sur chaque ligne :
end;
Déclaration
Le type d'un enregistrement est a priori n'importe quel type Pascal de taille fixe. En effet, comme chaque
enregistrement doit occuper la même taille en mémoire auxiliaire, on ne peut pas déclarer un fichier constitué
- 126 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
d'enregistrements de longueur variable. En particulier, le type String sera interdit et devra être remplacé par le type
String[n], qui permet de préciser la taille de la chaîne de caractères.
Pour la suite des explications, nous allons utiliser le type structuré Livre déclaré comme suit :
Livre =
record
Titre : String[100];
Auteur : String[20];
AnnéePub : integer;
end;
Nous pouvons ensuite déclarer un fichier structuré composé d'enregistrements de type Livre comme suit :
Remarquez que le type des enregistrements d'un fichier structuré n'est pas forcément un type
structuré. On peut par exemple déclarer un fichier d'entiers (file of integer) ou un fichier de
caractères (file of char).
Assignation
Tout comme pour les fichiers texte, avant d'ouvrir un fichier structuré il faut associer la variable représentant le fichier
à un nom de fichier avec la procédure AssignFile.
Exemple :
AssignFile(f,'Bibliotheque.dat');
Ouverture et fermeture
Pour ouvrir des fichiers structurés, on utilise encore les procédures reset et rewrite. Mais elles n'ont pas la même
signification que pour les fichiers texte.
En effet, il sera toujours possible de lire et d'écrire des enregistrements, que le fichier soit ouvert avec reset (ouverture
en lecture pour un fichier texte) ou avec rewrite (ouverture en écriture pour un fichier texte).
Pour les fichiers structurés, rewrite n'est pas une ouverture en écriture. Cela signifie seulement que l'on demande au
système d'exploitation de créer un nouveau fichier. Avec reset, on demande simplement l'ouverture, sans création
d'un nouveau fichier.
Par contre, un fichier ne peut pas être ouvert avec reset s'il n'existe pas. Pour ouvrir un fichier structuré sans savoir
auparavant s'il existe ou non, on utilisera la fonction FileExists (fonction permettant de tester l'existence d'un fichier
de nom donné) de la manière suivante :
if FileExists('Bibliotheque.dat') then
reset(f)
else
rewrite(f);
- 127 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
Écriture séquentielle
L'écriture d'un enregistrement se fait avec la procédure write. Plus précisément, write (f,v) écrit la valeur de la
variable v dans le fichier f à la suite du dernier enregistrement lu ou écrit. Bien entendu, la variable doit être de même
type que les enregistrements du fichier.
AssignFile(f,'Bibliotheque.dat');
rewrite(f);
write(f,Gaston);
write(f,VB);
le fichier Bibliotheque.dat contiendra deux enregistrements de type Livre. Plus précisément, le premier
enregistrement contiendra le livre Gaston et le deuxième, le livre VB.
write(f,Gaston);
Si on écrit un enregistrement juste après l'ouverture d'un fichier existant (donc avec un reset), cette écriture se fera
dans le premier enregistrement du fichier. Par exemple, après l'exécution du code suivant :
AssignFile(f,'Bibliotheque.dat');
reset(f);
write(f, VB);
Lecture séquentielle
La lecture d'un enregistrement à la suite du dernier enregistrement lu ou écrit se fait par la procédure read. Plus
précisément, pour affecter la valeur d'un enregistrement à une variable v, on écrira read(f,v). Cela suppose bien
entendu que la variable est du même type que les enregistrements du fichier.
Reprenons la suite de l'exemple précédent. Notre fichier Bibliotheque.dat contient à présent trois enregistrements
de type Livre (VB, VB, Gaston).
- 128 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/
Les bases de la programmation par Eric Thirion
AssignFile(f,'Bibliotheque.dat');
reset(f);
read(f,Livre1);
read(f,Livre2);
read(f,Livre3);
les structures Livre1 et Livre2 contiendront le livre VB et Livre3 contiendra le livre Gaston.
De manière générale, on ne connaît pas le nombre d'enregistrements contenus dans un fichier structuré. On utilise
alors la fonction eof pour savoir si on est arrivé à la fin du fichier. Voici comment lire séquentiellement un fichier
structuré afin d'effectuer un traitement sur chacun de ses enregistrements :
Exercices
•
Exo-Fichiers-Pascal.pdf
Pour obtenir les corrigés, le téléchargement n'est possible que via un login et un mot de passe, que vous pouvez
obtenir en envoyant un mail à l'adresse suivante :
en précisant un peu qui vous êtes et les raisons pour lesquelles ce cours vous intéresse.
- 129 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par
les droits d'auteur. Copyright ® 2014 Eric Thirion. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
http://lazarus.developpez.com/cours/eric-thirion/bases-programmation/