[C++]Program z klasami problem


(Jedras121) #1

Witam.

Napisałem program, który sprawdza czy liczba p/q jest pierwiastkiem tego wielomianu. I wszystko pięknie działa:

#include 

using namespace std;


int main()

{

    int n;

    cout<<"stopien wielomianu: ";

    cin>>n;

    double *t=new double[n];


    cout<
    for (int i=n;i>=0;i--)

    {

        cout<<"a"<
        cin>>t[i];

        }


    double x=(t[0]/t[n-1]);


    double y=x*t[n-1]+t[n-2];    

    for (int i=n-3;i>=0;i--) y=x*y+t[i];    


    if (y!=0) cout<<"Liczba p/q nie jest pierwiastkiem podanego wielomianu.";

    else cout<<"Liczba p/q nie jest pierwiastkiem podanego wielomianu.";   



    delete[] t;

    cout<<"\n\n";

system("pause");

}

[/code]




Postanowiłem ten program napisać na klasach no i niestety coś nie działa :cry: i nie mam pojęcia o co chodzi. Tutaj niedziałający program:

[code]#include using namespace std; class wielomian { int s; //stopien wielomianu double *a; //poszczegolne wspolczynniki a1,a2 itd... float horner(int s); //schemat hornera sprawdzajacy czy podana liczba jest pierwiastkiem wielomianu public: wielomian(int s,double *a); ~wielomian(); int czypierwiastek(); //wywoluje metode horner }; float wielomian::horner(int s) { double x=(a[0]/a[s-1]); double y=x*a[s-1]+a[s-2]; for (int i=s-3;i>=0;i--) y=x*y+a[i]; return y; } wielomian::wielomian(int s,double *t) { a=new double [s]; for (int i=s;i>=0;i--) a[i]=t[i]; } wielomian::~wielomian() { delete[] a; } int wielomian::czypierwiastek() { if (horner(s)) return 0; else return 1; } int main() { int n; cout<>n; double *t=new double[n]; cout< for (int i=n;i>=0;i--) { cout<>t[i]; } wielomian W(n,t); if (W.czypierwiastek()) cout<<"Liczba p/q jest pierwiastkiem podanego wielomianu."; else cout<<"Liczba p/q nie jest pierwiastkiem podanego wielomianu."; delete[] t; cout<<"\n\n"; system("pause"); }

To jest mój pierwszy program na klasach więc proszę o wyrozumiałość i wytknięcie wszystkich moich błędów abym ich na przyszłość nie robił :smiley:


([alex]) #2

Nie powinna tez działać poprawnie wersja "spagetti":

double *t=new double[n]; // t[0] ... t[n-1]

for (int i=n;i>=0;i--) // i -> n ... 0

cin>>t_; // t_ -> t[n] -> poza zakresem

Poza tym twój program (w obu wersjach) wypisuje: "Liczba p/q nie jest pierwiastkiem podanego wielomianu." , niezależnie od wyników obliczeń.


(Jedras121) #3

To co [alex] napisałeś to prawda, ale przede wszystkim zapomniałem, że w moim programie wartość "s" się nie zmieni w konstruktorze. Ale już to naprawiłem. A co do komunikatu to skopiowałem i zapomniałem usunąć "nie".

Dzięki za pomoc.


([alex]) #4

Właśnie się zastanawiam w jaki sposób stwierdziłeś że działa,

skoro:

  • [*:3w46sncx]zawsze daje ten sam komunikat;[*:3w46sncx]maże po pamięci;[*:3w46sncx]ignoruje "najstarszy" współczynnik.

?