Napisałem dwie wersje odejmowania wielomianów:
- pierwsza wykorzystuje zapisane już wcześniej dodawanie
- druga jest oddzielną funkcją, niezależną od dodawania
Wielomian Wielomian::operator-(const Wielomian & w) const
{
Wielomian temp(w);
for(int a=0; a<=w.stopien; a++)
temp.wiel[a]*=-1;
Wielomian roznica=*this+temp;
return roznica;
}
Wielomian Wielomian::operator-(const Wielomian & w) const
{
int stop=stopien>=w.stopien?stopien:w.stopien;
Wielomian roznica(stop);
if(stopien>=w.stopien)
{
int u;
for(u=0; u<=w.stopien; u++)
roznica.wiel[u]=wiel[u]-w.wiel[u];
for(; u<=stopien; u++)
roznica.wiel[u]=wiel[u];
}
else
{
int u;
for(u=0; u<=stopien; u++)
roznica.wiel[u]=wiel[u]-w.wiel[u];
for(; u<=w.stopien; u++)
roznica.wiel[u]=-w.wiel[u];
}
roznica.zmniejsz_stopien();
return roznica;
}
Pierwszy sposób tworzy dwa tymczasowe obiekty: jeden tylko po to, żeby przemnożyć drugi wielomian przez -1. Przekazuję ten drugi jako stały [const] więc nie mogę go zmienić); jeśli dobrze rozumiem działanie tego co napisałem, to drugi jest tworzony dlatego że używam *this. Poza tym sposób jest bardzo krótki i wygodny w zapisie.
Drugi nie tworzy żadnych tymczasowych obiektów, jednak ma w sobie ifa i kilka forów - dłuższy w zapisie.
Który z nich jest lepszy? Mam na myśli ogólnie przyjęte zasady pisania programów i szybkość ich wykonywania. Działanie funkcji jest chyba jasne, wiel[] to tablica przechowująca współczynniki wielomianu.