Les variables et opérateurs
Les variables
1. Principe
Vous savez, grâce au chapitre précédent, comment l’ordinateur se représente les chiffres et les nombres : sous forme de binaires. De même la mémoire de l’ordinateur, composée de cases, peut contenir des informations, notamment ces fameux nombres. En programmation, il faut quelque chose de simple, pratique et souple à manipuler pour représenter ces nombres.
Chaque case de la mémoire est numérotée. Si la mémoire fait 256 octets et que chaque case peut contenir un octet, alors il y a 256 cases numérotées de 0 à 255. On peut donc obtenir la valeur d’une case depuis son numéro, en disant que la case 74 contient la valeur 212. Là où cela se complique, c’est que la mémoire de vos ordinateurs atteint un nombre très important de cases. Avec 1 Go de mémoire, vous avez 1 073 741 824 cases pouvant contenir chacune un octet. Comment voulez-vous vous souvenir de chaque numéro de case ? C’est bien entendu impossible.
Si par contre vous donnez un nom ou une étiquette à chaque valeur contenue dans la case, ou à une suite de valeurs de plusieurs cases, pour vous en rappeler plus facilement, cela devient bien plus évident. C’est ce qu’on appelle une variable. En informatique, une variable est l’association d’une étiquette à une valeur. Vous nommez la valeur. La variable représente la valeur et se substitue à elle. La variable est donc la valeur. Mais comme son nom l’indique, cette valeur peut changer dans le temps, soit que la variable ne représente plus la (ou les) même(s) case(s) mémoire, soit que la valeur de la case a changé.
Quel nom donner à une valeur ? Le nom que vous voulez et qui, si possible est en rapport avec ce que représente la valeur. Ce peut être une lettre, une association de lettres et de chiffres, ou d’autres symboles. Le formalisme des noms des variables dépend du langage utilisé. Parfois, un caractère spécifique indique le type (que vous rencontrerez plus bas) de la variable : ce qu’elle peut contenir.
Certains langages acceptent des noms en lettres minuscules, majuscules, avec des chiffres...
Opérateurs et calculs
1. Les affectations
Le symbole d’affectation "" fait partie d’une grande famille, celle des opérateurs. Comme son nom l’indique, un opérateur est utilisé pour et dans des opérations. Le symbole "" est un opérateur d’affectation. Il existe plusieurs opérateurs qui servent aux calculs, affectations, comparaisons, rotations (de bits), groupages, etc.
2. Les opérateurs arithmétiques
Pour que les algorithmes puissent effectuer des calculs, il faut pouvoir au moins faire des opérations simples. Vous utiliserez pour cela les symboles suivants :
-
+ : addition ;
-
- : soustraction ;
-
* ou x : multiplication (il est plus facile d’écrire un x pour fois qu’une étoile) ;
-
/ : division ;
-
% ou mod : modulo ;
-
DIV : la division entière.
Un modulo est le reste d’une division entière. Par exemple 15/2 vaut 7, mais il reste 1. On dit que 15 modulo 2 vaut 1.
Ces opérateurs sont dits binaires car ils s’utilisent avec deux valeurs : une avant le symbole et une après. Les valeurs avant et après peuvent être des données (de même type que la variable qui reçoit les résultats) ou des variables. Voici un exemple d’opérations dans un simple algorithme qui calcule la surface et le périmètre d’un cercle.
PROGRAMME CERCLE
VAR
r, PI, surface,perimetre:réels
DEBUT
PI3,1415927
r5,2
surfacePI * r * r
perimetre2 * PI * r
Afficher surface,perimetre
FIN
Ici il n’y a que des multiplications. Vous pouvez déjà remarquer que vous avez parfaitement le droit de chaîner vos calculs et de mélanger les données et les variables. Simulez les deux calculs :
surfacePI * r * r
surface3,1415927 * 5,2 * 5,2
surface84.948666608
perimetre2 * PI * r
perimetre2 * 3,1415927 * 5,2
perimetre32.67256408
En PHP :
<html>
<head><meta/>
<title>Cercle</title>
</head>
<body>
<?php
$pi=3.1415927;
$r=5.2;
$surface=$pi*$r*$r;
$perimetre=2*$pi*$r; ...
Pour aller plus loin
1. Les nombres négatifs
Un nombre signé par exemple sur 8 bits, contient un bit réservé pour le signe. C’est en tout cas ainsi qu’on vous le présente pour plus de compréhension. Généralement c’est le bit de poids fort, le plus à gauche, qui sert pour le signe : à 0 le nombre est positif, à 1 il est négatif.
Par exemple -9(10) devrait être représenté par 10001001(2). Cette représentation pratique pour le lecteur ne l’est cependant absolument pas pour l’ordinateur. Additionnez -9 et 30, vous obtenez 21.
En binaire, 30 équivaut à 00011110. Le binaire s’additionne comme le décimal : 1+1=10 donc retenue de 1 et ainsi de suite :
00011110 (30)
+10001001 (-9)
=10100111 (-39)
Il y a un problème ! Vous devriez obtenir 21 soit 00010101 ! C’est qu’en réalité un nombre négatif n’est pas représenté comme ceci. L’ordinateur « ruse » avec les manipulations binaires. L’astuce consiste à prendre le complément à un de la valeur binaire en valeur absolue (-9 => 9) et de lui ajouter un (on obtient au final un complément à deux). Le complément à un consiste à remplacer tous les zéros (0) par des un (1) et tous les 1 par des 0.
11111111 (complément à un)
00001001 (9)
=11110110 (tout est inversé)
+00000001 (+1)
=11110111 (équivaut à -9 représentation machine)
Si vous additionnez un nombre avec son complément à deux, vous obtenez 0 (plus une retenue).
Maintenant, additionnez ce résultat à 30 :
11110111 (équivaut à -9 représentation machine)
+00011110 (30)
=00010101 (21 - plus une retenue)
C’est gagné ! En pratique, le microprocesseur n’effectue pas tous ces calculs de conversion car il sait représenter nativement en interne toutes ces valeurs, matériellement.
2. La représentation des nombres réels
S’il est simple de se représenter un nombre entier en binaire, cela semble plus complexe avec un nombre à virgule. En effet, le principe même du binaire veut que chaque valeur représente...
Types et langages
1. Langages typés ou non
Quelques langages sont très souples avec les variables. Vous pouvez tout d’abord y mettre des nombres, puis du texte, puis de nouveau des nombres. Ces langages sont dits « non typés ». Certains poussent le raisonnement assez loin : une variable peut contenir le chiffre 3 et l’autre le texte "3 petits cochons", il pourra les additionner (ce qui devrait donner 6) ! C’est le cas du PHP par exemple : le type de la variable dépend alors de son contexte d’utilisation, le langage tentant de convertir son contenu quand c’est possible !
À l’inverse, d’autres langages sont de « typage fort » où toutes les variables doivent être déclarées de manière extrêmement précise : type, signe, longueur et les éventuelles conversions doivent être explicites.
En algorithmique, vous vous contenterez de donner le nom, le type et éventuellement la taille de la variable, qui gardera ses propriétés tout au long de l’algorithme, sa valeur pouvant bien entendu évoluer.
2. La gestion de la mémoire
La gestion de la mémoire est le calvaire des programmeurs en langages de bas niveau ou même de haut niveau quand ceux-ci laissent au programmeur la tâche de gérer la mémoire...
Exercices
Exercice 1
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
VAR
A,B:entiers
DEBUT
A2
BA+4
A4
FIN
Exercice 2
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
VAR
A,B,C:entiers
DEBUT
A1
B3
CA+B
A5
CB-A
FIN
Exercice 3
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
VAR
A,B:entiers
DEBUT
A2
BA+3
AA+5
BA-4
FIN
Exercice 4
Quelles sont les valeurs de A et B à la fin du code suivant ? Adaptez l’algorithme pour échanger les valeurs de A et B.
VAR
A,B:entiers
DEBUT
A1
B3
AB
BA
FIN
Exercice 5
Qu’affiche l’algorithme suivant ?
VAR
A,B:chaîne
DEBUT
A"12"
B"34"
Afficher A+B
FIN
Exercice 6
Qu’affiche l’algorithme suivant ?
VAR
A,B:chaîne
DEBUT
A"12"
B"34"
Afficher A&B
FIN
Exercice 7
Qu’affiche l’algorithme suivant ?
VAR
A,B:réels
C:entier
DEBUT
A3.2
B4.6
CA+B
Afficher C
FIN
Exercice 8
Créer l’algorithme pour échanger les valeurs de A, B et C de façon...