Une activité d'initiation à BMF
Il s'agit ici d'utiliser un programme BMF pour résoudre un problème de mathématiques. Le
programme écrit sera donc effectivement utilisé pour donner une réponse à ce problème qui
devra avoir pour qualité de ne pas pouvoir être résolu trop simplement par d'autres moyens pour
un élève de collège.
L'apprentissage du langage se fait en écrivant des versions du programme de plus en plus
évoluées.
Enoncé du problème
Enoncé
Calculer l'arête d'un cube dont le volume est 2.
Mode de résolution
On cherche la solution en effectuant des essais successifs : on propose une valeur pour l'arête,
on calcule le volume correspondant, on compare à la valeur demandée et on recommence avec
une nouvelle valeur.
La calculatrice sera utilisée dans un premier temps.
Intérêt de l'ordinateur
Le travail effectué est répétitif. On est amené à écrire plusieurs fois le même nombre. Pour
automatiser cette recherche on utilisera l'ordinateur.
Fonctionnement d'un programme
Il s'agit du petit exposé fait aux élèves avant de les emmener en salle informatique pour utiliser
BMF la première fois.
Schéma général
Un programme se composera de trois parties : introduction de données, traitement des données
et affichage des résultats.
Dans notre exemple, cela se traduit par : attendre l'introduction d'une valeur qui sera l'arête du
cube, calculer le volume, afficher le volume.
Le langage BMF
Le programme doit être traduit dans un langage compréhensible par l'ordinateur. Nous allons
utiliser le langage BMF. Notre programme sera donc formé d'une suite d'instructions
élémentaires de BMF.
- Stockage des données
Les données numériques sont stockées dans des variables qui sont nommées par une lettre ou
par un groupe de lettres. Pour attribuer une valeur à une variable on utilise le signe =.
- Traitement des données
Il est possible d'effectuer les 4 opérations +,-,* et / sur les variables et de stocker les résultats
obtenus dans d'autres variables.
- Introduction des données
Pour permettre à l'utilisateur d'introduire une valeur qui sera stockée dans la variable A, on
utilise l'instruction Lire A.
- Affichage des données
Pour afficher à l'écran le contenu d'une variable V, on utilise l'instruction : Ecrire V.
Ecriture du premier programme
La première version
Les variables
Notre programme utilisera 2 variables : A pour l'arête du cube et V pour le volume du cube.
Le programme
Le programme se compose de 3 lignes :
Lire A
V=A*A*A
Ecrire V
Déroulement du programme
- Ligne 1 : L'ordinateur exécute l'instruction Lire A. Il se met en attente d'entrées au clavier
qu'il affiche jusqu'à l'appui sur Entrée. La valeur inscrite est alors stockée dans A.
- Ligne 2 : L'ordinateur exécute la deuxième instruction en calculant A*A*A et en stockant
le résultat dans V.
- Ligne 3 : L'ordinateur affiche V à l'écran.
Utilisation du programme
Pour lancer le programme on appuie sur la touche F9 ou on utilise l'instruction BMFCalc du
menu Outils de l'éditeur Le programme est lancé, on voit un simple curseur clignoter à l'écran.
On entre une valeur de l'arête du cube et on lit le volume affiché.
Premières améliorations
Notre premier programme est très court, mais il offre peu d'avantages par rapport à la
calculatrice. Il faut toujours introduire des nombres puis en lire d'autres sans indication sur leur
sens. De plus, il faut sans cesse relancer le programme.
Voyons comment améliorer cette situation.
Introduction de messages
Avant de demander l'entrée d'une valeur nous allons provoquer l'affichage d'un message d'invite.
On utilisera de nouveau l'instruction Lire, mais en insérant le message d'invite avant le nom de
la variable :
Lire "Entrer la valeur de l'arête du cube : " A
Le message doit être entre guillemets pour ne pas être interprété comme une variable.
De même, avant l'affichage du volume, on pourra introduire un message avec la ligne de
programme :
Ecrire "Le volume du cube est : " V
Boucle perpétuelle
Lorsque le volume est calculé, notre premier programme se termine. Pour automatiser la
répétition de son exécution on utilisera la nouvelle instruction Recommence.
Le nouveau programme
Lire "Entrer la valeur de l'arête du cube " A
V=A*A*A
Ecrire "Le volume du cube est : " V
Recommence
Utilisation
On ne lance le programme qu'une seule fois. Il suffit ensuite de choisir les valeurs de l'arête du
cube et de lire les volumes calculés.
On arrête le programme en appuyant sur Entrée sans introduire de données ou en appuyant sur
Echap.
Conclusion
A ce stade nous avons un programme qui permet de résoudre le problème posé à condition de
proposer des valeurs judicieuses pour l'arête. Son utilisation va permettre de définir une stratégie
de résolution qui sera traduite en un nouveau programme plus performant.
Utiliser une boucle de calcul
L'idée
Au lieu d'effectuer un seul calcul par valeur fournie, notre programme va effectuer des séries de
10 calculs. Il suffira de lui fournir un pas de calcul qu'il ajoutera 10 fois à la valeur initialement
choisie. Pour mettre cette stratégie en oeuvre nous utiliserons une boucle qui sera obtenue en
marquant son point de départ et en testant la valeur d'un compteur.
Deux nouvelles variables vont apparaître dans le programme : I qui sera un compteur pour la
boucle et Pas qui contiendra le pas de calcul.
La marque de début de boucle se fait en utilisant l'instruction Marque suivie d'un nom. Le test
du compteur s'effectue avec l'instruction Si .... Alors..... Le saut à la marque se fait avec
l'instruction Rallier suivie du nom de la marque.
Le texte du programme
Lire "Valeur initiale de l'arête du cube : " A
Lire " Pas de calcul : " Pas
I=0
Marque Boucle
V=A*A*A
Ecrire "Arête du cube : " A " Volume du cube : " V
A=A+Pas
I=I+1
Si I<10
Rallier Boucle
Ecrire ""
Recommence
Utilisation du programme
On lance le programme. On indique ensuite 0 comme valeur de l'arête et 1 comme pas. Le
programme affiche l'arête et le volume du cube pour les valeurs de l'arête allant de 0 à 9. On note
la dernière valeur pour laquelle le volume est inférieur à 2. On réintroduit cette valeur avec cette
fois un pas égal à 0,1 et on recommence. Les procédures de tatonnements sont simplifiées, mais
on a encore besoin d'intervenir de façon raisonnée pour aboutir au résultat cherché.
Version évoluée
Pour terminer, on pourra encore automatiser le travail du programme en réduisant l'intervention
de l'utilisateur à l'entrée du volume cherché. Pour cela on s'inspirera de la méthode précédente
: chercher la dernière valeur de l'arête pour laquelle le volume est inférieur au résultat cherché,
puis diviser le pas de calcul par 10. Le processus devra s'arrêter lorsque le pas deviendra
inférieur à la précision recherchée. Aucune instruction nouvelle n'est utilisée, si ce n'est
l'instruction Rem qui permet d'introduire des remarques. Celles-ci n'influent pas sur le
déroulement du programme.
Le texte du programme
Ecrire ""
Ecrire "Calcul de l'arête d'un cube"
Ecrire "==========================="
Ecrire ""
REM Entrée du volume et initialisation des variables
Lire "Entrer le volume du cube : " Volume
Lire " Précision désirée : " Prec
REM On commence avec la valeur 0 pour l'arête
REM et 1 pour le pas
A = 0
Pas = 1
REM Calcul du volume et interprétation
Marque Calcul
V = A * A * A
REM On vérifie si le résultat dépasse la valeur cherchée
Si V > Volume
Alors Rallier Sup
REM On passe à la valeur suivante en ajoutant le pas
A = A + Pas
REM On reprend le calcul
Rallier Calcul
REM Dépassement de la valeur cherchée
Marque Sup
REM On revient à la valeur précédente de l'arête
A = A - Pas
REM Si le pas est inférieur à la précision cherchée
REM on a fini
Si Pas < Prec
Alors Rallier Fin
REM Le nouveau pas est 10 fois plus petit
Pas = Pas / 10
REM On reprend le calcul
Rallier Calcul
REM Affichage du résultat
Marque Fin
Ecrire " Arête du cube : " A
Recommence
Utilisation du programme
On lance le programme. On indique le volume cherché, puis la précision désirée. Le programme
donne, après quelques instants, la valeur de l'arête.
Autres améliorations possibles
Le programme fonctionne maintenant de façon optimale. Il ne demande que 2 interventions de
l'utilisateur. Il est possible de vérifier la validité de ces interventions. Le volume à chercher est-il
positif ? La précision demandée n'est- elle pas illusoire ?