![]() Ласло Краус |
Објектно програмирање - испити Практични испит 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.