Étude expérimentale de l’objet « trinôme »

TP en seconde sur les trinômes
mardi 4 janvier 2011
par  Alain BUSSER

Voici le sujet du TP (on remarquera que les élèves étaient en situation d’autonomie, le choix de l’outil leur étant plus ou moins laissé, avec 4 suggestions) :

le sujet du TP en pdf

Sans doute influencés par la préférence de leur professeur, les élèves ont presque tous choisi CaRMetal, la seule exception étant un élève doté d’une calculatrice Ti82Stats, et qui a d’ailleurs assez vainement tenté de s’en servir en lieu et place de JavaScript.

Plusieurs élèves ont d’emblée entré ceci :

  1. var a;
  2. var b;
  3. var c;

Télécharger

Réflexe d’algorithmiciens... Puis la situation a évolué en

  1. var a=Input("Entrez a");
  2. var b=Input("Entrez b");
  3. var c=Input("Entrez c");

Télécharger

Après c’est devenu moins facile, en particulier parce que devant un clavier, les élèves n’acceptent d’ouvrir un cahier, fût-ce celui du cours, que si on les y force...

Alors un élève a tenté de regarder comment était fait le fichier du cours. Un autre a tenté un

  1. var a=Input("Entrez a");
  2. var b=Input("Entrez b");
  3. var c=Input("Entrez c");
  4.  
  5.  
  6.  
  7. var x=Input("x");

Télécharger

qui revient à demander à l’utilisateur de calculer l’abscisse du sommet de la parabole et de l’entrer à la main ! C’est très analogue à ces élèves qui, lors de l’épreuve expérimentale du Bac S, remplissent le tableur cellule après cellule grâce à la calculatrice !

Voici quelques copies d’élèves (souvent incomplets, il semble y avoir eu peu de travail à la maison) :

Copie 1

  1. var a=Input("Entrez a");
  2. var b=Input("Entrez b");
  3. var c=Input("Entrez c");
  4. Println(-b/(2*a));

Télécharger

Plusieurs élèves ont d’abord entré -b/2*a au lieu de -b/(2*a) ce qui les a parfois mené jusqu’au bout de l’heure pour comprendre pourquoi « ça ne marche pas » (non conformité avec l’exemple du livre : L’erreur est-elle dans le livre, dans la formule du cours ou dans celle du script ?).

Copie 2

  1. var a=Input("Entrez a");
  2. var b=Input("Entrez b");
  3. var c=Input("Entrez c");
  4. Println(-b/(2*a));
  5. Println(c-b*b/(4*a));

Télécharger

Cette version a été assez répandue ; on constate la laconicité des affichages et le blocage sur les tests.

Copie 3

  1. var a=Input("Entrez a");
  2. var b=Input("Entrez b");
  3. var c=Input("Entrez c");
  4.  
  5. var x=c-Math.pow(b,2)/(4*a);
  6. Println("la valeur extrême de la fonction x est "+x);

Télécharger

La réponse à la question 3 sans passer par la question 2 témoigne d’une confusion entre x et y. Là encore, pas de tests (certains ont essayé de faire les tests à la main sans passer par le JavaScript).

Copie 4

  1. //function trinômes et paraboles(a,b,c){
  2.    var a=Input(" a ");
  3.    var b=Input(" b ");
  4.    var c=Input(" c ");
  5.    if (a==0) {Println(" la fonction est affine ");
  6.    } else {
  7.       //d=a*(x*x)+b*x+c;
  8.       e=-(b/(2*a));
  9.       f=c-((b*b)/(4*a));
  10.    }
  11.    Println(" la fonction atteint son extremum en un point de coordonnée ("+e);
  12.    Print(";"+f);
  13.    Print(")");
  14.    if(a<0) {Println(" l'extremum est le maximum de la fonction ");
  15.    }
  16.    if (a>0) {Println(" l'extremum est le minimum de la fonction ");
  17.    }
  18. //}

Télécharger

On constate

  1. L’absence du else : Ignorance de cette instruction ou choix délibéré pour éviter le cas a=0 ?
  2. Cet élève est le seul à avoir pensé au cas a=0 qui ne donne pas un trinôme ;
  3. Une ébauche de définition d’un objet trinôme au sens de la programmation objet (lignes devenues des commentaires).

Écrire un objet trinôme est possible, et même très probablement à la portée d’un élève de Seconde :

En JavaScript

  1. function trinome(a,b,c){
  2.         this.expression=a+"x²+("+b+")x+("+c+")";
  3.         this.coeffx2=a;
  4.         this.coeffx=b;
  5.         this.coeffconstant=c;
  6.         this.sommetx=-b/(2*a);
  7.         this.sommety=c-b*b/(4*a);
  8.         if(a>0){this.extremum="minimum";
  9.         } else {
  10.                 this.extremum="maximum";
  11.         }
  12.         this.reponse=function(){
  13.                 if (this.coeffx2==0){
  14.                         Println(this.expression+" n'est pas un trinôme,");
  15.                         Println("c'est une fonction ");
  16.                         if (this.coeffx==0){
  17.                                 Println("constante!");
  18.                         } else {
  19.                                 Println("affine!");
  20.                         }
  21.                 } else {
  22.                         Println("Trinôme "+this.expression+" :");
  23.                         Println("Le "+this.extremum+" est atteint en "+this.sommetx+" et vaut "+this.sommety+".");
  24.                 }
  25.         }
  26. }
  27. f=new trinome(-2,12,-16);
  28. f.reponse();

Télécharger

En Python

  1. class Trinome:
  2.     def __init__(self,a,b,c):
  3.         self.a=a
  4.         self.b=b
  5.         self.c=c
  6.        
  7.         self.sx=-b/(2*a)
  8.         self.sy=c-b**2/(4*a)
  9.        
  10.         if(a>0):
  11.             self.extr='minimum'
  12.         else:
  13.             self.extr='maximum'
  14.  
  15.     def affichage(self):
  16.         print(str(self.a)+u'x\u00b2+('+str(self.b)+')x+('+str(self.c)+')')
  17.  
  18.     def verdict(self):
  19.         print('Pour le trinome')
  20.         self.affichage()
  21.         print('le '+self.extr+' est atteint en '+str(self.sx))
  22.         print('et vaut '+str(self.sy))
  23.        
  24.  
  25. t=Trinome(-2,12,-16)
  26. t.verdict()

Télécharger

Très concis...

En Ruby

  1. class Trinome
  2.  
  3.     def initialize(a,b,c)
  4.         #crée 3 variables et les affecte
  5.         @a, @b, @c = a, b, c
  6.     end
  7.  
  8.     def abscisse
  9.         -@b/(2*@a)
  10.     end
  11.  
  12.     def ordonnee
  13.         @c-@b**2/(4*@a)
  14.     end
  15.  
  16.     def extremum
  17.         if @a>0 then
  18.             'minimum'
  19.         else
  20.             'maximum'
  21.         end
  22.     end
  23.    
  24.     def to_s
  25.         @a.to_s+'x²+('+@b.to_s+')x+('+@c.to_s+')'
  26.     end
  27.  
  28.     def verdict()
  29.         puts('Pour le trinôme')
  30.         puts(self.to_s)
  31.         puts('le '+self.extremum+' est atteint en '+self.abscisse.to_s)
  32.         puts('et vaut '+self.ordonnee.to_s)
  33.     end
  34.  
  35. end
  36.  
  37. t=Trinome.new(-2,12,-16)
  38. t.verdict()

Télécharger

Bien entendu, cette copie qui est la seule complète, a eu la note de 20 ; en plus l’élève a fini avant la fin de l’heure.

Une fois de plus, obliger les élèves à réinvestir dans une situation active (de programmation) plutôt que dans des exercices répétitifs (mais nécessaires : Il y aura aussi quelques séances Wims là-dessus) est très rentable, le cours pouvant servir à aider les élèves à réussir le TP, ce qui a au moins l’avantage d’aider les élèves à le regarder, ce cours, ce qui en milieu d’année scolaire, est loin d’être automatique !


Commentaires