Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 12-08-2014 17:48:42
- Yoshka
- Invité
Programmation résolution d'équations du 1er degré à une inconnue
Bonjour à tous,
je cherche un programmeur en mathématique pour quelques équations du premier degré.
Il s'agit d'une recherche personnelle. La programmation est je pense très simple, mais je n'ai aucune notion de programmation et je préfère rémunérer quelqu'un qui pourrait la réaliser assez vite plutôt que de perdre mon temps à apprendre moi-même à programmer pour si peu. Je suis sur Paris. Merci beaucoup !
Dernière modification par yoshi (11-10-2014 16:06:01)
#2 12-08-2014 18:23:03
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Programmation résolution d'équations du 1er degré à une inconnue
Salut,
Ici, on répond parce qu'on aime ça, pas pour l'argent : si tu aimes le distribuer, il y a tant d'organismes caritatifs qui seraient heureux de t'en débarrasser... ^_^
Bon, toute plaisanterie mise à part, si tu précisais ta pensée ?
Equations du premier degré à une inconnue dis-tu ?
Avec parenthèses? Sans parenthèses ? Avec dénominateurs ? Sans dénominateur ?
Tu veux la valeur exacte de la solution ?
J'ai déjà programmé quelque chose a priori d'un peu plus "trapu"..
Va voir là : http://www.bibmath.net/forums/viewtopic.php?id=4174
Puis reviens avec un "cahier des charges" précis...
Et je penserai à toi.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 06-10-2014 12:11:33
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Programmation résolution d'équations du 1er degré à une inconnue
Bonjour,
Le défi m'intéresse (j'aime bien réinventer la roue) même si la programmation n'est pas si simple et demande une analyse assez fine des contraintes...
Donc je me suis lancé dans l'écriture d'un programme de résolution d'équations du 1er degré à une inconnue que je prévois en 3 étages : 1. 1. Sans parenthèses ni dénominateurs,
2. Avec Parenthèses mais sans dénominateurs,
3. Avec Parenthèses et dénominateurs.
J'ai réussi la mise à feu du 1er étage :
8x-5-9+2x-3-9x+1-5=-2x+3-3x-40
8x+2x-9x+2x+3x = 5+9+3-1+5+3-40
6x = -16
Solution : x = -8/3
L'écriture du 2e étage est bientôt terminée, sa mise à feu devrait arriver d'ici la fin de la semaine...
Je ne publierai le code que lorsque j'en aurai terminé (au moins avec le 2e étage).
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#5 11-10-2014 16:09:24
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Programmation résolution d'équations du 1er degré à une inconnue
RE,
L'écriture du 2e étage a pris plus longtemps que prévu : j'ai changé 4 fois d'avis sur la méthode, plus un tout petit bug concernant finalement un indice de début de boucle qui m'a pris la journée d'hier pour l'identifier.
Quelques sorties :
3-12+4x-5+2x-4-11x+1=-2x-3x+3
4x+2x-11x+2x+3x = -3+12+5+4-1+3
0x = 20
Equation impossible : il n'y a pas de solution
3-10x+15+2x-4x+8=+2x-10-1
-10x+2x-4x-2x = -3-15-8-10-1
-14x = -37
Solution : x = 37/14
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 18-10-2014 08:35:10
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Programmation résolution d'équations du 1er degré à une inconnue
Bonjour,
Bien que le code ne soit pas du tout optimisé (il est même très moche) - je ne le reprendrais qu'après avoir implémenté la résolution avec dénominateur - il est parfaitement fonctionnel.
Y figure quelques exemples.
Voilà le code provisoire :
# -*- coding: UTF-8 -*-
from fractions import Fraction,gcd
def resout(Eq,Cof_x,Cof_cst):
if Eq[0]=="+":
Eq=Eq[1:]
print (Eq)
print ()
for i,nb in enumerate(Cof_x):
if nb==1:
if i==0:
print("x",end="")
else:
print ("+x",end="")
elif nb==-1:
print("-x",end="")
else:
if nb>0:
if i==0:
print (str(nb)+"x",end="")
else:
print ("+"+str(nb)+"x",end="")
else:
print (str(nb)+"x",end="")
print (" = ",end="")
for i,nb in enumerate(Cof_cst):
if nb>0:
if i==0:
print (str(nb),end="")
else:
print ("+"+str(nb),end="")
else:
print (str(nb),end="")
a,b=sum(Cof_x),sum(Cof_cst)
print()
print()
print (str(a)+"x = "+str(b))
print()
if a==0 :
if b==0:
print ("Equation indéterminée : il y a une infinité de solutions")
else :
print ("Equation impossible : il n'y a pas de solution")
else:
if b==0:
print("Solution : x = 0")
else:
print ("Solution : x =",Fraction (b,a))
def traite_equa_nue(Equa):
Eq_List,Cof_x,Cof_cst=Equa.split("="),[],[]
M1,M2=Eq_List[0],Eq_List[1]
for p in range(2):
Eq_List[p]=Eq_List[p].replace("+x","+1x").replace("-x","-1x")
m=Eq_List[p]
if Eq_List[p][0]=="+":
Eq_List[p]=m[1:]
for p in range(2):
ch,s="",1-2*p
for i,char in enumerate(Eq_List[p]):
if char =="x":
Cof_x.append(s*int(ch))
ch=""
elif char in"+-":
if ch=="":
ch+=char
else:
Cof_cst.append(-s*int(ch))
ch=char
else:
ch+=char
if not ch=="":
Cof_cst.append(-s*int(ch))
resout(Equa,Cof_x,Cof_cst)
def Equa_nue():
# Equations sans parenthèses ni dénominateurs
Eq="8x-5-9+2x-3-9x+1-5=-2x+3-3x-40"
traite_equa_nue(Eq)
def traite_parenth(cof,P,no):
ch,P1,cof_x,cof_cst="","","",""
for i,char in enumerate(P):
if char=="x":
cof_x=int(ch)*cof
sgn="+"*(cof_x>0)
P1+=sgn+str(int(ch)*cof)+"x"
ch=""
elif char in"+-":
if ch=="":
ch+=char
else:
cof_cst=int(ch)*cof
sgn="+"*(cof_cst>0)
P1+=sgn+str(int(ch)*cof)
ch=char
elif i==len(P)-1:
ch+=char
cof_cst=int(ch)*cof
sgn="+"*(cof_cst>0)
P1+=sgn+str(cof_cst)
else:
ch+=char
return P1
def vers_equa_nue():
chfr,Eq,Mnm="0123456789","",[]
# Equ="3-4(3-x)-5+2(x-2)-11x+1=-5x-3(x-1)"
# Equ="3(2x-7)-4(x-2)=2(x-5)+1"
# Equ="3(2x-7)-4=2(x-2)-1"
Equ="3-5(2x-3)+2x-4(x-2)=2(x-5)-1"
Equa,Eqt,Cof_x,Cof_cst="",["","=",""],[],[]
print(Equ,"\n")
MB=Equ.split("=")
for p in range(2):
Pr,Prth,Eq=[],[],""
M=MB[p]
M=M.replace("+(","+1(").replace("-(","-1(")
M=M.replace("+x","+1x").replace("-x","-1x")
M=M.replace("(x","(1x").replace("(-x","(-1x")
lm=len(M)
if M[0]=="+":
M=M[1:]
for i,cr in enumerate(M):
if cr=="(":
a=i
if cr==")":
Prth.append((a,i))
Pr.append(M[a+1:i])
for no,(a,b)in enumerate(Prth):
ch=""
if no>0:
db=b1+1
else:
db=0
ch=""
b1=b
F=M[db:a+1]
for i,char in enumerate(F):
if char in "+-":
if ch=="":
ch+=char
else:
Mnm.append(ch)
ch=char
elif char=="(":
cof=int(ch)
P=Pr[no]
E="".join(Mnm)
Eq+=E
P1=traite_parenth(cof,P,no)
Mnm=[]
Eq+=P1
else:
ch+=char
if b<len(M):
Eq+=M[b+1:]
Eqt[2*p]=Eq
Equa="".join(Eqt)
traite_equa_nue(Equa)
Pos_x,Signes,Prth,Deno,Cof_x,Cof_cst=[[],[]],[[],[]],[[],[]],[[],[]],[],[]
# Equa_nue()
vers_equa_nue()
Code écrit en Python 3.4
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#7 17-12-2014 18:57:46
- Yoshka
- Membre
- Inscription : 15-12-2014
- Messages : 1
Re : Programmation résolution d'équations du 1er degré à une inconnue
Bonjour Yoshi,
merci de tes réponses, je suis désolé de ne pas les avoir vues plus tôt, je n'en ai pas été informé par mail !
Je suis retombé sur le forum car je continue de chercher un programmeur sur Paris que je puisse rencontrer. En effet les équations sont simples mais nombreuses, et j'aimerais avoir des avis sur plusieurs points.
Bref, je continue à chercher un mathématicien-programmeur qui ne craint pas les contacts humains réels ;)
Si tu es intéressé ou si tu as une piste pour trouver quelqu'un, merci de m'envoyer un mail.
Cordialement,
Yoshka.
Hors ligne
#8 17-12-2014 21:30:28
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 944
Re : Programmation résolution d'équations du 1er degré à une inconnue
Bonsoir,
J'ai eu beaucoup d'autres chats à fouetter depuis et donc la mise à feu du 3e étage est reportée...
Dans le 1er étage, je résous les équations du 1er degré à une inconnue du type :
[tex]2x-3+5-x=-3x+2+x-6[/tex]
Les cas où on tombe
sur 0x = 0 infinité de solutions
sur 0x = k (différent de 0) impossible, pas de solutions
sont implémentés...
Le 2e étage permet de résoudre :
[tex]-x+5(x-2)+3x=3(2x-1)+7[/tex]
Le 3e étage permettra de résoudre :
[tex]-2x+3-\frac{2(x-3)}{2}+\frac{5x-2}{6}=\frac{3x+2}{9}-5[/tex]
Qu'est-ce que tu veux de plus ?
Parce que tu avais écrit :
je cherche un programmeur en mathématique pour quelques équations du premier degré.
Ce à quoi j'avais répondu :
reviens avec un cahier des charges précis
Toujours du premier degré on peut imaginer les systèmes d'équations comme système de 2 équations à 2 inconnues ou système de 3 équations à 3 inconnues...
Là, deux options se présentent, soit on fait comme en 3e 'pour 2 équas) et on est didactique, soit on utilise les formules de résolution, si le déroulement des manipes n'a pas d"intérêt et que seul le résultat compte.
Techniquement, ce n'est pas difficile à programmer.
Ce qui est ardu, c'est de faire exécuter les manœuvres par un programme qui soit capable de différencier 2 et 2x, ne fasse pas la faute de développement avec -3+5(x-2) par ex, et donc de trouver ce que le programme doit faire pour ne pas se tromper : c'est déjà de l'Intelligence artificielle...
Bon, on réinvente quand même la roue puisque des programmes comme Xcas ou WxMaxima par exemple sont capables de le faire et au delà du degré 2...
Le moteur de ce forum, FluxBB, n'est pas conçu pour avertir de la réponse donnée par mail... Peut-être dans une prochaine version ?
Il te faut donc suivre le fil de la discussion que tu as lancée, par toi-même...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne