Partage
  • Partager sur Facebook
  • Partager sur Twitter

PGCD et QT

    29 septembre 2008 à 21:00:19

    Bonjour,

    Je suis actuellement en train d'essayer de faire un logiciel qui calcule le PGCD de deux nombre grâce à QT. J'ai fait ma fenetre sous Qt designer et le principe de fonctionnement comme sur la calculette de M@teo21 dans le cours. Mon programme, au lieu de faire une addition, calculera le PGCD.

    j'ai un problème dans le fichier FenPGCD.cpp

    #include "FenPGCD.h"
    
    FenPGCD::FenPGCD(QWidget *parent) : QWidget(parent)
    {
        setupUi(this);
    
    
    }
    
    void FenPGCD::on_boutonEgal_clicked()
    {
        while (nombre2->value() != 0)
        {
        double reste = int nombre1 % int nombre2;
        nombre1 = nombre2;
        nombre2 = reste;
        }
        resultat->setNum(reste);
    
    }
    


    Le programme de compilation me dit qu'il y a des erreurs aux lignes 14, 16, 18.

    Voyez vous les erreur ?

    Merci et bonne soirée

    The fan of Charlotte
    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2008 à 21:20:34

      si j'ai bien compris :
      while (nombre2->value() != 0)
          {
      14.    double reste = int nombre1 % int nombre2;
          nombre1 = nombre2;
      16.    nombre2 = reste;
          }
      18.    resultat->setNum(reste);
      

      14: tu déclares deux nouveaux nombres (int nombre1 et int nombre2) => enleve les deux 'int' devant nombre*
      16: le compilo doit pas bien comprendre de quel 'reste' tu parles vu qu'il y a eut une erreur
      18: pareil que 16, mais meme si ca avait compilé au dessus, 'reste' est dans un scope reduit à la boucle 'while': tu dois déclarer reste au dessus du while

      j'espere que je ne me suis pas trompé
      • Partager sur Facebook
      • Partager sur Twitter
        29 septembre 2008 à 21:45:01

        ok merci d'avoir repondu. Autrement tu ne vois pas d'autre erreur ?
        • Partager sur Facebook
        • Partager sur Twitter
          29 septembre 2008 à 22:04:45

          nombre2 n'est pas déclaré en tant que paramètre de ta fonction, je présume que c'est une variable de classe, non ?
          sinon, non je ne vois rien
          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2008 à 13:36:06

            en fait, c'est just un slot que je veux faire ! Au clic sur egal, le pgcd est calculé ! Je n'arrive pas à corriger ce que tu m'a dit. Il y a toujours un bug.
            • Partager sur Facebook
            • Partager sur Twitter
              30 septembre 2008 à 13:38:19

              Et si tu donnais les erreurs de compilation ?
              • Partager sur Facebook
              • Partager sur Twitter
              Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                30 septembre 2008 à 16:33:09

                Après avoir lu les tutoriels de bluestorm sur la récursivité et sur l'algorithmique, je ne peux que te conseiller une fonction récursive qui selon moi est assez séduisante:
                long pgcd(long nombre1, long nombre2)
                {
                    cout << "Calcul PGCD entre " << nombre1 << " et " << nombre2 << endl;
                    if(nombre1 < nombre2)
                    {
                        long tmp = nombre1;
                        nombre1 = nombre2;
                        nombre2 = tmp;
                    }
                
                    long reste = nombre1 % nombre2;
                
                    if(reste)
                    {
                        cout << nombre1 << " / " << nombre2 << " = " << nombre1/nombre2 << " reste " << reste << endl;
                        return pgcd(nombre2, reste);
                    }
                    else
                    {
                        cout << nombre1 << " / " << nombre2 << " = " << nombre1/nombre2 << " reste " << reste << endl;
                        cout << "PGCD trouvé: " << nombre2 << endl << endl;
                        return nombre2;
                    }
                
                }
                

                Évidemment, celui-ci est assez verbeux... Tu peux enlever les cout pour ton programme en Qt.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 septembre 2008 à 18:33:25

                  Merci, mais la tu me donnes une fonction, il faut traduire ça en Qt ...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 septembre 2008 à 19:55:43

                    @ MrVincent, il ya plus court ;)

                    Citation : Wiki

                    int pgcd(int m, int n) {
                    return n ? pgcd(n, m%n) : m;
                    }

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 septembre 2008 à 20:04:03

                      Citation : MrVincent

                      Après avoir lu les tutoriels de bluestorm sur la récursivité et sur l'algorithmique, je ne peux que te conseiller une fonction récursive qui selon moi est assez séduisante:

                      long pgcd(long nombre1, long nombre2)
                      {
                          cout << "Calcul PGCD entre " << nombre1 << " et " << nombre2 << endl;
                          if(nombre1 < nombre2)
                          {
                              long tmp = nombre1;
                              nombre1 = nombre2;
                              nombre2 = tmp;
                          }
                      
                          long reste = nombre1 % nombre2;
                      
                          if(reste)
                          {
                              cout << nombre1 << " / " << nombre2 << " = " << nombre1/nombre2 << " reste " << reste << endl;
                              return pgcd(nombre2, reste);
                          }
                          else
                          {
                              cout << nombre1 << " / " << nombre2 << " = " << nombre1/nombre2 << " reste " << reste << endl;
                              cout << "PGCD trouvé: " << nombre2 << endl << endl;
                              return nombre2;
                          }
                      
                      }
                      


                      Évidemment, celui-ci est assez verbeux... Tu peux enlever les cout pour ton programme en Qt.



                      C'est pas un code pour QT ça ? En fait, il me faut une methode qui calcule le PGCD. Je n'arrive pas à créer cette methode pour Qt !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 septembre 2008 à 20:09:17

                        cette methode peut etre utilisée dansu programme Qt.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 septembre 2008 à 20:14:34

                          Ok merci ;) Il faut enlever les Cout alors ? En fait, j'arrive pas à faire l'adaptation Qt ! (la fonction qui calcule le PGCD, je la connais ! )
                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 septembre 2008 à 22:01:32

                            Enlève les cout et définie ça comme une fonction que ta méthode onBoutonClick appelle. Selon moi, c'est le plus simple. Ton onBoutonClick recherche les valeurs dont tu cherches le PGCD et appelles la fonction avec ces valeurs en paramètres.

                            Citation : Bachir

                            int pgcd(int m, int n) {
                            return n ? pgcd(n, m%n) : m;
                            }
                            

                            En effet, c'est plus court, sauf qu'il faut que m soit plus grand que n, non?. Si ce sont des entrées utilisateurs, c'est pas pratique... Aussi, je préfère ma version pour une question de lisibilité...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 septembre 2008 à 22:49:57

                              Le compilateur me dit qu'il y a une erreur deconversion entre QSpinBox et 'int' ou 'double' (ça depend de ce que je mets comme type de variable) C'est bizarre !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 septembre 2008 à 23:02:48

                                le voila :
                                #include "FenPGCD.h"
                                
                                FenPGCD::FenPGCD(QWidget *parent) : QWidget(parent)
                                {
                                    setupUi(this);
                                
                                connect(boutonEgal, SIGNAL(triggered()), this, SLOT(calculerPGCD()));
                                
                                }
                                
                                void FenPGCD::calculerPGCD()
                                {
                                
                                int reste;
                                
                                
                                    while (nombre2 != 0)
                                    {
                                        reste = nombre1%nombre2;
                                        nombre1 = nombre2;
                                        nombre2 = reste;
                                
                                    }
                                
                                
                                
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 septembre 2008 à 23:27:27

                                  c'est normale, nombre1/2 sont des spinbox, pas des int
                                  jette un coup d'oeil a la documentation de la classe SpinBox, et cherche la fonction qui permet d'extraire le nombre entré
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 octobre 2008 à 10:35:01

                                    ok, merci ;) je vais chercher dans la doc.

                                    EDIT : Quel type de variable marche avec QSpinBox ? Dans la doc, je crois avoir comrpis que c'est des int ...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      1 octobre 2008 à 13:39:24

                                      En fait y'a un truc qui va pas : C'est que tu es débutant(e) et que tu cherches à maitriser Qt en même temps que tu essais de faire des petits programmes ; Et ça va pas ensemble ; Revient quelques temps à la console, et quand tu maitrsera bien tu passeras à Qt.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 octobre 2008 à 14:26:45

                                        ok je vais retourner quelques temps à la console ;)
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        PGCD et QT

                                        × 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