IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Fraction rationnelle irréductible


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Fraction rationnelle irréductible
    Bonjour je viens vers vous pour quelques questions !

    Je dois faire cet exercice sous python :

    Exercice 9 (Écriture fractionnaire d’un nombre décimal périodique) : On pourra utiliser l’exercice 4
    qui à partir d’un entier n associe son nombre de chiffres.

    1) Écrire une fonction pgcd qui renvoie le PGCD de deux nombres entiers.
    2) Écrire une fonction fraction qui prend en argument u un tuplet d’entiers caractérisant un nombre décimal
    périodique et qui renvoie la fraction rationnelle irréductible correspondante.
    Si x = e, d p p ... de partie entière e, de partie décimale non périodique d et périodique p, le tuplet u sera
    (e,d,p) et si x = e, p p ... n’a pas de partie décimale non périodique d, le tuplet u sera (e,p).

    Pour l'instant j'ai fait le 1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def pgcd(a,b) :  
       while a%b != 0 : 
          a, b = b, a%b
       return b
    Par contre pour la 2) je sèche un peu ! C'est à dire que l'argument est un tuplet mais je ne comprend pas ce que je dois renvoyer ! :/
    Je vous remercie pour vos réponses !
    Et vous souhaites de bonnes fêtes de fin d'année !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Python57 Voir le message
    Par contre pour la 2) je sèche un peu ! C'est à dire que l'argument est un tuplet mais je ne comprend pas ce que je dois renvoyer !
    Soit N un "nombre décimal périodique", on peut représenter sa "notation fractionnaire" par un tuple à 2 ou 3 éléments. Puis on peut (par le calcul) retrouver la fraction i.e. les nombres entiers p et q (donc un tuple à 2 éléments) tels que N = p / q.... et utiliser le pgcd de p et de q pour simplifier.

    Par exemple si N = 1/3, la notation fractionnaire pourra être le tuple (0, 3). Et le boulot de la fonction (à écrire) sera de retrouver p = 1 et q = 3.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    Bonjour !

    Tout d'abord je te remercie d'avoir pris le temps de me répondre !
    Et m'excuse du retard de ma réponse !

    Juste je comprends beaucoup mieux grâce à toi et t'en remercie !
    Cependant je ne comprends toujours pas le sens de cette fonction

    C'est du genre ? :

    def fraction(u):
    N = p/q
    pgcd(p,q)
    return p,q ?

    Ou je ne vois pas trop les étapes de la fonction et m'en excuse car c'est sûrement simple mais je ne vois pas :/

    Je te remercie pour ta réponse !
    ET TE SOUHAITES UNE BONNE FIN D'ANNÉE !
    Bonnes fêtes de fin d'année à toi qui me lis

    Affectueusement.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def fraction(u):
    N = p/q
    pgcd(p,q) 
    return p,q ?
    Ici, tu proposes une fonction qui reçoit comme paramètre u, et tu n'utilises pas ce u dans le corps de la fonction... ça ne peut pas marcher.
    Et la suite de la fonction est du même topo.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Python57 Voir le message
    Ou je ne vois pas trop les étapes de la fonction et m'en excuse car c'est sûrement simple mais je ne vois pas :/
    Il n'y a rien à voir, il faut savoir ce que signifie le côté mathématique de l'opération. Si vous ne le savez pas, Internet est un merveilleux outil pour apprendre. Vous pouvez commencer par la lecture de ce tuto...
    Tant que vous n'avez pas pris le temps de comprendre la chose côté mathématique, difficile d'essayer de la traduire en programme i.e. écrire des instructions qui permettront à la machine de faire ces opérations automatiquement.

    Citation Envoyé par Python57 Voir le message
    Je te remercie pour ta réponse !
    ET TE SOUHAITES UNE BONNE FIN D'ANNÉE !
    Bonnes fêtes de fin d'année à toi qui me lis
    Bon réveillon à toi aussi.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    Bonjour !

    Merci pour vos réponses tout d'abord.

    Ensuite j'ai regarder et je comprends toute la démarche, cependant c'est sous python que ça me pose un petit problème je n'arrive pas a convertir mon tuplet u (e,d,p) ou (e,p) qui est l'argument en un nombre périodiques x = e,dpppp ou x = e,ppppp

    Merci pour votre réponse !

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Python57 Voir le message
    Ensuite j'ai regarder et je comprends toute la démarche, cependant c'est sous python que ça me pose un petit problème je n'arrive pas a convertir mon tuplet u (e,d,p) ou (e,p) qui est l'argument en un nombre périodiques x = e,dpppp ou x = e,ppppp
    Pourquoi voulez vous faire çà?
    (e, d, pppp) ou (e, pppp) sont des représentations avec le langage Python de nombres périodiques que l'on notera e,dpppp ou e,pppp sur une feuille de papier.
    notez que j'ai préféré souligner le groupe de chiffre qui se répètent plutôt que de le surligner... Car c'était plus facile. et vous montrez qu'à partir du moment où vous pouvez distinguer les trois morceaux e, d, pppp du nombre et qu'on peut "convenir" de ce qui correspond à quoi...

    Donc vous avez un nombre périodique, et maintenant, il faut retrouver la fraction.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    Je veux faire cela car il faut que je multiplie puis soustraie des choses, or avec un tuplet je ne peux rien faire de tout cela n'est-ce pas.

    Par exemple prenons votre exemple du tuplet (0,3)

    il faut que je fasse ceci non :

    def fraction(u)
    Puis la il faut que je transforme (0,3) en 0,3333333333 puis faire
    0,3 * 10
    puis 3,3333333 - 0,333333
    Il me reste donc N = 1/3

    mais sous python je n'y parviens pas alors que j'aime l'informatique et je n'aime pas ne pas trouver .

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Le soucis est qu'il faut aimer les mathématiques!
    On peut commencer par écrire:
    • n = 0, 3 (1)
    La période étant collée à la virgule, rien à faire ici mais la longueur de la partie périodique étant 1, on multiplie par 10 (à gauche et à droite pour conserver l'égalité)
    • 10 * n = 3, 3 (2)
    On retranche (2) et (1) terme à terme (et si on a multiplié par 10, c'est pour que les partie périodiques s'annulent):
    • 10 * n - n = 3, 3 - 0, 3 (3)
    • 9 * n = 3 (4)

    donc on obtient n = 3 / 9 qu'il faut ensuite réduire à coup de PGCD pour sortir la fraction (1, 3).

    La difficulté pour écrire çà en Python, c'est que vous n'allez pas faire du calcul symbolique (çà existe mais c'est pas le but) et donc pas possible de procéder comme çà: il va falloir trouver un algorithme qui pourra être exécuté par la machine.
    Vous pouvez remarquer que dans l'équation (3), on soustrait une puissance de 10 - calculée pour écrire (1) - à une autre puissance de 10 - calculée pour écrire (2) -.
    Et ces puissances de 10, vous savez les calculer: l'énoncé vous donne même un indice:
    Exercice 9 (Écriture fractionnaire d’un nombre décimal périodique) : On pourra utiliser l’exercice 4
    qui à partir d’un entier n associe son nombre de chiffres.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    Regarde ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def fraction(u):
        if u == [u[0],u[1],u[2]]:
            e,d,p = u[0],u[1],u[2]
            x = e + (0.1*d) + (0.01*p)
            return x
        if u == [u[0],u[1]]:
            e,p = u[0],u[1]
            x = e + (0.1*p)
            return x
    Edit : c'était pour vérifier que j'arrive à afficher un nombre décimal périodique, j'arrive a afficher le nombre mais il me manque les chiffres derrière puis il m'en faut combien un peu près, et la j'ai une erreur, si je met un [1,2] ca me dit out of range comme si je pouvais que mettre [1,2,3]

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Un nombre décimal périodique tel que 1,524 s'écrira en Python sous la forme d'un tuple: (1, 5, 24).
    Pour l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> u = (1, 5, 24)
    >>> print (u)
    (1, 5, 24)
    sera assez bien.

    Et pour connaître le nombre d'éléments du tuple, vous avez la fonction "len":
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    quand tu écris x = e + 0.1 * d + 0.01 * p, tu fais plusieurs impasses.
    Par exemple, que se passe-t-il si en paramètre tu as (5, 123, 6), ou bien si tu as (5,0,142857).
    Et pour le cas basique (1,2,3), effectivement , tu vas obtenir 1,23 alors que tu voudrais 1,233333 ou bien 1,2333333333333. Tout ça parce que tu n'as pas résolu l'exercice de maths qu'on te demande.

    A ce niveau, les questions que tu dois te poser, ce sont des questions de mathématiques. Accessoirement, des questions à poser dans un sous-forum de mathématiques. Et quand tu auras assimilé les pièges mathématiques, tu pourras passer à la phase programmation.

    Là ce que tu essaie de faire, c'est de construire un moteur à eau, sans savoir par quel miracle un moteur pourrait fonctionner avec de l'eau. Avant de construire le moteur à eau, il faut le concevoir.

    Et avant de programmer cette fonction, il faut comprendre ce que cette fonction doit faire. Et l'exercice de maths que tu as à faire pour la partie 'périodique' n'est pas si simple que cela !

    Pour cet exercice de maths, Wiztricks t'a beaucoup aidé dans son message de 17h00, mais il reste à déchiffrer !
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    Ah oui merci ! Mais moi seul problème est en fait de mettre le tuple sous forme n = ....
    si tu pouvais juste me dire comment on fait cela, ça serait très aimable de ta part

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Pour cet exercice de maths, Wiztricks t'a beaucoup aidé dans son message de 17h00, mais il reste à déchiffrer !
    C'était en complément de la lecture de cet article.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Réponse
    J'ai bien compris toute cette démarche qui consiste a trouver une fraction irréductible sur le papier ne vous inquiéter pas. Le seul problème était de transformer sous python et je pensais avoir votre aide mais ce n'est pas grave, bonne soirée.

  16. #16
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Tu demandes de l'aide pour traduire un certain truc en python, mais tu l'as déjà traduit en langage python.
    Quand tu écris x=e+0.1 * d+ 0.01 *p , c'est correct sur le plan de la syntaxe python.
    Mais le résultat n'a rien à voir avec le calcul demandé.
    La bonne réponse ressemblerait plutôt à x=e+0.1*d+p/99 ou à x=e+0.1* d+p/9999900 dans d'autres cas.

    Et la difficulté essentielle de l'exercice, c'est de savoir s'il faut diviser p par 99 ou par 9999900 ou par autre chose. Ca, ce n'est pas du python, c'est des maths.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Python57 Voir le message
    J'ai bien compris toute cette démarche qui consiste a trouver une fraction irréductible sur le papier ne vous inquiéter pas. Le seul problème était de transformer sous python et je pensais avoir votre aide mais ce n'est pas grave,
    Si vous voulez traduire l'algo. en Python, il faut lancer l'interpréteur interactif et voir comment écrire çà pour des cas particuliers.
    Par exemple, pour 0,3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> u = 0, 3        # le nombre
    Puis on calcule les puissances de 10:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> p1 = 1                    # la puissance de 10 qui sort de (1)
    >>> p2 = 10 ** exercice_4(u[1]) # celle qui sort de (2)
    On fait la différence:
    On fait de même pour la partie droite des égalités:
    On récupère bien le (3, 9) trouvé sur le "papier".

    Puis on essaie avec 1, 524
    Le calcul des puissances de 10 est plus compliqué, car p1 n'est plus "1":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> p1 = 10 ** exercice_4(u[1])
    >>> p2 = 10 ** exercice_4(u[2])
    Mais la différence donne bien ce qu'on attend:
    Et côté droit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> (u[0]*p1 + u[1]) * p2 + u[2]
    1524
    On récupère bien le (1524, 990) trouvé sur le "papier".

    Que ce soit l'algo. papier ou le code Python, il doit commencer par calculer des puissances de 10... et traduire en Python des multiplications et des additions n'est pas si compliqué lorsqu'on a compris l'algo "papier".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Approximation par fractions rationnelles
    Par stylequick dans le forum MATLAB
    Réponses: 3
    Dernier message: 25/03/2010, 08h13
  2. [RegEx] Images et expression rationnelle
    Par Invité dans le forum Langage
    Réponses: 7
    Dernier message: 30/10/2005, 15h50
  3. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 18h38
  4. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  5. [langage] Expressions rationnelles (perl/C)
    Par ma2th dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2004, 18h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo