Partage
  • Partager sur Facebook
  • Partager sur Twitter

grands entiers

pointeurs

    13 juin 2008 à 20:49:46

    voila dans le cadre d'un projet d'info en ecole d'ingenieur je doit realiser un programme qui me permet de travailler avec de tres grands entiers.
    pour cela j'utilise les listes chaines ( suite de petits entiers )
    je suis arrivé a faire l'addition de deux tres grands entiers:

    void addition (int x,int y,int &r ,int & res)
    { res=x+y+r;
    if (res<=999) r=0;
    else {r=1; res=res-1000;}
    }


    grandentier plusfinal (grandentier X , grandentier Y)
    {int r ;grandentier E;
    r=0;
    inverse (X);
    inverse (Y);
    E=plus (X,Y,r);
    inverse (E);
    return E;
    }


    grandentier plus (grandentier X , grandentier Y, int r)
    {grandentier E;int res;
    if (X==NULL) E=Y;
    else { if (Y==NULL) E=X;
    else{
    addition(X->valeur , Y->valeur , r ,res );
    E=plus(X->suivant , Y->suivant , r);
    ajouter (res,E);
    }
    }
    return E;
    }




    mon probleme se situe dans la soustraction ( probleme de recursivité) j'arrive a faire la soustraction de deux petits entiers:
    void soustraction (int x,int y,int &r ,int & res)
    {res=x-(y+r);
    if ((x-y<=0)){ r=100 ; res=x-y ;}
    else {r=0; res=x-y;}

    }



    mais je n'arrive a rien consernant la soustraction de deux grands entiers donc si qqu'un peut venir me donner de l'aide merci ( et si qqu'un sait faire avec la division et la multiplication je suis egalement preneur))
    merci encore
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2008 à 20:53:01

      Met ton code entre les balises <code type="cpp"></code>
      Et ce n'est pas tellement du cpp sa pourait etre du c ;) fait peut etre un peu de OO
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2008 à 20:55:33

        Sinon t'es au courant que y a des bibliothèques exprès pour ça ? (gmp par exemple).
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 21:22:13

          @GuGus963, il résout un exercice, réinventer est ce que l'on attend de lui.

          Sinon, tu es obligé de te cogner les listes à la main aussi? Tu n'es pas autorisé à utiliser une std::list ? (structure qui ne me parait pas efficace, mais bon..)
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            13 juin 2008 à 22:25:41

            Ah, je pensais qu'il devait faire un programme quelconque, nécessitant d'utiliser des grands nombres (sans réinventer la roue).
            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2008 à 2:15:13


              en fait j'ai deux probleme puisque je compter utiliser quasiment le meme prog que pour l'addition ( pour moi addition et soustraction c'est quasi pareil donc bon)

              premier probleme
              grandentier moins (grandentier X , grandentier Y, int r)
              {grandentier E;int res; 
              if (X==NULL) E=Y;
              else { if (Y==NULL) E=-X;
              

              X n'etant pas un entier je ne peux pas mettre E=-X or cela marangerais bien


              deuxieme probleme

              Si la soustraction de deux petits entiers est negative cela ne va pas lorsque je les met dans la liste chainée. Un exemple expliquera mieux que des mots
              soit deux grands entiers X et Y

              X= 100 400
              Y= 050 800

              si je fait le calcul de la soustraction avec les petits entiers separé j'obtiens:

              E= X-Y = 50 -400

              alors qu'en fait je devrais avoir E= 49600
              et je vois pas trop comment resoudre ce probleme ( peut etre trouver un systeme de retenu



              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2008 à 2:54:32

                Fais des classes et définis les opérateurs qui vont bien. Et tout sera beaucoup plus simple.
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  14 juin 2008 à 10:47:36

                  Si tu regardes dans la le topic des exercices (en post-it) tu trouveras ton bonheur.
                  C'est fait à partir des std::vector et c'est pas optimisé mais ça devrait déjà t'aider.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                  Anonyme
                    14 juin 2008 à 18:54:16

                    grandentier moins (grandentier X , grandentier Y, int r)
                    
                    a quoi sers r?
                    puor une soustraction d'entrier je ne comporend pas...
                    sinon fait plutot
                    grandentier& grandentier::operator- (const grandentier& Y)
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 juin 2008 à 19:07:22

                      En libre c'est mieux...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                      Anonyme
                        14 juin 2008 à 19:11:31

                        Citation : lmghs

                        En libre c'est mieux...


                        hein?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 juin 2008 à 19:42:50

                          Il est préférable de définir les opérateurs binaires comme des fonctions libre
                          (pour pouvoir supporter (simplement et proprement) de façon symétrique les opérations faisant intervenir des types différents (en particulier en présence de potentielles conversions implicites)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                          Anonyme
                            15 juin 2008 à 12:29:48

                            Ou sinon. il y a -= qui est unaire.

                            Opérateurs : http://www.siteduzero.com/forum-83-175 [...] html#r1949003

                            youyou, c'est "libre" qui t'embête ? La définition ?
                            Les fonctions / opérateurs non membre sont libres, pas les autres.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              15 juin 2008 à 17:59:21

                              oui, en fait j'avais cru libre (non proprietaire) et nom libre or classe :euh:
                              • Partager sur Facebook
                              • Partager sur Twitter

                              grands entiers

                              × 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