Variables, types et affectation
Ce que ce chapitre apporte 6 points
- Suivre la valeur de chaque variable ligne après ligne, dans un tableau de trace.
- Savoir qu'une variable n'existe qu'à partir de sa première affectation, et qu'une affectation écrase la valeur précédente.
- Échanger le contenu de deux variables sans rien perdre.
- Reconnaître les quatre types de base, entier, réel, chaîne et booléen, et ce que chacun permet de faire.
- Calculer avec +, -, *, /, DIV et MOD, en prévoyant ce que rend chaque opération.
- Composer un affichage au caractère près.
Un automate de dosage range chaque mesure de pH dans la même case de sa mémoire, et chaque mesure remplace la précédente. Le jour où un technicien veut comparer la mesure du matin à celle du soir, celle du matin n'existe plus nulle part, et rien ne l'a signalé. Que contient une case de mémoire à un instant donné, et qu'est-ce qui l'efface ?
Le chapitre précédent a posé la variable en une minute : un nom, une valeur, une flèche qui range. Ce chapitre suit cette valeur dans le temps. Une variable n'existe qu'à partir de sa première affectation ; une affectation efface sans prévenir ce qui précédait ; la valeur porte un type, qui décide de ce qu'il est possible d'en faire ; et un Écrire affiche ses morceaux au caractère près. Ce sont les quatre endroits où un débutant se trompe sans le voir.
Une variable, et le nom qu'on lui donne
Une variable est une case de la mémoire qui porte un nom et contient une valeur. Le nom désigne la case, la valeur est ce qu'elle contient, et la flèche ← y range une valeur, de la droite vers la gauche.
Le nom se choisit pour être relu. Un algorithme se relit bien plus souvent qu'il ne s'écrit, et un nom qui dit ce que la boîte contient, total, moyenne, temperature_max, évite d'avoir à deviner ce qu'un t ou un x voulait dire trois semaines plus tôt. La machine, elle, ne fait aucune différence.
Seule contrainte : les mots du pseudo-code sont réservés. Une variable ne peut pas s'appeler fin, si ou pour, qui ont déjà un sens ; fin_periode ou indice_fin conviennent.
Pourquoi nommer une variable total plutôt que t ?
Une variable n'existe qu'à partir de sa première affectation
Une variable n'est pas créée à l'avance, et rien ne la déclare : elle naît la première fois qu'une valeur y est rangée, par une flèche ou par Lire. Avant ce moment, elle n'existe pas. La lire ne donne pas zéro, ni une valeur vide : c'est une erreur, qui arrête l'algorithme.
programme principal
Ici, a est lu mais b ne l'est jamais. Dérouler : la figure s'arrête à la ligne 3, sur le message « b n'existe pas ici ». Une variable doit donc avoir reçu une valeur, par Lire ou par une flèche, avant d'apparaître à droite d'une flèche ou dans un Écrire.
somme ← somme + x lit l'ancienne valeur de somme avant de ranger la nouvelle : au premier tour, il faut donc qu'elle existe déjà.D'où le réflexe à prendre : initialiser l'accumulateur avant la boucle.
somme ← 0 ne sert pas à « remettre à zéro », il sert à faire exister la boîte pour que somme ← somme + x ait un contenu à lire.
Que se passe-t-il si l'on écrit Écrire total avant toute affectation à total ?
La flèche écrase, elle ne compare pas
Une variable ne garde qu'une valeur à la fois. stock ← 20 puis stock ← 25 laisse 25, et le 20 est perdu définitivement. Rien ne le signale : c'est le fonctionnement normal, et c'est pourquoi l'ordre des lignes compte autant.
Le signe ← n'énonce donc pas une égalité : il range une valeur dans une variable, et ce qui s'y trouvait disparaît. Quelques lignes suffisent à s'en convaincre, à condition de les dérouler au lieu de les lire.
programme principal
a et de b après chaque ligne. Avancer ensuite d'un pas à la fois avec « suivant » : sous le listing, l'état des variables signale en couleur celle qui vient de changer. Au troisième pas, celui de la ligne 4, a ← b, noter que a passe de 3 à 8 et que la valeur 3 n'apparaît plus nulle part. Au pas suivant, seul b change, et a garde son 8. Le sixième et dernier pas affiche « a = 7 et b = 10 » : comparer avec la feuille, et chercher la ligne où la prévision s'en est écartée, s'il y en a une.
Le tableau suivant note l'état des deux variables après chaque ligne, comme la figure le fait pas à pas :
| Après la ligne | a | b |
|---|---|---|
2 : a ← 3 | 3 | (n'existe pas) |
3 : b ← 8 | 3 | 8 |
4 : a ← b | 8 | 8 |
5 : b ← a + 2 | 8 | 10 |
6 : a ← a - 1 | 7 | 10 |
L'algorithme affiche a = 7 et b = 10. La ligne 5 calcule a + 2 avec la valeur que a possède à ce moment-là, 8, et non avec le 3 du début : une variable ne se souvient de rien, elle ne connaît que sa valeur présente.
a ← b, les deux variables valent 8. Le 3 initial n'est stocké nulle part, et aucune ligne suivante ne peut le retrouver.La même ligne ne lie pas non plus les deux variables : elle recopie une valeur à un instant donné. Quand la ligne 5 change
b, a garde son 8.
Échanger deux valeurs sans en perdre une
L'écrasement explique pourquoi l'échange de deux variables passe par une troisième, qui garde l'ancienne valeur le temps de la recopier :
programme principal
La figure affiche a = 8 et b = 3. Sans temp, la ligne a ← b détruirait le 3 avant que b ait pu le recopier, et les deux variables finiraient à 8. L'exercice 1 du chapitre précédent a montré un détour qui s'en passe, par la somme des deux nombres ; il ne marche qu'avec des nombres et se relit mal. L'échange par une troisième variable marche avec n'importe quelle valeur, texte compris.
5 ← a n'a pas de sens : à gauche de la flèche se trouve toujours la variable qui reçoit, à droite la valeur à ranger. La règle tient en une phrase, « la variable reçoit la valeur ». total ← total + 1 se lit donc de droite à gauche : prendre le contenu actuel de total, lui ajouter 1, ranger le résultat dans total.
1.stock ← 20 puis stock ← 25. Que contient stock ?
2.Après a ← 3, puis b ← a, puis a ← 10, que vaut b ?
Le type est porté par la valeur
Le type d'une valeur dit ce qu'elle représente : un nombre entier, un nombre à virgule, un texte, une réponse par oui ou par non. C'est lui qui décide des opérations possibles sur cette valeur.
| Type | Exemple | Ce qu'il représente |
|---|---|---|
| Entier | 12 | un nombre sans partie décimale, pour compter : des pièces, des jours |
| Réel | 3.14 | un nombre à virgule, pour mesurer : une température, une longueur, un prix ; sa valeur en machine est souvent approchée |
| Chaîne | "vis M6" | un texte entre guillemets : un nom, une référence, un message |
| Booléen | Vrai | l'une des deux valeurs Vrai et Faux, la réponse à une question fermée |
Le type est porté par la valeur, pas par la boîte. Dans le pseudo-code de ce cours, comme en Python, une variable n'est jamais déclarée d'un type : elle reçoit n'importe quelle valeur, et c'est au moment de s'en servir que le type compte. 12 + 5 vaut 17, alors que "12" + 5 n'a pas de sens et arrête l'algorithme. Certains outils, comme Flowgorithm, font au contraire déclarer d'avance le type de chaque variable, et refusent ensuite toute valeur d'un autre type ; la convention de ce cours ne le fait pas.
Une pièce mesure 15,5 millimètres, et sa cote ne doit pas dépasser 16 :
programme principal
La variable mesure contient un réel. La variable conforme contient un booléen : la comparaison mesure <= 16 est calculée, et son résultat, Vrai, est rangé comme n'importe quelle autre valeur. L'affichage produit donc :
Conforme ? Vrai
Une comparaison est une valeur comme une autre : elle vaut Vrai ou Faux, et c'est elle que le chapitre suivant placera derrière un Si.
Ce que rend chaque opération
| Opération | Exemple | Résultat | Ce qu'elle calcule |
|---|---|---|---|
+, -, * | 7 * 2 | 14 | somme, différence, produit |
/ | 7 / 2 | 3,5 | la division exacte, qui rend un réel |
DIV | 7 DIV 2 | 3 | le quotient de la division entière |
MOD | 7 MOD 2 | 1 | le reste de la division entière |
+ entre deux chaînes | "vis " + "M6" | "vis M6" | les deux textes mis bout à bout |
DIV et MOD vont ensemble. Dix-sept pièces rangées par boîtes de cinq remplissent 17 DIV 5, soit 3 boîtes, et il en reste 17 MOD 5, soit 2. Le reste sert aussi à reconnaître un nombre pair : son reste par 2 vaut 0.
Un réel, lui, est souvent une valeur approchée : 0.1 + 0.2 s'affiche 0,30000000000000004, et non 0,3. Ce n'est pas une faute de la plateforme, c'est la façon dont toute machine range les nombres à virgule, que le parcours Python explique en détail. Deux réels issus de calculs se comparent donc mal avec =. Dans le code, enfin, un réel s'écrit avec un point, 15.5, et la virgule sert à séparer ; les figures affichent pourtant leurs résultats à la française, avec une virgule.
programme principal
"10" est un texte, qui se trouve s'écrire avec des chiffres. Le ranger dans n ne pose aucun problème ; c'est l'addition de la ligne 3 qui échoue, parce qu'un texte et un nombre ne s'additionnent pas. La convention de ce cours n'a pas d'instruction de conversion : la correction consiste ici à ranger le nombre lui-même, n ← 10. En Python, int("10") fera ce travail.
Bien identifier le type d'une donnée, c'est savoir ce qu'il sera possible d'en faire. D'où l'habitude à prendre pour chaque donnée, avant de s'en servir dans un calcul : se demander si c'est un nombre, un texte, ou une réponse par oui ou par non. Lire suit la même règle : un nombre saisi est rangé comme un nombre, un nombre saisi entre guillemets comme un texte.
1."12" et 12 sont-ils la même chose ?
2.Quel type convient pour ranger la réponse à « la pièce est-elle conforme » ?
3.Que valent 17 DIV 5 et 17 MOD 5 ?
Afficher au caractère près
Lire et Écrire ont été vus au chapitre précédent : l'un range dans une variable la valeur saisie, l'autre affiche. Un détail de Écrire décide pourtant de ce qu'on lit à l'écran.
Écrire "Bonjour ", prenom, " !" du chapitre précédent comporte trois morceaux séparés par des virgules. Chacun est affiché à la suite du précédent, sans rien ajouter entre eux.Les morceaux entre guillemets sont affichés tels quels : « Bonjour » et « ! ». Le morceau sans guillemets est un nom de variable, et c'est son contenu qui est affiché, pas le mot « prenom ».
D'où l'espace à la fin de
"Bonjour " : sans lui, l'affichage donnerait « BonjourCamille ». Ce que l'on écrit entre les guillemets est affiché au caractère près, espaces compris.
Un morceau peut aussi être un calcul, dont c'est le résultat qui s'affiche. Et plusieurs valeurs peuvent se lire d'un coup, séparées par des virgules : Lire largeur, hauteur range la première valeur saisie dans largeur, la seconde dans hauteur.
programme principal
Pour une plaque de 4 mètres sur 2,5, la figure affiche Surface : 10 m². Dans le champ de saisie comme dans le code, le réel s'écrit 2.5 : la virgule y sépare les deux valeurs.
prenom vaut "Camille". Qu'affiche Écrire "Bonjour", prenom ?
Mettre en pratique
Des valeurs à suivre ligne après ligne, et des pièces à ranger : chaque réponse se trouve avec les règles du chapitre, sans figure.
Des valeurs à suivre, des pièces à ranger
- 1.
Après
a ← 6,b ← a + 1,a ← b * 2etb ← a - 3, exécutées dans cet ordre, que vautb? - 2.
Après
stock ← 20,stock ← stock - 7,stock ← 25etstock ← stock + 3, que vautstock? - 3.
Une commande de 135 pièces part par cartons de 16. Combien de cartons partent pleins ?
cartons - 4.
Combien de pièces de cette commande restent hors des cartons pleins ?
pièces - 5.
Que vaut
23 / 4 - 23 DIV 4?
Une boîte contient trois pièces. Écrire un algorithme qui lit un nombre de boîtes et affiche le nombre de pièces qu'elles contiennent.
programme principal
Explication : l'algorithme lit un nombre, par exemple 4, et calcule 3 * boites, soit 12, directement dans l'affichage : un Écrire accepte un calcul parmi ses morceaux. Une variable intermédiaire, pieces ← 3 * boites, ne deviendrait utile que si le résultat servait deux fois.
Résultat attendu :
Entrée : 4
Sortie : 4 boîtes contiennent 12 pièces
Des pièces sont rangées par cartons de 12. Écrire un algorithme qui lit un nombre de pièces, puis affiche le nombre de cartons pleins et le nombre de pièces restantes.
programme principal
Explication : DIV compte les cartons remplis, MOD ce qui ne suffit pas à en remplir un de plus. Les deux résultats sont rangés dans des variables qui disent ce qu'elles contiennent, ce qui rend la dernière ligne lisible sans calcul. Avec 48 pièces, le reste vaut 0 : c'est le cas limite à essayer en plus de l'exemple.
Résultat attendu :
Entrée : 50
Sortie : 4 cartons pleins, 2 pièces restantes
Que contiennent a et b à la fin de cet algorithme ? Construire le tableau de trace, puis dérouler la figure pour le vérifier.
programme principal
Le corrigé
| Après la ligne | a | b |
|---|---|---|
2 : a ← 4 | 4 | (n'existe pas) |
3 : b ← a + 1 | 4 | 5 |
4 : a ← b * 2 | 10 | 5 |
5 : b ← a - b | 10 | 5 |
Résultat attendu :
Sortie : a = 10 et b = 5
Explication : chaque ligne calcule avec les valeurs présentes à son moment. La ligne 4 utilise le 5 que b vient de recevoir, et la ligne 5 le 10 que a vient de recevoir. Cette dernière ligne range dans b la valeur 10 - 5, qui se trouve être celle que b avait déjà : une affectation peut ne rien changer en apparence, et seul le tableau permet de l'affirmer.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
La flèche qui écrase, le choix du type, et la variable employée avant d'exister.
- Ce que la flèche écrase1 · Lire
- Choisir le bon type2 · Appliquer
- Employer avant d'avoir rangé2 · Appliquer
- Le prix toutes taxes2 · Appliquer
- L'échange qui perd une valeur3 · Combiner
- La moyenne de trois prix2 · Appliquer