• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program do wyszukiwania rozwiązań całkowitych wielomianu działa tylko dla poniektórych wielomianów

0 głosów
539 wizyt
pytanie zadane 19 listopada 2018 w C i C++ przez Marte Nowicjusz (140 p.)

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;
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+5 głosów
2 odpowiedzi 2,241 wizyt
0 głosów
2 odpowiedzi 681 wizyt
0 głosów
0 odpowiedzi 834 wizyt
pytanie zadane 20 stycznia 2020 w Inne języki przez Eufem Nowicjusz (120 p.)

93,758 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,355 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...