C++ Equation diophantiennes

Résolu/Fermé
azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 - 2 févr. 2008 à 19:34
azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 - 5 févr. 2008 à 15:04
Bonsoir a tous,

Je suis en train de créer un programme qui résoud les equations diophantiennes. Pour le moment, il effectue lalgorythme d'Euclide et me donne le PGCD.

Le programme passe en compil, mais il plante dans ma fonction resoud_equations... Le programme ferme.


#include <iostream>
#include <string>
#include <vector>
using namespace std;

int saisie(vector <int> &a, vector <int> &b)
{

    cout << "Veuillez rentrer les deux nombres que vous avez choisis : " << endl << endl << "a = ";
    cin >> a[0];
    cout << "b = ";;
    cin >> b[0];
    return 0;
}

int resoud_equation(vector <int> &a, vector <int> &b, vector <int> &c, vector <int> &d)
{
    int x=0;
    while((a[0]%b[0])!=0)
      {
      
      c.push_back(1);
      c[x]=int(a[x]/b[x]);
      d.push_back(1);
      d[x]=a[x]-(int(a[x]/b[x])*b[x]);
      a.push_back(1);
      b.push_back(1);
      x++;
      a[x]=b[x-1];
      b[x]=d[x-1];
      }
      
      cout << "PGCD(" << a[0] << "," << b[0] << " = " << c[x];
      return x;
}

int main()
{
    cout << "Ce programme est crée afin de résoudre des équations diophantiennes du type : au + bv = 1." << endl;

    vector <int> a(1);
    vector <int> b(1);
    vector <int> c(0);
    vector <int> d(0);

    saisie (a, b);
    
    resoud_equation(a,b,c,d);

    system("PAUSE");
    return 0;
}


Jespère que quelqun saura maider...

3 réponses

azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 75
4 févr. 2008 à 13:17
up
0
ghiz Messages postés 39 Date d'inscription lundi 28 août 2006 Statut Membre Dernière intervention 16 août 2008 18
4 févr. 2008 à 17:58
bonjour,
c qoi une equation diophantienne? à consiste à quoi?
0
azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 75
5 févr. 2008 à 15:04
salut,

résoudre une equa diophantienne, ca revient a trouver u et v appartenant a Z tel que : 1 = au + bv

Voici le programme que j'ai terminé.

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int saisie(vector <int> &a, vector <int> &b) // saisie des premières valeurs a tester.
{

    cout << "Veuillez rentrer les deux nombres que vous avez choisis : " << endl << endl << "a = ";
    cin >> a[0];
    cout << "b = ";;
    cin >> b[0];
    cout << endl;
    return 0;
}

int resoud_equation(vector <int> &a, vector <int> &b, vector <int> &c, vector <int> &d)
{
    int x=0;
    while((a[x]%b[x])!=0)
      {
      
      c.push_back(1); 
      c[x]=int(a[x]/b[x]); // on cherche les quotients 
      d.push_back(1);
      d[x]=(a[x]%b[x]); // le reste de chaque division euclidienne
      a.push_back(1);
      b.push_back(1);
      x++;
      a[x]=b[x-1]; // algo d'Euclide : nouveau dividende
      b[x]=d[x-1]; // algo d'Euclide : nouveau diviseur
      }
 
      cout << "PGCD(" << a[0] << "," << b[0] << ") = " << b[x] << endl << endl;
      
      // remontée de l'algorythme d'Euclide :
      
      
      if(b[x]==1)
        {
      
        int V(0), W(1), var;
        x--;
        
        while(x>=0)
          {
          var = W;
          W = ((-W)*c[x])+V;
          V = var;
          x--;
          }
        cout << "Equation diophantienne : " << a[0] << " (" << V << ") + " << b[0] << " (" << W << ") = 1";
        }
        
      else cout << "Le PGCD de "<< a[0] << " et " << b[0] << " est different de 1, on ne resoud pas l'equation diophantienne."; 
      
      return x;
}

int main()
{
    cout << "Ce programme est cree afin de resoudre des equations diophantiennes du type :" << endl << "au + bv = 1." << endl;

    vector <int> a(1); // nombre a
    vector <int> b(1); // nombre b
    vector <int> c(0); // quotients de chacune des divisions de a par b
    vector <int> d(0); //  reste de chacunes des divisions de a par b

    saisie (a, b);
    
    resoud_equation(a,b,c,d); // pour le moment, je me contente deffectuer lalgorythme deuclide et de garder toutes mes valeurs.
    


    cout << endl << endl;
    system("PAUSE");
    return 0;
}
0