Page 1 of 5

Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 11:23
by critor
Dans deux articles ( viewtopic.php?t=19129&p=208540#p208540 et viewtopic.php?t=19018&p=207342 ), j'ai mis en avant les nouvelles possibilités de donner les calculs étape par étape avec l'OS TI-83 Premium CE 5.2.

L'ennui, c'est que le code est à chaque fois spécifique à la formule utilisée.
Si l'on continue comme ça, il faudrait donc autant de programmes par étapes que de formules...

D'où l'idée d'avoir un programme dédié au calcul par étapes, qui pourrait alors être appelé par tout programme souhaitant en bénéficier : ;)
Image
(les parenthèses sont en bonus :troll: )

Le fonctionnement :
  • l'utilisateur saisit une chaîne avec son calcul
  • la chaîne est découpée en autant de morceaux que d'éléments (nombres, variables, opérateurs, fonctions...) et convertie en liste
  • la liste est ensuite passée en notation postfixée RPN
  • la liste-RPN est ensuite simplifiée étape par étape, et à chaque étape reconvertie en chaîne pour affichage

Le temps d'exécution est très raisonnable en regard des nombreuses opérations sur les listes et chaînes où la calculatrice est loin d'être optimale - 11 secondes pour l'écran ci-dessus avec un calcul quand même assez complexe au niveau lycée.

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 11:46
by Hamza.S
bon projet :bj:

vu qu'il n'y a pas de lien de téléchargement je suppose que c'est loin d'être fini?

critor wrote:la chaîne est découpée en autant de morceaux que d'éléments (nombres, variables, opérateurs, fonctions...) et convertie en liste

je croyais qu'il était impossible de mettre des chaines de caractères dans une liste?
pouvez-vous expliquer votre méthode?

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 12:03
by critor
Hamza.S wrote:bon projet :bj:

Merci. :)

Hamza.S wrote:vu qu'il n'y a pas de liend e téléchargement je suppose que c'est loin d'être fini?

Si c'était terminé, ce serait en news. ;)
Mais puisque tu demandes, voici :
stepeval.zip


Il resterait à :
  • supprimer des parenthèses inutiles sans que ça coûte trop cher en temps d'exécution
  • optimiser
  • minimiser le nombre de variables utilisées
  • définir le format d'appel/retour final depuis un autre programme
  • sauvegarder et restaurer les valeurs des variables en fin d'appel (sinon, plein de données du programme appelant auront pu être écrasées)

Hamza.S wrote:
critor wrote:la chaîne est découpée en autant de morceaux que d'éléments (nombres, variables, opérateurs, fonctions...) et convertie en liste

je croyais qu'il était impossible de mettre des chaines de caractères dans une liste?

Je te confirme que c'est impossible sur TI-z80.

Hamza.S wrote:pouvez-vous expliquer votre méthode?

En gros, la liste virtuelle dont je parle dans le pseudo-algorithme plus haut contient bien des nombres ou caractères.
En pratique sur calculatrice TI-z80, on tire parti du fait que tout est tokénisé (que ce soit un opérateur, une fonction ou une variable, pour un programme c'est toujours 1 caractère).

Il te faut définir/inventer ton propre format.

Pour ma part, j'utilise 2 listes de même taille.

Pour une valeur numérique, je l'enregistre dans la liste n°1, et je mets 0 dans la liste n°2.

Pour un caractère (que ce soit une variable, un opérateur ou une fonction) :
  • je le concatène à une chaîne, par exemple Chn0, si il n'y est pas déjà présent
  • dans la liste n°1, je stocke son index dans la chaîne
  • dans la liste n°2, je mets une valeur non nulle (-1, 1, 2... cela me permet en même temps de préciser si le caractère représente une variable, un opérateur binaire infixé, un opérateur unaire préfixé, un opérateur unaire postfixé, ou bien une fonction)

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 12:08
by Adriweb
Histoire d'exemplifier rapidement l'astuce au niveau des "listes de chaînes": ce programme, par exemple (lignes du début)

Enfin bref, beau projet, oui :)
A mon avis, ça reste quand même beaucoup moins embêtant à faire en C, cela dit. Ce genre de ruse n'ayant plus aucune raison d'être (array de string, hop hop)

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 13:11
by Hamza.S
si on pouvait utiliser les listes de cellsheet dans n'importe quel programme ça aurait été très intéressant car l'application accepte les chaînes de caractères

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 21:45
by critor
Quelques optimisations et suppressions de variables.
Puis simplification des parenthèses inutiles.
Image

Résultat, il faut repasser sur les optimisations. :P

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 18 Oct 2016, 22:46
by Adriweb
Pas mal :)
Pour la premiere étape, faudrait l'enlever tout simplement si elle est égale à l'entrée? C'est une ligne de moins facilement, je suppose.

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 20 Oct 2016, 13:12
by critor
Et on avance sur le calcul pas à pas : :)


Les multiplications implicites et omissions de parenthèses fermantes sont maintenant gérées : :D


Et même les nombres complexes, aussi bien en forme algébrique qu'exponentielle : :bj:


Le programme renvoie une chaîne de caratères où les différentes simplifications sont séparées par des symboles =
Pour plus de rapidité dans le traitement à posteriori, une liste complexe INDEX est également créée, et précise avec les parties réelles+imaginaires les positions+longueurs des éléments à extraire de la chaîne. :)

Voici par exemple l'exemple de programme d'appel produisant les affichages précédents :
Code: Select all
Input Chn7
Chn7
prgmZCALSTEP
sousch(Chn7,1,imag(⌊INDEX(1
Disp " "+Rep
For(I,2,dim(⌊INDEX
⌊INDEX(I
sousch(Chn7,réel(Rep),imag(Rep
Disp "="+Rep
End
expr(Rep

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 20 Oct 2016, 13:14
by TheMachine02
Magnifique :#top#:

Re: Bibliothèque de calcul par étapes 83PCE

Unread postPosted: 20 Oct 2016, 13:15
by Wistaro
Excellent travail!