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

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

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

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

Пројектовати на језику C++ систем класа са следећим описом: Саставити на језику C++ главни програм који прочита ред верижног разломка n, створи један верижни разломак са подразумеваним коефицијентима, промени вредност неких од коефицијената читајући преко главног улаза парове i – ai све док не прочита недозвољени индекс, прочита вредности xmin, xmax и Δx, и на крају, табелира вредност верижног разломка на главном излазу за xmin≤x≤xmax са Δ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.