Page 1 sur 2

Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 11:35
de Wistaro
Bonjour à tous!

Aujourd'hui je viens vous présenter mon nouveau programme, plutôt utile!


Ce programme est un pack de logiciels permettant de résoudre des équations de niveau collège/lycée.

Il se compose de 3 parties:

1) Un solveur d'équation de premier degré, en mode pas à pas (résolution commentée). Vous trouverez plus d'information au sujet de ce logiciel ici: archives_voir.php?id=85048

2) Un solveur de système d'équation à 2 inconnues

3) Un logiciel permettant de trouver les racines d'un trinôme du second degré.

ScreenShoot
Image

Lien direct
archives_voir.php?id=131151



Code source:

Code: Tout sélectionner
Lbl A
AxesOff:GridOff
DelVar XDelVar L26->dim(L2
1->C
ClrHome
Output(4,1,"EQUATIONS SOLVER
Output(5,1,"v2.0 - Wistaro
For(A,1,16
Output(6,A,"+
Output(3,17-A,"+
End
Pause
Menu("EQUATIONS SOLVER","1er degre",1,"Systemes",S,"Polynomes",P,"Quitter",Q
Lbl Q:Stop
Lbl S:ClrDraw
{0,0,0,1}->|LVER
{0,0,0,1}->|LVEC:{0,0,0,1}->|LVEB
{0,0,0,1}->|LVEA:{0,0,0,1}->|LVED
ClrDraw:Text(1,1,"Commencez par reduire"
Text(7,1,"votre systeme comme":Text(14,1,"cet exemple:"
Text(30,5,"3X-5Y=2":Text(37,5,"7X+3Y=12"
Text(50,1,"X + Y = n":Text(55,1,"X + Y = n":Pause
Lbl G:ClrHome:ClrHome
Output(5,1,"Equation n^^o":Output(5,12,|LVER(4)
Pause :ClrHome
Disp "nb de X":Input "",X
Output(8,1,X:Output(8,3,"X"
Disp "nb de Y":Input "",Y
Output(8,1,X:Output(8,3,"X"
Output(8,5,"+":Output(8,7,Y
Output(8,9,"Y":Disp "nb d'unitees"
Input "",U:Output(8,1,X
Output(8,3,"X":Output(8,5,"+"
Output(8,7,Y:Output(8,9,"Y"
Output(8,11,"=":Output(8,13,U
Pause
If |LVER(4)=1:Then
{X,Y,U,2}->|LVER:Goto G:End
If |LVER(4)=2:Then
{X,Y,U,2}->|LVEC
End:Goto R
Lbl R:ClrDraw
ClrHome
{|LVER(1),|LVEC(1)}->|LVEA:{|LVER(2),|LVEC(2)}->|LVEB
{|LVER(3),|LVEC(3)}->|LVED
List>matr(|LVEA,|LVEB,|LVED,[A]
rref([A])->[A]:ClrHome
[A](1,3)->A
[A](2,3)->B:Disp "Le couple","solution est:"
Output(6,1,"X=
Output(6,4,A
Output(7,1,"Y=
Output(7,4,B
Pause
DelVar |LVEADelVar |LVEBDelVar |LVECDelVar |LVEDDelVar |LVER
ClrHome:Goto A
Lbl P:ClrHome
Disp "AX^^2+BX+C
Disp "
Prompt A,B,C
If A=0:Then
Disp "Fonction affine"," S= ",~(B/C):Stop:End
B^^2-4AC->D
(Ans>0)+(Ans>=0)
Disp "Il y a ",sub("012",Ans+1,1)+" racines
If Ans:Then
.5A^~1seq(~B+C*sqrt(D)>Frac,C,1-Ans,1,2->L1
Pause L1:
Else:Pause
End
Goto A
Lbl 1:ClrHome
DelVar L1
Input "?>",Str1
ClrHome
Disp "PLEASE WAIT...
inString(Str1,"="->P
If not(P:Then
length(Str1)+1->P
Str1+"=0"->Str1
End
length(Str1->L
Str1->Str9
Lbl 9
Str9->Str1
If C=1:Then
sub(Str9,1,P-1->Str1
length(Str1->V
expr(Str1->L2(C+2
End
If C=2:Then
inString(Str9,"=")->P
sub(Str9,P+1,length(Str9)-P->Str1
length(Str1->V
expr(Str1->L2(C+2
End
If not(inString(Str1,"X"):Then
{0}->L1
Goto 6
End
1->T
Lbl 5
length(Str1->V
If inString(Str1,"X":Then
inString(Str1,"X"->A
Repeat Str3="+" or Str3="-" or A=1
If A>1:A-1->A
sub(Str1,A,1)->Str3
End
If A=1:sub(Str1,1,inString(Str1,"X")-A->Str4
If A>1:sub(Str1,A+1,inString(Str1,"X")-(A+1)->Str4
End
T->dim(L1
sub(Str4,1,1
If Ans="+" or Ans="-" or Ans="*" or Ans="/":sub(Str4,2,length(Str4)-A)->Str4
expr(Str4->L1(T
inString(Str1,"X"->P
If V-P:Then
inString(sub(Str1,P+1,V-P),"X")->Q:Else:Goto 6:End
If V>P and Q
Then
sub(Str1,P+1,V-P)->Str1
T+1->T
Goto 5
End
Lbl 6:ClrHome
ClrDraw
DelVar Esum(L1->L2(C
If C=1:Then
2->C:Goto 9
End
L2(1)-L2(2->A
L2(4)-L2(3->B
If A<0:Then
~A->A:~B->B:End
ClrHome
DelVar {Y1}
Text(0,0,Str9
Text(7,0,"<=> ",L2(1),"X+",L2(3),"=",L2(2),"X+",L2(4
Text(14,0,"<=> ",A,"X+",L2(3),"=",L2(4)
Text(21,0,"<=> ",A,"X=",B
If not(A:Goto 8
Text(28,0,"<=> X="
If not(fPart(B/A:Then
Text(47,0,B/A
Else
If not(fPart(A)) and not(fPart(B):Then
If A<0:Then:~A->F:Else:A->F:End
If B<0:Then:~B->G:Else:B->G:End
A/gcd(F,G)->A
B/gcd(F,G)->B
End
Text(35,0,B
Text(49,0,A
StorePic 1
If A<0:Then:~A->A:1->E:End
If B<0:Then:~B->B:1->E:End
max({A,B->M
{0,1->L1:{0,M->L2
LinReg(ax+b) L1,L2,{Y1}
Equ>String({Y1},Str1
sub(Str1,1,length(Str1)-3->Str1
DelVar {Y1}
For(D,0,length(Str1)+E
Text(42,3D,"-
End
Text(57,0,"=",B/A
RecallPic 1
End
Pause :ClrDraw
Disp "
Stop
Lbl 8
If L2(3:Text(30,0,"S= <ensemble vide>
If not(L2(3:Then
Text(30,0,"S=   R
Line(~7.8,0,~7.8,~1.2
End
Pause :Goto A

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 12:13
de Mingerton
Show/Hide spoilerAfficher/Masquer le spoiler
Tiens, comme l'autre jour sur Tout82 ça ne t'a pas plus que personne n'ait testé Clash of Clans TI, je teste celui ci pour me rattraper. Désolé ça d'habitude je prends toujours le temps de tester les nouveautés, mais bon c'est pas toujours possible ;)


Comme toujours c'est un code propre, rien à dire là dessus. Mais il reste deux trois améliorations à ajouter en beta :
- La solution de l'équation du premier degré s'affiche très loin de sa place destinée ;
- Les solutions toutes confondues ne sont pas en forme fractionnaire ;
- L'écran ne s'efface pas après usage.

(Testé avec jstified de Cemetech)

Je ne vais pas me lancer sur des optimisations à deux octets, mais dans le code que j'ai testé je les ai effectuées. Le code ressemble donc à ça :

Code: Tout sélectionner
Lbl A
AxesOff:GridOff
DelVar XDelVar L26->dim(L2
1->C
ClrHome
Output(4,1,"EQUATIONS SOLVER
Output(5,1,"v2.0 - Wistaro
For(A,1,16
Output(6,A,"+
Output(3,17-A,"+
End
Pause
Menu("EQUATIONS SOLVER","1er degre",1,"Systemes",S,"Polynomes",P,"Quitter",Q
Lbl Q:Stop
Lbl S:ClrDraw
{0,0,0,1}->|LVER
{0,0,0,1}->|LVEC:{0,0,0,1}->|LVEB
{0,0,0,1}->|LVEA:{0,0,0,1}->|LVED
ClrDraw:Text(1,1,"Commencez par reduire"
Text(7,1,"votre systeme comme
Text(14,1,"cet exemple:
Text(30,5,"3X-5Y=2
Text(37,5,"7X+3Y=12
Text(50,1,"X + Y = n
Text(55,1,"X + Y = n
Pause
Lbl G:ClrHome:ClrHome
Output(5,1,"Equation n^^o
Output(5,12,|LVER(4
Pause :ClrHome
Disp "nb de X
Input "",X
Output(8,1,X:Output(8,3,"X
Disp "nb de Y
Input "",Y
Output(8,1,X:Output(8,3,"X
Output(8,5,"+
Output(8,7,Y
Output(8,9,"Y
Disp "nb d'unitees
Input "",U:Output(8,1,X
Output(8,3,"X
Output(8,5,"+
Output(8,7,Y:Output(8,9,"Y
Output(8,11,"=
Output(8,13,U
Pause
If |LVER(4)=1:Then
{X,Y,U,2}->|LVER:Goto G:End
If |LVER(4)=2:Then
{X,Y,U,2}->|LVEC
End:Goto R
Lbl R:ClrDraw
ClrHome
{|LVER(1),|LVEC(1)}->|LVEA:{|LVER(2),|LVEC(2)}->|LVEB
{|LVER(3),|LVEC(3)}->|LVED
List>matr(|LVEA,|LVEB,|LVED,[A]
rref([A])->[A]:ClrHome
[A](1,3)->A
[A](2,3)->B:Disp "Le couple","solution est:"
Output(6,1,"X=
Output(6,4,A
Output(7,1,"Y=
Output(7,4,B
Pause
DelVar |LVEADelVar |LVEBDelVar |LVECDelVar |LVEDDelVar |LVER
ClrHome:Goto A
Lbl P:ClrHome
Disp "AX^^2+BX+C
Disp "
Prompt A,B,C
If A=0:Then
Disp "Fonction affine"," S= ",~(B/C
Stop
End
B^^2-4AC->D
(Ans>0)+(Ans>=0)
Disp "Il y a ",sub("012",Ans+1,1)+" racines
If Ans:Then
.5A^~1seq(~B+C*sqrt(D)>Frac,C,1-Ans,1,2->L1
Pause L1:
Else:Pause
End
Goto A
Lbl 1:ClrHome
DelVar L1
Input "?>",Str1
ClrHome
Disp "PLEASE WAIT...
inString(Str1,"="->P
If not(P:Then
length(Str1)+1->P
Str1+"=0"->Str1
End
length(Str1->L
Str1->Str9
Lbl 9
Str9->Str1
If C=1:Then
sub(Str9,1,P-1->Str1
length(Str1->V
expr(Str1->L2(C+2
End
If C=2:Then
inString(Str9,"=")->P
sub(Str9,P+1,length(Str9)-P->Str1
length(Str1->V
expr(Str1->L2(C+2
End
If not(inString(Str1,"X
Then
{0}->L1
Goto 6
End
1->T
Lbl 5
length(Str1->V
If inString(Str1,"X
Then
inString(Str1,"X"->A
Repeat Str3="+" or Str3="-" or A=1
If A>1:A-1->A
sub(Str1,A,1)->Str3
End
If A=1:sub(Str1,1,inString(Str1,"X")-A->Str4
If A>1:sub(Str1,A+1,inString(Str1,"X")-(A+1)->Str4
End
T->dim(L1
sub(Str4,1,1
If Ans="+" or Ans="-" or Ans="*" or Ans="/":sub(Str4,2,length(Str4)-A->Str4
expr(Str4->L1(T
inString(Str1,"X"->P
If V-P:Then
inString(sub(Str1,P+1,V-P),"X"->Q:Else:Goto 6:End
If V>P and Q
Then
sub(Str1,P+1,V-P->Str1
T+1->T
Goto 5
End
Lbl 6:ClrHome
ClrDraw
DelVar Esum(L1->L2(C
If C=1:Then
2->C:Goto 9
End
L2(1)-L2(2->A
L2(4)-L2(3->B
If A<0:Then
~A->A:~B->B:End
ClrHome
DelVar {Y1}
Text(0,0,Str9
Text(7,0,"<=> ",L2(1),"X+",L2(3),"=",L2(2),"X+",L2(4
Text(14,0,"<=> ",A,"X+",L2(3),"=",L2(4)
Text(21,0,"<=> ",A,"X=",B
If not(A:Goto 8
Text(28,0,"<=> X="
If not(fPart(B/A:Then
Text(47,0,B/A
Else
If not(fPart(A)) and not(fPart(B):Then
If A<0:Then:~A->F:Else:A->F:End
If B<0:Then:~B->G:Else:B->G:End
A/gcd(F,G)->A
B/gcd(F,G)->B
End
Text(35,0,B
Text(49,0,A
StorePic 1
If A<0:Then:~A->A:1->E:End
If B<0:Then:~B->B:1->E:End
max({A,B->M
{0,1->L1:{0,M->L2
LinReg(ax+b) L1,L2,{Y1}
Equ>String({Y1},Str1
sub(Str1,1,length(Str1)-3->Str1
DelVar {Y1}
For(D,0,length(Str1)+E
Text(42,3D,"-
End
Text(57,0,"=",B/A
RecallPic 1
End
Pause :ClrDraw
Disp "
Stop
Lbl 8
If L2(3:Text(30,0,"S= <ensemble vide>
If not(L2(3:Then
Text(30,0,"S=   R
Line(~7.8,0,~7.8,~1.2
End
Pause :Goto A


Je suis vraiment désolé mais j'ai pas eu le courage de rechercher la source du bug du X. Peut être provient-il de ces optimisations, bien que la partie concernée du code ne se trouve pas par ici d'après les labels. Pour les formes fractionnaires, n'est il pas possible d'afficher une liste en forme fractionnaire, ou sinon d'utiliser plutôt une nouvelle chaîne en y stockant le nombre sous forme fractionnaire ?

Quitte à faire un 8xp, pourquoi ne pas ajouter des accents aux mots puisque c'est possible mais pas recopiable ;) ? Cette amélioartions sera à oublier sur un 83p par contre sous peine d'avoir quelques soucis d'affichages :D

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 12:34
de scientifix
Salut :)
Très bonne idée ton programme !! Pour les systèmes tu peux utiliser le pivot de Gauss (la commande s'appelle "Rref(" je crois) comme ça l'utilisateur pourra résoudre directement des systèmes de n équations linéaire à n inconnues ;) Utilise aussi la commande "Frac" pour avoir des valeurs exactes !! Pour les autres équations tu peux utiliser la dichotomie :D
Sinon, BRAVO ;)

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 12:52
de Mingerton
scientifix a écrit:Pour les systèmes tu peux utiliser le pivot de Gauss (la commande s'appelle "Rref(" je crois) comme ça l'utilisateur pourra résoudre directement des systèmes de n équations linéaire à n inconnues

Code: Tout sélectionner
{|LVER(1),|LVEC(1)}->|LVEA:{|LVER(2),|LVEC(2)}->|LVEB
{|LVER(3),|LVEC(3)}->|LVED
List>matr(|LVEA,|LVEB,|LVED,[A]
rref([A])->[A]

;)

Je ne pense pas que Frac fonctionne si il stocke ses valeurs dans des listes, c'est pourquoi j'ai proposé une chaine ;)

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 13:12
de Wistaro
Le programme de résolution de systèmes n'est pas optimisé, en effet. Je vais corriger sa et le rendre compatible avec autant d'équations que possible (je me sert déjà du pivot de gauss).

XD Mingerton.
Dans mon programme du premier degré, la solution s'affiche sous la forme d'une fraction irréductible (si le résultat n'est pas exact). En dessous, s'affiche la valeur exacte. Impossible de gagner de la place là. Et de quel bug du X tu parles?

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 13:24
de Mingerton
Attends je te mets un screen. Toujours récupéré avec Jstified :

Screen.png
Screen.png (11.07 Kio) Vu 4767 fois

Il ne s'affiche rien pour la fraction irréductible, mais une valeur exacte s'affiche plutôt loin. J'ai pensé que c'était un bug mais peut être est-ce normal après tout ? Je ne pensais pas à un gain de place mais j'essayais de comprendre pourquoi ça faisait ça.

Sinon, du coup il faudrait appliquer la règle de la fraction irréductible dans les autres résultats non ? ;)

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 13:54
de scientifix
Pour le Pivot de Gauss j'avais vu ;) je voulais juste dire qu'au lieu de proposer seulement des systèmes de 2 équations à deux inconnus, le programme devrait avoir une commande "système d'équations linéaire" où l'utilisateur peut choisir son nombre d'équations etc ... Comme ça pas besoin d'avoir "système de 2 équations, 3 équations, 4 équations, 5 équations ... linéaires " dans le menu, il suffit juste d'avoir une ligne pour tous les systèmes dans le menu :)
Je ne sais pas si c'est très compréhensible mais en gros avoir dans le menu :

-1e degré
-2nd degré
-systèmes de n équations à n inconnues

Après tu peux utiliser la dichotomie pour résoudre tous types d'équations à 1 inconnue ... donc tu peux rajouter une fonction "solveur" dans ton programme ;)

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 18:43
de Wistaro
Mingerton : Bizarre, sa marche très bien sur ma calculatrice... Et si tu tapes le même calcul que le screen?

Scientifix: Okay, je vais voir sa, merci ;-)

Re: Solveur d'équations multi-fonctions

Message non luPosté: 23 Déc 2014, 19:20
de Adriweb

Re: Solveur d'équations multi-fonctions

Message non luPosté: 03 Jan 2015, 21:31
de Wistaro
Merci Adriweb :)