![]() Ласло Краус |
Објектно програмирање - испити Практични испит 22. 4. 2003 |
|---|
Пројектовати на језику C++ апстрактну класу за изразе реалног типа. Предвидети:
+izr), и
dat<<izr).
Константа је израз чија вредност не може да се промени после иницијализације. Приликом писања у неки излазни ток пише се вредност константе. Пројектовати на језику C++ класу за константе као изведену класу из класе за апстрактне за изразе. Поред могућности које постоје у основној класи, предвидети:
Променљива је израз који има име и реалну вредност која може да се промени после иницијализације. Приликом писања у неки излазни ток пише се име променљиве. Све променљиве морају да имају различита имена. Покушај стварања променљиве са већ коришћеним именом пријавити изузетком. Пројектовати на језику C++ класу за променљиве као изведену класу из апстрактне класе за изразе. Поред могућности које постоје у основној класи предвидети:
prom=broj),
prom1=prom2), и
Збир, производ и степен су изрази који се иницијализују са два израза (на пример: a и b) и чије вредности су једнаке a+b, ab и ab. Приликом писања у неки излазни ток пише се (a+b), (a*b), односно (a^b), где су a и b резултати писања операнада. Пројектовати на језику C++ класе за збирове, производе и степене као изведене класe из апстрактне класе за изразе. Поред могућности које постоје у основној класи предвидети:
Саставити на језику C++ главни програм који ствара објекат за промењљиву x и објекат за израз x3-2x, испише алгебарски облик тог израза и после врши табелирање вредности тог израза за све вредности xmin≤x≤xmax са кораком Δx. Параметри табелирања се читају преко главног улаза.
// izraz.h
#ifndef _izraz_h_
#define _izraz_h_
#include <iostream.h>
class Izraz {
virtual void pisi (ostream& d) const =0;
public:
virtual double operator+ () const =0;
friend ostream& operator<< (ostream& d, const Izraz& i)
{ i.pisi (d); return d; }
};
#endif
// konst.h
#ifndef _konst_h_
#define _konst_h_
#include "izraz.h"
class Konst: public Izraz {
double vr;
void pisi (ostream& d) const { d << vr; }
public:
Konst (double br=0) { vr = br; }
double operator+ () const { return vr; }
};
#endif
// prom.h
#ifndef _prom_h_
#define _prom_h_
#include "izraz.h"
class Prom: public Izraz {
double vr; char *ime;
struct Elem {
Prom *pr; Elem* sled;
Elem (Prom* p, Elem* s) {pr=p; sled=s;}
};
static Elem *prvi;
Prom (const Prom&) {}
void pisi (ostream& d) const { d << ime; }
public:
Prom (const char* i, double br=0);
Prom& operator= (double br) { vr = br; return *this; }
Prom& operator= (const Prom& p) { vr = p.vr; return *this; }
double operator+ () const { return vr; }
~Prom ();
};
class GPromIme {};
#endif
// prom.cpp
#include "prom.h"
#include <string.h>
Prom::Elem *Prom::prvi = 0;
Prom::Prom (const char* i, double br) {
Elem* tek = prvi;
while (tek && strcmp(tek->pr->ime,i)!=0) tek = tek->sled;
if (tek) throw GPromIme ();
ime = new char [strlen(i)+1];
strcpy (ime, i); vr = br;
prvi = new Elem (this, prvi);
}
Prom::~Prom () {
Elem *tek = prvi, *preth = 0;
while (prvi && tek->pr!=this) { preth = tek; tek = tek->sled; }
(!preth ? prvi : preth->sled) = tek->sled;
delete tek; delete ime;
}
// zbir.h
#ifndef _zbir_h_
#define _zbir_h_
#include "izraz.h"
class Zbir: public Izraz {
const Izraz *a, *b;
void pisi (ostream& d) const { d<< '(' << *a << '+' << *b << ')'; }
public:
Zbir (const Izraz* aa, const Izraz* bb) { a = aa; b = bb; }
double operator+ () const { return +*a + +*b; }
};
#endif
// proizvod.h
#ifndef _proizvod_h_
#define _proizvod_h_
#include "izraz.h"
class Proizvod: public Izraz {
const Izraz *a, *b;
void pisi (ostream& d) const { d<< '(' << *a << '*' << *b << ')'; }
public:
Proizvod (const Izraz* aa, const Izraz* bb) { a = aa; b = bb; }
double operator+ () const { return +*a * +*b; }
};
#endif
// stepen.h
#ifndef _stepen_h_
#define _stepen_h_
#include "izraz.h"
#include <math.h>
class Stepen: public Izraz {
const Izraz *a, *b;
void pisi (ostream& d) const { d<< '(' << *a << '^' << *b << ')'; }
public:
Stepen (const Izraz* aa, const Izraz* bb) { a = aa; b = bb; }
double operator+ () const { return pow (+*a, +*b); }
};
#endif
// test.cpp
#include "konst.h"
#include "prom.h"
#include "zbir.h"
#include "proizvod.h"
#include "stepen.h"
#include <iostream.h>
int main () {
Prom x ("x");
Izraz *izr = new Zbir (
new Stepen(&x,new Konst(3)),
new Proizvod(new Konst(-2), &x)
);
cout << "Izraz= " << *izr << endl << endl;
cout << "xmin, xmax, dx? ";
double xmin, xmax, dx;
cin >> xmin >> xmax >> dx;
for (x=xmin; +x<=xmax; x=+x+dx) cout << +x << ' ' << +*izr << endl;
}
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.