![]() Ласло Краус |
Објектно програмирање - колоквијуми Први колоквијум Прва група 24. 4. 2005. |
|---|
Пројектовати на језику C++ класу за верижне разломке са реалним коефицијентима, задате формулом: v(x) = a0 / (x+a1 / (x+a2 / (…+an−1 / (x+an)…))). Предвидети:
vr1=vr2),
+vr),
vr[i] – недозвољени индекс прекида програм),
vr(x)),
dat<<vr) у облику vr[a0,a1,…,an].
Саставити на језику C++ главни програм који:
studentx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.N: (Nastava on \\Xs200-2) у каталогу ObjektnoProg\RSx (x је број радне станице за којим се ради).
// verizni.h
#include <iostream>
#include <cstdlib>
using namespace std;
class Verizni {
double* a; int n;
void kopiraj (const Verizni& v);
void brisi () { delete [] a; }
public:
explicit Verizni (int nn=5);
Verizni (const Verizni& v)
{ kopiraj (v); }
~Verizni () { brisi (); }
Verizni& operator= (const Verizni& v) {
if (this != &v) { brisi (); kopiraj (v); }
return *this;
}
int operator+ () const { return n; }
double& operator[] (int i) {
if (i<0 || i>n) exit (1);
return a[i];
}
const double& operator[] (int i) const{
if (i<0 || i>n) exit (1);
return a[i];
}
double operator() (double x) const;
friend ostream& operator<< (ostream& d, const Verizni& v);
};
// verizni.cpp
#include "verizni.h"
void Verizni::kopiraj (const Verizni& v){
a = new double [n = v.n+1];
for (int i=0; i<=n; i++) a[i] = v.a[i];
}
Verizni::Verizni (int nn) {
a = new double [(n=nn) + 1];
for (int i=0; i<=n; i++) a[i] = i+1;
}
double Verizni::operator() (double x) const {
double s = a[n];
for (int i=n-1; i>=0; s=a[i--]/(x+s));
return s;
}
ostream& operator<< (ostream& d, const Verizni& v) {
d << "vr[";
for (int i=0; i<=v.n; i++) {
if (i) d << ',';
d << v.a[i];
}
return d << ']';
}
// veriznit.cpp
#include "verizni.h"
#include <iostream>
using namespace std;
int main () {
while (true) {
cout << "n? "; int n; cin >> n;
if (n <= 0) break;
Verizni v(n);
while (true) {
cout << "i,a[i]? "; int i; cin >> i;
if (i<0 || i>+v) break;
double a; cin >> a; v[i] = a;
}
cout << v << endl;
cout << "xmin, xmax, dx? ";
double xmin, xmax, dx; cin >> xmin >> xmax >> dx;
for (double x=xmin; x<=xmax; x+=dx)
cout << x << '\t' << v(x) << endl;
}
return 0;
}
n? 3
i,a[i]? 2 1
i,a[i]? 1 5
i,a[i]? -1
vr[1,5,1,4]
xmin, xmax, dx? 0 4 .25
0 0.05
0.25 0.0947595
0.5 0.134715
0.75 0.167913
1 0.193548
1.25 0.211816
1.5 0.223565
1.75 0.229945
2 0.232143
2.25 0.231231
2.5 0.228099
2.75 0.223452
3 0.217822
3.25 0.211603
3.5 0.20508
3.75 0.198453
4 0.19186
n? 0
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.