Aller au contenu principal

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

Définition

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.

Vérification rapideon peut se reprendre

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.

Algorithme
pas 1 / 2
séparées par des virgules, décimales au point
Début
Lire a
c ← a + b
Écrire c
Fin

programme principal

asaisi4

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.

Un accumulateur se prépare avant la boucle
Un accumulateur est une variable qui cumule au fil d'une boucle, comme un total auquel chaque tour ajoute une valeur. La ligne 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.
Vérification rapideon peut se reprendre

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.

Algorithme
pas 1 / 6
Début
a ← 3
b ← 8
a ← b
b ← a + 2
a ← a - 1
Écrire "a = ", a, " et b = ", b
Fin

programme principal

a3
À manipuler
Avant de toucher à la figure, écrire sur une feuille la valeur prévue de 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 ligneab
2 : a ← 33(n'existe pas)
3 : b ← 838
4 : a ← b88
5 : b ← a + 2810
6 : a ← a - 1710

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.

La valeur 3 n'existe plus dès la ligne 4
Après 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 :

Algorithme
pas 1 / 6
Début
a ← 3
b ← 8
temp ← a
a ← b
b ← temp
Écrire "a = ", a, " et b = ", b
Fin

programme principal

a3

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.

La flèche ne se retourne pas

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.

Vérification rapideon peut se reprendre

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

Définition

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.

TypeExempleCe qu'il représente
Entier12un nombre sans partie décimale, pour compter : des pièces, des jours
Réel3.14un 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éenVrail'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 :

Algorithme
pas 1 / 3
Début
mesure ← 15.5
conforme ← mesure <= 16
Écrire "Conforme ? ", conforme
Fin

programme principal

mesure15,5

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érationExempleRésultatCe qu'elle calcule
+, -, *7 * 214somme, différence, produit
/7 / 23,5la division exacte, qui rend un réel
DIV7 DIV 23le quotient de la division entière
MOD7 MOD 21le 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.

Un nombre écrit entre guillemets reste un texte
Algorithme
pas 1 / 2
Début
n ← "10" // une chaîne de caractères
Écrire n + 5 // l'algorithme s'arrête ici
Fin

programme principal

n"10"

"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.

Vérification rapideon peut se reprendre

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.

Ce que fait la virgule dans un Écrire
La ligne É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.

Algorithme
pas 1 / 2
séparées par des virgules, décimales au point
Début
Lire largeur, hauteur
Écrire "Surface : ", largeur * hauteur, " m²"
Fin

programme principal

largeur4hauteursaisi2,5

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.

Vérification rapideon peut se reprendre

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 * 2 et b ← a - 3, exécutées dans cet ordre, que vaut b ?

  • 2.

    Après stock ← 20, stock ← stock - 7, stock ← 25 et stock ← stock + 3, que vaut stock ?

  • 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.
Algorithme
pas 1 / 2
séparées par des virgules, décimales au point
Début
Lire boites
Écrire boites, " boîtes contiennent ", 3 * boites, " pièces"
Fin

programme principal

boitessaisi4

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.
Algorithme
pas 1 / 4
séparées par des virgules, décimales au point
Début
Lire pieces
cartons ← pieces DIV 12
reste ← pieces MOD 12
Écrire cartons, " cartons pleins, ", reste, " pièces restantes"
Fin

programme principal

piecessaisi50

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.
Algorithme
pas 1 / 5
Début
a ← 4
b ← a + 1
a ← b * 2
b ← a - b
Écrire "a = ", a, " et b = ", b
Fin

programme principal

a4
Le corrigé
Après la ligneab
2 : a ← 44(n'existe pas)
3 : b ← a + 145
4 : a ← b * 2105
5 : b ← a - b105

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