Klasa WIelomian / kontener STL

0

Wielomian a0x0+a1x</sup>1+a2x2+...+ anx</sup>n przechowywany jest w klasie Wielomian w postaci ciagu wspolczynnikow a0,a1,a2.... (odwrotna kolejność!) zapisanego jako sekwencja liczb double umieszczona w kontenerze STL. Zaimplementuj dla klasy wielomian:

  1. void ustawWspolczynnik(int n, double value); - ustala wart. wspolczynnik an
  2. double wartosc(double x); - oblicza wartosci wielomianu dla x
  3. operator+ - wyznacza wielomian bedacy suma wielomianow
  4. operator* - wyznacza wielomian bedacy iloczynem wielomianow

I moje pytanie. Czy to chodzi o:

  1. vector<double> Wielomian;
    czy raczej o:
  2. class Wielomian{
    vector<double> wspolczynniki;
    };?

Bo w tym pierwszym trudno by bylo zdefiniowac operatory. Bede widzieczny za odpowiedz i kazda pomoc dotyczaca podpunktow tego zadania bo dopiero zaczynam kontenery STL :)

0

chodzi o 2'. masz klase Wielomian i w niej siedzi vector<double>, przechowujacy wszystkie wspolczynniki wielomianu

0

To teraz proszę o poprawienie i konstruktywne uwagi:

void Wielomian::ustawWspolczynnik(int n, double value)
{
    vector<double>::iterator it = wspolczynniki.begin()+ n;
    wspolczynniki.insert(it,value);
}
double Wielomian::wartosc(double x)
{
       vector<double>::iterator it;
       double suma =0;
       
       for(it = wspolczynniki.begin(); it< wspolczynniki.end(); it++)
       {
            double wynik = 1;
            for(vector<double>::iterator it2=it; it2 > wspolczynniki.begin(); it2--)
            wynik *= x; 
            
            suma += (wynik * (*it)); 
            
       }
       
  return suma;
}
0
vector<double>::iterator it = wspolczynniki.begin()+ n;

A co jeśli vector będzie pusty?

0

nie za bardzo wiem czemu to jest blad? jak bedzie pusty to nie wstawi mi na pierwszy wolny? W takim razie co powinienem zrobic?:)

0

jak bedzie pusty to nie wstawi mi na pierwszy wolny?

Problem w tym, że insert będzie się sugerować niepoprawnym iteratorem, bo begin dla pustego vectora zwróci iterator end, a end()+n co zwróci?

W takim razie co powinienem zrobic?:)

W konstruktorze ustalić liczbę współczynników dając:

wspolczynniki.resize(liczba_wspolczynnikow);

a później:

void Wielomian::ustawWspolczynnik(int n, double value)
{
    if(n>=wspolczynniki.size())return;
    wspolczynniki[n]=value;
}

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