Advertisement
Dimoo23

Kolekcija parovi - preoptovaruvanje operatori

May 20th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. class Par{
  7. private:
  8.     char *kluc;
  9.     float vrednost;
  10. public:
  11.     // default constructor
  12.     Par () { kluc = new char [0]; vrednost = 0; }
  13.     // constructor w/ arguments
  14.     Par ( char *kl, float vr ){
  15.         kluc = new char [strlen(kl) + 1];
  16.         strcpy(kluc,kl);
  17.         vrednost = vr;
  18.     }
  19.     // copy constructor
  20.     Par ( const Par &p ){
  21.         kluc = new char [strlen(p.kluc) + 1];
  22.         strcpy(kluc,p.kluc);
  23.         vrednost = p.vrednost;
  24.     }
  25.     // destructor
  26.     ~Par () { delete [] kluc; }
  27.     // operator =
  28.     Par & operator=( const Par &p ){
  29.         if(this!=&p){
  30.             delete [] kluc;
  31.             kluc = new char [strlen(p.kluc) + 1];
  32.             strcpy(kluc,p.kluc);
  33.             vrednost = p.vrednost;
  34.         }
  35.         return *this;
  36.     }
  37.     // operator ++ prefix
  38.     Par & operator++ () {
  39.         vrednost+=1;
  40.         return *this;
  41.     }
  42.     // operator ++ sufix
  43.     Par operator++ (int) {
  44.         Par p(*this);
  45.         vrednost+=1;
  46.         return p;
  47.     }
  48.     // friend funkcii
  49.     friend ostream & operator<<( ostream &napolje, const Par &p );
  50.     friend Par operator+( const Par &p1, const Par & p2 );
  51.     friend bool operator==( const Par &p1, const Par & p2 );
  52.     friend class Kolekcija;
  53. };
  54. // operator <<
  55. ostream & operator<<( ostream &napolje, const Par &p ){
  56.     napolje<<'('<<p.kluc<<", "<<p.vrednost<<')'<<endl;
  57.     return napolje;
  58. }
  59.  
  60. // operator +
  61. Par operator+( const Par &p1, const Par & p2 ) {
  62.     Par tmp;
  63.     if(strlen(p1.kluc) < strlen(p2.kluc)){
  64.         tmp.kluc = new char [strlen(p2.kluc) +1];
  65.         strcpy(tmp.kluc,p2.kluc);
  66.     }
  67.     else{
  68.         tmp.kluc = new char [strlen(p1.kluc)+1];
  69.         strcpy(tmp.kluc,p1.kluc);
  70.     }
  71.     tmp.vrednost = p1.vrednost + p2.vrednost;
  72.     return tmp;
  73. }
  74. // operator ==
  75. bool operator==( const Par &p1, const Par & p2 ){
  76.     return ( strcmp(p1.kluc,p2.kluc)==0 && p1.vrednost==p2.vrednost);
  77. }
  78.  
  79. class Kolekcija{
  80. private:
  81.     Par *niza;
  82.     int dolzina;
  83. public:
  84.     // default constructor
  85.     Kolekcija () { niza = new Par [0]; dolzina = 0; }
  86.     // copy constructor
  87.     Kolekcija ( const Kolekcija &k ) {
  88.         dolzina = k.dolzina;
  89.         niza = new Par [ dolzina ];
  90.         for(int i=0; i<dolzina; ++i)
  91.             niza[i] = k.niza[i];
  92.     }
  93.     // destructor
  94.     ~Kolekcija () { delete [] niza; }
  95.     // operator =
  96.     Kolekcija & operator=( const Kolekcija &k ){
  97.         if(this!=&k){
  98.             delete [] niza;
  99.             dolzina = k.dolzina;
  100.             niza = new Par [ dolzina ];
  101.             for(int i=0; i<dolzina; ++i)
  102.             niza[i] = k.niza[i];
  103.         }
  104.         return *this;
  105.     }
  106.     // operator +=
  107.     Kolekcija & operator+=( const Par &p ){
  108.         Par *tmp = new Par [ dolzina + 1];
  109.         for(int i=0; i<dolzina; ++i)
  110.             tmp[i]=niza[i];
  111.         tmp[dolzina] = p;
  112.         ++dolzina;
  113.         delete [] niza;
  114.         niza = tmp;
  115.         return *this;
  116.     }
  117.     // friend funkcii
  118.     friend ostream & operator<<( ostream & out, const Kolekcija &k );
  119.     friend bool operator==( const Kolekcija &k1, const Kolekcija &k2 );
  120.     // najdi ()
  121.     void najdi ( const char * kluc ) {
  122.         bool flag = true;
  123.         for ( int i=0; i<dolzina; ++i ){
  124.             if ( strcmp(niza[i].kluc, kluc) == 0 ){
  125.                 cout<<niza[i];
  126.                 flag = false;
  127.                 break;
  128.             }
  129.         }
  130.         if (flag) cout<<"Ne postoi takov par";
  131.     }
  132. };
  133. // operator << za kolekcija
  134. ostream & operator<<( ostream & out, const Kolekcija &k ) {
  135.     out<<k.dolzina<<endl;
  136.     for(int i=0;i<k.dolzina;++i)
  137.         out<<k.niza[i];
  138.     return out;
  139. }
  140. // operator == za kolekcija
  141. bool operator==( const Kolekcija &k1, const Kolekcija &k2 ){
  142.     if(k1.dolzina==k2.dolzina){
  143.         for(int i=0;i<k1.dolzina;++i){
  144.             if(!(k1.niza[i]==k2.niza[i]))
  145.                 return false;
  146.         }
  147.         return true;
  148.     }
  149.     return false;
  150. }
  151.  
  152. void printTrueOrFalse (Kolekcija k1, Kolekcija k2){
  153.     if (k1==k2)
  154.         cout << "TRUE" <<endl;
  155.     else
  156.         cout <<"FALSE" << endl;
  157. }
  158.  
  159. int main() {
  160.  
  161.     int testCase;
  162.     cin >> testCase;
  163.  
  164.     if (testCase == 1){
  165.         cout<<"Testiranje na konstruktori za Par i operator << "<<endl;
  166.         Par p[20];
  167.         int n;
  168.         cin>>n;
  169.         char kluc[50];
  170.         double vrednost;
  171.         for (int i=0;i<n;i++){
  172.             cin >> kluc >> vrednost;
  173.             //cout << kluc << vrednost;
  174.             Par p1 = Par(kluc,vrednost);
  175.             //cout <<"GRESKA";
  176.             p[i] = p1;
  177.             cout << p[i];
  178.         }
  179.     }
  180.     else if (testCase == 2) {
  181.         cout << "Testiranje na operatorite ++ vo prefix i postfix notacija" <<endl;
  182.         Par p1 = Par("FINKI",10.20);
  183.  
  184.         cout << p1;
  185.         cout << p1++;
  186.         cout << p1;
  187.  
  188.         Par p2 = Par("OOP",69.69);
  189.  
  190.         cout << p2;
  191.         cout << ++p2;
  192.         cout << p2;
  193.     }
  194.     else if (testCase == 3) {
  195.         cout << "Testiranje na operatorot + vo klasata Par"<<endl;
  196.         double vrednost;
  197.         char kluc[50];
  198.         Par p[2];
  199.         for (int i=0;i<2;i++){
  200.             cin >> kluc >> vrednost;
  201.             p[i]=Par(kluc,vrednost);
  202.         }
  203.  
  204.         cout << p[0]+p[1];
  205.     }
  206.     else if (testCase==4) {
  207.         cout << "Testiranje na operatorot + vo klasata Par"<<endl;
  208.         double vrednost;
  209.         char kluc [50];
  210.         int n;
  211.         cin >> n;
  212.         Par p [50];
  213.         for (int i=0;i<n;i++){
  214.             cin>>kluc>>vrednost;
  215.             p[i]=Par(kluc,vrednost);
  216.         }
  217.  
  218.         Par p1 = p[0];
  219.         for (int i=1;i<n;i++)
  220.             p1 = (p1 + p[i]);
  221.  
  222.         cout << p1;
  223.     }
  224.     else if (testCase == 5) {
  225.         cout<<"Testiranje na operatorite << i += vo klasata Kolekcija"<<endl;
  226.         Kolekcija k;
  227.         int n;
  228.         double vrednost;
  229.         char kluc [50];
  230.         cin >> n;
  231.         for (int i=0;i<n;i++){
  232.             cin >> kluc >> vrednost;
  233.             Par p = Par (kluc,vrednost);
  234.             k+=p;
  235.             //cout << p;
  236.         }
  237.  
  238.         cout << k;
  239.     }
  240.     else if (testCase == 6){
  241.         cout << "Testiranje na operator == za klasata Kolekcija"<<endl;
  242.  
  243.         Par p1 ("A",1);
  244.         Par p2 ("B",2);
  245.         Par p3 ("B",3);
  246.         Par p4 ("C",4);
  247.  
  248.         Kolekcija k1;
  249.         k1 += p1;
  250.         k1 += p2;
  251.         k1 += p3;
  252.  
  253.         Kolekcija k2;
  254.         k2+=p1;
  255.         k2+=p4;
  256.  
  257.         Kolekcija k3;
  258.         k3+=p1;
  259.         k3+=p4;
  260.  
  261.         Kolekcija k4;
  262.         k4+=p1;
  263.         k4+=p3;
  264.  
  265.         printTrueOrFalse(k1,k2);
  266.         printTrueOrFalse(k1,k3);
  267.         printTrueOrFalse(k1,k4);
  268.         printTrueOrFalse(k2,k3);
  269.         printTrueOrFalse(k2,k4);
  270.         printTrueOrFalse(k3,k4);
  271.  
  272.  
  273.     }
  274.     else {
  275.         cout << "Testiranje na metodot najdi() vo klasata Kolekcija"<<endl;
  276.         Kolekcija k;
  277.         int n;
  278.         double vrednost;
  279.         char kluc [50];
  280.         cin >> n;
  281.         for (int i=0;i<n;i++){
  282.             cin >> kluc >> vrednost;
  283.             Par p = Par (kluc,vrednost);
  284.             k+=p;
  285.             //cout << p;
  286.         }
  287.  
  288.         char toFind[50];
  289.         cin >> toFind;
  290.         k.najdi(toFind);
  291.     }
  292.     return 0;
  293.  
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement