Wielomian reprezentacja tablicowa i listowa

0
struct Polynomial{
	unsigned int deg;
	double* coeff;
};
struct Polynomial
{
	unsigned int exponent;
	double coeff;
	struct Polynomial* next;
};

Jakie funkcje powinien mieć wielomian

  1. Dodawanie wielomianów
  2. Odejmowanie wielomianów
  3. Mnożenie wielomianów
  4. Dzielenie wielomianów z resztą
  5. NWD wielomianów (Algorytm Euklidesa z wykorzystaniem funkcji z punktu 4.)
  6. Schemat Hornera
  7. Pierwiastki lub rozkład na czynniki nierozkładalne nad R (Tutaj musimy zadowolić się metodami numerycznymi)

Funkcje dodatkowe
zapis wielomianu do łańcucha znakowego
odczyt wielomianu z łańcucha znakowego

0
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

struct Polynomial
{
    unsigned int deg;
    double* coeff;
};

void createPolynomial(struct Polynomial);
void destroyPolynomial(struct Polynomial);

struct Polynomial addpoly(struct Polynomial,struct Polynomial);



int main()
{
    char esc;
    int k;
    struct Polynomial a;
    struct Polynomial b;
    struct Polynomial c;
    do
    {
        printf("Podaj stopieñ wielomianu\n");
        scanf("%u",&a.deg);
        printf("%u\n",a.deg);
        createPolynomial(a);
        \
        for(k=a.deg; k>=0; k--)
        {
            printf("a[%d]=",k);
            scanf("%lf",&a.coeff[k]);
        }
        printf("Podaj stopieñ wielomianu\n");
        scanf("%u",&b.deg);
        printf("%u\n",b.deg);
        createPolynomial(b);
        for(k=b.deg; k>=0; k--)
        {
            printf("b[%u]=",k);
            scanf("%lf",&b.coeff[k]);
        }
        c=addpoly(a,b);
        for(k=c.deg; k>=0; k--)
        {
            if(c.coeff[k]<0.0)
            {
                printf("-%lf*x^%u",-c.coeff[k],k);
            }
            else
            {
                printf("+%lf*x^%u",c.coeff[k],k);
            }

        };
        destroyPolynomial(a);
        destroyPolynomial(b);
        destroyPolynomial(c);
        esc=getch();
    }
    while(esc!=27);


}

void createPolynomial(struct Polynomial p)
{
    p.coeff=(double*)malloc((p.deg+1)*sizeof(double));
}
void destroyPolynomial(struct Polynomial p)
{
    free(p.coeff);
}

struct Polynomial addpoly(struct Polynomial a,struct Polynomial b)
{
    int i;
    struct Polynomial c;
    if(a.deg>b.deg)
    {
        c.deg=a.deg;
    }
    else
    {
        c.deg=b.deg;
    }
    createPolynomial(c);
    if(c.deg==a.deg)
    {
        for(i=0; i<=c.deg; i++)
            c.coeff[i]=a.coeff[i];
        for(i=0; i<=b.deg; i++)
            c.coeff[i]+=b.coeff[i];
    }
    else
    {
        for(i=0; i<=c.deg; i++)
            c.coeff[i]=b.coeff[i];
        for(i=0; i<=a.deg; i++)
            c.coeff[i]+=a.coeff[i];
    }
    return c;
}

Gdzieś tu jest Segmentation Fault ale nie mam pomysłu gdzie
Problemy z Segmentation Fault pojawiły się po opakowaniu tablicy w strukturkę

Co do reprezentacji listowej to mam listę liczb całkowitych do której trzeba dołożyć jedno pole
ale nie mam pomysłu na funkcje

1 użytkowników online, w tym zalogowanych: 0, gości: 1