OVH Cloud OVH Cloud

CAS ?

5 réponses
Avatar
Eric
Bonjour !

J'aimerai savoir si il existe une librairie ou une classe permettant de
réaliser du calcul formel autre que Blitz (ne marche pas avec VC++ 6, et
j'utilise les MFC pour l'interface graphique)

Je dois faire saisir une equation par l'utilisateur.
Par exmple, l'utilisateur entre dans une chaine de caractere du genre
"2*x+3" ou encore "5*(3+x)/x"
Je dois pouvoir calculer la derivée, ainsi que l'image des fonctions entrées
en faisant varier X.
Puis l'afficher.


Cordialement

Merci

Eric

5 réponses

Avatar
Eric
Bon, je vais pas jouer les difficiles !
Juste quelque chose qui evalue la chaine de caracteres !
Tant pis pour la fonction integrer :(

Ou meme un ActiveX
Avatar
syn-ack
ah, bein c'est de l'evaluation d'expression.

je vais essayer de te donner une reponse a la volée, parceque ca prend bp de
temps sinon

-il faut savoir que chaine est en fait un pointeur dans tous les parametres
des fonctions.
-noublie pas de supprimer le 1er caractere a chque fois que tu le lis
- je nai pas geré les espaces, a toi de le faire
jai essayé de donner un exemple rapide est simple, si tu veux l'ameliorer a
toi de te debrouiller, sinon c trop long a expliquer.



double expression(*chaine)
{
return addition(chaine)
}

double addition(*chaine)
{
gauche=soustration(chaine)
tant que le chaine[0] = "+"
{
supprime le 1er caractere
droite=soustraction(chaine)
gauche += droite
}
return (gauche)
}

double soustraction(*chaine)
{
gauche=multiplication(chaine)
tant que le chaine[0] = "-"
{
supprime le 1er caractere
droite=multiplication(chaine)
gauche -= droite
}
return (gauche)
}

double multiplication(*chaine)
{
gauche = division(chaine)
tant que le chaine[0] = "*"
{
supprime le 1er caractere
droite=division(chaine)
gauche *= droite
}
return (gauche)
}

double division(*chaine)
{
gauche = parenthese(chaine)
tant que le chaine[0] = "/"
{
supprime le 1er caractere
droite=parenthese(chaine)
gauche *= droite
}
return (gauche)
}

double parenthese(*chaine)
{
si chaine[0] = '('


supprime le 1er caractere
resultat= expression(chaine)
si chaine[0] <> ')' alors erreur
sinon
supprime le 1er caractere
}
sinon
{
resultat=variable(chaine)
}
return resultat
}


double variable(*chaine)
{
si chaine[0] = "X" alors
{
supprime le 1er caractere
return X // tu retournes sa valeur
}

return chiffre(chaine)
}

double chiffre(*chaine)
{
si debut de chaine est un chiffre de x longeur alors
return (ce chiffre) a toi de lire les caracteres jusqua ce que le
caractere qui suit ne soit plus un chiffre ou une virgule (ou .) et noublie
pas de les supprimer au fur et a mesure
sinon
erreur "erreur dans lexpression"
}





"Eric" a écrit dans le message news:
c9a937$56q$
Bonjour !

J'aimerai savoir si il existe une librairie ou une classe permettant de
réaliser du calcul formel autre que Blitz (ne marche pas avec VC++ 6, et
j'utilise les MFC pour l'interface graphique)

Je dois faire saisir une equation par l'utilisateur.
Par exmple, l'utilisateur entre dans une chaine de caractere du genre
"2*x+3" ou encore "5*(3+x)/x"
Je dois pouvoir calculer la derivée, ainsi que l'image des fonctions
entrées

en faisant varier X.
Puis l'afficher.


Cordialement

Merci

Eric





Avatar
syn-ack
et tu l'appelles par

resultat=expression("3*4-(5+X)*4,5141");




"Eric" a écrit dans le message news:
c9a937$56q$
Bonjour !

J'aimerai savoir si il existe une librairie ou une classe permettant de
réaliser du calcul formel autre que Blitz (ne marche pas avec VC++ 6, et
j'utilise les MFC pour l'interface graphique)

Je dois faire saisir une equation par l'utilisateur.
Par exmple, l'utilisateur entre dans une chaine de caractere du genre
"2*x+3" ou encore "5*(3+x)/x"
Je dois pouvoir calculer la derivée, ainsi que l'image des fonctions
entrées

en faisant varier X.
Puis l'afficher.


Cordialement

Merci

Eric





Avatar
syn-ack
dans division() se glisse une erreur

il faut remplacer
gauche *= droite
par
gauche /=droite





"syn-ack" a écrit dans le message news:
c9aiqn$n5c$
ah, bein c'est de l'evaluation d'expression.

je vais essayer de te donner une reponse a la volée, parceque ca prend bp
de

temps sinon

-il faut savoir que chaine est en fait un pointeur dans tous les
parametres

des fonctions.
-noublie pas de supprimer le 1er caractere a chque fois que tu le lis
- je nai pas geré les espaces, a toi de le faire
jai essayé de donner un exemple rapide est simple, si tu veux l'ameliorer
a

toi de te debrouiller, sinon c trop long a expliquer.



double expression(*chaine)
{
return addition(chaine)
}

double addition(*chaine)
{
gauche=soustration(chaine)
tant que le chaine[0] = "+"
{
supprime le 1er caractere
droite=soustraction(chaine)
gauche += droite
}
return (gauche)
}

double soustraction(*chaine)
{
gauche=multiplication(chaine)
tant que le chaine[0] = "-"
{
supprime le 1er caractere
droite=multiplication(chaine)
gauche -= droite
}
return (gauche)
}

double multiplication(*chaine)
{
gauche = division(chaine)
tant que le chaine[0] = "*"
{
supprime le 1er caractere
droite=division(chaine)
gauche *= droite
}
return (gauche)
}

double division(*chaine)
{
gauche = parenthese(chaine)
tant que le chaine[0] = "/"
{
supprime le 1er caractere
droite=parenthese(chaine)
gauche *= droite
}
return (gauche)
}

double parenthese(*chaine)
{
si chaine[0] = '('


supprime le 1er caractere
resultat= expression(chaine)
si chaine[0] <> ')' alors erreur
sinon
supprime le 1er caractere
}
sinon
{
resultat=variable(chaine)
}
return resultat
}


double variable(*chaine)
{
si chaine[0] = "X" alors
{
supprime le 1er caractere
return X // tu retournes sa valeur
}

return chiffre(chaine)
}

double chiffre(*chaine)
{
si debut de chaine est un chiffre de x longeur alors
return (ce chiffre) a toi de lire les caracteres jusqua ce que le
caractere qui suit ne soit plus un chiffre ou une virgule (ou .) et
noublie

pas de les supprimer au fur et a mesure
sinon
erreur "erreur dans lexpression"
}





"Eric" a écrit dans le message news:
c9a937$56q$
Bonjour !

J'aimerai savoir si il existe une librairie ou une classe permettant de
réaliser du calcul formel autre que Blitz (ne marche pas avec VC++ 6, et
j'utilise les MFC pour l'interface graphique)

Je dois faire saisir une equation par l'utilisateur.
Par exmple, l'utilisateur entre dans une chaine de caractere du genre
"2*x+3" ou encore "5*(3+x)/x"
Je dois pouvoir calculer la derivée, ainsi que l'image des fonctions
entrées

en faisant varier X.
Puis l'afficher.


Cordialement

Merci

Eric









Avatar
syn-ack
c quoi ta fonction integrer? si tu mexplique je peux peut etre y repondre
"Eric" a écrit dans le message news:
c9aem7$9k0$
Bon, je vais pas jouer les difficiles !
Juste quelque chose qui evalue la chaine de caracteres !
Tant pis pour la fonction integrer :(

Ou meme un ActiveX