![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Друга група 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.