Czemu program się wysypuje przy wprowadzaniu wielomianu stopnia wiekszego od 5?
Wybaczcie za mieszanie polskiego z angielskim. Dopiero się uczę więc chętnie przyjmę uwagi i wskazówki, ale prosiłbym bez nerwów ;)
#include <iostream>
#include <vector>
using namespace std;
int pow(int pdst, int wyk){
int potega=1;
for(int i=0; i<wyk; i++){
potega*=pdst;
}
return potega;
}
class Wielomian{
public:
vector<int> wspol;
int stopien;
Wielomian(){
wspol.push_back(0);
stopien=0;
}
~Wielomian(){
wspol.clear();
stopien=0;
}
void ustaw(int n, int value){
if(n>stopien){
for(int i=0; i<n-stopien-1; i++) wspol.push_back(0);
wspol.push_back(value);
stopien = n;
}
else wspol[n]=value;
}
friend istream &operator >>(istream &s, Wielomian &w){
cout << "Podaj stopien wielomianu:"; s >> w.stopien;
int tmp;
for(int i=0; i<=w.stopien; i++){
s >> tmp;
w.ustaw(i, tmp);
}
return s;
}
friend ostream &operator <<(ostream &s, Wielomian &w){
for(int i=0; i<w.stopien; i++){
s << w.wspol[i] <<"x["<<i<<"]";(w.wspol[i+1]<0)?s<<"":s<<"+";
}
s<<w.wspol[w.stopien]<<"x[" << w.stopien << "]";
return s;
}
int oblicz(int wartosc){
int wynik=0;
for(int i=0; i<=stopien; i++){
wynik+=wspol[i]*pow(wartosc, i);
}
return wynik;
}
};
int main(){
Wielomian w;
cin >> w;
cout << w << endl << w.oblicz(0);
return 0;
}
EDIT:
W konstruktorze dodałem wspol.resize(10); a w funkcji ustaw if(n>=wspol.size()) wspol.resize(n+10); i działa nawet dla wielomianow setnego stopnia. Ale nadal program pozostawiam krytyce.