Advertisement
borisdexter

Objektno grupa 1

Jan 21st, 2020
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.95 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. // dinamicka alokacija vo 4 chekori
  4. // 1) briseme shto i da ima vo promenlivata
  5. // 2) kazuvame kolkava da ni bide nizata
  6. // 3) prefrlame vrednost
  7. // 4) briseme dinamicki alocirani promenlivi vo destructor
  8.  
  9. /*
  10.     int ocenki[5];
  11.     cout<<ocenki[2];
  12.     int operator[](int index){
  13.     return niza[index];
  14.     }
  15.    
  16.  
  17. */
  18.  
  19. using namespace std;
  20. using namespace std;
  21. class Student{
  22. private:
  23.     int index;
  24.     int ocenki[5];
  25.     char ime[15];
  26.     char nasoka[5];
  27. public:
  28.     Student(){}
  29.     Student(int index,char* ime,char* nasoka,int* ocenki){
  30.     this->index=index;
  31.     strcpy(this->ime,ime);
  32.     strcpy(this->nasoka,nasoka);
  33.     for(int i=0;i<5;i++){
  34.         this->ocenki[i]=ocenki[i];
  35.     }
  36.     }
  37.     // copy constructor
  38.     Student(const Student &drugStudent){
  39.     this->index=drugStudent.index;
  40.     strcpy(this->ime,drugStudent.ime);
  41.     strcpy(this->nasoka,drugStudent.nasoka);
  42.     for(int i=0;i<5;i++){
  43.         this->ocenki[i]=drugStudent.ocenki[i];
  44.     }
  45.     }
  46.  
  47.     // vrati ja ocenkata na pozicija index
  48.     int getOcenki(int index){
  49.     return ocenki[index];
  50.     }
  51.  
  52.     // gotova funkcija za broenje kolku pati ja ima int ocenka
  53.     int izbrojOcenki(int ocenka){
  54.     int brojac=0;
  55.     for(int i=0;i<5;i++){
  56.         if(ocenki[i]==ocenka){
  57.             brojac++;
  58.         }
  59.     }
  60.     return brojac;
  61.     }
  62.  
  63.     float prosek(){
  64.     int suma=0;
  65.     for(int i=0;i<5;i++){
  66.         suma+=ocenki[i];
  67.     }
  68.     return (float)suma/5;
  69.     }
  70.  
  71.     int getIndex(){
  72.     return index;
  73.     }
  74.  
  75.     char* getNasoka(){
  76.     return nasoka;
  77.     }
  78.  
  79.     void print(){
  80.     cout<<ime<<" "<<index<<" "<<prosek()<<" "<<nasoka<<endl;
  81.     }
  82.  
  83. };
  84.  
  85. class Fakultet{
  86. private:
  87.     int brojStudenti;
  88.     // ako ne znaeme kolkava e nizata stavame *
  89.     Student *niza;
  90.     char ime[20];
  91. public:
  92.     Fakultet(){}
  93.     Fakultet(char* ime,Student *niza,int brojStudenti){
  94.     strcpy(this->ime,ime);
  95.     for(int i=0;i<brojStudenti;i++){
  96.         // copy constructor ili operator =
  97.         this->niza[i]=niza[i];
  98.     }
  99.     this->brojStudenti=brojStudenti;
  100.     }
  101.  
  102.     // print site studenti
  103.     void printStudenti(){
  104.     cout<<"Studenti zapishani na fakultetot "<<ime<<endl;
  105.     for(int i=0;i<brojStudenti;i++){
  106.         niza[i].print();
  107.     }
  108.     }
  109.  
  110.     // student so najgolem prosek
  111.     void prvenecNaGeneracija(){
  112.     float maxProsek=0;
  113.     int pamtiIndex;
  114.     for(int i=0;i<brojStudenti;i++){
  115.         if(niza[i].prosek()>maxProsek){
  116.             maxProsek=niza[i].prosek();
  117.             pamtiIndex=i;
  118.         }
  119.     }
  120.     cout<<"Najgolem prosek ima studentot"<<endl;
  121.     niza[pamtiIndex].print();
  122.     }
  123.  
  124.     // koj student ima najvekje 6ki
  125.     void studentSoNajvekje6(){
  126.     int broj6ki=0;
  127.     int max6ki=0;
  128.     int pamtiIndex;
  129.     for(int i=0;i<brojStudenti;i++){
  130.         broj6ki=0;
  131.         for(int j=0;j<5;j++){
  132.             if(niza[i].getOcenki(j)==6){
  133.             broj6ki++;
  134.             }
  135.         }
  136.         if(broj6ki>max6ki){
  137.             max6ki=broj6ki;
  138.             pamtiIndex=i;
  139.         }
  140.     }
  141.     cout<<"Studentot so najvekje 6ki e"<<endl;
  142.     niza[pamtiIndex].print();
  143.     }
  144.  
  145.     // printaj gi site studenti zapishani pred 2018
  146.     void studentiPred2018(){
  147.     for(int i=0;i<brojStudenti;i++){
  148.         if(niza[i].getIndex()/10000<18){
  149.             niza[i].print();
  150.         }
  151.     }
  152.     }
  153.  
  154.     // dali postoi student vo fakultetot
  155.     int daliPostoiStudent(Student nov){
  156.     for(int i=0;i<brojStudenti;i++){
  157.         if(nov.getIndex()==niza[i].getIndex()){
  158.             nov.print();
  159.             return 1;
  160.         }
  161.     }
  162.     return 0;
  163.     }
  164.  
  165.     // nasoki: pit,kni,knia,sis
  166.     void nasokaSoNajvekjeStudenti(){
  167.     int brojPit=0;
  168.     int brojKni=0;
  169.     int brojKnia=0;
  170.     int brojSis=0;
  171.     for(int i=0;i<brojStudenti;i++){
  172.         if(strcmp("pit",niza[i].getNasoka())==0){
  173.             brojPit++;
  174.         }
  175.         if(strcmp("kni",niza[i].getNasoka())==0){
  176.             brojKni++;
  177.         }
  178.         if(strcmp("knia",niza[i].getNasoka())==0){
  179.             brojKnia++;
  180.         }
  181.         if(strcmp("sis",niza[i].getNasoka())==0){
  182.             brojSis++;
  183.         }
  184.     }
  185.     if(brojPit>brojSis && brojPit>brojKni && brojPit>brojKnia){
  186.         cout<<"Pit ima najvekje "<<brojPit<<endl;
  187.     }
  188.     }
  189.  
  190.     // student so najvekje dobieni ocenki kako int ocenka
  191.     void studentSoNajvekjeOcenka(int ocenka){
  192.     int brojOcenka=0;
  193.     int maxOcenka=0;
  194.     int pamtiIndex;
  195.     for(int i=0;i<brojStudenti;i++){
  196.         brojOcenka=0;
  197.         for(int j=0;j<5;j++){
  198.             if(niza[i].getOcenki(j)==ocenka){
  199.             brojOcenka++;
  200.             }
  201.         }
  202.         if(brojOcenka>maxOcenka){
  203.             maxOcenka=brojOcenka;
  204.             pamtiIndex=i;
  205.         }else if(brojOcenka==maxOcenka){
  206.             if(niza[i].prosek()>niza[pamtiIndex].prosek()){
  207.                 pamtiIndex=i;
  208.             }
  209.         }
  210.     }
  211.     cout<<"Studentot so najvekje "<<ocenka<<" ocenki e"<<endl;
  212.     niza[pamtiIndex].print();
  213.     }
  214.  
  215.     void dodadi(Student &objekt){
  216.     // temp niza za da gi zacuvame site studenti vo nizata
  217.     Student tempNiza[brojStudenti];
  218.     for(int i=0;i<brojStudenti;i++){
  219.         tempNiza[i]=niza[i];
  220.     }
  221.     // ja prosiruvame nizata za +1 student
  222.     niza=new Student[brojStudenti+1];
  223.     // si gi vrakjame site studenti nazad
  224.     for(int i=0;i<brojStudenti;i++){
  225.         niza[i]=tempNiza[i];
  226.     }
  227.     // go dodavame noviot objekt na posledno mesto
  228.     niza[brojStudenti]=objekt;
  229.     // pokacuvame brojot na studenti za +1
  230.     brojStudenti++;
  231.     }
  232.  
  233.     //finki+=petar;
  234.     Fakultet &operator+=(Student &objekt){
  235.     // tempNiza da e dinamicki alocirana
  236.     Student *tempNiza = new Student[brojStudenti];
  237.     for(int i=0;i<brojStudenti;i++){
  238.         tempNiza[i]=niza[i];
  239.     }
  240.     niza=new Student[brojStudenti+1];
  241.     for(int i=0;i<brojStudenti;i++){
  242.         niza[i]=tempNiza[i];
  243.     }
  244.     niza[brojStudenti]=objekt;
  245.     brojStudenti++;
  246.     // briseme dinamicki alocirani objekti
  247.     delete []tempNiza;
  248.     return *this;
  249.     }
  250.  
  251. };
  252.  
  253.  
  254. int main(){
  255. int n;
  256. cout<<"Vnesi kolku studenti sakash"<<endl;
  257. cin>>n;
  258. Student nizaStudenti[n];
  259. int index;
  260. char ime[15];
  261. char nasoka[5];
  262. int ocenki[5];
  263. for(int i=0;i<n;i++){
  264.     //cout<<"Vnesi index"<<endl;
  265.     cin>>index;
  266.     //cout<<"Vnesi ime"<<endl;
  267.     cin>>ime;
  268.     //cout<<"Vnesi nasoka"<<endl;
  269.     cin>>nasoka;
  270.     //cout<<"Vnesi 5 ocenki"<<endl;
  271.     for(int j=0;j<5;j++){
  272.         cin>>ocenki[j];
  273.     }
  274.     nizaStudenti[i]=Student(index,ime,nasoka,ocenki);
  275. }
  276. Fakultet finki("FINKI",nizaStudenti,n);
  277. finki.printStudenti();
  278. cout<<"Vnesi ocenki za noviot student (petar)"<<endl;
  279. for(int j=0;j<5;j++){
  280.         cin>>ocenki[j];
  281. }
  282. Student petar(181718,"Petar","pit",ocenki);
  283. //finki.dodadi(petar);
  284. finki+=petar;
  285. finki.printStudenti();
  286. return 0;
  287. }
  288.  
  289.  
  290.  
  291. /*
  292. // bool, class i input/output
  293. // 1) >,>=,<,<=,==,!= bool operator==(class &objekt) ne treba & pred operator
  294. // 2) +,-,++,--,+=,-=  & pred operator
  295. // 3) <<, >>           & pred operator
  296. using namespace std;
  297. class Tocka{
  298. private:
  299.     int x;
  300.     int y;
  301. public:
  302.     Tocka(){}
  303.     Tocka(int x,int y){
  304.     this->x=x;
  305.     this->y=y;
  306.     }
  307.     // sporedba na dva objekti
  308.     bool operator>(Tocka &objekt){
  309.     if(this->x>objekt.x && this->y>objekt.y){
  310.         return true;
  311.     }else{
  312.         return false;
  313.     }
  314.     }
  315.     // sporedba so konkretna vrednost
  316.     bool operator>(int integer){
  317.     if(this->x>integer && this->y>integer){
  318.         return true;
  319.     }else{
  320.         return false;
  321.     }
  322.     }
  323.  
  324.     bool operator>=(Tocka &objekt){
  325.     if(this->x>=objekt.x && this->y>=objekt.y){
  326.         return true;
  327.     }else{
  328.         return false;
  329.     }
  330.     }
  331.  
  332.     bool operator==(Tocka &objekt){
  333.     if(this->x==objekt.x && this->y==objekt.y){
  334.         return true;
  335.     }else{
  336.         return false;
  337.     }
  338.     }
  339.  
  340.     void print(){
  341.     cout<<"x="<<x<<" y="<<y<<endl;
  342.     }
  343.  
  344.     Tocka& operator+=(Tocka &objekt){
  345.     this->x+=objekt.x;
  346.     this->y+=objekt.y;
  347.     return *this;
  348.     }
  349.     // & pred operatorot mora
  350.     Tocka& operator+(Tocka &objekt){
  351.     Tocka nov;
  352.     nov.x=this->x + objekt.x;
  353.     nov.y=this->y + objekt.y;
  354.     return nov;
  355.     }
  356.  
  357.     Tocka& operator-(Tocka &objekt){
  358.     Tocka nov;
  359.     nov.x=this->x - objekt.x;
  360.     nov.y=this->y - objekt.y;
  361.     return nov;
  362.     }
  363.     // prefix
  364.     Tocka& operator++(){
  365.     this->x++;
  366.     this->y++;
  367.     return *this;
  368.     }
  369.  
  370.     // postfix
  371.     Tocka &operator++(int){
  372.     Tocka nov(*this);
  373.     this->x++;
  374.     this->y++;
  375.     return nov;
  376.     }
  377.  
  378.     // input
  379.     friend istream& operator>>(istream &input, Tocka &objekt){
  380.     input>>objekt.x;
  381.     input>>objekt.y;
  382.     return input;
  383.     }
  384.     // output
  385.     friend ostream& operator<<(ostream &output, Tocka &objekt){
  386.     output<<"x="<<objekt.x<<" y="<<objekt.y<<endl;
  387.     return output;
  388.     }
  389.    
  390.    
  391.  
  392.  
  393. };
  394. int main(){
  395. Tocka prv;
  396. cin>>prv;
  397. cout<<prv;
  398. cout<<++prv;
  399. cout<<prv++;
  400. cout<<prv;
  401. return 0;
  402. }
  403. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement