Advertisement
196040

OOP zadaci za vezbanje 2 Fudbalska Ekipa

Jun 23rd, 2020
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.46 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class FudbalskaEkipa { // Да се имплементира апстрактна класа FudblaskaEkipa
  5. protected://во која се чува: (5 поени)
  6. char imetrener[100]; //име на тренерот на екипата (максимум 100 знаци)
  7. int golovi[10]; //бројот на постигнати голови на последните 10 натпревари,
  8. public: //последниот натпревар е на позиција 9, предпоследниот на позиција 8, итн (поле од 10 цели броеви)
  9. FudbalskaEkipa() {
  10.     strcpy(this->imetrener, "");
  11.     this->golovi[0] = 0;
  12. }
  13. FudbalskaEkipa(char * imetrener, int * golovi) {
  14.     strcpy(this->imetrener, imetrener);
  15.     for(int i=0;i<10;i++)
  16.     this->golovi[i] = golovi[i];
  17. }
  18. FudbalskaEkipa(const FudbalskaEkipa &copy) {
  19.     strcpy(this->imetrener, copy.imetrener);
  20.     for(int i=0;i<10;i++)
  21.     this->golovi[i] = copy.golovi[i];
  22. }
  23. FudbalskaEkipa &operator=(const FudbalskaEkipa &copy) {
  24.     if(this!=&copy) {
  25.         strcpy(this->imetrener, copy.imetrener);
  26.     for(int i=0;i<10;i++)
  27.     this->golovi[i] = copy.golovi[i];
  28.     }
  29.     return *this;
  30. }
  31.     FudbalskaEkipa &operator+=(int add) { //преоптоварен оператор += за додавање на голови од последниот натпревар
  32.     golovi[0] = add;
  33.     return *this; //(внимавајте секогаш се чуваат головите само од последните 10 натпревари)
  34.     } //NEMAM POJMA SO ZNACE VOAAAAAAAAAAA nema sansi da e tocno
  35. //tocno bese ne znam kako, ne znam zosto
  36. virtual int uspeh() = 0;
  37. bool operator>(FudbalskaEkipa &compare) { //преоптоварен оператор > за споредба на две фудбласки екипи од
  38. if(this->uspeh() > compare.uspeh()) //каков било вид (клубови или репрезентации)
  39.        return true; //според успехот (5 поени)
  40.        else return false;
  41. }
  42.     virtual char * getime() = 0;
  43.     friend ostream &operator<<(ostream &o, FudbalskaEkipa &print) { // оператор << за печатење на стандарден излез
  44.     o<<print.getime()<<endl;//во формат [IME_NA_KLUB/DRZHAVA]\n[TRENER]\n[USPEH]\n
  45.     o<<print.imetrener<<endl;
  46.     o<<print.uspeh()<<endl;
  47.     return o;
  48.     }
  49. };
  50. class Klub : public FudbalskaEkipa { //Од класата FudblaskaEkipa да се изведат класите Klub и Reprezentacija.
  51. private: //За секој клуб дополнително се чува податок за
  52. char imeklub[50]; //името и
  53. int tituli; //бројот на титули што ги има освоено,
  54. public:
  55. Klub() {
  56.     strcpy(this->imeklub, "");
  57.     this->tituli = 0;
  58. }
  59. Klub(char * imetrener, int * golovi, char * imeklub, int tituli) : FudbalskaEkipa(imetrener, golovi) {
  60.     strcpy(this->imeklub, imeklub);
  61.     this->tituli = tituli;
  62. }
  63. Klub(const Klub &copy) : FudbalskaEkipa(copy) {
  64. strcpy(this->imeklub, copy.imeklub);
  65.     this->tituli = copy.tituli;
  66. }
  67.     int uspeh() { //За Klub се пресметува како збир од
  68.      int zbir=0;//збирот на головите од последните 10 натпревари помножен
  69.      for(int i=0;i<10;i++)// со 3 и бројот на титули помножен со 1000
  70.      zbir=zbir+golovi[i];//   (на пр. голови = {2, 0, 1, 3, 2, 0, 1, 4, 2, 3} и
  71.      return zbir*3 + this->tituli*1000; // број на титули = 3, достигнување = 18 * 3 + 3 * 1000 = 3054)
  72.     }
  73.     friend ostream &operator<<(ostream &o, Klub &print) {// оператор << за печатење на стандарден излез
  74.     o<<print.imeklub<<endl;//во формат [IME_NA_KLUB/DRZHAVA]\n[TRENER]\n[USPEH]\n
  75.     o<<print.imetrener<<endl;
  76.     o<<print.uspeh()<<endl;
  77.     return o;
  78.     }
  79.     char * getime() {
  80.     return imeklub;
  81.     }
  82. };
  83. class Reprezentacija : public FudbalskaEkipa {
  84. private://а за репрезентацијата се чуваат податоци за
  85. char imedrzava[50];//името на државата и
  86. int nastapi;//вкупен број на меѓународни настапи.
  87. public://За овие класи да се имплементираат следните методи:
  88. Reprezentacija() {
  89.     strcpy(this->imedrzava, "");
  90.     this->nastapi = 0;
  91. }
  92. Reprezentacija(char * imetrener, int * golovi, char * imedrzava, int nastapi) : FudbalskaEkipa(imetrener, golovi) {
  93.     strcpy(this->imedrzava, imedrzava);
  94.     this->nastapi = nastapi;
  95. }// соодветен конструктор (5 поени)
  96. Reprezentacija(const Reprezentacija &copy) : FudbalskaEkipa(copy) {
  97.     strcpy(this->imedrzava, copy.imedrzava);
  98.     this->nastapi = copy.nastapi;
  99. }
  100. int uspeh() { //За Reprezentacija
  101.     int zbir=0;//збирот на головите од последните 10 натпревари помножен
  102.      for(int i=0;i<10;i++)// со 3 и бројот на титули помножен со 1000
  103.      zbir=zbir+golovi[i];//   (на пр. голови = {2, 0, 1, 3, 2, 0, 1, 4, 2, 3} и
  104.  return zbir*3 + nastapi*50; //и бројот на меѓународни настапи помножен со 50
  105. }
  106.     friend ostream &operator<<(ostream &o, Reprezentacija &print) {// оператор << за печатење на стандарден излез
  107.     o<<print.imedrzava<<endl;//во формат [IME_NA_KLUB/DRZHAVA]\n[TRENER]\n[USPEH]\n
  108.     o<<print.imetrener<<endl;
  109.     o<<print.uspeh()<<endl;
  110.     return o;
  111.     }
  112.     char * getime() {
  113.     return imedrzava;
  114.     }
  115. };
  116. void najdobarTrener(FudbalskaEkipa **niza, int n) {//Да се имплементира функција najdobarTrener
  117. int max = niza[0]->uspeh();// што на влез прима низа од покажувачи кон FudblaskaEkipa и
  118. int indeks=0;
  119. for(int i=0; i<n; i++) //големина на низата и го печати тимот со најголем успех (10 поени).
  120. if(niza[i]->uspeh() > max) {
  121. max = niza[i]->uspeh();
  122. indeks = i;
  123. }
  124. cout<<*niza[indeks];
  125. }
  126. int main() {
  127.     int n;
  128.     cin >> n;
  129.     FudbalskaEkipa **ekipi = new FudbalskaEkipa*[n];
  130.     char coach[100];
  131.     int goals[10];
  132.     char x[100];
  133.     int tg;
  134.     for (int i = 0; i < n; ++i) {
  135.         int type;
  136.         cin >> type;
  137.         cin.getline(coach, 100);
  138.         cin.getline(coach, 100);
  139.         for (int j = 0; j < 10; ++j) {
  140.             cin >> goals[j];
  141.         }
  142.         cin.getline(x, 100);
  143.         cin.getline(x, 100);
  144.         cin >> tg;
  145.         if (type == 0) {
  146.             ekipi[i] = new Klub(coach, goals, x, tg);
  147.         } else if (type == 1) {
  148.             ekipi[i] = new Reprezentacija(coach, goals, x, tg);
  149.         }
  150.     }
  151.     cout << "===== SITE EKIPI =====" << endl;
  152.     for (int i = 0; i < n; ++i) {
  153.         cout << *ekipi[i];
  154.     }
  155.     cout << "===== DODADI GOLOVI =====" << endl;
  156.     for (int i = 0; i < n; ++i) {
  157.         int p;
  158.         cin >> p;
  159.         cout << "dodavam golovi: " << p << endl;
  160.         *ekipi[i] += p;
  161.     }
  162.     cout << "===== SITE EKIPI =====" << endl;
  163.     for (int i = 0; i < n; ++i) {
  164.         cout << *ekipi[i];
  165.     }
  166.     cout << "===== NAJDOBAR TRENER =====" << endl;
  167.     najdobarTrener(ekipi, n);
  168.     for (int i = 0; i < n; ++i) {
  169.         delete ekipi[i];
  170.     }
  171.     delete [] ekipi;
  172.     return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement