Witam.. mam zdefiniowac operator mnozenia wielomianow C*=A
Mam tu przykladowy.. bylbym wdzieczny gdyby ktos mi go zmienil.. na ten operator C*=A , bo ja niestety nie znam sie na C.. z gory dziekuje
Pozdrawiam.
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define EPSILON 0.00000001
using namespace std;
struct Wielomian
{
long stopien;
double *wspolczynniki;
// konstruktor
Wielomian(long n)
{
stopien = n;
wspolczynniki = new double[stopien+1];
}
// podaje wspolczynnik przy x^n
double wspolczynnik(long n)
{
if(n>stopien || n<0)
return 0;
return wspolczynniki[n];
}
// konstruktor kopiujacy
Wielomian(const Wielomian &w)
{
stopien = w.stopien;
wspolczynniki = new double[stopien+1];
for(long i=0; i<=stopien; ++i)
wspolczynniki[i] = w.wspolczynniki[i];
}
// destruktor
~Wielomian()
{
delete []wspolczynniki;
}
};
// operator odejmowania
Wielomian operator-(Wielomian A, Wielomian B)
{
long sw = max(A.stopien, B.stopien);
Wielomian C(sw);
for(long i=0; i<=sw; ++i)
{
C.wspolczynniki[i] = A.wspolczynniki[i] + B.wspolczynniki[i];
}
return Wielomian(C);
}
int main(int argc, char *argv[])
{
printf("Odejmowanie wielomianow\nAutor: Unknown\n");
char input[256];
long s = -1;
// Pierwszy wielomian
while(1)
{
printf("Podaj stopien pierwszego wielomianu: ");
scanf("%s", input);
s = atol(input);
// kontrola, czy podano liczbe calkowita
double d = atof(input);
if(fabs(((double)s)-d)>=EPSILON)
s = -1;
if(s>=0)
break;
printf("Niepoprawny stopien!\n");
}
printf("Pozadany stopien pierwszego wielomianu to %ld.\n", s);
Wielomian A(s);
for(long i=0; i<=A.stopien; ++i)
{
printf("Podaj wspolczynnik przy x^%ld: ", i);
scanf("%s", input);
A.wspolczynniki[i] = atof(input);
}
printf("Wczytano pierwszy wielomian: ");
for(long i=A.stopien; i>=0; --i)
{
if(A.wspolczynniki[i]>0.0)
printf("+");
printf("%lf*x^%ld", A.wspolczynnik(i), i);
}
printf("\n");
// Drugi wielomian
while(1)
{
printf("Podaj stopien drugiego wielomianu: ");
scanf("%s", input);
s = atol(input);
// kontrola, czy podano liczbe calkowita
double d = atof(input);
if(fabs(((double)s)-d)>=EPSILON)
s = -1;
if(s>=0)
break;
printf("Niepoprawny stopien!\n");
}
printf("Pozadany stopien drugiego wielomianu to %ld.\n", s);
Wielomian B(s);
for(long i=0; i<=B.stopien; ++i)
{
printf("Podaj wspolczynnik przy x^%ld: ", i);
scanf("%s", input);
B.wspolczynniki[i] = atof(input);
}
printf("Wczytano drugi wielomian: ");
for(long i=B.stopien; i>=0; --i)
{
if(B.wspolczynniki[i]>0.0)
printf("+");
printf("%lf*x^%ld", B.wspolczynnik(i), i);
}
printf("\n");
// Odejmowanie i wynik
printf("\n\nWynik odejmowania to: ");
Wielomian C = A-B;
for(long i=C.stopien; i>=0; --i)
{
if(C.wspolczynniki[i]>0.0)
printf("+");
printf("%lf*x^%ld", C.wspolczynnik(i), i);
getchar();
}
printf("\n");
return 0;
}