π
<-

[TIGCC] calcul formel

Programmation et implémentation d'algorithmes.

[TIGCC] calcul formel

Message non lude nikovitchi » 13 Déc 2014, 12:22

Bonjour,

j'ai un souci avec un programme que j'ai crée, mon problème est plus précisément dans une fonction de calcul formel pour des formules complexes (comme je suis un étudiant en Génie civil = Génie calcul) j'ai besoin de répété ce genre d'opération très souvent :'(

alors j'ai crée une fonction (void formule(char *form)) qui reçoit la formule a calculer "quelque soit sa complexité" en chaîne de caractères
et la transforme en une expression dans le estack avec le (push_parse_text (form)) pour l'afficher en pretty print jusqu’à ici tout ce passe bien..ma fonction prend la formule et l'affiche en pretty print, sauf que je dois par la suite remplacer les variables de cette formule par leur valeurs (i.e X^2/(Y+3) doit afficher si X=1 et Y=2 : 1^2/(2+3)) mais quand j'affecte a mes variables X et Y des valeurs en C (i.e int X=2) cela ne change rien dans ma formule et mon programme affiche (X^2/(Y+3))

en gros je veux que cette fonction affiche la formule avec les variables, ensuite avec les variables "remplacer avec leurs valeurs", pour finir et afficher le résultat final. mais je suis coincé, j'ai lu toute les documentation de TIGCC j'ai rien compris pratiquement :#fou#: les tuto ne parle pas de ça je suis confus :? aidez moi SVP

Voila le code de ma fonction :

Code: Tout sélectionner
void formule(char *form)
{
   int pos=0,key=0 ;

  TRY
// affichage de la formule  ////////////////

do
  {
    push_parse_text (form);
    WinClr (DeskTop);
    Print2DExpr (Parse2DExpr (top_estack, FALSE), DeskTop, pos, 50);
   
   
     key = ngetchx();
     if (key ==344)
     pos = pos-40;
     if (key ==338)
     pos = pos+40;
   }
  while (key != 264);
// calcule numerique /////////////////////////////
   //je ne sais pas quoi ecrire ici :(
   
  ONERR
    DrawStr (20, 20, "Error!", A_NORMAL);
  ENDTRY
}




ps: j'ai une TI 89 Titanium (et excuser ma façon de s'exprimer je suis nouveau sur le forum) :=):
Avatar de l’utilisateur
nikovitchi
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 80%
 
Messages: 13
Inscription: 13 Déc 2014, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [TIGCC] calcul formel

Message non lude Lionel Debroux » 13 Déc 2014, 12:53

Affecter des valeurs à des variables dans ton programme C ne changera la sortie du CAS que si tu propages ces variables en utilisant la fonctions appropriée :)
C'est push_substitute_simplify, éventuellement sa version sans simplification. Je déconseille l'utilisation de la version "such_that", plus complexe et moins bien documentée. Ces fonctions réalisent l'opérateur '|' du TI-BASIC, que tu peux utiliser dans l'écran HOME ou dans un programme BASIC, sous la forme expr("x+y" | x=1 and y=2), qui rendra 3, ou 3., selon le mode.

Petites remarques sur ton code:
* TRY / ONERR / ENDTRY quand tu fais de la programmation CAS, c'est bien;
* tu devrais utiliser les (pseudo-)constantes KEY_* de kbd.h plutôt que des codes de touche non portables comme 344 et 338, sans quoi ton programme, si tu le diffuses, sera difficile à utiliser sur 92+/V200;
* si la fonction à transformer t'est passée sur la ligne de commande, il te faudra vérifier, avec les fonctions et macros d'args.h, que tu as bien reçu une chaîne de caractères, avant de la passer à push_parse_text;
* pour être cohérent entre la partie TRY et la partie ONERR, tu devrais utiliser WinStr et non DrawStr :)

PS: TIGCC n'est plus maintenu depuis des années. GCC4TI (voir ma signature) a davantage de fonctions, notamment pour le calcul formel, plus d'optimisations, et moins de bugs...
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: [TIGCC] calcul formel

Message non lude nikovitchi » 13 Déc 2014, 13:45

salut, et merci pour votre réponse Mr Lionel je telecharge GCC4TI pour l'instant.

sinon pour la fonction push_substitute_simplify même si ça marche je pourrais jamais crée une fonction qui peut changer le nombre de variable en fonction de l'expression de ma formule, j'aurais aimé si vous partagez plus de détaille a propos de cette fonction, merci d'avance !
Avatar de l’utilisateur
nikovitchi
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 80%
 
Messages: 13
Inscription: 13 Déc 2014, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [TIGCC] calcul formel

Message non lude Lionel Debroux » 13 Déc 2014, 14:48

même si ça marche je pourrais jamais crée une fonction qui peut changer le nombre de variable en fonction de l'expression de ma formule

push_substitute_simplify() peut être appelée plusieurs fois avec une seule variable à remplacer à chaque fois. Ou alors, il faut modifier la chaîne de caractères derrière le '|' sous forme de chaîne de caractères, avant de passer le tout à push_parse_text() - mais tu auras alors un peu moins de contrôle sur les simplifications.

Il y a au moins deux façons de gérer plusieurs variables à remplacer sans s'embêter: passer au programme l'expression + un argument par substitution, ou passer au programme l'expression + une liste de substitutions. Plus concrètement:
Code: Tout sélectionner
prg("Y")
prg("X", "X=1")
prg("X+Y", "X=1","Y=2")
prg("X+Y+Z", "X=2","Y=1","Z=3")

Code: Tout sélectionner
prg("Y")
prg("X", {"X=1"})
prg("X+Y", {"X=1","Y=2"})
prg("X+Y+Z", {"X=2","Y=1","Z=3"})

La première façon de faire n'est accessible qu'en C/ASM, les programmes BASIC ne gérant pas les arguments variables. La différence entre les deux façons de faire est minime.
Tu pourrais également demander à l'utilisateur de rentrer des expressions après le démarrage de ton programme, mais c'est plus de travail.

Aussi, pourrais-tu nous décrire ton besoin complet, à la fois en termes de fonctions et en termes de contraintes éventuelles ? C'est à dire, ce que doit faire ton programme, et si tu as vraiment besoin, par exemple, de vitesse d'exécution.
Je pose la question car pour l'instant, je n'ai pas encore compris exactement pourquoi tu fais un programme C plutôt qu'un programme BASIC :)
On peut parfois faire mieux en utilisant des fonctions plus bas niveau que le BASIC (c'était le cas de ma réécriture en C d'une implémentation du delta^2 d'Aitken), mais le développement du code C/ASM prend nettement plus de temps, et le programme C/ASM est en général plus gros qu'un programme BASIC lisible (= avec des espaces et des noms de variables qui font bien plus d'une lettre).
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: [TIGCC] calcul formel

Message non lude nikovitchi » 13 Déc 2014, 15:20

Lionel Debroux a écrit:Aussi, pourrais-tu nous décrire ton besoin complet, à la fois en termes de fonctions et en termes de contraintes éventuelles ? C'est à dire, ce que doit faire ton programme, et si tu as vraiment besoin, par exemple, de vitesse d'exécution.
Je pose la question car pour l'instant, je n'ai pas encore compris exactement pourquoi tu fais un programme C plutôt qu'un programme BASIC :)
On peut parfois faire mieux en utilisant des fonctions plus bas niveau que le BASIC (c'était le cas de ma réécriture en C d'une implémentation du delta^2 d'Aitken), mais le développement du code C/ASM prend nettement plus de temps, et le programme C/ASM est en général plus gros qu'un programme BASIC lisible (= avec des espaces et des noms de variables qui font bien plus d'une lettre).


Comme je le disais, je suis un étudiant en génie civil et ça m'arrive très souvent de rencontré des formules de calcule trop long là ou je dois remplacer une dizaine/voir vingtaine de variable et réécrire la formule . je me suis mis alors a crée un programe en TI basic mais il m'a fallu quelques secondes pour réaliser que TI-BASIC simplifie toujours les expression qu'on lui donne, et parce-que moi j'ai besoin de remplacer les valeur dans ma formule sans changer quoi que se soit, je tant ma chance avec le C qui me parait beaucoup plus vaste que le TI-BASIC
et puisque ce genre de formule est utilisé dans plusieurs modules, j'ai préféré crée une fonction qui prend seulement l'expression de la formule en "string" et l’évalue en 3 étapes :

1) Affichage de la formule tel qu'elle est (i.e X^2/(2+1)) en pretty print bien sure ^^
2) Affichage de la formule on remplacent les variables mais sans aucune simplification mathématique c.a.d pour X=6 (6^2/(2+1))
3) Affichage de résultat finale en valeur approx (donc pour mon exemple 12)

PS: dans l’étape (2) je veux que ma fonction récupére les variable de ma fonction main
Avatar de l’utilisateur
nikovitchi
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 80%
 
Messages: 13
Inscription: 13 Déc 2014, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [TIGCC] calcul formel

Message non lude gildasd » 13 Déc 2014, 15:23

Mécanique statique? Donc tu va devoir gérer entre 2 et 6 inconnues?
Ti84+, Casio Graph35+ et Fx92B, HP10s
Avatar de l’utilisateur
gildasd
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 83.2%
 
Messages: 195
Inscription: 21 Déc 2013, 16:42
Localisation: Gent, Belgique
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ecole maritime.

Re: [TIGCC] calcul formel

Message non lude nikovitchi » 13 Déc 2014, 15:40

gildasd a écrit:Mécanique statique? Donc tu va devoir gérer entre 2 et 6 inconnues?


non pas tout a fait ça, oui parfois des problème de la statique (RDM surtout) mais plus de formule de vérification (reglementaire) du genre Mcr "photo jointe" et parfois de la dynamique des structure :'( Help please
Fichiers joints
formule.JPG
vous imaginez tout ça sous une racine devisé par son double
formule.JPG (10.11 Kio) Vu 2900 fois
Avatar de l’utilisateur
nikovitchi
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 80%
 
Messages: 13
Inscription: 13 Déc 2014, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [TIGCC] calcul formel

Message non lude Lionel Debroux » 13 Déc 2014, 16:51

Compris. L'absence de simplification est donc vraiment importante dans ton cas d'utilisation, et il te faut en effet la puissance de l'accès plus bas niveau, en premier lieu push_substitute_no_simplify() certainement, que je n'ai jamais utilisée mais qui doit s'utiliser comme les deux autres...

Avec 10 - 20 variables à substituer, rien que le fait de rentrer les paires {nom, valeur} des variables est du boulot. Est-ce que des dialogs te sembleraient pratiques ?
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: [TIGCC] calcul formel

Message non lude nikovitchi » 13 Déc 2014, 20:17

Lionel Debroux a écrit:Compris. L'absence de simplification est donc vraiment importante dans ton cas d'utilisation, et il te faut en effet la puissance de l'accès plus bas niveau, en premier lieu push_substitute_no_simplify() certainement, que je n'ai jamais utilisée mais qui doit s'utiliser comme les deux autres...

Avec 10 - 20 variables à substituer, rien que le fait de rentrer les paires {nom, valeur} des variables est du boulot.


J'avoue que ça va prendre du temps mais si vous avez une meilleur solution a proposer je suis preneur

Lionel Debroux a écrit: Est-ce que des dialogs te sembleraient pratiques ?


là j'ai pas compris par contre ^^
Avatar de l’utilisateur
nikovitchi
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 80%
 
Messages: 13
Inscription: 13 Déc 2014, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: [TIGCC] calcul formel

Message non lude Bisam » 13 Déc 2014, 20:45

"dialogs" = Boîtes de dialogue du langage TI-Basic.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5666
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Suivante

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 15 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Offre de test des nouveautés de rentrée 2024 par Casio. Enseignant(e), reçois gratuitement 1 exemplaire, à ton choix, de la Graph Light ou bien de la Graph Math+
14€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 31 Octobre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 90+E d'ici le 31 Décembre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 25 d'ici le 31 Décembre 2024
8€ remboursés par Casio sur l'achat de ta calculatrice Graph Math+ d'ici le 31 Octobre 2024
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2024
5€ de remise immédiate sur l'achat de ta calculatrice TI-83 Premium CE Edition Python chez les revendeurs partenaires
4€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced Edition Python chez les revendeurs partenaires
3€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced chez les revendeurs partenaires
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234567891011121314
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1053 utilisateurs:
>992 invités
>55 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)