Elektrotehnicki fakultet, Beograd  Ласло Краус ПЈМП
Први парцијални испит
8. 3. 2001.

Аутори: Игор Тартаља (задаци 2 и 3) и Ласло Краус (задатак 1 са решењем)

Задаци: 1 2 3 | Напоменe | Решења: 1 2 3

Поставка задатка 1 (70 поена) ( решење | почетак)

Пројектовати на језику C++ систем класа са следећим описом: Саставити на језику C++ главни програм који прочита ред верижног разломка n, створи један верижни разломак са подразумеваним коефицијентима, промени вредност неких од коефицијената читајући преко главног улаза парове iai све док не прочита недозвољени индекс, прочита вредности xmin, xmax и Δx, и на крају, табелира вредност верижног разломка на главном излазу за xminxxmax са Δx кораком .

Поставка задатка 2 (15 поена) ( почетак)

Дата је класа X:

    class X {
      X() {};
    public:
      static X* c() { return new X;}
    };
а) Шта се постиже дефиницијом класе X на горњи начин?

б) Написати пример креирања објекта класе X у функцији main().

Поставка задатка 3 (15 поена) ( почетак)

Објаснити начин генерисања псеудослучајних бројева по стандардној нормалној (Гаусовој) расподели.

Напоменe ( почетак)


Решење задатка 1 ( поставка | почетак)

// klase.h - Definicije klasa.

#include <iostream.h>
class Niz {
protected:
  double *a; int n;
private:
  void kopiraj (const Niz &niz);
public:
  Niz (int k=10) { a = new double[n=k]; }
  Niz (const Niz &niz) { kopiraj (niz); }
  ~Niz () { delete [] a; }
  Niz & operator= (const Niz &niz) {
    if (this != &niz) { delete [] a; kopiraj (niz); }
    return *this;
  }
  double & operator[] (int i) const {
    if (i<0 || i>=n) throw i;
    return a[i];
  }
  int operator+ () const { return n; }
};

class Fun {
  virtual void pisi (ostream &d) const=0;
public:
  virtual double operator() (double x) const =0;
  friend ostream & operator<< (ostream &d, const Fun &f)
    { f.pisi (d); return d; }
};

class VRazlomak: public Niz, public Fun {
  virtual void pisi (ostream &d) const;
public:
  VRazlomak (int n);
  double operator() (double x) const;
};


// klase.cpp - Definicije metoda klasa.

#include "klase.h"

void Niz::kopiraj (const Niz &niz) {
  a = new double [n=niz.n];
  for (int i=0; i<n; i++) a[i] = niz.a[i];
}

VRazlomak::VRazlomak (int n): Niz (n) {
  for (int i=0; i<n; i++) a[i] = i+1;
}

void VRazlomak::pisi (ostream &d) const {
  d << "VRazl[";
  for (int i=0; i<n; i++) {
    d << a[i]; if (i < n-1) cout << ',';
  }
  d << ']';
}

double VRazlomak::operator() (double x) const {
  double s=0;
  for (int i=n-1; i>=0; i--) {
    if (x + s == 0) throw 0;
    s=a[i]/(x+s);
  }
  return s;
}


// glavni.cpp - Glavni program.

#include "klase.h"
#include <iostream.h>

int main () {
  cout << "n? "; int n; cin >> n;
  VRazlomak v (n);
  try {
    while (1) {
      cout << "i, a[i]? "; int i; cin >> i; cin >> v[i];
    }
  } catch (int) {}
  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 << ' ';
    try           { cout << v(x) << endl; }
      catch (int) { cout << "Ne moze!\n"; }
  }
  return 0;
}
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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