Witam, wczoraj podjęłam się napisania programu (jak w temacie). Postanowiłam nie spoglądać do internetu po pomoc lub inspirację i napisać go tak jak potrafię. Dzisiaj jednak okazało się, że działa on dla np. x^2 + 2x + 1, a dla np. większości wielomianów stopnia trzeciego już nie. Ogółem nie działa dla większości wielomianów, po prostu się "wywala". Chciałabym prosić o pomoc w znalezieniu błędu i być może jakieś porady co do uproszczenia całości.
#include <iostream>
#include <windows.h>
#include <math.h>
#include<cstdlib>
using namespace std;
int main()
{
cout << "Jakiego stopnia jest wielomian:" << endl;
int stopien;
cin>>stopien;
cout<<"Podaj wspolczynniki wielomianu poczynajac od tego przy najwyzszej potedze:"<<endl;
int wspl[stopien+1];
for (int i=0;i<=stopien;i++)
{
cin>> wspl[i];
}
for (int i=0;i<=stopien;i++) //wypisanie wielomianu
{
if (i==0)
{
cout<< "W(x) = "<<wspl[i]<< " * x^" <<(stopien-i);
}
else
{
cout<< " + "<<wspl[i]<< " * x^" <<(stopien-i);
}
}
cout<<endl;
int p[2*wspl[stopien]], q[2*wspl[0]];
int o=0, u=0;
for (int i=0;i<=2*wspl[stopien];i++) //tablica p (dzielniki wyrazu wolnego)
{
if (-1*wspl[stopien]+i == 0)
{
}
else if (wspl[stopien]%(-1*wspl[stopien]+i) == 0)
{
p[o]=(-1*wspl[stopien]+i);
o++;
}
}
cout<<endl;
for (int i=0;i<=2*wspl[0];i++) //tablica q (dzielniki pierwszego wyrazu)
{
if (-1*wspl[0]+i == 0)
{
}
else if (wspl[0]%(-1*wspl[0]+i) == 0)
{
q[u]=(-1*wspl[0]+i);
u++;
}
}
cout<<endl;
int pdoq [wspl[0]*wspl[stopien]], t=0,r=0;
for (int i=0;i<=o-1;i++) //tablica liczb p/q calkowitych
{
if (p[i]%q[r]==0)
{
pdoq[t]=p[i]/q[r];
t++;
if (i==o-1&&r<u-1)
{
r++;
i=-1;
}
else if (i==o-1&&r==u-1)
{
break;
}
else {};
}
else {};
}
int x;
for (int i=0;i<=t-1;i++)
{
x=pdoq[i];
int suma=0;
for (int n=0;n<=stopien;n++)
{
suma+=wspl[n]*pow(x,stopien-n);
}
if (suma==0)
{
cout<<"W(x) dla x="<<pdoq[i]<<" wynosi 0, wiec "<<pdoq[i]<<" jest pierwiastkiem tego wielomianu."<<endl;
}
}
Sleep(2000);
return 0;
}