IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

surcharge + pour la somme des polynome


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Par défaut surcharge + pour la somme des polynome
    bonjour!!
    bon j'ai un TP a rendre concernant le surcharge + pour une class polynome
    mais j'ai trouvé des probèmes et ça marche pas meme si le code se compile mais les resultat son erroné bon voici le code que j'ai mis :
    -----------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    polynome polynome::operator +(polynome &p)
    {
    	int max;
    	int i,j;
    	//float *swap;
     
    	if(degre != p.degre)
    	{
     
    		int dif = 0;
    		max = 0;
            ////chercher le max des degres en cas ou les deux poly sont non egaux
    		if( degre < p.degre ){
    			max = p.degre;
    			dif = max - degre;
    		}
    		////////////////////////
    		if( degre > p.degre ){
    			max = degre;
    			dif = max - p.degre;
    		}
    		///////////////////////
    		float *f;
    		f = new float[max];
    		///////////////////
    		for(i=0 ; i<max ; i++)
    			f[i] = 0;////initialisation a zero
    		////////////////////
    		for(i=dif , j = 0 ; (i<max) && (j < p.degre); i++ , j++)
    			f[i] = p.coefficient[j];///////copie vers un nv tableau 
    		/////////////////////
    		p.coefficient = new float[max];///allocation memeoire pr le nv tableau avec la nouvelle taille
    		///////////////////
    		for(i=0 ; i<max ; i++)
    		{
    			p.coefficient[i] = f[i];///copie vers le nv tableau de coefficients
    			p.coefficient[i] = p.coefficient[i] + coefficient[i];
    		}
    	}
    	for(i=0 ; i<p.degre ; i++)
    		p.coefficient[i] += coefficient[i];
     
    	return p;
    }

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Tu as une perte de données:

    for(i=0 ; i<max ; i++)
    {
    p.coefficient[i] = f[i];///copie vers le nv tableau de coefficients

    En effet,
    for(i=dif , j = 0 ; (i<max) && (j < p.degre); i++ , j++)
    f[i] = p.coefficient[j];///////copie vers un nv tableau

    tu ne copies que les données à partir de dif, tu perds donc toutes les données de 0 à dif.

    En fait, tout ce que tu veux faire, c'est ajouter les coefficients des deux polynomes, et retourner un nouveau polynome. Il ne sert à rien donc de modifier les polynomes en paramètre.

    voilà un code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    polynome polynome::operator +(polynome &p)
    {
      //le polynome de retour
      polynome final;
     
      //on lui met le max des degrés
      if (degre > p.degre)
        final.degre = degre;
      else
        final.degre = p.degre;
     
      //on lui initialise son tableau de coeffs
      final.coefficient = new float[final.degre+1];
     
      //et pour chaque coeffs, on met la somme des coeffs des deux autres polynomes
      for (int i =0; i <= final.degre; i++)
      {
         final.coefficient[i] = 0;
         if (degre >= i)
           final.coefficient[i] += coefficient[i];
         if (p.degre >= i)
           final.coefficient[i] += p.coefficient[i];
       }
       return final;
    }
    j'ai écrit ce code en considérant qu'un polynome de degré 1 était de la forme ax+b. (sinon il faudra changer la tailler du tableau, et la boucle)

    Il y a encore un problème à résoudre
    Si par exemple tu ajoutes 3x²+2x+1 à -3x²+x-2, le polynome résultant sera bien 3x-1 mais il sera considéré de degré 2. (car les deux polynomes d'avant sont de degrés deux).

    Bonne chance!

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Par défaut surcharge +
    je vous remercie vraiment pour votre aide et l'idée me semble logique mais le problème reste toujours le meme si je vient de modifier des trucs
    mais ça marche ,
    merci a nouveau pour aide.
    alors y t il d'autres solutions svp?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/08/2010, 17h01
  2. [XL-2003] Fonction pour faire la somme des cellule jaune
    Par kolann dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2010, 16h00
  3. [AC-2000] Comment faire la somme des heures en requete pour un état ?
    Par angelevil dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/09/2009, 02h19
  4. Réponses: 0
    Dernier message: 30/07/2008, 14h33
  5. [Requête] faire la somme des max pour chaque utilisateur
    Par novices dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2007, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo