Partage
  • Partager sur Facebook
  • Partager sur Twitter

[BASIC Casio] programme PGCD

Sujet résolu
    27 septembre 2006 à 16:53:08

    Bonjour à tous,

    J'ai réalisé un petit programme sur ma Graph65 permettant de calculer le PGCD de deux nombres.
    Or, pour certaints nombres, il me sort un chiffre à virgule, ce qui n'est pas normal ^^

    Je pense qu'il y a une erreur dans les étapes de calcul.
    Voilà mon code :

    Lbl 0
    0->X
    0->Y
    0->U
    0->R
    0->A
    "X "?->X
    "Y "?->Y
    DO
    Lbl 1
    IF X>Y
    THEN Y->U
    YFrac (X/Y)->R
    Y->X
    R->Y
    ELSE Y->A
    X->Y
    A->X
    GOTO 1
    IfEnd
    LpWhile Y!=0
    " "
    "PGCD(X,Y)="
    LOCATE 11,6,U
    ClrText
    GOTO 0


    Þ symbolise la flèche : ->

    Je vois pas trop ce qui cloche, je pense que ça doit venir de la division avec reste.
    Merci de m'aider, et si vous avez des idées pour améliorer ce programme, n'hésitez pas ! ;)
    • Partager sur Facebook
    • Partager sur Twitter
      27 septembre 2006 à 17:11:11

      Citation : nios

      Þ symbolise la flèche : ->


      pour ne pas avoir mis -> à la place ? c'est plus lisible
      • Partager sur Facebook
      • Partager sur Twitter
        27 septembre 2006 à 17:14:46

        Parce que quand je le transfère sur mon ordinateur, ça me remplace la flèche par ça... Mais je vais changer ^^
        • Partager sur Facebook
        • Partager sur Twitter
          27 septembre 2006 à 17:22:25

          YFrac (X/Y)->R

          pourquoi le Y est il collé au Frac ? il ne faut aps un * entre les deux ? et aussi, il ne faut pas faire :
          Int(R)->Y
          car peut être que R est un réel à cause de Frac ?
          • Partager sur Facebook
          • Partager sur Twitter
            27 septembre 2006 à 17:28:25

            Prenons un exemple simple :
            X=69 et Y=56
            Si j'entre ça dans mon programme, ça me donne PGCD(69,56)=5,257486545...

            SI je fais comme tu m'as dit (Int(R)->Y) :
            PGDC(69,56)=3
            Or ce sont des nombres premiers entre eux...
            • Partager sur Facebook
            • Partager sur Twitter
              27 septembre 2006 à 17:42:29

              Je n'ai pas trouvé ton erreur (je continue à chercher) mais avec l'alogrithme d'Euclide çà marche ;
              "A:"?->A
              "B:"?->B
              While A != B
              If A>B
              Then A-B->A
              Else B-A->B
              IfEnd
              WhileEnd
              "PGCD = "
              A


              edit :
              ton erreur doit se trouver ici :
              THEN Y->U
              YFrac (X/Y)->R
              Y->X
              R->Y

              car "YFrac (X/Y)" == "X", non ?
              • Partager sur Facebook
              • Partager sur Twitter
                27 septembre 2006 à 17:52:57

                Effectivement ça semble marcher comme ça.
                Mais essayez quand même de m'aider, s'il vous plaît, à trouver ce qui ne vas pas dans mon code, je n'aime pas les bugs ^^

                EDIT

                > minirop :

                Citation : minirop

                car "YFrac (X/Y)" == "X", non ?



                Non, car ça ne multiplie que la partie décimale du nombre trouvé, et logiquement, ça donne un nombre entier, c'est à dire le reste de la division euclidienne de X par Y.

                J'ai déjà créé un programme "Division euclidienne" fonctionnant, sur le même principe, et ça marche !
                • Partager sur Facebook
                • Partager sur Twitter
                  27 septembre 2006 à 18:11:03

                  L'erreur doit venir du Y*Frac(X/Y).
                  remplace le par :
                  X-(Int(X/Y)*Y)->R
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 septembre 2006 à 18:33:49

                    Heuuu... Je ne pense pas que ce soit ça, puisque ça retourne PGCD(69,56)=56
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 septembre 2006 à 21:52:58

                      euh sans vouloir te vexer...
                      0->x
                      0->y
                      ?->x
                      ?->y

                      les 2 premieres lignes ne servent à rien...Et c'est plus simple au début de ton prog de faire 0->A~Z
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        28 septembre 2006 à 12:18:49

                        Bonjour,

                        Je ne sais pas si c'est pareil pour ta CASIO, mais dans mon manuel d'utilisateur, j'ai justement le programme pour calculer le PGCD. Si tu ne l'as pas dit-le moi, je te le mettrai ici.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 septembre 2006 à 21:34:28

                          Si si, il doitl'avoir, il est présent dans tous les manuels des calculatrices CASIO (enfin les conséquentes : 35 et supérieurs) .
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 septembre 2006 à 22:10:14

                            oui mais lui ce qu'il cherche c'est en refaire un lui-même et comprendre son erreur,s'il programmait juste pour le résultat...Bin la méthode d'euclide lui suffirait!
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 septembre 2006 à 19:17:11

                              En fait, j'ai réussi (à peu près).
                              L'erreur venait bien de Y*Frac(X/Y) : pour certains nombres, la partie décimale était en 0.99999999, comme elle se limite à 9 chiffres.
                              Cette imprécision se décalait à chaque étape, pour donner à la fin, un nombre totalement incompréhensible ^^

                              J'ai donc arrondi le nombre trouvé, mais comme c'est un arrondi un peu manuel...
                              IF Frac (R)>= 0.5
                              THEN INT (R+1)->R
                              ELSE INT (R)->R
                              IfEnd

                              ...je me demandait s'il pouvait y avoir des décalages au niveau du PGCD trouvé...

                              Merciiii :)


                              > Maxibolt :

                              Citation : Maxibolt

                              euh sans vouloir te vexer...

                              0->x
                              0->y
                              ?->x
                              ?->y


                              les 2 premieres lignes ne servent à rien...Et c'est plus simple au début de ton prog de faire 0->A~Z



                              C'est vrai que ça sert pas à grand chose, mais c'est une habitude que j'ai prise, et sa me permet de bien voir quelles variables j'utilise... ;)


                              > Stéphane

                              Citation : Stéphane

                              Bonjour,

                              Je ne sais pas si c'est pareil pour ta CASIO, mais dans mon manuel d'utilisateur, j'ai justement le programme pour calculer le PGCD. Si tu ne l'as pas dit-le moi, je te le mettrai ici.



                              Je viens de voir qu'il y était ^^
                              Mais comme le disait Maxibolt, je cherche à faire moi-même le programme... et à le débugger comme il faut ^^
                              C'est pas pour l'intérêt de calculer un PGCD :lol:
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 septembre 2006 à 19:58:58

                                Heu juste pour savoir tu est en terminal S avec spé maths si oui, si tu a de la chance tu ouvre ton bouquin de spé (a condition que tu ai le nathan) et y a l'ago tout beau tout fini pour casio
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  29 septembre 2006 à 22:48:42

                                  En 2nd, tu n'as aps besoin du PGCD normalement non ? Tout du moins, moi qui suis en 1ère S, je n'en ai entendu parler qu'en 3ème ...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 septembre 2006 à 9:58:42

                                    Moi aussi, j'en ai entendu parler seulement en 3ème.
                                    Mais j'ai pas fait ce programme pour l'intérêt de calculer le PGCD, mais pour l'intérêt de programmer ;)

                                    Alors, est-ce que vous pouvez me dire si mon arrondi est fiable ? Sinon, comment faire ?

                                    Merci :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 septembre 2006 à 19:01:51

                                      Si tu veux apprendre à programmer, je epux te conseiller d'autresprogrammes un peu plus intéréssants que celui là ...
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [BASIC Casio] programme PGCD

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown