О умножении многочленов в C с использованием массивов - PullRequest
0 голосов
/ 02 января 2011

Я хочу умножить 2 полиномиальных «массива» в CI, я могу успешно инициализировать, хранить и отображать их, но я не могу найти, почему mulpoly () дает расплывчатые ответы (против больших чисел) Пожалуйста, помогите, если вы можете это заметить.

#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);
}

Это было скомпилировано в Visual C ++.

Ответы [ 2 ]

3 голосов
/ 02 января 2011

Используйте calloc вместо malloc для инициализации содержимого буфера до 0.

2 голосов
/ 02 января 2011

Вы не инициализируете содержимое буфера, полученного из malloc в mulpoly, поэтому вы начинаете со значений мусора.Вам нужно инициализировать эти значения до нуля.Я не могу быть уверен, что это единственная проблема, но это место для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...