![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Друга група 12. 4. 2006. |
---|
Лагранжов (Lagrange) полином се задаје низом тачака (xi,yi), а вредност p(x) се за произвољно x рачуна према приложеној формули. Саставити на језику C++ класу за Лагранжове полиноме (тачке представљати структуром са два реална атрибута). Предвидети:
p1=p2
),
p[i]
– недозвољен индекс прекида програм),
p(x)
),
dat>>p
– чита се ред полинома и низ тачака),
dat<<p
) у облику p[(
x0,
y0);(
x1,
y1);…;(
xn,
yn)]
.
Саставити на језику C++ главни програм који:
studentx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.N:
(Nastava
on
\\Xs200-2
) у каталогу ObjektnoProg\RSx
(x
је број радне станице за којим се ради).// polinom.h #include <cstdlib> #include <iostream> using namespace std; struct Tacka { double x, y; }; class Polinom { Tacka* a; int n; void kopiraj (const Polinom& p); void brisi () { delete [] a; } public: explicit Polinom (int n=2); Polinom (const Polinom& p) { kopiraj (p); } ~Polinom () { brisi (); } Polinom& operator= (const Polinom& p) { if (this != &p) { brisi (); kopiraj (p); } return *this; } int red () const { return n; } Tacka& operator[] (int i) { if (i<0 || i>n) exit (1); return a[i]; } const Tacka& operator[] (int i) const { if (i<0 || i>n) exit (1); return a[i]; } double operator() (double x) const; friend istream& operator>> (istream& d, Polinom& p); friend ostream& operator<< (ostream& d, const Polinom& p); };(садржај)
// polinom.cpp #include "polinom.h" void Polinom::kopiraj(const Polinom& p) { a = new Tacka [(n = p.n) + 1]; for (int i=0; i<=n; i++) a[i] = p.a[i]; } Polinom::Polinom (int n) { a = new Tacka [(this->n = n) + 1]; for (int i=0; i<=n; i++) a[i].x = a[i].y = i; } double Polinom::operator() (double x) const { double p = 0; for (int i=0; i<=n; i++) { double q = a[i].y; for (int j=0; j<=n; j++) if (j != i) q *= (x - a[j].x) / (a[i].x - a[j].x); p += q; } return p; } istream& operator>> (istream& d, Polinom& p) { p.brisi (); d >> p.n; p.a = new Tacka [p.n+1]; for (int i=0; i<=p.n; i++) cin >> p.a[i].x >> p.a[i].y; return d; } ostream& operator<< (ostream& d, const Polinom& p) { d << "p["; for (int i=0; i<=p.n; i++) { if (i) d << ';'; d << '(' << p.a[i].x << ',' << p.a[i].y << ')'; } return d << ']'; }
// test.cpp #include "polinom.h" #include <iostream; using namespace std; int main () { while (true) { cout << "Red? "; int n; cin >> n; if (n < 0) break; Polinom p (n); cout << "Tacke? "; for (int i=0; i<=n; i++) cin >> p[i].x >> p[i].y; cout << "xmin, xmax, dx? "; double xmin, xmax, dx; cin >> xmin >> xmax >> dx; for (double x=xmin; x<=xmax; x+=dx) cout << x << '\t' << p(x) << endl; } }
Red? 3 Tacke? -1 1 0 -2 1 3 2 1 p= p[(-1,1);(0,-2);(1,3);(2,1)] xmin, xmax, dx? -2 3 .5 -2 27 -1.5 10.1875 -1 1 -0.5 -2.4375 0 -2 0.5 0.4375 1 3 1.5 3.8125 2 1 2.5 -7.3125 3 -23 Red? -1
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.