Calculer l'image d'un réel (classe de seconde)

Discussion sur l'enseignement de l'algorithmique avec Xcas au lycee
alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Calculer l'image d'un réel (classe de seconde)

Message par alb » dim. sept. 18, 2011 3:17 pm

Si quelqu'un a envie de tester ce programme, bugs relevés ou critiques pédagogiques sont bienvenus.
Mon but est de mettre à disposition des élèves de mon lycée des sessions xcas de soutien utilisables avec ou sans l'aide du prof.
Pour l'heure je n'ai qu'une question de la plus haute importance:
existe-t-il un synonyme francisé de output ?
Après compilation, on exécute en tapant Image()

Code : Tout sélectionner

/****************************************************************
********** Calculer l'image d'un réel par une fonction **********
****************************************************************/
Calcul(E,x0):={ //Question+Réponse
  local x;purge(x);
  output("Soit f(x)="+E+ "\n Calculez l'image de "+x0+"\n Ne fermez cette fenêtre qu'après avoir répondu");
  output("f("+x0+")="+simplifier(subst(E,x=x0)));
}:;
Choix():={ // choix aléatoire de x0. On peut modifier/augmenter la liste de choix
  local ch,x0;
  ch:=alea(3);
  switch(ch) {
    case 0 : {x0:=alea(21)-10;break;} //x0 entier entre -10 et 10
    case 1 : {x0:=(alea(21)-10)/(alea(10)+1);break;} //x0 rationnel
    case 2 : {x0:=alea(5)+cos(alea(1)*pi)*sqrt(alea(1)+2);break;} //x0 type a+b*sqrt(2) ou a+b*sqrt(3)
  }
  retourne x0;
}:;
Image():={
  local a,b,c,E,x0,rep,d,x,ctr,vi;purge(x);
  a:=alea(21)-10;b:=alea(21)-10;c:=alea(21)-10;
  /***** fonction trinôme *****/
  tantque a==0 faire
    a:=alea(21)-10;
  ftantque
  E:=a*x^2+b*x+c;
  x0:=Choix();
  Calcul(E,x0);
  saisir_chaine("Voulez vous continuer (o/n)",rep);
  si rep=="n" alors retourne "A bientôt" fsi
  /***** fonction homographique *****/
  d:=alea(21)-10;
  tantque c==0 ou a*d-b*c==0 faire
    c:=alea(21)-10;d:=alea(21)-10;
  ftantque
  E:=(a*x+b)/(c*x+d);
  x0:=-d/c; // valeur interdite
  ctr:=0;
  repeter 
    saisir(output("Soit f(x)="+E),"Saisissez la valeur interdite",vi);
    ctr:=ctr+1;
  jusqua
    simplifier(vi-x0)==0 ou ctr>2;
  tantque c*x0+d==0 faire 
    output(x0+" n'a pas d'image, pourquoi ?");
    output("car le dénominateur s'annule pour x="+x0);
    x0:=Choix();
  ftantque
    Calcul(E,x0);
  /***** début ajouter une autre fonction *****/
  saisir_chaine("Voulez vous continuer (o/n)",rep);
  si rep=="n" alors retourne "A bientôt" fsi;
  E:=a*x+b/(x-1);x0:=1; // valeur interdite
  ctr:=0;
  repeter 
    saisir(output("Soit f(x)="+E),"Saisissez la valeur interdite",vi);
    ctr:=ctr+1;
  jusqua
    simplifier(vi-x0)==0 ou ctr>2;
  tantque x0-1==0 faire 
    output(x0+" n'a pas d'image, pourquoi ?");
    output("car le dénominateur s'annule pour x="+x0);
    x0:=Choix();
  ftantque
  Calcul(E,x0);
  /***** fin ajouter une autre fonction *****/
  retourne "L'exercice est terminé"
}
[Edit] Modifié une fois, les amplitudes des aleas étaient vraiment trop faibles

Répondre