Bisam Elite


   Age : 30 Inscrit le : 12 Mar 2008 Messages : 219 Localisation : Lyon Calculatrice : Voyage 200 + TI 92 (vieille de 12 ans !) Classe : Prof de Maths Sup
Impureté:
   (26/450) Dernière note en maths: 14.8/20 à la 2ème épreuve de l'agreg 2000
| Sujet: Vieille TI Lun 17 Mar - 10:58 | |
| Bonjour, Comme vous pouvez le voir sur mon profil, j'ai une TI qui date un peu (si, si au-delà de 10 ans, on a le droit de dire qu'elle date).
J'ai donc 2 questions à vous poser :
- Tout d'abord, auriez-vous une idée pour programmer une sorte de fonction 'part' en TI-Basic puisque celle-ci n'existe pas sur ma calculatrice et que j'en aurais besoin pour écrire un programme de calcul de développements limités en calcul formel par identification des différentes fonctions présentes dans l'expression. J'ai déjà fait toutes les fonctions de calcul, il ne me reste plus qu'à faire cette partie d'analyse et de traitement de l'expression. On peut bien sûr faire sans... mais ce serait plus propre ! Je précise que j'ai déjà tenté de le faire (avec un succès mitigé) en utilisant des chaînes de caractères et des reparenthésages... mais c'est bien trop lent.
- Deuxièmement, mon OS est la version 1.3 du 20 octobre 1995. A votre avis, pourrai-je le mettre à jour sur cette vieille TI ou bien ne supportera-t-elle pas le traitement si j'essaie de lui mettre un OS de TI92+ ? Peut-être y aura-t-il un problème de mémoire par exemple... Bref, je ne sais pas si c'est possible.
Merci d'avance pour vos réponses. |
|
Mic Administrateur


   Age : 24 Inscrit le : 07 Sep 2004 Messages : 9724 Localisation : Talence Calculatrice : Voyage 200 & TI-Nspire CAS Classe : Prépa Oral CAPES Maths
Impureté:
   (56/450) Dernière note en maths: -/20
| |
Bisam Elite


   Age : 30 Inscrit le : 12 Mar 2008 Messages : 219 Localisation : Lyon Calculatrice : Voyage 200 + TI 92 (vieille de 12 ans !) Classe : Prof de Maths Sup
Impureté:
   (26/450) Dernière note en maths: 14.8/20 à la 2ème épreuve de l'agreg 2000
| Sujet: Re: Vieille TI Mer 19 Mar - 0:05 | |
| En fait, je crois que j'ai trouvé tout seul la réponse à ma 2ème question : la RAM de la TI-92 de base n'est pas "flashable" ! Il est donc impossible de changer d'OS... ce qui me désespère un peu mais bon... peut-être que j'achèterai une TI'Nspire.
Je reste en revanche sur ma faim pour ce qui est de ma 1ère question. Je donne plus de détails sur ce que je voudrais faire et ce que j'ai réussi à faire :
Cahier des charges : Toutes les fonctions sont à écrire en TI-Basic et en utilisant uniquement les fonctions de TI-92 (et non 92+). En particulier la fonction 'part' n'existe pas.
1) Définir un nouveau type de variable : le type polynôme, dans le cas où l'expression n'est constituée que sommes, de produits et d'exposants entiers. 2) Ecrire une fonction qui permette d'analyser une expression formelle afin d'en extraire les différents opérandes, et ce soit par récursivité, soit directement sur toute une expression. 3) Ecrire une fonction inverse de la précédente qui à partir de l'analyse de l'expression redonne l'expression de départ. 4) Adapter la fonction précédente pour remplacer les occurences des fonctions mathématiques (sin, cos, tan, exp, ln, etc...) par les opérations sur les DL correspondantes et les expressions polynomiales par les DL correspondants.
Ce que j'ai déjà réussi à faire tant bien que mal : 1) OK, c'est fait mais c'est assez lent car beaucoup de recherche sur les chaînes de caractères... sans doute possible d'améliorer. 2) Je n'arrive pas à obtenir une récursivité qui fonctionne... et donc j'oublie plein de termes dans mes expressions. 3) Je ne sais pas encore sous quel format écrire le résultat de la procédure précédente... et donc je n'ai pas pu commencer cette partie. 4) Même problème que ci-dessus.
Merci d'avance pour vos suggestions.
Je peux donner plus d'info sur ce que j'ai fait si vous voulez... mais pas fournir mes programmes car je n'ai toujours pas de câble  |
|
Mic Administrateur


   Age : 24 Inscrit le : 07 Sep 2004 Messages : 9724 Localisation : Talence Calculatrice : Voyage 200 & TI-Nspire CAS Classe : Prépa Oral CAPES Maths
Impureté:
   (56/450) Dernière note en maths: -/20
| |
Bisam Elite


   Age : 30 Inscrit le : 12 Mar 2008 Messages : 219 Localisation : Lyon Calculatrice : Voyage 200 + TI 92 (vieille de 12 ans !) Classe : Prof de Maths Sup
Impureté:
   (26/450) Dernière note en maths: 14.8/20 à la 2ème épreuve de l'agreg 2000
| Sujet: Re: Vieille TI Mer 19 Mar - 1:52 | |
| Je peux, il faudra juste que je retape tout à la main... et certains programmes sont assez longs. Bon allez, je me lance. Par quoi je commence ?
Une fonction qui convertit toute expression en chaîne de caractères :
| Code: | makestr(ex)=when(getType(ex)<>"STR",string(ex),ex) |
Une fonction qui renverse une chaîne de caractères :
| Code: | reverse(ex)= Func Local i,n,rep makestr(ex)->ex dim(ex)->n ""->rep For i,1,n mid(ex,i,1)&rep->rep endFor endFunc |
Une chaîne constante qui stocke les différentes fonctions à repérer dans une expression :
| Code: | fnc={"e^(","ln(","sin(","cos(","tan(","sin-1(","cos-1(", "tan-1(","sinh(","cosh(","tanh(","sinh-1(","cosh-1(","tanh-1(","sqrt("} |
PS : je vous laisse corriger les exposants -1 qui ne sont pas faisables dans le code et le 'sqrt' en la racine carrée.
Une fonction qui teste si une expression 'vr' est une partie d'une autre 'ex' :
| Code: | ispart(ex,vr)=when(inString(makestr(ex),makestr(vr))=0,false,true,false) |
Une fonction qui calcule le nombre d'apparitions d'une expression 'vr' dans une autre 'ex' :
| Code: | nbpart(ex,vr)= Func Local i,nb makestr(ex)->ex makestr(vr)->vr if vr="" return 0 inString(ex,vr)->i 0->nb While i>0 mid(ex,i+dim(vr))->ex inString(ex,vr)->i nb+1->nb EndWhile EndFunc |
Voilà, le décor est posé... Maintenant, on attaque le lourd : Une fonction qui extrait ce qui suit la 'nb'-ème apparition de l'expression 'sig' (et s'arrête à la prochaine rupture '+', '-', '*', '/', ',' ')' ou '(' ) dans l'expression 'ex', dans le sens 'dir' (1 de gauche à droite et -1 de droite à gauche) : [Edit : ] J'ai corrigé quelques bugs dus à une modification de dernière minute [/Edit]
| Code: | extract(ex,sig,nb,dir)= Func Local i,k,ch,beg,end If dir=-1 Then reverse(ex)->ex reverse(sig)->sig ")"->beg "("->end Else makestr(ex)->ex makestr(sig)->sig "("->beg ")"->end EndIf While nb>0 mid(ex,inString(ex,sig)+dim(sig))->ex nb-1->nb If nb>0 and not ispart(ex,sig) Return "" EndWhile beg&ex&end->ex dim(ex)->nb 0->k For i,1,nb mid(ex,i,1)->ch If k=0 and ispart("+-*/,"&end,ch) Exit If ch="(" k+1->k If ch=")" k-1->k EndFor left(ex,i-1)->ex If dir=-1 reverse(ex) EndFunc |
La fameuse fonction qui définit le type "POLY" et qui bien entendu conserve tous les autres types sauf "NUM", "VAR" et "NONE" qui deviennent "POLY".
| Code: | type(ex)= Func Local t,j,p,test getType(ex)->t If t="VAR" or t="NUM" or t="NONE" Then "POLY"->t ElseIf t="EXPR" Then dim(fnc)->p 1->j ispart(ex,"/")->test While not test and j<=p ispart(ex,fnc[j])->test j+1->j EndWhile nbpart(ex,"^")->p 1->j While not test and j<=p when(mod(expr(extract(ex,"^",j,1)),1)=0,false,true,true)->test j+1->j EndWhile If not test "POLY"->t Endif t EndFunc |
Merci à ceux qui ont eu le courage de tout lire... et encore plus à ceux qui ont fait l'effort de tenter de comprendre ce code non commenté. Je sais que les possibilités de la fonction 'extract' sont très nombreuses et peuvent grandement aider à créer les autres fonctions que je cherche à écrire.. mais je n'ai pas encore réussi à le faire proprement.
J'ai également écrit une fonction qui détermine l'ensemble de définition d'une fonction grâce à elle... et ça marche plutôt bien même avec des fonctions compliquées. Le seul souci est que la calculatrice a du mal à simplifier les différentes contraintes qui apparaissent. Ce sera peut-être pour une prochaine fois. |
|