[C] Division de polynome

Fermé
Jonathan - 15 déc. 2008 à 23:07
 levil - 10 janv. 2009 à 13:27
Bonjour,

J'ai un petit projet à faire pr un cours, je dois créer des fonctions pour utiliser les polynômes, additions, multiplications, division etc.

Je bloque sur la fonction division.

Voila mon problème:
La fonction fonctionne, mais je n'arrive pas afficher les résultats.
Si je fais retourner à mon fonction un seul polynome, cela fonctionne, mais je dois créer une fonction qui renvoie deux polynome. Mais bizarrement je n'y arrive pas.

Voila mon code, je ne poste que les parties utilies :

*****
Dans polynome.h
struct poly
{
  int   degree;
  float*  coefficient;
};
typedef struct poly poly;

struct twopoly
{
  int   ddegree;
  float*  dcoefficient;
  int rdegree;
  float*  rcoefficient;
};
typedef struct twopoly twopoly;

twopoly*  dividep(poly*,poly*);


********************************

#include <stdio.h>
#include "polynome.h"
main()
{
  node *head,*p,*q;
  poly *p1,*p2,*p3,*p4;
  twopoly *res ;

res = dividep(p1,p2);

      p3 = (poly*)malloc(sizeof(poly));
      p3->degree = res -> ddegree;
      p3->coefficient = res -> dcoefficient;
      

      //montre le resultat
      printf("Le resultat est:");
      montre(p3);

//----------------------
void montre(poly* p)
{
  int i;

  printf("--> "); 

  for(i = p->degree; i > 0; i--)
  {
    if(p->coefficient[i] != 0)
      printf("%.2f(X^%i) + ",p->coefficient[i],i);
  }

  printf("%.2f\n",p->coefficient[0]);

}
//---------------------------------
twopoly* dividep(poly* p1, poly* p2)
{
    poly *save, *p;
    twopoly *result;
    int i, n, a1, a2;
    
    
    //initialization
    p = (poly*)malloc(sizeof(poly));
    p->degree = p1->degree - p2->degree;
    p->coefficient = (float*)malloc(sizeof(float)*(p->degree+1));
    
    //initialization to zero
    for(i = p->degree; i >= 0; i--)
       p->coefficient[i] = 0;

    a2 = p2->coefficient[p2->degree];

    while (p1->degree >= p2->degree)
    {
        n = p1->degree - p2->degree;
        a1 = p1->coefficient[p1->degree];
       
        for(i = p2->degree; i >= 0; i--)
              p1->coefficient[i+n] -= ((a1/a2)*(p2->coefficient[i])) ;
              
        p->coefficient[n] += a1/a2;
        p1=calculer(p1);
    }
    
    result = (twopoly*)malloc(sizeof(twopoly));
    result->ddegree = p->degree;
    result->dcoefficient = (float*)malloc(sizeof(float)*(p->degree+1));
    result->rdegree = p1->degree;
    result->rcoefficient = (float*)malloc(sizeof(float)*(p1->degree+1));
    
    return result ;

}


Si vous pouvez m'aider je vous en serai tres reconnaissant :)

Merci
Jonathan

2 réponses

tinoeldorados
16 déc. 2008 à 10:30
salut,

rapidement sans detailler le code
Je trouve etrange que tu ne remplisse pas les champs alloues :

result->dcoefficient
et
result->rcoefficient

tu fais ton malloc ... mais tu ne mets rien dedans ??

result = (twopoly*)malloc(sizeof(twopoly));
result->ddegree = p->degree;
result->dcoefficient = (float*)malloc(sizeof(float)*(p->degree+1));
result->rdegree = p1->degree;
result->rcoefficient = (float*)malloc(sizeof(float)*(p1->degree+1));
0
bonjour!

il faut commenter ton algo pour faciliter la compréhention
0