Advertisement
eniodordan

[OOP] 1. KOLOKVIJ - 21.11.2017. (A)

Nov 24th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.50 KB | None | 0 0
  1. // 1. Kreirajte klasu koja predstavlja ventil.Svaki ventil može u sekundi propustiti određen
  2. // maksimalan broj litara vode i biti otvoren određeni postotak.Pružiti konstruktore
  3. // (podrazumijevani i parametarski).Pružiti javno sučelje za otvaranje i zatvaranje ventila u
  4. // potpunosti, ali i postavljanje na određeni postotak.Kroz javno sučelje omogućiti provjeru
  5. // trenutne otvorenosti ventila te provjeru maksimalnog protoka.Omogućiti usporedbu dvaju
  6. // ventila, veći je onaj koji trenutno propušta veću količinu vode.Kao test klase potrebno je
  7. // napraviti polje ventila s nasumično generiranim protokom u intervalu[1, 20] litara / sekundi i
  8. // postotkom otvorenosti[0.0, 1.0].Ako ovo polje predstavlja sustav spojen na spremnik s
  9. // tekućinom i kroz sve ventile se istovremeno pusti 8479 litara tekućine, napišite kod koji računa
  10. // i ispisuje koliko dugo će trajati istjecanje tekućine.
  11.  
  12. #include <iostream>
  13. #include <cstdlib>
  14. #include <ctime>
  15.  
  16. using namespace std;
  17.  
  18. // ---------------------------------------
  19.  
  20. class Ventil {
  21.     friend bool operator< (const Ventil&, const Ventil&);
  22.     friend bool operator> (const Ventil&, const Ventil&);
  23. private:
  24.     double mKolicinaVode;
  25.     double mOtvorenost;
  26. public:
  27.     Ventil();
  28.     Ventil(double, double);
  29.     void Otvori();
  30.     void Zatvori();
  31.     void setOtvorenost(double);
  32.     int getProtok() const;
  33.     double getOtvorenost() const;
  34. };
  35.  
  36. // ---------------------------------------
  37.  
  38. Ventil::Ventil() : mKolicinaVode(0.0), mOtvorenost(0.0) {}
  39.  
  40. Ventil::Ventil(double KolicinaVode, double Otvorenost) : mKolicinaVode(KolicinaVode), mOtvorenost(Otvorenost) {}
  41.  
  42. void Ventil::Otvori() {
  43.     mOtvorenost = 1.0;
  44. }
  45.  
  46. void Ventil::Zatvori() {
  47.     mOtvorenost = 0.0;
  48. }
  49.  
  50. void Ventil::setOtvorenost(double postotak) {
  51.     mOtvorenost = postotak;
  52. }
  53.  
  54. int Ventil::getProtok() const {
  55.     return mKolicinaVode * mOtvorenost;;
  56. }
  57.  
  58. double Ventil::getOtvorenost() const {
  59.     return mOtvorenost;
  60. }
  61.  
  62. // ---------------------------------------
  63.  
  64. bool operator< (const Ventil& lhs, const Ventil& rhs) {
  65.     return lhs.getProtok() < rhs.getProtok();
  66. }
  67.  
  68. bool operator>(const Ventil& lhs, const Ventil& rhs) {
  69.     return operator<(rhs, lhs);
  70. }
  71.  
  72. // ---------------------------------------
  73.  
  74. double IstjecanjeTekucine(Ventil** polje, int n, int spremnik) {
  75.     double zbroj = 0;
  76.     for (int i = 0; i < n; i++) {
  77.         zbroj += polje[i]->getProtok();
  78.     }
  79.  
  80.     return spremnik / zbroj / 60;
  81. }
  82.  
  83. // ---------------------------------------
  84.  
  85. int main() {
  86.     std::srand((unsigned int)std::time(0));
  87.     Ventil* polje[5];
  88.     for (int i = 0; i < 5; i++) {
  89.         double protok = 1 + (double)rand() * 19 / (double)RAND_MAX;
  90.         double otvorenost = (double)rand() / (double)RAND_MAX;
  91.         polje[i] = new Ventil(protok / otvorenost, otvorenost);
  92.     }
  93.  
  94.     cout << IstjecanjeTekucine(polje, 5, 8479) << endl;
  95.  
  96.     for (int i = 0; i < 5; i++) {
  97.         delete polje[i];
  98.     }
  99.  
  100.     return 0;
  101. }
  102.  
  103. // 2. Kreirajte klasu koja predstavlja bateriju, s maksimalnim kapacitetom i trenutno dostupnim
  104. // kapacitetom u mAh.Definirajte podrazumijevani i parametarski konstruktor tako da svaka
  105. // nova baterija dolazi potpuno napunjena.Omogućite dohvaćanje maksimalnog kapaciteta, te
  106. // umanjenje trenutno dostupnog kapaciteta baterije za predanu vrijednost.Kroz javno sučelje
  107. // klase omogućite računanje trenutnog stanja baterije u postotcima.Omogućite i provjeru je li
  108. // bateriju potrebno puniti(jest ako je ispod 15 % ).Omogućite ispis baterije u obliku : cout <<
  109. // battery; gdje je izlaz : „Battery : [max.kapacitet]mAh[posto] % remaining.“ Napišite prijateljsku
  110. // funkciju koja računa vrijeme potrebno za punjenje baterije.Funkcija kao argument(uz druge
  111. // nužne argumente) prima jakost struje punjača u miliAmperima, a vraća broj sati koji je
  112. // potreban da se baterija napuni.Uzmite da je gubitak kod punjenja 20 % .U glavnoj funkciji
  113. // kreirati bateriju, ispisati ju, isprazniti ju po volji i ispisati koliko će biti potrebno da se napuni.
  114.  
  115. #include <iostream>
  116.  
  117. using namespace std;
  118.  
  119. // ---------------------------------------
  120.  
  121. class Baterija {
  122.     friend std::ostream& operator<< (std::ostream&, const Baterija&);
  123.     friend double VrijemePunjenja(Baterija& , double);
  124. private:
  125.     double mMaxKapacitet;
  126.     double mTrenutniKapacitet;
  127. public:
  128.     Baterija();
  129.     Baterija(double);
  130.     void Potrosnja(double);
  131.     double getMaxKapacitet() const;
  132.     int getPostotak() const;
  133.     void Provjera() const;
  134. };
  135.  
  136. // ---------------------------------------
  137.  
  138. Baterija::Baterija() : mMaxKapacitet(0.0), mTrenutniKapacitet(0.0) {}
  139.  
  140. Baterija::Baterija(double MaxKapacitet) : mMaxKapacitet(MaxKapacitet), mTrenutniKapacitet(MaxKapacitet) {}
  141.  
  142. void Baterija::Potrosnja(double kapacitet) {
  143.     mTrenutniKapacitet -= kapacitet;
  144.  
  145.     if (mTrenutniKapacitet < 0) {
  146.         mTrenutniKapacitet = 0;
  147.     }
  148. }
  149.  
  150. double Baterija::getMaxKapacitet() const {
  151.     return mMaxKapacitet;
  152. }
  153.  
  154. int Baterija::getPostotak() const {
  155.     return (mTrenutniKapacitet / mMaxKapacitet) * 100;
  156. }
  157.  
  158. void Baterija::Provjera() const {
  159.     if (this->getPostotak() < 15) {
  160.         cout << "Baterija prazna! Potrebno napuniti. Postotak: " << this->getPostotak() << "%" << endl;
  161.     }
  162. }
  163.  
  164. // ---------------------------------------
  165.  
  166. std::ostream& operator<< (std::ostream& OutputStream, const Baterija& rhs)
  167. {
  168.     OutputStream << "Battery: " << rhs.mTrenutniKapacitet << "mAh, " << rhs.getPostotak() << "% remaining.";
  169.     return OutputStream;
  170. }
  171.  
  172. // ---------------------------------------
  173.  
  174. double VrijemePunjenja(Baterija& baterija, double punjac) {
  175.         return 1.2 * (baterija.mMaxKapacitet - baterija.mTrenutniKapacitet) / punjac;
  176. }
  177.  
  178. // ---------------------------------------
  179.  
  180. int main() {
  181.     Baterija N(3000);
  182.  
  183.     cout << N << endl;
  184.     N.Potrosnja(2700);
  185.     cout << N << endl;
  186.     N.Provjera();
  187.     cout << VrijemePunjenja(N, 2000) << " sati je potrebno da se baterija napuni." << endl;
  188.  
  189.     return 0;
  190. }
  191.  
  192. // 3. Napišite klasu koja predstavlja lozinku i čuva ju u obliku stringa.Omogućiti kreiranje lozinke
  193. // parametarskim konstruktorom, usporedbu jednakosti dviju lozinki te metodu koja sadržaj
  194. // lozinke vraća u obliku stringa, ali skrivenog sadržaja(npr: "****", gdje broj zvjezdica odgovara
  195. // duljini lozinke).Kreirajte sučelje(interface) koje sadrži metodu za generiranje objekta lozinke
  196. // na temelju predanog stringa.Kreirajte konkretnu klasu koja implementira ranije sučelje, a
  197. // predstavlja generator zasoljene lozinke s atributom za potreban broj znakova za soljenje.
  198. // Omogućiti njegovo postavljanje kod stvaranja objekta.Lozinka se "soli" tako da se na kraj
  199. // njenog sadržaja dodaju nasumični znakovi(u rasponu 'a' - 'z').Kao test klase potrebno je
  200. // napraviti jedan objekt klase lozinka parametarskim konstruktorom te drugi objekt korištenjem
  201. // konkretnog generatora preko pokazivača koji je tipa sučelja i stringa koji je unesen s konzole.
  202. // Ako su dvije kreirane lozinke jednake, potrebno je zapisati jednu od njih u obliku skrivenog
  203. // stringa u tekstualnu datoteku s vašim prezimenom.
  204.  
  205. #include <iostream>
  206. #include <fstream>
  207. #include <cstdlib>
  208. #include <ctime>
  209. #include <string>
  210.  
  211. using namespace std;
  212.  
  213. // ---------------------------------------
  214.  
  215. class Password {
  216.     friend bool operator== (const Password&, const Password&);
  217. private:
  218.     string mPass;
  219. public:
  220.     Password(string);
  221.     string toString() const;
  222. };
  223.  
  224. // ---------------------------------------
  225.  
  226. Password::Password(string Pass) : mPass(Pass) {}
  227.  
  228. string Password::toString() const {
  229.     return string(mPass.length(), '*');
  230. }
  231.  
  232. // ---------------------------------------
  233.  
  234. bool operator== (const Password& lhs, const Password& rhs)
  235. {
  236.     return lhs.mPass == rhs.mPass;
  237. }
  238.  
  239. // ---------------------------------------
  240.  
  241. class IGenerator {
  242. public:
  243.     virtual Password& GeneratePassword(string) = 0;
  244. };
  245.  
  246. // ---------------------------------------
  247.  
  248. class PasswordGenerator : public IGenerator {
  249. private:
  250.     int mSol;
  251. public:
  252.     PasswordGenerator(int);
  253.     virtual Password& GeneratePassword(string);
  254. };
  255.  
  256. // ---------------------------------------
  257.  
  258. PasswordGenerator::PasswordGenerator(int Sol) : mSol(Sol) {}
  259.  
  260. Password& PasswordGenerator::GeneratePassword(string password) {
  261.     std::srand((unsigned int)std::time(0));
  262.     Password *pass = new Password(password + string(mSol, 'a' + rand() * ('z' - 'a')  / RAND_MAX));
  263.  
  264.     return *pass;
  265. }
  266.  
  267. // ---------------------------------------
  268.  
  269. int main() {
  270.     Password A("kolokviji");
  271.  
  272.     IGenerator *p = new PasswordGenerator(5);
  273.     string str;
  274.     getline(cin, str);
  275.     Password B = p->GeneratePassword(str);
  276.  
  277.     if (A == B) {
  278.         ofstream output("prezime.txt");
  279.         output << A.toString() << "\n";
  280.         output.close();
  281.     }
  282.  
  283.     return 0;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement