Próbowałem napisać program(kod poniżej) wyznaczający wymierne miejsca zerowe wielomianu dowolnego stopnia, niestety nie wiem czemu otrzymywany wynik wyświetla się wielokrotnie ( konkretnie powtarza się w nieskończoność). Jeśli ktoś pomógłby mi znaleźć bląd byłbym bardzo wdzięczny :)
Gdyby ktoś nie znał albo zapomniał w jaki sposób wyznacza się pierwiastki (miejsca zerowe) wielomianu, poniżej opisuję przebieg działania:
Aby znaleźć wymierne pierwiastki wielomianu najpierw musimy znaleźć wszystkie dzielniki współczynnika przy najwyższej potędze (oznaczmy je zbiorem A) a następnie tego przy najniższej (zbiór B). Kolejnym krokiem jest wyliczenie możliwych liczb "z" powstałych poprzez podzielenie liczby ze zbioru A przez liczbę ze zbioru B. Ostatnim etapem jest sprawdzenie czy po podstawieniu do wielomianu liczby "z" lub "-z" w miejsce x-ów otrzymujemy wartość 0. Jeśli tak, liczba "z" lub analogicznie "-z" jest pierwiastkiem równania.
Próbowałem napisać program (kod poniżej) wyznaczający wymierne miejsca zerowe wielomianu dowolnego stopnia, niestety nie wiem czemu otrzymywany wynik wyświetla się wielokrotnie ( konkretnie powtarza się w nieskończoność). Jeśli ktoś pomógłby mi znaleźć bląd byłbym bardzo wdzięczny :)
Gdyby ktoś nie znał albo zapomniał w jaki sposób wyznacza się pierwiastki (miejsca zerowe) wielomianu, poniżej opisuję przebieg działania:
Aby znaleźć wymierne pierwiastki wielomianu najpierw musimy znaleźć wszystkie dzielniki współczynnika przy najwyższej potędze (oznaczmy je zbiorem A) a następnie tego przy najniższej (zbiór B). Kolejnym krokiem jest wyliczenie możliwych liczb "z" powstałych poprzez podzielenie liczby ze zbioru A przez liczbę ze zbioru B. Ostatnim etapem jest sprawdzenie czy po podstawieniu do wielomianu liczby "z" lub "-z" w miejsce x-ów otrzymujemy wartość 0. Jeśli tak, liczba "z" lub analogicznie "-z" jest pierwiastkiem równania.
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int k=2,i,j; // k- ilosc wyrazow-1
long double z,s=0;
int t[2][3]; // pierwszy wiersz- wspolczynniki przy wyrazach, drugi wiersz- potegi przy wyrazach
int main()
{
for (int m=0;m<=k;m++)
{
cout<<"podaj "<<m+1<<" wspolczynnik ";
cin>>t[0][m]; // wspolczynnik
cout<<"podaj stopien wyarzu prz tym wspolczynniku ";
cin>>t[1][m]; // stopien
}
for (i=1;i<=t[0][k];i++) //szukanie dzielnikow k'tego wspolczynnika
{
if (t[0][k]%i==0)
{
for(j=1;j<=t[0][0];j++) //szukanie dzielnikow pierwszego wspolczynnika
{
if(t[0][0]%j==0)
{
z=i/j; //z- mozliwy pierwiastek
for (i=0;i<=k;i++) //petla liczaca wartosc(s) wielomianu W(z)
{
if (t[1][i]==0) s=s+t[0][i];
else s=s+t[0][i]*pow(z,t[1][i]);
}
if (-0.0000000000001<s<0,0000000000001) cout<<z<<" jest pierwiastkiem tego wielomianu"<<endl; //sprawdzenie czy W(z)~0 oraz wypisanie pierwiastka jesli true
s=0; //zerowanie wartosci wielomianu W(z)
for (i=0;i<=k;i++) // petla liczaca wartosc(s) wielomianu W(-z)
{
if (t[1][i]==0) s=s+t[0][i];
else s=s+t[0][i]*pow(-z,t[1][i]);
}
if (-0.0000000000001<s<0,0000000000001) cout<<"-"<<z<<" jest pierwiastkiem tego wielomianu"<<endl; //sprawdzenie czy W(z)~0 oraz wypisanie pierwiastka jesli true
}
}
}
}
system("pause");
return 0;
}