1

Bonjour,

je cherche, avec la fonction part(), à trouver les variables et les opérateurs d'une expression.

Je sais que c'est possible, et même que c'est le programme est dans le manuel de la TI89, mais je ne l'ai pas sous la main...

Je ne vois pas du tout comment commencer. Il faut faire une programmation récursive, et je ne sais pas comment stocker les résultats de part()... puisqu'à priori je ne connais pas la profondeur de l'arbre, et qu'il faudra que je stocke chacune des sous branches.

Merci d'avance

2

J'ai jamais utilisé cette fonction, sinon 1 fois :s
Me semble qu'il y a quelques exemples dans le manuel.

J'vais regarder ça plus en détail wink

3

C'est le principe de la programmation récursive.

Tu dois faire une fonction qui prend en entrée un noeud de ton arbre (une expression dans ton cas). Cette fonction découpe ton expression avec part(), et peut faire des calculs en fonction de l'opérateur qu'a retourné part()
Puis s'appelle elle-même avec chacune des deux sous expressions et puis cette fonction mouline ces deux résultats et renvoie ce qui t'intéresse comme valeur de retour.
Si ton expression n'est plus découpable avec part(), la fonction va directement renvoyer un résultat sans s'appeler récursivement.
Comme ça la valeur de retour de chaque fonction contient le résultat combiné de chacune des sous expressions.

si tu veux transformer x+y*z en {"+", "x", "*", "y", "z"} admettons, ta fonction ressemblera à : (c'est du pseudo code, pas du basic)
func decoupe(e)
local op, l1, l2
if part(e)=0 then
  return {part(e,0)}  // crée une liste de 1 seul élément avec la variable dedans
else
  part(e, 0) -> op // récupère l'operateur
  decoupe(part(e, 1)) -> l1 // découpe la partie gauche
  decoupe(part(e, 2)) -> l2 // découpe la partie droite
  return liste(op, l1, l2) // met à la suite dans une liste l'operateur, et les listes des parties gauches et droites. tu peux combiner les résultats comme tu le souhaites
end if
end func

la fonction liste n'existe pas bien sûr, tu dois te débrouiller avec des augment et compagnie et ça part du principe que tu n'as que 2 operandes pour chaque operateur, mais le principe est là.
Et les résultats de chaque étape de la découpe sont enregistré dans les variables locales puis combinés à la fin

Ce n'est pas la seule solution, mais en ti-basic je pense que c'est la plus simple.
avatar

4

Merci, j'essaie ça et je te tiens au courant.
Je ne savais pas qu'une fonction pouvait s'appeler elle-même en tibasic.

5

Si, mais fais gaffe, ça va pas très loin, ça va chercher dans les quelques dizaines de fois récursivement.
avatar
<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

6

Ca devrait suffire pour les cas usuels... j'espère !

10, ce serait un peu cours, mais 50, largement !