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 de doutes qu’est celui de l’algorithmique, c’est une des rares règles d’or qui marche à tous les coups : si on voit à gauche d’une flèche d’affectation autre chose qu’un nom de variable, on peut être certain à 100% qu’il s’agit d’une erreur.
- à droite de la flèche, ce qu’on appelle une expression. Voilà encore un mot qui est trompeur ; en effet, ce mot existe dans le langage courant, où il revêt bien des significations. Mais en informatique, le 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 seule valeur.
Cette définition vous paraît peut-être obscure. Mais réfléchissez-y quelques minutes, et vous verrez qu’elle recouvre quelque chose d’assez simple sur le fond. Par exemple, voyons quelques expressions de 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. Car dans le cas contraire, la quatrième expression n’a pas de sens. En l’occurrence, les opérateurs que j’ai employés sont l’addition (+) et la soustraction (-).
Revenons pour le moment sur l’affectation. Une condition supplémentaire (en plus des deux 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 à gauche. C’est très logique : on ne peut pas ranger convenablement des outils dans un sac à provision, ni des légumes 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 d’exécuter l’affectation, et déclenchera une erreur (est-il besoin de dire que si aucun de ces points n’est respecté, il y 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, faisons le tour, c’est un peu fastidieux, mais comme dit le sage au petit scarabée, quand c’est fait, c’est plus à faire.
Les opérateurs numériques
Ce sont bien sûr les 4 opérations de bases, auxquelles on ajoute deux petits nouveaux :
- L’addition (+)
- La soustraction (–)
- La multiplication (*)
- La division (/)
- Le modulo (%), reste de la division entière entre deux nombres
- La puissance (^) (symbole qui n’est pas implémenté dans tous les langages)
- Les parenthèses (()) qui permettent de changer les priorités.
Les priorités sont celles de votre cours de math de votre enfance.
Les opérateurs alphanumériques
Ce sont les opérateurs & et + (dans certains langages). Ces opérateurs ont pour but de concaténer deux chaines de caractères.
ALGORITHM Exemple VAR a,b,c : String BEGIN a ← "Gloubi" b ← "Boulga" c ← a&b END
La valeur de c sera « GloubiBoulga »
Les opérateurs logiques
Il s’agit d’opérateurs spéciaux, travaillant sur du binaire et des booléens. Il s’agit des opérateurs NOT, AND, OR, et XOR. Nous les verrons dans un chapitre consacré.
Exercices
ALGORITHM Ex1 /* Que produit l'algorithme suivant ? */ VAR a, b, c : STRING BEGIN a ← "423" b ← "12" c ← a + b END
ALGORITHM Ex2 /*Que produit l'algorithme suivant ?*/ VAR a, b, c : STRING BEGIN a ← "423" b ← "12" c ← a & b END
Exercice 3
Calculer les expressions suivantes :
- 3*5*7
- (3*5)*7
- 3*(5*7)
- 3*(1+2+3)
- 3*1+2+3
- 6+20/2*5-3
- 6+20/2*(5-3)
- (4/2)/10*100
- (4/2)*(10*100)
- 7+7*3+7/4
- (7+7)*(3+2)/4
- (6+20)/2*5-3
- 8+2*4+2^3-1
- 8+2*4+2^(3-1)
Exercice 3
Transcrire les expressions algébriques suivantes en notation informatique
- [pmath]5a+3b[/pmath]
- [pmath]a^2+b^2[/pmath]
- [pmath](a+b).(x+y)[/pmath]
- [pmath]3x²+2bx-1[/pmath]
Maintenant que nous sommes familiers des variables et que nous les manipulons les yeux fermés, j’attire votre attention sur la trompeuse similitude de vocabulaire entre les mathématiques et l’informatique. En mathématiques, une « variable » est généralement une inconnue, qui recouvre un nombre non précisé de valeurs. Lorsque j’écris :
y = 3 x + 2
les « variables » x et y satisfaisant à l’équation existent en nombre infini (graphiquement, l’ensemble des solutions à cette équation dessine une droite). Lorsque j’écris :
ax² + bx + c = 0
la « variable » x désigne les solutions à cette équation, c’est-à-dire zéro, une ou deux valeurs à la fois…
En informatique, une variable possède à un moment donné une et une seule valeur . À la rigueur, elle peut ne pas avoir de valeur du tout (une fois qu’elle a été déclarée, et tant qu’on ne l’a pas affectée). À signaler que dans certains langages, les variables non encore affectées sont considérées comme valant automatiquement zéro). Mais ce qui est important, c’est que cette valeur justement, ne « varie » pas à proprement parler. Du moins ne varie-t-elle que lorsqu’elle est l’objet d’une instruction d’affectation.
La deuxième remarque concerne le signe de l’affectation. En algorithmique, comme on l’a vu, c’est le signe ←. Mais en pratique, la quasi totalité des langages emploient le signe = (égal). Et là, pour les débutants, la confusion avec les maths est également facile. En maths, A = B et B = A sont deux propositions strictement équivalentes. En informatique, absolument pas, puisque cela revient à écrire A ← B et B ← A, deux choses bien différentes.
De même, A = A + 1, qui en mathématiques, constitue une équation sans solution, représente en programmation une action tout à fait licite (et de surcroît extrêmement courante). Donc, attention ! ! ! La meilleure des vaccinations contre cette confusion consiste à bien employer le signe ← en pseudo-code, signe qui a le mérite de ne pas laisser place à l’ambiguïté. Une fois acquis les bons réflexes avec ce signe, vous n’aurez plus aucune difficulté à passer au = des langages de programmation.