Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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

#3 16-08-2014 17:33:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 944

Re : Programmation résolution d'équations du 1er degré à une inconnue

Re,

C'était donc une grosse blague ! Et je suis tombé dans le panneau...

@+


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-4(3-x)-5+2(x-2)-11x+1=-2x-3(x-1)

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-5(2x-3)+2x-4(x-2)=2(x-5)-1

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 :

#!/usr/bin/python
# -*- 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

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
soixante quinze plus soixante treize
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums