[Python et Lua] Développement décimal d'une fraction

Tout ce qui concerne notamment les outils de calcul numérique, de calcul formel ou de géométrie.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
MB
Administrateur
Administrateur
Messages : 7898
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

[Python et Lua] Développement décimal d'une fraction

Message non lu par MB »

Bonjour,

Pour ceux que ça pourrait intéresser, voici une fonction permettant d'obtenir le développement décimal (propre) d'une fraction de numérateur a et de dénominateur b.

Code : Tout sélectionner

def divide(a,b):
    s = '-' if a*b < 0 else ''
    q,r = divmod(abs(a),abs(b))
    qlist = [s,str(q),'.']
    rlist = []
    while r not in rlist:
        rlist.append(r)
        q,r = divmod(r*10,abs(b))
        qlist.append(str(q))
    qlist.insert(rlist.index(r)+3,'(')
    qlist.append(')')
    return ''.join(qlist).replace('(0)','').rstrip('.')
Exemple d'utilisation.

Code : Tout sélectionner

>>> divide(123,14)
8.7(857142)
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2150
Inscription : samedi 29 décembre 2007, 00:58

Re: [Python] Développement décimal d'une fraction

Message non lu par projetmbc »

Merci.

Je vais le convertir en Lua pour faire une petite macro LuaLaTeX pour rédiger des divisions décimales "propres" de fractions rationnelles.

Il faut juste que je dégage du temps libre dans mon emploi du temps de prof et étudiant en même temps...
MB
Administrateur
Administrateur
Messages : 7898
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [Python] Développement décimal d'une fraction

Message non lu par MB »

projetmbc a écrit : lundi 07 novembre 2022, 09:23 Je vais le convertir en Lua pour faire une petite macro LuaLaTeX pour rédiger des divisions décimales "propres" de fractions rationnelles.
C'est ce que je compte faire également.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2150
Inscription : samedi 29 décembre 2007, 00:58

Re: [Python] Développement décimal d'une fraction

Message non lu par projetmbc »

Dans ce cas, voici trois méthodes que j'ai retenues pour la mise en forme de la division.

Code : Tout sélectionner

\documentclass[12pt]{article}

\usepackage{tikz}
\usepackage{nicematrix}

\begin{document}

\begin{tabular}{cccc}
    \cline{4-4}
    1 & 2 && \multicolumn{1}{|c}{34}
    \\
    \cline{4-4}
      & 1 && \multicolumn{1}{|c}{23}
    \\
    \cline{4-4}
      & 1 & 3
\end{tabular}

\begin{NiceTabular}{cccc}
    1 & 2 && \Block[borders = {left,top,bottom}]{}{34}
    \\
      & 1 && 23
    \\
      & 1 & 3
\end{NiceTabular}

\begin{NiceTabular}{cccc}
    1 & 2 && 34
    \\
      & 1 && 23
    \\
      & 1 & 3
    \CodeAfter
        \tikz \draw (1-|5) -| (2-|4) -- (2-|5) ;
\end{NiceTabular}

\end{document}
La dernière me semble la meilleure. De plus, avec NiceTabular, on a accès à TikZ pour par exemple encadrer des nombres.

Si tu arrives à coder cela avant moi, ce qui devrait être le cas vu le peu de temps libre que j'ai, pourrais-je "piller" ton code pour l'intégrer dans mon projet typensee-latex qui est pour le moment ici ? Je te citerais bien entendu.

Sur ce, le lycée m'appelle...
MB
Administrateur
Administrateur
Messages : 7898
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [Python et Lua] Développement décimal d'une fraction

Message non lu par MB »

Pour l'instant je comptais juste me contenter d'une macro latex permettant d'obtenir le développement décimal d'une fraction avec la notation solution soulignée pour l'éventuelle partie périodique (voir ce sujet).

Voici une proposition de code lua, qui me semble fonctionnelle.

Code : Tout sélectionner

function divmod(a,b)
    local q = 0
    local r = a
    while not (r < b) do
        q = q+1
        r = r-b
    end
    return q,r
end

function contains(list,x)
    for k,v in pairs(list) do
        if v == x then return true end
    end
    return false
end

function index(list,x)
    for k,v in pairs(list) do
        if v == x then return k end
    end
end

function display(list)
    s = ''
    for k,v in pairs(list) do
        s = s .. v
    end
    s = string.gsub(s,'(%.?)%(0%)','')
    return s
end

function divide(a,b)
    local s = a*b < 0 and '-' or ''
    local q,r = divmod(math.abs(a),math.abs(b))
    local qlist = {s,tostring(q),'.'}
    local rlist = {}
    while not contains(rlist,r) do
        table.insert(rlist,r)
        q,r = divmod(r*10,math.abs(b))
        table.insert(qlist,tostring(q))
    end
    table.insert(qlist,index(rlist,r)+3,'(')
    table.insert(qlist,')')
    return display(qlist)
end
Au final, j'ai préféré recoder une fonction divmod, sans utiliser a%b qui semble définie par a - math.floor(a/b)*b.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.