Besoin d'aide — Les-mathematiques.net The most powerful custom community solution in the world

Besoin d'aide

Bonsoir, moi c'est Alex, je suis artisan carrossier réparateur et j'ai besoin d'un coup de pouce. J’espère ne pas venir polluer votre forum.
Mon problème.
Je travaille comme sous-traitant pour une concession automobile, j'envoie les factures au fur et à mesure des chantiers terminés et un relevé de factures à chaque fin de mois. La concession nous fait des virements qui ne sont pas évident à déchiffrer. Par exemple, si mon relevé compte 10 factures, cela fait une somme, la concession me règle une autre somme, j'ai essayé de calculer quelles factures sont égales au règlement et savoir lesquelles ne sont pas réglées, mais j'ai l'impression d'avoir essayé dans beaucoup de sens sans trouver la solution.
En espérant avoir été à peu près clair.
Merci d'avance, bonne soirée.

Réponses

  • Salut, je ne suis pas sûr de comprendre le problème, on ne te paye pas toutes tes factures c’est ça ?
  • Ah je crois que j’ai saisi on ne te paye toutes tes factures mais tu aimerais bien savoir lesquelles ne sont pas payées avec comme seules informations le montant de chaque facture et la somme versée. J’y réfléchis !
  • Première idée : je te bricole un programme qui essaye brutalement toutes les possibilités de factures payées et qui te permet de savoir lesquelles ne sont pas payées (je ferai l’hypothèse que toutes les factures ont des montants différents, mathématiquement ce n’est pas anodin comme hypothèse mais en pratique je suis sûr que c’est ton cas). Si ça te va, ça me va.
  • Bonsoir Boole et Bill, merci de te pencher sur mon problème.
    Il y des facture qui ont le même montant, car souvent le même travail.
    J'ai rarement d'explications concrètes quand je demande à leur comptabilité ;-)
  • Je modélise (pour savoir si j'ai bien compris).
    On a dix montants (factures) :
    $f_1$, $f_2$, $f_3$, $f_4$, $f_5$, $f_6$, $f_7$, $f_8$, $f_9$, $f_{10}$.

    La somme $S$ est : $S = f_1+f_2+f_3+f_4+f_5+f_6+f_7+f_8+f_9+f_{10}$.

    On paye seulement quelques factures et cela fait une somme partielle $P$.

    Comment savoir les factures réglées ?

    Exemple avec quatre nombres (je m'autorise quelques libertés et on dit que tout est en euros) :
    Les factures : $5$, $6$, $7$, $8$.

    $S=5+6+7+8=26$.

    On règle $P=13$.

    Quelles factures a-t-on réglées ?

    Réponse : il y a deux possibilités dans mon exemple (bien ou mal) choisi :-P.
    On a peut-être réglé les factures de 5 et de 8. Ou bien les factures de 6 et de 7.


    Remarque importante : si les montants ne sont pas trop "ronds" et contiennent "plein de chiffres" ($1345,78 €$ par exemple), ce serait un malheureux hasard qu'on ne puisse pas trouver lesquels ont été réglés.
  • Deuxième idée (laborieuse) : on doit essayer beaucoup de possibilités : je note $x_1,...,x_n$ le prix des $n$ factures (on suppose que ce sont des réels positifs deux à deux distincts), $S$ la somme versée et $T$ la somme des $x_k$. On peut procéder comme suit :
    On calcule $S+x_k$ en faisant varier $k$. Si on tombe sur $T$, c’est que la facture $k$ n’a pas été payée et que c’est la seule.
    On calcule $S+x_i+x_j$ en faisant varier $i$ et $j$. Si on tombe sur $T$, c’est que les factures $i$ et $j$ n’ont pas été payées et que ce sont les seules.
    On recommence avec trois factures, quatre factures etc...

    Edit : ça ne marche pas tout à fait, grâce à Dom je me rends compte que l’on peut avoir plusieurs résultats possibles de factures non réglées.
  • Wouaouh ! Si le même montant peut figurer sur deux factures ça va compliquer les choses ! Ton problème est super intéressant.
  • Bonsoir.

    Ne peut-on pas plutôt partir d'un triage par ordre croissant de montant des factures et faire des soustractions successives des montants inférieurs à ce qui a été réellement payé ?

    A bientôt.

    Cherche livres et objets du domaine mathématique :

    Intégraphes, règles log et calculateurs électromécaniques.

  • Dreamer peux-tu préciser ton idée s’il te plaît ?
  • J’ai une autre piste : puisque que ce sont des prix, ce sont des entiers si on les multiplie par $100$. On peut donc supposer que ce sont des entiers. Je pense que raisonner modulo chaque montant permet de répondre à la question « le montant $x_k$ a-t-il été payé ? ». Ce n’est qu’une intuition.

    Edit : si c’est une bonne piste il faudra déplacer ce fil dans arithmétique, et donc ce fil aura bougé dans quatre sous-forums différents. Un record ? :-D
  • Bonjour,

    @Alex89,

    Le mieux est de référencer tes factures et de demander au service paiement d'écrire les références des factures payées.

    Pour ton cas pratique, il n'y a pas de solution satisfaisante. Garde une liste de toutes tes factures et une liste de tous les paiements, pour avoir une idée des paiements à venir.

    Une autre idée est de changer le montant des factures, par exemple au lieu de facturer 1 200.00 euros, tu factures 1 200,01 euros. La prochaine facture au lieu de 1400,47 tu factures 1400,10 et pour la troisième au lieu de 1000,50 tu factures 1000,02. Et tu as compris que la prochaine est ...,20.

    Quand tu reçois le payment qui termine par xxx.12 tu sais que c'est sûrement 1400,10 +1000,02. Ce n'est pas infallible mais c'est pratique.
  • Par différence des factures acquittées et du total reçu en paiement il suffit ensuite de regarder le montant de cette différence qui va correspondre aux total des factures non payées; cela ne doit pas être difficile à vérifier .
  • Bonjour

    Franchement, avec 10 factures, il y a $2^{10}=1024$ possibilités puisque chaque facture est ou n'est pas dans la somme finale. C'est très peu. Donc je fais tous les cas possibles, dans cette situation.

    @Alex89: quel est ton système (windows, Linux, Mac) ? Quel est ton langage de programmation ?
  • Bonjour,
    Effectivement 1024 opérations, c'est que dalle.
    Voici une possibilité en Python qui retourne tous les combinaisons possibles de factures payées.
    factures = eval(input("Liste des factures (exemple de syntaxe : [10.10, 40.95]) :"))
    l = len(factures)
    somme = eval(input("Somme payée :"))
    
    def chiffre_binaire(k,i):
        return (k % 2**(i+1)) - (k % 2**i) == 2**i
    
    for k in range(2**l):
        s = 0
        for i in range(l):
            if chiffre_binaire(k,i):
                s += factures[i ]
        if somme == s:
            print("\nLa liste des factures payées peut être (avec certitude si c'est le seul résultat qui s'affiche) :")
            for i in range(10):
                if chiffre_binaire(k,i):
                    print("Facture numéro",i,"d'un montant de",factures[i ],"€")
    

    Pour 10 factures, c'est immédiat. Pour 20 factures, il faut attendre une minute (avec mon ordi).
  • As-tu des difficultés à savoir ce que tu dois et ce qu’on te doit ?
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!