Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Cours/E-activities >> Graph 35 à 100 >> Maths >> Equa Diophantienne Python
Equa Diophantienne Python
Version : 1.1 Taille : 3500 octets Ajouté le : 2021-06-01 22:37 Modifié le : 2021-06-06 09:25
Auteur et posteur :
FlamingKiteHors ligneMembrePoints: 516 Défis: 9 Message
Planète Casio - Cours Casio de maths - Equa Diophantienne Python - FlamingKite - Calculatrices
Nombre de visites sur cette page : 2009
Score au progrank : 3
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
374 téléchargements | Soumettre un test


Ce cours n'a pas été mis à jour depuis 3 années. Considérez donc son contenu avec précaution car certaines parties peuvent être obsolètes.
Description :

Programme en Python permettant de résoudre des équations diophantiennes

Une équation diophantienne est une équation du type Ax+By=C, (A,B,C des entiers relatifs, x et y nos inconnues)

Les avantages de ce programme Python alors que j'ai déjà fait un programme en Basic qui résout ce type d'équation ?

  • Un vrai affichage "dynamique". Par affichage dynamique j'entends que le texte, nombre autour etc. s'affichent correctement quelles que soient les valeurs des variables (en particulier les grandes valeurs, ou négatives)
  • Affichage instantané de toutes les étapes, chose qui n'était pas possible en Basic
  • Python qui rentre dans le programme de cours contrairement au Basic Et Python n'est pas assez utilisé, donc c'est ma petite contribution

Merci à Dark Storm et KikooDX pour leur explications quand je voulais optimiser le programme x)


Utilisation :

Le programme vous demandera 2 choses à 2 moments, le reste se fera tout seul :

  1. Entrer A, B et C tout au début du programme
  2. Entrer ou non des solutions particulières

  • Si vous voulez juste les solutions pour vérifier votre exercice, entrez les valeurs de A,B,C (éventuellement votre solution particulière), et vous n'aurez qu'à prendre les 2 dernières lignes qui seront les solutions.
  • Si vous voulez toute la résolution, entrez vos A,B,C (éventuellement votre solution particulière), et à la fin, remontez tout jusqu'à vos valeurs de A, B, et C, pour pouvoir lire toutes les étapes correctement.


  • Ci-dessous ce que le programme fait : (en vert les moments où vous devez entrer une valeur)
    Donnez vos A, B, C tels que Ax+By=C
    A = 2
    B = 3
    C = 4

    On cherche (x,y) tel que 2x+3y=4

    Soit D = PGCD(2,3) = 1
    2x+3y=4 est equivalent a :
    2x+3y=4 (on divise par D)

    Entrer une solution particuliere ?
    [1]Oui / [2]Non : 2


    La solution particuliere est :
    X_0 = 8
    Y_0 = -4

    2x+3y = 4 est equivalent a
    2x+3y = 2*8 + 3*-4
    <=> 2(8-x) = 3(4+y)

    Donc 2|3(4+y)
    Or PGCD(2,3)=1
    D'ou 2 divise 4+y, d'apres le Theoreme de GAUSS.

    Autrement dit : 4+y=2k

    2(8-x) = 3(4+y)
    (4+y) = 2k

    2(8-x) = 3*2k
    y = 2*k - 4

    8-x = 3*k
    y = 2*k - 4

    Les solutions sont donc :
    x = 8 - 3*k
    y = 2*k - 4


    /!\ A noter que la solution proposée par le programme n'est pas unique, tout comme la solution particulière.
    Si vous avez trouvé une autre solution, commencez par l'injecter dans votre équation pour voir si l'égalité est bien existante.
    Si votre exercice vous propose un couple (x₀,y₀) comme solution particulière, prenez la dans le programme en entrant 1 dans la 2e étape en vert (ci dessus).

    Je précise à toute fin utile que le programme n'est pas commenté, pas aéré, pour gagner de la mémoire.
    Vous avez dans le premier commentaire un fichier .py qui fait la même chose mais sur ordinateur : celui-ci est commenté, aéré, et respecte la PEP8

    Pour transférer le fichier diophant.py dans votre calculatrice Graph 35+E II ou Graph 90+E, je vous conseille de lire ce tutoriel, et la partie 4 plus spécifiquement :
    1. Brancher votre calculatrice à l'ordi et appuyer sur [F1] sur la calculatrice
    2. Transférer diophant.py dans la calculatrice, pas dans un sous-dossier, directement dans la mémoire principale


    Si il y a un problème quelconque, n'hésitez pas à me contacter pour que je le règle (sinon vous pouvez le régler vous, sans aucun problème ! ), ou à commenter le programme, pour une question/proposition d'amélioration/avis...


Commentaires :


FlamingKiteHors ligneMembrePoints: 516 Défis: 9 Message
Posté le 01-06-2021 à 22:40 | # | Fichier joint
Et ce premier commentaire pour poster le programme commenté.
(je n'ai pas voulu le mettre dans la page du programme pour que les gens ne confondent pas)
HashbyHors ligneMembrePoints: 506 Défis: 4 Message
Posté le 04-06-2021 à 18:54 | #
Deux problèmes sur ce programme :
- Lorsque l'on rentre une équation qui n'a pas de solution, fais plutôt ceci: importe la bibliothèque sys et utilise la fonction sys.exit() qui stoppera proprement le programme sans faire redémarrer le noyau

-Lorsque l'on rentre une équation simplifiable le résultat retourné est faux ! Par exemple, pour l'équation 72x+93y=-36 (chaque membre divisible par 3) le résultat affiché est
x=-264-3k et y=24*k+204 ce qui est faux car par exemple (k=1):
72(-267)+93(228)=1980
FlamingKiteHors ligneMembrePoints: 516 Défis: 9 Message
Posté le 04-06-2021 à 19:37 | #
Pour le premier problème, je crois qu'on ne peut pas importer la bibliothèque sys pour MicroPython sur les calculatrices Casio.

Pour le 2e problème : je vais me pencher là dessus samedi/dimanche, merci de l'avoir signalé
FlamingKiteHors ligneMembrePoints: 516 Défis: 9 Message
Posté le 06-06-2021 à 09:29 | #
v1.1
(programme et premier post mis à jour)

Ce problème est corrigé

Hackcell m'avait indiqué ce problème sur la shout, mais j'avais oublié de le régler avant de poster

Tout simplement, dans la fonction de remplacement, j'avais laissé
("1*", "1"),
("1(", "1"),
, donc le 31(…) était transformé en 3(…) et le 31*k était transformé en 3k.

A priori cette version est bonne, mais je ne suis pas à l'abri d'un autre oubli ^^"

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 63 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd