Rappel : ce cours d'algorithmique et de programmation
le Codage est enseigné à l'Université Paris 7,
n à l'algorithmique dans la spécialité PISE du Master MECI (ancien DESS AIGES)
bles par Christophe Darmangeat
t les variables ?
es variables
P ARTIE 1
d'affectation
t opérateurs
ues pour terminer
Ecriture L ES V ARIABLES
« N’attribuez jamais à la malveillance ce qui s’explique très bien par l’incompétence. » -
la Logique
Bonaparte
es
aux « A l’origine de toute erreur attribuée à l’ordinateur, vous trouverez au moins deux erreurs
es Rusées
Dont celle consistant à attribuer l’erreur à l’ordinateur. » - Anonyme
Multidimensionnels
Prédéfinies
1. A quoi servent les variables ?
res et Fonctions Dans un programme informatique, on va avoir en permanence besoin de stocker provisoi
Complémentaires
valeurs. Il peut s’agir de données issues du disque dur, fournies par l’utilisateur (frappées au
que sais-je encore. Il peut aussi s’agir de résultats obtenus par le programme, intermé
ées Questions
définitifs. Ces données peuvent être de plusieurs types (on en reparlera) : elles peuvent être de
du texte, etc. Toujours est-il que dès que l’on a besoin de stocker une information au
programme, on utilise une variable.
Pour employer une image, une variable est une boîte, que le programme (l’ordinateur)
par une étiquette. Pour avoir accès au contenu de la boîte, il suffit de la désigner par son étiqu
En réalité, dans la mémoire vive de l’ordinateur, il n’y a bien sûr pas une vraie bo
davantage de vraie étiquette collée dessus (j’avais bien prévenu que la boîte et l’étiquette,
image). Dans l’ordinateur, physiquement, il y a un emplacement de mémoire, repéré par u
binaire. Si on programmait dans un langage directement compréhensible par la machine, on
fader de désigner nos données par de superbes 10011001 et autres 01001001 (enchanté !)
nouvelle : de tels langages existent ! Ils portent le doux nom d’assembleur. Bonne nouvelle :
pas les seuls langages disponibles.
Les langages informatiques plus évolués (ce sont ceux que presque tout le monde e
chargent précisément, entre autres rôles, d’épargner au programmeur la gestion fasti
emplacements mémoire et de leurs adresses. Et, comme vous commencez à le compren
beaucoup plus facile d’employer les étiquettes de son choix, que de devoir manier des adresse
Retour Haut de Page
2. Déclaration des variables
La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et d
une étiquette. Ceci se fait tout au début de l’algorithme, avant même les instructions propre
C’est ce qu’on appelle la déclaration des variables. C’est un genre de déclaration ce
romantique qu’une déclaration d’amour, mais d’un autre côté moins désagréable qu’une
d’impôts.
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon le
Toutefois, une règle absolue est qu’un nom de variable peut comporter des lettres et des ch
qu’il exclut la plupart des signes de ponctuation, en particulier les espaces. Un nom de varia
commence également impérativement par une lettre. Quant au nombre maximal de signes po
de variable, il dépend du langage utilisé.
En pseudo-code algorithmique, on est bien sûr libre du nombre de signes pour un nom d
même si pour des raisons purement pratiques, et au grand désespoir de Stéphane Bern
généralement les noms à rallonge.
Lorsqu’on déclare une variable, il ne suffit pas de créer une boîte (réserver un em
mémoire) ; encore doit-on préciser ce que l’on voudra mettre dedans, car de cela dépendent
la boîte (de l’emplacement mémoire) et le type de codage utilisé.
2.1 Types numériques classiques
Commençons par le cas très fréquent, celui d’une variable destinée à recevoir des nombre
Si l’on réserve un octet pour coder un nombre, je rappelle pour ceux qui dormaient e
chapitre précédent qu’on ne pourra coder que 28 = 256 valeurs différentes. Cela peut s
exemple les nombres entiers de 1 à 256, ou de 0 à 255, ou de –127 à +128… Si l’on réserve deux
a droit à 65 536 valeurs ; avec trois octets, 16 777 216, etc. Et là se pose un autre problème :
doit-il représenter des nombres décimaux ? des nombres négatifs ?
Bref, le type de codage (autrement dit, le type de variable) choisi pour un nombre va déter
les valeurs maximales et minimales des nombres pouvant être stockés dans la variable
la précision de ces nombres (dans le cas de nombres décimaux).
Tous les langages, quels qu’ils soient offrent un « bouquet » de types numériques, dont l
susceptible de varier légèrement d’un langage à l’autre. Grosso modo, on retrouve cependan
suivants :
Type Numérique Plage
Byte (octet) 0 à 255
Entier simple -32 768 à 32 767
Entier long -2 147 483 648 à 2 147 483 647
-3,40x1038 à -1,40x1045 pour les valeurs négatives
Réel simple
1,40x10-45 à 3,40x1038 pour les valeurs positives
1,79x10308 à -4,94x10-324 pour les valeurs négatives
Réel double
4,94x10-324 à 1,79x10308 pour les valeurs positives
Pourquoi ne pas déclarer toutes les variables numériques en réel double, histoire de bétonn
certain qu’il n’y aura pas de problème ? En vertu du principe de l’économie de moyen
algorithme ne se contente pas de « marcher » ; il marche en évitant de gaspiller les ressou
machine. Sur certains programmes de grande taille, l’abus de variables surdimensionnées peu
des ralentissements notables à l’exécution, voire un plantage pur et simple de l’ordinateur. Al
prendre dès le début de bonnes habitudes d’hygiène.
En algorithmique, on ne se tracassera pas trop avec les sous-types de variables numériqu
qu'on aura toujours assez de soucis comme ça, allez). On se contentera donc de préciser qu'il
nombre, en gardant en tête que dans un vrai langage, il faudra être plus précis.
En pseudo-code, une déclaration de variables aura ainsi cette tête :
Variable g en Numérique
ou encore
Variables PrixHT, TauxTVA, PrixTTC en Numérique
2.2 Autres types numériques
Certains langages autorisent d’autres types numériques, notamment :
le type monétaire (avec strictement deux chiffres après la virgule)
le type date (jour/mois/année).
Nous n’emploierons pas ces types dans ce cours ; mais je les signale, car vous ne manqu
les rencontrer en programmation proprement dite.
2.3 Type alphanumérique
Fort heureusement, les boîtes que sont les variables peuvent contenir bien d’autres in
que des nombres. Sans cela, on serait un peu embêté dès que l’on devrait stocker un nom de f
exemple.
On dispose donc également du type alphanumérique (également appelé type carac
chaîne ou en anglais, le type string – mais ne fantasmez pas trop vite, c’est loin d’être aussi e
le nom le suggère).
Dans une variable de ce type, on stocke des caractères, qu’il s’agisse de lettres, de
ponctuation, d’espaces, ou même de chiffres. Le nombre maximal de caractères pouvant ê
dans une seule variable string dépend du langage utilisé.
Un groupe de caractères (y compris un groupe de un, ou de zéro caractères), qu’il soit ou
dans une variable, d’ailleurs, est donc souvent appelé chaîne de caractères.
En pseudo-code, une chaîne de caractères est toujours notée entre guillemets
Pourquoi diable ? Pour éviter deux sources principales de possibles confusions :
la confusion entre des nombres et des suites de chiffres. Par exemple, 423 peut rep
nombre 423 (quatre cent vingt-trois), ou la suite de caractères 4, 2, et 3. Et ce n’est pas du to
chose ! Avec le premier, on peut faire des calculs, avec le second, point du tout. Dès lors, les
permettent d’éviter toute ambiguïté : s’il n’y en a pas, 423 est quatre cent vingt trois. S’il y
représente la suite des chiffres 4, 2, 3.
…Mais ce n'est pas le pire. L'autre confusion, bien plus grave - et bien plus fréquente –
se mélanger les pinceaux entre le nom d'une variable et son contenu. Pour parler simple
consiste à confondre l'étiquette d'une boîte et ce qu'il y a à l'intérieur… On reviendra sur ce p
dans quelques instants.
2.4 Type booléen
Le dernier type de variables est le type booléen : on y stocke uniquement les valeurs log
et FAUX.
On peut représenter ces notions abstraites de VRAI et de FAUX par tout ce qu'on veut :
(TRUE et FALSE) ou des nombres (0 et 1). Peu importe. Ce qui compte, c'est de comprendre
booléen est très économique en termes de place mémoire occupée, puisque pour stocke
information binaire, un seul bit suffit.
Le type booléen est très souvent négligé par les programmeurs,
Il est vrai qu'il n'est pas à proprement parler indispensable, et qu'on pourrait écrire à peu près
quel programme en l'ignorant complètement. Pourtant, si le type booléen est mis à disp
programmeurs dans tous les langages, ce n'est pas pour rien. Le recours aux variables b
s'avère très souvent un puissant instrument de lisibilité des algorithmes : il peut faciliter la
qui écrit l'algorithme, comme de celui qui le relit pour le
Alors, maintenant, c'est certain, en algorithmique, il y a une question de style : c'est exactem
dans le langage courant, il y a plusieurs manières de s'exprimer pour dire sur le fond la mê
Nous verrons plus loin différents exemples de variations stylistiques autour d'une même s
attendant, vous êtes prévenus : l'auteur de ce cours est un adepte fervent (mais pas irra
l'utilisation des variables booléennes.
Retour Haut de Page
3. L’instruction d’affectation
3.1 Syntaxe et signification
Ouf, après tout ce baratin préliminaire, on aborde enfin nos premières véritables ma
d’algorithmique. Pas trop tôt, certes, mais pas moyen de faire autrement !
En fait, la variable (la boîte) n'est pas un outil bien sorcier à manipuler. A la différence d
suisse ou du superbe robot ménager vendu sur Télé Boutique Achat, on ne peut pas faire tren
choses avec une variable, mais seulement une et une seule.
Cette seule chose qu’on puisse faire avec une variable, c’est l’affecter, c’est-à-dire lui att
valeur. Pour poursuivre la superbe métaphore filée déjà employée, on peut remplir la boîte.
En pseudo-code, l'instruction d'affectation se note avec le signe ←
Ainsi :
Toto ← 24
Attribue la valeur 24 à la variable Toto.
Ceci, soit dit en passant, sous-entend impérativement que Toto soit une variable de type n
Si Toto a été défini dans un autre type, il faut bien comprendre que cette instruction provo
erreur. C’est un peu comme si, en donnant un ordre à quelqu’un, on accolait un verbe et un co
incompatibles, du genre « Epluchez la casserole ». Même dotée de la meilleure volonté du
ménagère lisant cette phrase ne pourrait qu’interrompre dubitativement sa tâche. Alors, un
vous pensez bien…
On peut en revanche sans aucun problème attribuer à une variable la valeur d’une aut
telle quelle ou modifiée. Par exemple :
Tutu ← Toto
Signifie que la valeur de Tutu est maintenant celle de Toto.
Notez bien que cette instruction n’a en rien modifié la valeur de Toto : une instruction d’a
ne modifie que ce qui est situé à gauche de la flèche.
Tutu ← Toto + 4
Si Toto contenait 12, Tutu vaut maintenant 16. De même que précédemment, Toto vaut to
Tutu ← Tutu + 1
Si Tutu valait 6, il vaut maintenant 7. La valeur de Tutu est modifiée, puisque Tutu est
située à gauche de la flèche.
Pour revenir à présent sur le rôle des guillemets dans les chaînes de caractères et sur la
numéro 2 signalée plus haut, comparons maintenant deux algorithmes suivants :
Exemple n°1
Début
Riri ← "Loulou"
Fifi ← "Riri"
Fin
Exemple n°2
Début
Riri ← "Loulou"
Fifi ← Riri
Fin
La seule différence entre les deux algorithmes consiste dans la présence ou dans l’ab
guillemets lors de la seconde affectation. Et l'on voit que cela change tout !
Dans l'exemple n°1, ce que l'on affecte à la variable Fifi, c'est la suite de caractères R – i –
fin de l’algorithme, le contenu de la variable Fifi est donc « Riri ».
Dans l'exemple n°2, en revanche, Riri étant dépourvu de guillemets, n'est pas considéré c
suite de caractères, mais comme un nom de variable. Le sens de la ligne devient donc : «
variable Fifi le contenu de la variable Riri ». A la fin de l’algorithme n°2, la valeur de la varia
donc « Loulou ». Ici, l’oubli des guillemets conduit certes à un résultat, mais à un résultat diffé
A noter, car c’est un cas très fréquent, que généralement, lorsqu’on oublie les guillemets
affectation de chaîne, ce qui se trouve à droite du signe d’affectation ne correspond à aucu
précédemment déclarée et affectée. Dans ce cas, l’oubli des guillemets se solde immédiateme
erreur d’exécution.
Ceci est une simple illustration. Mais elle résume l’ensemble des problèmes qui s
lorsqu’on oublie la règle des guillemets aux chaînes de caractères.
3.2 Ordre des instructions
Il va de soi que l’ordre dans lequel les instructions sont écrites va jouer un rôle essen
résultat final. Considérons les deux algorithmes suivants :
Exemple 1
Variable A en Numérique
Début
A ← 34
A ← 12
Fin
Exemple 2
Variable A en Numérique
Début
A ← 12
A ← 34
Fin
Il est clair que dans le premier cas la valeur finale de A est 12, dans l’autre elle est 34 .
Il est tout aussi clair que ceci ne doit pas nous étonner. Lorsqu’on indique le chemin à
dire « prenez tout droit sur 1km, puis à droite » n’envoie pas les gens au même endroit que
« prenez à droite puis tout droit pendant 1 km ».
Enfin, il est également clair que si l’on met de côté leur vertu pédagogique, les deux algo
dessus sont parfaitement idiots ; à tout le moins ils contiennent une incohérence. Il n’y a aucu
affecter une variable pour l’affecter différemment juste après. En l’occurrence, on aurait tout
atteint le même résultat en écrivant simplement :
Exemple 1
Variable A en Numérique
Début
A ← 12
Fin
Exemple 2
Variable A en Numérique
Début
A ← 34
Fin
Tous les éléments sont maintenant en votre possession pour que ce soit à vous de jouer !
Exercice 1.1
Exercice 1.2
Exercice 1.3
Exercice 1.4
Exercice 1.5
Exercice 1.6
Exercice 1.7
Retour Haut de Page
4. Expressions et opérateurs
Si on fait le point, on s’aperçoit que dans une instruction d’affectation, on trouve :
à gauche de la flèche, un nom de variable, et uniquement cela. En ce monde empli
qu’est celui de l’algorithmique, c’est une des rares règles d’or qui marche à tous les coups :
gauche d’une flèche d’affectation autre chose qu’un nom de variable, on peut être certain à
s’agit d’une erreur.
à droite de la flèche, ce qu’on appelle une expression. Voilà encore un mot qui est tro
effet, ce mot existe dans le langage courant, où il revêt bien des significations. Mais en infor
terme d’expression ne désigne qu’une seule chose, et qui plus est une chose très précise :
Une expression est un ensemble de valeurs, reliées par des opérateurs, et équivalent à une seu
Cette définition vous paraît peut-être obscure. Mais réfléchissez-y quelques minutes, et v
qu’elle recouvre quelque chose d’assez simple sur le fond. Par exemple, voyons quelques exp
type numérique. Ainsi :
7
5+4
123-45+844
Toto-12+5-Riri
…sont toutes des expressions valides, pour peu que Toto et Riri soient bien des nombres.
cas contraire, la quatrième expression n’a pas de sens. En l’occurrence, les opérateurs que j’a
sont l’addition (+) et la soustraction (-).
Revenons pour le moment sur l’affectation. Une condition supplémentaire (en plus
précédentes) de validité d’une instruction d’affectation est que :
l’expression située à droite de la flèche soit du même type que la variable située à ga
très logique : on ne peut pas ranger convenablement des outils dans un sac à provision, ni d
dans une trousse à outils… sauf à provoquer un résultat catastrophique.
Si l’un des trois points énumérés ci-dessus n’est pas respecté, la machine sera incapable
l’affectation, et déclenchera une erreur (est-il besoin de dire que si aucun de ces points n’est re
aura aussi erreur !)
On va maintenant détailler ce que l’on entend par le terme d’ opérateur.
Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.
Les opérateurs possibles dépendent du type des valeurs qui sont en jeu. Allons-y, faiso
c’est un peu fastidieux, mais comme dit le sage au petit scarabée, quand c’est fait, c’est plus à
4.1 Opérateurs numériques
Ce sont les quatre opérations arithmétiques tout ce qu’il y a de classique.
+ : addition
- : soustraction
* : multiplication
/ : division
Mentionnons également le ^ qui signifie « puissance ». 45 au carré s’écrira donc 45 ^ 2.
Enfin, on a le droit d’utiliser les parenthèses, avec les mêmes règles qu’en mathém
multiplication et la division ont « naturellement » priorité sur l’addition et la soustra
parenthèses ne sont ainsi utiles que pour modifier cette priorité naturelle.
Cela signifie qu’en informatique, 12 * 3 + 5 et (12 * 3) + 5 valent strictement la même cho
41. Pourquoi dès lors se fatiguer à mettre des parenthèses inutiles ?
En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96. Rien de difficile là-dedans, que du normal.
4.2 Opérateur alphanumérique : &
Cet opérateur permet de concaténer, autrement dit d’agglomérer, deux chaînes de cara
exemple :
Variables A, B, C en Caractère
Début
A ← "Gloubi"
B ← "Boulga"
C←A&B
Fin
La valeur de C à la fin de l’algorithme est "GloubiBoulga"
4.3 Opérateurs logiques (ou booléens) :
Il s’agit du ET, du OU, du NON et du mystérieux (mais rarissime XOR). Nous les laisserons
provisoirement, soyez-en sûrs.
Exercice 1.8
Exercice 1.9
Retour Haut de Page
5. Deux remarques pour terminer
Maintenant que nous sommes familiers des variables et que nous les manipulons les yeux fe
les neurones en éveil, toutefois), j’attire votre attention sur la trompeuse similitude de vocabu
les mathématiques et l’informatique. En mathématiques, une « variable » est générale
inconnue, qui recouvre un nombre non précisé de valeurs. Lorsque j’écris :
y=3x+2
les « variables » x et y satisfaisant à l’équation existent en nombre infini (graphiquement,
des solutions à cette équation dessine une droite). Lorsque j’écris :
ax² + bx + c = 0
la « variable » x désigne les solutions à cette équation, c’est-à-dire zéro, une ou deux v
fois…
En informatique, une variable possède à un moment donné une valeur et une seule. A
elle peut ne pas avoir de valeur du tout (une fois qu’elle a été déclarée, et tant qu’on ne l’a pas
signaler que dans certains langages, les variables non encore affectées sont considérées com
automatiquement zéro). Mais ce qui est important, c’est que cette valeur justement, ne « va
proprement parler. Du moins ne varie-t-elle que lorsqu’elle est l’objet d’une instruction d’affec
La deuxième remarque concerne le signe de l’affectation. En algorithmique, comme on l’a
signe ←. Mais en pratique, la quasi totalité des langages emploient le signe égal. Et là, pour les
la confusion avec les maths est également facile. En maths, A = B et B = A sont deux p
strictement équivalentes. En informatique, absolument pas, puisque cela revient à écrire A ←
deux choses bien différentes. De même, A = A + 1, qui en mathématiques, constitue une équ
solution, représente en programmation une action tout à fait licite (et de surcroît ex
courante). Donc, attention ! ! ! La meilleure des vaccinations contre cette confusion cons
employer le signe ← en pseudo-code, signe qui a le mérite de ne pas laisser place à l’ambiguï
acquis les bons réflexes avec ce signe, vous n’aurez plus aucune difficulté à passer au = des l
programmation.
Retour Haut de Page