Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graph 35 à 100 >> Divers >> Formel
Formel
Version : 1 Taille : 8272 octets Ajouté le : 2016-12-04 15:20 Modifié le : 2016-12-25 10:41
Auteur et posteur :
LephenixnoirEn ligneAdministrateurPoints: 24575 Défis: 170 Message
Planète Casio - Programme Casio - Formel - lephenixnoir - Calculatrices
Nombre de visites sur cette page : 5946
Score au progrank : 36
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
1380 téléchargements | Soumettre un test



Ce programme a participé à l'édition n°21 des Casio Programming Contest.
Pour plus d'informations sur cet événement, cliquez ici.
Description :

Voici ma participation au 7 Days CPC #21 !

Formel a remporté le 7 Days CPC #21 ! Merci !


Un défi technique plus que tout le reste. Je me défends tout de suite, Legolas, je disais que c'est possible avec les outils appropriés (notamment des arbres et du C), pas que ça l'était en Basic ; il y a tromperie !

Description

Formel est un programme qui analyse les fonctions qu'on lui donne en entrée. Il est capable d'interpréter le texte de la formule, pour l'évaluer plus tard. Plus fondamentalement, il peut dériver les fonctions pas trop compliquées (il dérive pas les quotients. Hmm... j'ai manqué de temps x_x).

Le programme comporte une petite aide. Utilisez la première fonction pour entrer vos formules ; elles sont stockées dans la matrice A. Tout le programme travaille ensuite avec cette matrice. La seconde fonction vous permet de visualiser l'arbre de la formule (histoire d'être sûr que Formel a bien compris ce dont vous parliez). La troisième évalue la fonction en certains points fournis par l'utilisateur, et la quatrième dérive la matrice.

En tant que moteur formel, ce programme est en-dessous du sub-standard. Il ne fait que fusionner les noeuds similaires ; aucune optimisation n'est fait. Attendez-vous à ce que votre dérivation sorte des produits avec un zéro au milieu.

Quelques détails : n'utilisez ni le symbole carré ni le symbole fraction. Ah et, soyez patients. C'est pas hyper rapide (surtout le parser).

J'ai pas testé de manière exhaustive donc il peut rester des bugs (j'espère pas !). Normalement le parser est assez intelligent, quant à la fonction de dérivation, je n'ai pas plus de craintes.

The icing

Formel manipule des expressions à plusieurs variables (X, Y, Z) et est capable de calculer les dérivées partielles par rapport à chacune de ces variables

Fichiers disponibles

1- formel.g1m : transférez ça sur votre machine pour utiliser le programme.
2- formel-doc.txt : lisez-le si vous voulez comprendre comment Formel marche.

Détails techniques

Bon, j'ai fini par implémenter un vrai parser, des piles, des arbres dans des foutues matrices auxquelles on ne peut ni facilement ajouter ni enlever des lignes, de la récursivité sans récursivité. Je comprends de nouveau le luxe que c'est de pouvoir coder en C.

L'arbre est stocké en préfixe dans la matrice, et tous les enfants d'un noeud sont stockées dans les lignes le suivant immédiatement. L'algorithme d'évaluation est totalement irrespectueux : il parcourt la matrice de bas en haut (soit l'arbre en postfixe) et calcule la valeur de la fonction en notation polonaise inversée en utilisant la liste Ans comme un pile.

Il y a plus de détails gores mais peut-être intéressants : voyez le second fichier.


Commentaires :


-florian66-Hors ligneAncien rédacteurPoints: 2384 Défis: 20 Message
Posté le 04-12-2016 à 22:40 | #
Tu décomposes les fonctions pour les dériver ?
LephenixnoirEn ligneAdministrateurPoints: 24575 Défis: 170 Message
Posté le 05-12-2016 à 06:47 | #
Yup. Le programme ne sait dériver que les constantes, les variables, les fonctions (via une table) et quatre opérations (+ - × ^). Pour le reste c'est la grande magie de la récursivité. (Bon du coup c'est pas assez spécialisé donc en sortie c'est moche.)
FabcvlrHors ligneMembrePoints: 2271 Défis: 41 Message
Posté le 12-01-2017 à 13:44 | #
8 ko de code ! Lephé quand tu te mets au BASIC tu fais pas semblant ! Je vais le tester celui-là et le décortiquer...
LephenixnoirEn ligneAdministrateurPoints: 24575 Défis: 170 Message
Posté le 12-01-2017 à 16:19 | #
Pff, 8 kio c'est rien. J'ai des fichiers de code C (donc des petites parties de programmes) qui font allègrement le double.

Il faut que je corrige un bug et mette tout ça à jour avec quelques optimisationsn sinon le programme restera inutilisable pendant longtemps

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 296 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd