Aller au contenu principal

Les variables dans Flowgorithm

Ce que ce chapitre apporte 5 points
  • Déclarer une variable avec un nom valide et le type adapté à ce qu'elle contiendra.
  • Lire et écrire une affectation, y compris quand la variable apparaît des deux côtés du signe =.
  • Prévoir la valeur d'une expression d'après les priorités, la division et le type de la variable qui la reçoit.
  • Assembler un message avec & et afficher un réel proprement avec ToFixed.
  • Suivre l'état des variables forme après forme, dans un tableau de trace et en pas à pas.

Une variable de Flowgorithm se déclare avec un type, se remplit par une affectation ou par une saisie, et se relit dans une expression. Un programme utile retient des valeurs, les transforme et affiche un résultat. Tout repose sur trois gestes : déclarer une variable du bon type, lui affecter une valeur, écrire une expression qui calcule juste. Ce chapitre les pose un par un, avec les pièges qui produisent un résultat faux sans aucun message : la moyenne rangée dans un entier, la priorité oubliée, l'échange qui écrase une valeur.

La variable : un nom, un type, une valeur

Définition

Une variable est un emplacement de mémoire désigné par un nom. Elle a un type, fixé à sa déclaration, et une valeur, qui peut changer au cours de l'exécution. Dans Flowgorithm, la forme Declare crée la variable ; la valeur arrive ensuite, par une saisie (Input) ou une affectation (Assign).

Une forme Declare peut créer plusieurs variables du même type, noms séparés par des virgules. Le chapitre précédent l'a montré : une variable utilisée sans déclaration, ou lue avant d'avoir reçu une valeur, arrête l'exécution. Reste à choisir, pour chacune, son nom et son type, avant d'écrire le moindre calcul.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainString destinationInteger nbColisReal masseKgBoolean fragileInput destinationInput nbColisInput masseKgfragile = falseOutput nbColis & " colis pour " & destination & ", " & ToFixed(masseKg * nbColis, 1) &" kg au total"End

Quatre variables, une par type. Dérouler en pas à pas : chaque variable apparaît dans la fenêtre des variables dès sa déclaration, mais sans valeur jusqu'à sa saisie ou son affectation ; fragile reçoit false, en bleu-vert. Dans la sortie, ToFixed(…, 1) écrit la masse avec une seule décimale : la fonction revient plus bas, avec le texte.

Les règles de nommage

Le chapitre précédent a posé l'essentiel : un identifiant commence par une lettre, suivie de lettres ou de chiffres, sans espace ni tiret bas, et Flowgorithm ignore la casse (volumeCuve, VolumeCuve et VOLUMECUVE désignent la même variable). S'y ajoute une règle : certains mots sont réservés, et aucune variable ne peut les porter : and, or, not, mod, true, false, pi, les noms de types (integer, real, string, boolean) et les noms des fonctions intégrées (Len, Sqrt, Int...).

Nom proposéAccepté ?Raison
volumeCuveouilettre d'abord, puis lettres
capteur2ouiun chiffre est admis après la première lettre
2emeCapteurnoncommence par un chiffre
volume cuvenoncontient un espace
volume_cuvenoncontient un tiret bas
real, pi, Lennontype, constante et fonction intégrée
Des noms parlants, sans accent

Un nom dit ce que contient la variable et, si besoin, son unité : volumeLitres, dureeMinutes, masseKg. Les noms x, a ou truc obligent à relire tout le programme pour comprendre un calcul. Comme au chapitre précédent, les identifiants s'écrivent sans accent (debit, temperature, etiquette), avec une majuscule à chaque nouveau mot ; le texte affiché, entre guillemets, garde ses accents.

Quatre types, quatre usages

TypeAccepteExemplesQuestion à se poser
Integerun entier ; un réel rangé dedans perd sa partie décimale0, 42, 1250compter : colis, pièces, minutes entières
Realun nombre à virgule1.5, 230.0, 0.25mesurer : volume, masse, température, débit
Stringdu texte, entre guillemets doubles"Cuve B2", "Lyon"nommer : un nom, une référence, un message
Booleantrue ou falsetruerépondre oui ou non : vanne ouverte, colis fragile

Le type se choisit d'après ce que la variable contiendra, pas d'après la première valeur imaginée. Un volume qui tombe juste aujourd'hui aura des décimales après la prochaine vidange partielle : c'est une mesure, donc un Real. Un nombre de colis ne sera jamais 3,5 : c'est un compte, donc un Integer. Un numéro de lot qui commence par des lettres, "AB-1250", est un texte. La couleur de chaque variable dans la fenêtre des variables, vue au chapitre précédent, rend ce choix visible : une mesure déclarée par erreur en Integer y apparaît en bleu au lieu du violet des réels.

Une précision sur l'Integer, qui compte plus loin. Une saisie décimale ne passe pas : taper 2.5 pour une variable Integer arrête l'exécution, dans le logiciel comme sur la page. C'est l'affectation d'un réel qui, elle, perd la partie décimale sans rien dire, comme le montre la section « Division et types ».

L'affectation : « reçoit »

Un entrepôt compte 1200 cartons ; une livraison en apporte 350. Le nouveau stock se calcule à partir de l'ancien, et vient le remplacer. C'est le travail de la forme Assign : ranger le résultat d'un calcul dans une variable. Flowgorithm l'écrit avec un signe égal, stock = stock + 350, comme les figures et comme ce cours.

Ce signe est la flèche du pseudo-code, stock ← stock + 350, et ce sera le = de Python. Les trois écritures se lisent de la même façon, « stock reçoit stock + 350 », et de droite à gauche : d'abord calculer l'expression de droite, avec les valeurs que les variables ont à cet instant (1200 + 350) ; ensuite ranger le résultat, 1550, dans la variable de gauche. L'ancienne valeur de cette variable est perdue.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger compteurcompteur = 0compteur = compteur + 1compteur = compteur + 1compteur = compteur + 1Output "Pièces comptées : " & compteurEnd

Un compteur de pièces sur un convoyeur. Dérouler en pas à pas et observer compteur dans la fenêtre des variables après chaque rectangle.

Ce n'est pas une équation

Sur la figure, compteur = compteur + 1 a l'air d'une égalité, et en mathématiques elle n'aurait pas de solution. Ici, ce n'est pas une affirmation mais une action : prendre la valeur actuelle, lui ajouter 1, ranger le résultat au même endroit. Le programme ci-dessus affiche Pièces comptées : 3. Pour la même raison, compteur + 1 = compteur n'a pas de sens : à gauche du signe, il n'y a jamais qu'une variable.

Ce = qui range n'est pas non plus le = qui compare. Le losange If, au chapitre des conditions, pose une question (« la charge est-elle égale à 30 ? ») ; ce cours y écrira ==, comme Python, pour que les deux sens ne se confondent jamais. Dans une forme Assign, = veut toujours dire « reçoit ».

Échanger deux valeurs

Sur une chambre froide, les deux capteurs ont été branchés à l'envers : la première saisie, censée être la température, reçoit l'humidité (62), et la seconde reçoit la température (18,5). Il faut échanger les contenus des deux variables.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainReal temperature, humidite, temporaireInput temperatureInput humiditecapteurs branchés à l'envers : on échange les deux valeurstemporaire = temperaturetemperature = humiditehumidite = temporaireOutput "Température : " & ToFixed(temperature, 1) & " °C"Output "Humidité : " & ToFixed(humidite, 1) & " %"End

Un échange en trois affectations. La variable temporaire met de côté la valeur qui serait écrasée par la première affectation. Exécuter pas à pas et regarder temporaire recevoir 62 avant que temperature ne soit écrasée.

La console affiche Température : 18.5 °C puis Humidité : 62.0 %. Le « .0 » vient de ToFixed(humidite, 1), qui écrit toujours une décimale, même quand la valeur tombe juste. Sans temporaire, la première affectation écraserait le contenu de temperature avant qu'il ait été mis de côté : le deuxième exercice type montre ce qui se passe alors.

Vérification rapideon peut se reprendre

Après stock = 40, puis stock = stock - 15, puis stock = stock * 2, que vaut stock ?

Écrire une expression

Une expression combine des valeurs, des variables, des opérateurs et des fonctions. Les opérateurs de calcul sont les suivants.

OpérateurRôleExemple métier
+, -addition, soustraction (nombres seulement)stock = stock - expedition
*multiplicationpuissance = tension * intensite
/division, toujours réelledebit = volume / duree
% ou modreste de la divisionminutes = dureeMinutes % 60
^puissancesurface = pi * rayon ^ 2
&concaténation : colle texte et valeurs"Stock : " & stock

Les priorités

Une expression ne se lit pas de gauche à droite. La documentation de Flowgorithm fixe un ordre, de la priorité la plus forte à la plus faible. Viennent d'abord les opérateurs unaires (le signe moins) et not ; puis ^ ; puis *, /, % ; puis +, - ; puis &. Les comparaisons, and et or, ferment la liste : elles servent au chapitre suivant. À priorité égale, le calcul se fait de gauche à droite.

ExpressionValeurPourquoi
12 + 8 / 414la division passe avant l'addition
(12 + 8) / 45les parenthèses forcent l'addition d'abord
60 / 3 * 240même rang : de gauche à droite
2 * 3 ^ 218la puissance ne porte que sur 3
(2 * 3) ^ 236la puissance porte sur le produit

Les pertes par effet Joule dans un câble valent R×I2R \times I^2. Avec resistance à 2 et intensite à 5, deux écritures très proches ne donnent pas le même nombre.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainReal resistance, intensiteInput resistanceInput intensiteOutput "resistance * intensite ^ 2 = " & ToFixed(resistance * intensite ^ 2, 1)Output "(resistance * intensite) ^ 2 = " & ToFixed((resistance * intensite) ^ 2, 1)End

Les deux écritures des pertes Joule, côte à côte. Exécuter : la première affiche 50.0, la seconde 100.0, et seules deux parenthèses les séparent.

La première est la bonne formule, la seconde élève le produit au carré. Aucune des deux ne provoque d'erreur : seule la lecture des priorités les départage. Au moindre doute, des parenthèses rendent l'intention lisible sans rien coûter. Deux cas les exigent toujours dans ce cours.

  • Un signe moins devant une puissance. Le signe moins passe avant la puissance dans Flowgorithm : -2 ^ 2 vaut 4, le carré de -2. En Python, c'est l'inverse : -2 ** 2 vaut -4. Écrire (-2) ^ 2 ou -(2 ^ 2) dit l'intention, et donne le même résultat dans les deux langages.
  • Deux ^ qui se suivent. La documentation ne précise pas dans quel ordre 2 ^ 3 ^ 2 se calcule, et (2 ^ 3) ^ 2 vaut 64 quand 2 ^ (3 ^ 2) vaut 512. Les parenthèses tranchent.

Le reste et la partie entière : convertir une durée

Un cycle de lavage industriel dure un certain nombre de minutes, et l'écran de la machine doit l'afficher en heures et minutes. La division donne un réel ; Int en garde la partie entière, les heures ; % donne le reste, les minutes. Le même couple Int(n / d) et n % d sert partout où une quantité se répartit en paquets : secondes en minutes, pièces en cartons, litres en bidons.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger dureeMinutes, heures, minutesInput dureeMinutesheures = Int(dureeMinutes / 60)minutes = dureeMinutes % 60Output "Cycle : " & heures & " h " & minutes & " min"End

Pour 135 minutes, le programme affiche Cycle : 2 h 15 min. Changer la saisie (60, 59, 600) et prévoir l'affichage avant d'exécuter.

Division et types

Deux règles se combinent, et produisent l'erreur la plus sournoise du chapitre. La division / est toujours réelle : 7 / 2 vaut 3,5, même entre deux entiers. Un Integer jette la partie décimale de ce qu'il reçoit, sans arrondir et sans message : 3,2 rangé dans un Integer donne 3. (En Python aussi, / est une division réelle ; la division entière s'y écrit //.)

Le type de la variable décide de ce qui reste. Le calcul est toujours juste ; c'est la case qui reçoit qui tranche. Une cadence rangée dans un Integer perd ses décimales définitivement, et rien ne le signale.
La question à se poser avant de déclarer n'est donc pas « quel type est le plus simple », mais « cette grandeur a-t-elle des décimales qui comptent ». Un nombre de colis, non. Une température, un taux, une durée en heures, oui.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger nbBouteilles, dureeMinutesInteger cadenceEntierReal cadenceReelInput nbBouteillesInput dureeMinutescadenceEntier = nbBouteilles / dureeMinutescadenceReel = nbBouteilles / dureeMinutesOutput "Cadence rangée dans un Integer : " & cadenceEntier & " bouteilles/min"Output "Cadence rangée dans un Real : " & ToFixed(cadenceReel, 2) & "bouteilles/min"End

Une remplisseuse produit 45 bouteilles en 4 minutes. Le même quotient, 11,25, est rangé dans deux variables : c'est le rangement dans l'Integer qui perd les décimales. Exécuter et comparer les deux lignes affichées, puis essayer 45 bouteilles en 5 minutes, où le quotient tombe juste et où les deux lignes se rejoignent.

La moyenne rangée dans un Integer

Une moyenne, un débit, un taux sont des quotients : ils se rangent dans un Real. Déclarer moyenne en Integer ne provoque aucune erreur : le programme tourne et affiche un nombre plausible, simplement faux. Le défaut ne se voit qu'en comparant avec un calcul à la main, ou en regardant la couleur de la variable dans la fenêtre des variables. Quand la partie entière est voulue, Int le dit explicitement, comme pour les heures du cycle de lavage.

Vérification rapideon peut se reprendre

1.Que vaut 10 / 4 dans Flowgorithm ?

2.Que vaut 5 + 2 * 3 ^ 2 ?

Le texte

L'opérateur & colle des morceaux de texte et des valeurs en une seule chaîne. L'opérateur + est réservé aux nombres : l'employer sur un texte est une erreur qui arrête l'exécution.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger numeroLotInput numeroLotOutput "Lot " + numeroLotEnd

Un + à la place du &. Exécuter : le programme s'arrête sur la sortie, car "Lot " est un texte. Avec & à la place du +, la même sortie afficherait Lot 1250.

Comme & passe après les calculs, "Total : " & 12 + 8 calcule d'abord la somme et affiche Total : 20. Les guillemets font la différence entre le mot et la valeur : "Volume : volume L" affiche le mot volume, quand "Volume : " & volume & " L" affiche le contenu de la variable. Les trois cas tiennent dans un seul programme.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger volumeInput volumeOutput "Total : " & 12 + 8Output "Volume : volume L"Output "Volume : " & volume & " L"End

Trois sorties, trois leçons sur le texte. Exécuter et comparer les deux dernières lignes : entre guillemets, volume n'est plus qu'un mot.

Trois fonctions servent à mettre en forme. ToFixed(r, i), déjà croisée plus haut, écrit le réel r avec i décimales, même quand elles valent zéro, ce qui s'impose dès qu'un réel n'est pas « rond », un volume calculé avec pi par exemple. ToString(n) convertit un nombre en texte, utile quand une fonction attend un texte. Len(s) donne le nombre de caractères du texte s, espaces compris.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainString nomCuve, etiquetteInteger numeroLotInput nomCuveInput numeroLotetiquette = nomCuve & "-" & numeroLotOutput etiquetteOutput "Caractères de l'étiquette : " & Len(etiquette)Output "Chiffres du numéro de lot : " & Len(ToString(numeroLot))End

Une étiquette de lot. Len mesure un texte : le numéro passe par ToString avant d'être mesuré. Exécuter, puis relancer en saisissant 42 au lieu de 1250 : les deux longueurs perdent 2, puisque le numéro a deux chiffres de moins. Relancer enfin avec « Cuve B12 » au lieu de « Cuve B2 » : seule la longueur de l'étiquette change.

Vérification rapideon peut se reprendre

1.Une variable Integer reçoit 2.7. Que contient-elle ?

2.Comment afficher le volume suivi de son unité ?

Les fonctions intégrées utiles au calcul

FonctionRôleExempleRésultat
Sqrt(x)racine carréeSqrt(2.25)1,5
Abs(x)valeur absolue, l'écart sans le signeAbs(18.5 - 21)2,5
Int(x)partie entièreInt(135 / 60)2
pila constante πpi * rayon ^ 2surface d'un disque
ToFixed(r, i)réel écrit avec i décimalesToFixed(pi, 2)le texte 3.14

Il n'existe pas de fonction minimum ou maximum : ce calcul s'écrit avec une condition, au chapitre suivant. Aucune variable ne peut porter le nom d'une de ces fonctions.

Suivre l'état des variables

Prévoir ce que fait un programme, c'est suivre la valeur de chaque variable forme après forme. Le tableau de trace le fait sur papier : une ligne par forme exécutée, une colonne par variable, et la valeur après la forme.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainInteger stock, expeditionInput stockstock = stock + 350expedition = stock / 4stock = stock - expeditionOutput "Stock restant : " & stockEnd

Un entrepôt reçoit 350 cartons, puis en expédie le quart. Dérouler en pas à pas et comparer la fenêtre des variables au tableau de trace.

Forme exécutéestockexpedition
Declaresans valeursans valeur
Input (saisie 1200)1200sans valeur
stock = stock + 3501550sans valeur
expedition = stock / 41550387
stock = stock - expedition1163387
Output1163387

La quatrième ligne cumule deux règles du chapitre : 1550 / 4 vaut 387,5, et expedition, un Integer, n'en garde que 387. Le programme affiche Stock restant : 1163. Remplir le tableau avant d'exécuter, puis dérouler avec « Pas à pas » : la page surligne la forme en cours, comme le logiciel, et la fenêtre des variables montre les valeurs. Le premier écart entre le tableau et la fenêtre désigne la forme mal comprise. Dans Flowgorithm, une forme Breakpoint suspend l'exécution à l'endroit choisi, pour observer la fenêtre des variables sans dérouler tout le début.

Vérification rapideon peut se reprendre

Quel identifiant Flowgorithm refuse-t-il ?

Fil rouge : la cuve de traitement

La cuve cylindrique de la station a un rayon de 1,5 m et une hauteur de 4 m. Le programme saisit ces deux dimensions et le volume actuel en litres, calcule la capacité en m³ (πr2h\pi r^2 h) puis en litres, et le taux de remplissage en pourcentage.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainReal rayon, hauteur, capaciteM3, capaciteLitres, volumeLitres, tauxInput rayonInput hauteurInput volumeLitrescapaciteM3 = pi * rayon ^ 2 * hauteurcapaciteLitres = capaciteM3 * 1000taux = volumeLitres / capaciteLitres * 100Output "Capacité : " & ToFixed(capaciteM3, 2) & " m3, soit " & Int(capaciteLitres) & "litres"Output "Taux de remplissage : " & ToFixed(taux, 1) & " %"End

Étape 2 du fil rouge. Toutes les variables sont des mesures, donc des Real ; ToFixed et Int ne changent que l'affichage.

Pour 22000 litres, la console affiche Capacité : 28.27 m3, soit 28274 litres puis Taux de remplissage : 77.8 %.

Au chapitre précédent, volumeLitres était un Integer, parce que la saisie tombait juste. C'était un choix fragile : un volume est une mesure, et la prochaine vidange partielle lui donnera des décimales. Il devient ici un Real, comme toutes les grandeurs du calcul, et le volume relevé a changé depuis, 22000 litres au lieu de 21000.

Trois décisions sont à relever. volumeLitres est un Real, car le volume est une mesure, même quand la saisie tombe juste. capaciteM3 garde toutes ses décimales en mémoire et seul l'affichage est raccourci : calculer le taux à partir d'une valeur tronquée fausserait le pourcentage. Enfin, volumeLitres / capaciteLitres * 100 est sans ambiguïté, puisque / et * ont le même rang et se calculent de gauche à droite. Relancer le programme en saisissant d'autres volumes, et prévoir chaque fois le taux avant de lancer : une cuve à moitié pleine, une cuve vide, une cuve pleine. Le chapitre suivant se servira de ce taux pour prendre une décision.

Vérification rapideon peut se reprendre

Un programme déclare taux, puis affecte une valeur à Taux. Que se passe-t-il ?

Mettre en pratique

Un capteur de chambre froide mesure en degrés Celsius, le client exige des degrés Fahrenheit (F = C × 9 / 5 + 32). Écrire l'affectation, choisir les types, et donner la valeur affichée pour 4,5 °C.

Les deux températures sont des mesures : celsius et fahrenheit sont des Real. L'expression celsius * 9 / 5 + 32 respecte les priorités : produit et division de gauche à droite, addition en dernier.

Organigramme, tel que l'affiche Flowgorithm
Exécuter comme dans Flowgorithm, en continu ou forme par forme.
MainReal celsius, fahrenheitInput celsiusfahrenheit = celsius * 9 / 5 + 32Output ToFixed(celsius, 1) & " °C = " & ToFixed(fahrenheit, 1) & " °F"End

La conversion Celsius vers Fahrenheit. Relancer avec 0 puis avec 37 pour retrouver deux repères connus : 32.0 °F et 98.6 °F.

Le programme affiche 4.5 °C = 40.1 °F. Deux erreurs sont à écarter. Écrire celsius * 9 / (5 + 32) change le calcul, car les parenthèses forcent l'addition d'abord. Déclarer fahrenheit en Integer donnerait 40 : le résultat perdrait sa décimale sans message.

Organigramme, tel que l'affiche Flowgorithm
MainInteger piecesM1, piecesM2Input piecesM1Input piecesM2piecesM1 = piecesM2piecesM2 = piecesM1Output "M1 : " & piecesM1 & " pièces, M2 : " & piecesM2 & " pièces"End

Les compteurs de deux machines, saisis à l'envers (35 puis 20), et un échange à vérifier.

Ce programme doit échanger les compteurs des machines M1 et M2. Que valent piecesM1 et piecesM2 à la fin, et comment corriger ?

Tableau de trace : après les saisies, piecesM1 vaut 35 et piecesM2 vaut 20. piecesM1 = piecesM2 range 20 dans piecesM1 : le 35 est perdu. piecesM2 = piecesM1 range la valeur actuelle de piecesM1, c'est-à-dire 20. Le programme affiche M1 : 20 pièces, M2 : 20 pièces. La correction met la première valeur de côté avant de l'écraser, comme pour les capteurs de la chambre froide : déclarer temporaire en Integer, puis temporaire = piecesM1, piecesM1 = piecesM2, piecesM2 = temporaire. Une affectation détruit l'ancienne valeur : toute valeur encore utile doit être sauvegardée avant.

Organigramme, tel que l'affiche Flowgorithm
MainInteger colisH1, colisH2, colisH3, colisH4, moyenneInput colisH1Input colisH2Input colisH3Input colisH4moyenne = (colisH1 + colisH2 + colisH3 + colisH4) / 4Output "Colis par heure en moyenne : " & moyenneEnd

Les colis traités par une ligne d'emballage pendant quatre heures (14, 15, 12 et 16) et leur moyenne horaire.

Le responsable de la ligne trouve la moyenne affichée par ce programme trop « ronde ». Quelle valeur s'affiche, laquelle est juste, et quelle forme corriger ?

La somme vaut 57 et la division 57 / 4 vaut 14,25, puisque / est toujours réelle. Les parenthèses sont correctes : sans elles, seul colisH4 serait divisé par 4. Le défaut est ailleurs : moyenne est déclarée Integer, et jette la partie décimale. Le programme affiche Colis par heure en moyenne : 14 au lieu de 14,25. La forme fautive est la Declare : les comptages restent des Integer, mais moyenne, un quotient, doit être déclarée à part en Real, et l'affichage devient ToFixed(moyenne, 2). Un résultat plausible mais trop rond désigne presque toujours un quotient rangé dans un entier.

Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?

Dans la bibliothèque d'exercices