Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Une séance avec Xcas en classe de Seconde.
Droites et algorithmes
Article mis en ligne le 14 avril 2012
dernière modification le 13 avril 2012

par Luc Briel

Voici la page Xcas de l’auteur de l’article sur le site de son Lycée. On y trouve de nombreuses ressources avec Xcas pour les différentes classes du Lycée.

Le lecteur débutant avec Xcas pourra trouver une aide précieuse dans l’article Algorithmique en Seconde avec Xcas ou à cette adresse.

Voici 6 problèmes d’algorithmique simple en environnement Xcas.

Les tests avec Xcas nécessitent la présence de ce logiciel sur votre machine. Il est téléchargeable ici.

Question 1

Soit A(-53 ;-28) et B(17 ; 35) deux points fixes et M(a ; b) un point variable dans le plan.

1) Trouvez une équation cartésienne de la droite (AB). On donnera cette équation sous la forme suivante :

$$\mathbf{Ax-By+C=0}$$

2) Vérifiez le résultat précédent avec Xcas.

Question 2

Rédigez un algorithme puis un programme en langage Xcas nommé SurLaDroite qui affichera dans la zone intermédiaire M est sur la droite (AB) ou M n’est pas sur la droite (AB) selon que M est ou n’est pas aligné avec A et B, qui retournera vrai (1) ou faux (0) selon le cas. Adaptez ce programme pour obtenir l’affichage des réponses dans un écran graphique en haut et à gauche.

Solution

L’algorithme

saisir a,b
 temp:=9a-10b+197
 si temp==0 alors
   afficher("M est sur la droite (AB)")
   retourne 1
 sinon
   afficher("M n'est pas sur la droite (AB)")
   retourne 0
 fsi

Le programme Xcas

Ce texte peut-être copié-collé dans l’éditeur de programmes de Xcas.
Les // indiquent un commentaire qui est ignoré par le compilateur.
Consultez l’aide pour comprendre la syntaxe des commandes.
En dessous du texte un aperçu de ce que vous devriez obtenir dans l’éditeur de programmes de Xcas qui utilise la coloration syntaxique.

SurLaDroite(a,b):={ //NomDeLaFonction(parametre1,parametre2)
 local temp; //temp est une variable qui n'existe qu'à l'intérieur de ce programme
 temp:=9a-10b+197; //temp vaut 0 si et seulement si M est sur la droite
 si temp==0 alors
   //affichage d'une chaîne de caractères "..." dans la zone intermédiaire
   //en bleu au dessus de la valeur de retour
   afficher("M est sur la droite (AB)")
   retourne 1 //valeur de retour 1 ou vrai si le point est sur la droite
 sinon
   afficher("M n'est pas sur la droite (AB)")
   retourne 0 //valeur de retour 0 ou faux si le point n'est pas sur la droite
 fsi
} //pour refermer le bloc d'instructions

Modifions le programme précédent pour afficher une légende dans un écran graphique (nous gardons le même nom).

SurLaDroite(a,b):={
 local temp;
 temp:=9a-10b+197; //temp vaut 0 si et seulement si M est sur la droite
 si temp==0 alors
   //affichage d'une chaîne de caractères "..." dans l'écran de géométrie
   retourne legende([50,50],"M est sur la droite (AB)")
 sinon
   retourne legende([50,50],"M n'est pas sur la droite (AB)")
 fsi
}

Question 3

Ouvrez maintenant un écran de géométrie (Menu Geo Nouvelle Figure 2d) puis définissez
successivement :

  • le point A
  • le point B
  • la droite (AB)
  • le paramètre a variant de -100 à 100 avec un pas de 1 (taper a:=element(-100..100) puis après validation changer le pas)
  • le paramètre b variant de -100 à 100 avec un pas de 1
  • le point M

Ajoutez dans ce script SurLaDroite(a,b) puis pour vérification est_aligne(A,B,M).
Faites varier a et b avec les flèches des curseurs situés à droite du dessin.
Notez sur votre feuille des couples d’entiers, coordonnées de points situés sur la droite (AB). Vérifiez par le calcul qu’il s’agit bien de points appartenant à la droite.

Solution

Les élèves les plus rapides pourront élaborer un programme pour rechercher tous les couples d’entiers (x ; y) vérifiant :

CoordEntieres(p,n):={
 local L,x,y;
 L:=NULL; //ou L:=[] (voir question 5)
 pour x de p jusque n faire
   y:=(9x+197)/10;
   si irem(9x+97,10)==0 alors
     L:=L,[x,y]; //ou L:=append(L,[x,y]) (voir question 5)
   fsi
 fpour
 retourne L
}

Pour les élèves rapides et désireux d’aller en Terminale S (Spécialité Math) sachez qu’il est possible de trouver la forme générale des solutions entières de l’équation 9x - 10y + 197 = 0. Montrez (c’est facile) la proposition suivante :

si M(-3 + 10k ; 17 + 9k) et k entier alors M appartient à la droite d’équation 9x - 10y + 197 = 0 et a des coordonnées entières.


Question ouverte ( c’est moins facile !) : prouvez que la proposition réciproque est vraie. Sinon attendez deux ans !

Question 4

1) Soit M(127 ; k) sur la droite (AB). Trouvez k. Vérifiez avec Xcas.

2) Soit M(k ;-73) sur la droite (AB). Trouvez k. Vérifiez avec Xcas.

Solution

Notez la différence entre sol qui contient une liste et sol[0] qui contient le premier élément de cette liste.

Question 5

On veut dessiner toutes les droites passant par A dont le coefficient directeur m est un entier compris entre -12 et 15. Ecrivez un algorithme et un programme nommé Faisceau en langage Xcas en utilisant soit une boucle conditionnelle, soit une boucle itérative. Compilez puis exécutez.

Solution

Le programme avec une boucle tantque

Faisceau():={ //fonction sans paramètre
 local L,m; //déclaration des variables locales
 m:=-12; //initialisation de la variable m
 L:=NULL; //L est une séquence vide avant d'entrer dans la boucle
 tantque m<=15 faire //début de la boucle
   L:=L,droite(y=m*x+53m-28); //à chaque passage la séquence contient une droite de plus
   m:=m+1; //incrémentation (augmentation) de la variable m de 1
 ftantque //fin de la boucle
 retourne L
}

Le programme avec une boucle pour

Dans ce programme L est une liste.
Remarquez la commande append pour ajouter un élément en fin de liste.

Faisceau():={
 local L,m;
 L:=[]; //L est une liste vide avant d'entrer dans la boucle
 pour m de -12 jusque 15 faire //début de la boucle
   //à chaque passage la liste contient une droite de plus
   L:=append(L,droite(y=m*x+53m-28));
 fpour //fin de la boucle
 retourne L //la valeur de retour est une liste d'objets de type droite
}

Question 6

On veut obtenir les abscisses des points d’intersection des droites précédentes avec l’axe des abscisses.
Ecrivez un algorithme et un programme nommé AbsInter1 en langage Xcas avec une boucle itérative qui renvoie ces abscisses sous forme d’une liste. Exécutez le. Que se passe-t-il ?

De toute évidence on est en présence d’un bug. Faites debug(AbsInter1()) et constatez en avançant pas à pas (sst) le problème pour m = 0. Expliquez alors pourquoi solve renvoie une liste vide si m = 0.

Corrigez le programme, nommez le AbsInter2(), en ajoutant un test dans la boucle pour ignorer la valeur m = 0. Prévoyez l’affichage du nombre de points d’intersection. Compilez. Exécutez.

Solution

Le programme AbsInter1() plante car si m = 0 alors sol est une liste vide. Donc sol[0] équivaut à [ ][0] qui renvoie logiquement Erreur : Dimension incorrecte puisque cette instruction consiste à rechercher le premier élément (d’indice 0) d’une liste vide !

AbsInter1():={
 local L,m,sol;
 L:=[];
 pour m de -12 jusque 15 faire
   sol:=solve(m*x+53m-28=0,x); // sol: liste, sol[0]: le premier élément de la liste
   L:=append(L,sol[0]); // à chaque passage la liste contient une abscisse de plus
 fpour
 retourne L
}

Le programme corrigé et complété

AbsInter2():={
 local L,m,sol,c;
 L:=[];
 c:=0; // pour compter le nombre de points d'intersection
 pour m de -12 jusque 15 faire
   // si m=0 on passe à l'itération suivante, c n'est pas incrémenté
   si m==0 alors continue fsi;
   sol:=solve(m*x+53m-28=0,x);
   L:=append(L,sol[0]);
   c:=c+1; // incrémentation du compteur de points
 fpour
 afficher("ce faisceau coupe l'axe des abscisses en "+c+" points")
 afficher("voici la liste des abscisses de ces points")
 retourne L // valeur de retour ici une liste de 27 éléments
}

Solutions de ces 6 problèmes en un seul fichier :

Corrigé des 6 problèmes

Test de ces programmes avec Xcas :

Dans le dossier zippé ci-dessous, on trouve le fichier session.xws. Téléchargez le. Si Xcas est installé sur votre ordinateur, l’ouverture de session.xws (restitué par dézippage) vous permet de tester les 6 solutions proposées.

Fichier solutions Xcas

Cette manipulation un peu artisanale est rendue nécessaire par le fait que SPIP ne reconnaît pas les fichiers .xws

Voici un autre article à propos d’Xcas que le lecteur pourra consulter.