Visa elektrotehnicka skola, Beograd
Ласло Краус
Објектно програмирање - колоквијуми
Први колоквијум
Прва група
24. 4. 2005.

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Пројектовати на језику C++ класу за верижне разломке са реалним коефицијентима, задате формулом: v(x) = a0 / (x+a1 / (x+a2 / (…+an−1 / (x+an)…))). Предвидети:

  1. иницијализацију разломка задатог реда (подразумевано 5) чији су коефицијенти ai = i+1,
  2. иницијализацију разломка другим разломком,
  3. уништавање разломка,
  4. додељивање вредности једног верижног разломка другом разломку (vr1=vr2),
  5. дохватање реда разломка (+vr),
  6. приступање задатом коефицијенту разломка (vr[i] – недозвољени индекс прекида програм),
  7. израчунавање вредности разломка за задату вредност независно променљиве (vr(x)),
  8. писање разломка у датотеку (dat<<vr) у облику vr[a0,a1,,an].

Саставити на језику C++ главни програм који:


Напомене (садржај)


Решење задатка (поставка | садржај)

// 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
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.