![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 7. 5. 2011. |
---|
Запис о артиклу има назив артикла, количину, ознаку јединице мере (више знакова) и цену. Написати на језику C++ класу за записе. Предвидети:
zapis+=promena
; повратна вредност је индикатор успеха – неуспех је ако би количина постала негативна); и
it<<zapis
; пише се назив артикла, количина са јединицом мере, цена и вредност са додатком "din").
Инвентар садржи низ показивача на записе одређеног капацитета. Написати на језику C++ класу за инвентаре. Предвидети:
inv[naziv]
; повратна вредност је показивач на пронађени запис или 0 ако такав запис не постоји);
inv+=&zapis
; повратна вредност је индикатор успеха – неуспех је ако се прекорачи капацитет инвентара или ако у инвентару већ постоји запис истог назива);
it<<inv
; пишу се записи у инвентару ред по ред и на крају укупна вредност артикала).
Написати на језику C++ програм који направи инвентар капацитета 8, додаје три записа за различите артикле, у сваком запису постави количину и испише садржај инвентара на главном излазу. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
.
// zapis.h #include <cstring> #include <iostream> using namespace std; class Zapis { char *naz, *jed; double kol, cen; void kopiraj(const Zapis& z) { naz = new char [strlen(z.naz)+1]; strcpy(naz, z.naz); jed = new char [strlen(z.jed)+1]; strcpy(jed, z.jed); kol = z.kol; cen = z.cen; } void brisi() { delete [] naz; delete [] jed; } public: Zapis(const char* n, const char* j, double c) { naz = new char [strlen(n)+1]; strcpy(naz, n); jed = new char [strlen(j)+1]; strcpy(jed, j); kol = 0; cen = c; } Zapis(const Zapis& z) { kopiraj(z); } ~Zapis() { brisi(); } Zapis& operator=(const Zapis& z) { if (this != &z) { brisi(); kopiraj(z); } return *this; } const char* naziv() const { return naz; } double kolicina() const { return kol; } const char* jedMere() const { return jed; } double cena() const { return cen; } double vrednost() const { return cen * kol; } bool operator+=(double dk) { if (kol + dk < 0) return false; kol += dk; return true; } friend ostream& operator<<(ostream& it, const Zapis& z) { return it << z.naz << ": " << z.kol << z.jed << " x " << z.cen << "din = " << z.vrednost() << "din"; } };(садржај)
// inventar.h #include "zapis.h" #include <iostream> using namespace std; class Inventar { Zapis** niz; int kap, duz; void kopiraj(const Inventar& inv); void brisi(); public: explicit Inventar(int k=10) { niz = new Zapis* [kap = k]; duz = 0; } Inventar(const Inventar& inv) { kopiraj(inv); } ~Inventar() { brisi(); } Inventar& operator=(const Inventar& inv) { if (this != &inv) { brisi(); kopiraj(inv); } return *this; } int duzina() const { return duz; } Zapis* operator[](const char* naziv); const Zapis* operator[] (const char* naziv) const { return const_cast<Inventar&>(*this)[naziv]; } bool operator+=(Zapis* z) { if (duz==kap || (*this)[z->naziv()]) return false; niz[duz++] = z; return true; } double vrednost() const; friend ostream& operator<<(ostream& it, const Inventar& inv); };
// inventar.cpp #include "inventar.h" #include <cstring> using namespace std; void Inventar::kopiraj(const Inventar& inv){ niz = new Zapis* [kap = inv.kap]; duz = inv.duz; for (int i=0; i<duz; i++) niz[i] = new Zapis(*inv.niz[i]); } void Inventar::brisi() { for (int i=0; i<duz; delete niz[i++]); delete [] niz; } Zapis* Inventar::operator[](const char* naziv) { for (int i=0; i<duz; i++) if (strcmp(niz[i]->naziv(), naziv) == 0) return niz[i]; return 0; } double Inventar::vrednost() const { double v = 0; for (int i=0; i<duz; v+=niz[i++]->vrednost()); return v; } ostream& operator<<(ostream& it, const Inventar& inv) { for (int i=0; i<inv.duz; it<<*inv.niz[i++]<<endl); return it << "==============================\n" << "UKUPNO: " << inv.vrednost() << "din" << endl; }
// program.cpp #include "inventar.h" #include <iostream> using namespace std; int main() { Inventar inv(8); inv += new Zapis("kruska", "kg", 95); inv += new Zapis("mleko", "l", 75); inv += new Zapis("kabl", "m", 120); *inv["kruska"] += 8; *inv["mleko"] += 35; *inv["kabl"] += 155; cout << inv; return 0; }
kruska: 8kg x 95din = 760din mleko: 35l x 75din = 2625din kabl: 155m x 120din = 18600din ============================== UKUPNO: 21985din
Copyright © 2011, Laslo Kraus
Последња ревизија: 11.6.2011.