2011-01-02 2 views
0

Je souhaite multiplier 2 'tableaux' polynomiaux dans CI je peux les initialiser, les stocker et les afficher, mais je ne trouve pas pourquoi le mulpoly() donne des réponses vagues (v. nos.) S'il vous plaît aider si vous pouvez le repérer.A propos de la multiplication de polynômes en C en utilisant des tableaux

#include<stdio.h> 
#include<malloc.h> 
int* getpoly(int); 
void showpoly(int *,int); 
int* addpoly(int *,int,int *,int); 
int* mulpoly(int *,int,int *,int); 
int main(void) 
{ 
int *p1,*p2,*p3,d1,d2,d3; 
/*get poly*/ 
printf("\nEnter the degree of the 1st polynomial:"); 
scanf("%d",&d1); 
p1=getpoly(d1); 
printf("\nEnter the degree of the 2nd polynomial:"); 
scanf("%d",&d2); 
p2=getpoly(d2); 
printf("Polynomials entered are\n\n"); 
showpoly(p1,d1); 
printf("and\n\n"); 
showpoly(p2,d2); 
/*compute the sum*/ 
d3=(d1>=d2?d1:d2); 
p3=addpoly(p1,d1,p2,d2); 
printf("Sum of the polynomials is:\n"); 
showpoly(p3,d3); 
/*compute product*/ 
p3=mulpoly(p1,d1,p2,d2); 
printf("Product of the polynomials is:\n"); 
showpoly(p3,d1+d2); 
} 
int* getpoly(int degree) 
{ 
int i,*p; 
p=malloc((1+degree)*sizeof(int)); 
for(i=0;i<=degree;i++) 
{ 
    printf("\nEnter coefficient of x^%d:",i); 
    scanf("%d",(p+i)); 
} 
return(p); 
} 
void showpoly(int *p,int degree) 
{ 
int i; 
for(i=0;i<=degree;i++) 
    printf("%dx^%d + ",*(p+i),i); 
printf("\b\b\b "); 
printf("\n"); 
} 
int* addpoly(int *p1,int d1,int *p2,int d2) 
{ 
int i,degree,*p; 
degree=(d1>=d2?d1:d2); 
p=malloc((1+degree)*sizeof(int)); 
for (i=0;i<=degree;i++) 
    if((i>d1) && (i<=d2)) 
    *(p+i)=*(p2+i); 
    else if((i>d2) && (i<=d1)) 
    *(p+i)=*(p1+i); 
    else 
     *(p+i)=*(p1+i)+*(p2+i); 
return(p); 
} 

int* mulpoly(int *p1,int d1,int*p2,int d2)/* this is the function of concern*/ 
{ 
int i,j,*p; 
p=malloc((1+d1+d2)*sizeof(int)); 
for(i=0;i<=d1;i++) 
    for(j=0;j<=d2;j++) 
    p[i+j]+=p1[i]*p2[j]; 
return(p); 
} 

Ceci a été compilé en C++ visuel.

Répondre

2

Vous n'initialisez pas le contenu du tampon que vous obtenez de malloc dans mulpoly, donc vous commencez avec des valeurs de vidage. Vous devez initialiser ces valeurs à zéro. Je ne peux pas être sûr que c'est le seul problème, mais c'est un endroit pour commencer.

3

utilisation calloc au lieu de malloc pour initialiser le contenu du tampon à 0.

+1

p = calloc (sizeof (int), 1 + d1 + d2); – ughoavgfhw

+0

Merci de préciser. : D –

+0

Merci beaucoup .Que fait-il! – rcnsit

Questions connexes