Après tous ces détours (auxquels je ne suis pas étranger ) il est temps d'en revenir à l'essentiel de la question posée.
1°) Tu cherches
[QUOTE]
Envoyé par
valentin03
... Un algo, qui d'une expression quelconque (limitée) donne les expressions équivalentes de toutes les variables de l'expression.
ce qui (cela a déjà été dit) relève du calcul formel; il ne saurait être question de réinventer la roue dans un tel domaine, et la seule option est de te tourner vers un logiciel approprié - il n'en manque pas sur Internet, et peut-être que quelques uns d'entre eux fonctionnent déjà sur ton ordinateur.
2°) Alors que s'imposait un traitement logique des équations, tu t'orientes vers l'énumération aveugle de toutes les chaînes de caractères utilisant les mêmes signes:
Envoyé par
valentin03
... Exemple: x=(a+b)*(c-d)/e
On fixe des valeurs arbitraires pour calculer x.
Puis par force brute on teste-calcule tous les arrangements
Si valeur arrangement = valeurs variables afficher: variable = arrangement (expression)
ça paraît jouable mais je m'interroge sur le nombre d'arrangements en fonction de la longueur de l'expression (14 pour l'exemple) ...
... ce qui revient à chercher l'aiguille dans une botte de foin, après l'y avoir délibérément jetée !
a) Oubliant la présélection des séquences conformes aux règles de syntaxe - dont tu ne souffles mot - tu ne proposes comme seul test que
b) la vérification de la relation en cause pour une (ou plusieurs ?) liste(s) de valeurs connues (x1, a1, b1, c1, d1, e1);
Envoyé par
valentin03
... On fixe des valeurs arbitraires pour calculer x ...
... Si valeur arrangement = valeurs variables afficher: variable = arrangement (expression) ...
et rien ne permet d'exclure l'existence de plusieurs expressions, dans le vaste ensemble sélectionné, vérifiant la (ou les) égalité(s) numériques.
Question essentielle: as-tu rédigé un programme, ou une ébauche de programme ? Ou au moins le début de l'apparence d'un commencement d'un vague plan d'algorithme ? Il serait intéressant pour toi de t'y mettre ...
Voici deux projets envisageables, partant de l'expression proposée: x=(a+b)*(c-d)/e
1°) L'énumération aléatoire des chaînes de caractères grammaticalement correctes, sans même contrôler les doublons résultant de la commutativité des opérations (+, *), à partir de la liste suivante:
ListeC: ARRAY[1..14] OF Char = ('a', 'b', 'c', 'd', 'e', '+', '-', '*', '/', '(', '(', ')', ')', ' ')
dont le dernier terme est neutre, et à laquelle tu adjoindras une matrice de compatibilité
MatC: ARRAY[1,,13, 1..13] OF Boolean = ...
(que je te laisse le soin de remplir).
2°) Le dénombrement systématique des expressions viables du paramètre (e) à partir des combinaisons des 4 parenthèses qui structurent la relation, en éliminant les cas où l'on ne trouve qu'un seul terme à l'intérieur d'une paire:
[ ... (v) ... ] ou rien à l'extérieur [ x = ( ... ) ] - ce parce qu'elles deviennent alors inutiles.
Il faut d'abord classer manuellement les expressions, en envisageant tous les arrangements possibles avec les variables (v = a, b, c, d, e) et les opérateurs (# = +, -, *, /):
((v#v)#v)#v#v
((v#v)#v#v)#v
((v#v#v)#v)#v
(v#(v#v)#v)#v
+ arrangements rétrogrades ...
v#(v#v)#(v#v)
(v#v)#v#(v#v)
(v#v)#(v#v)#v
(v#v)#(v#v#v)
(v#v#v)#(v#v)
Partager