Advertisement
Guest User

Tablica.cpp

a guest
Mar 23rd, 2013
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.13 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "tablica.h"
  3.  
  4. //inicjalizowanie zmiennej statycznej klasy, licznika obiektow
  5. //********************************************************************************
  6. int Tablica::ilosc = 0;
  7. int Tablica::str_lngt = 20;
  8. //********************************************************************************
  9. Tablica::Tablica()
  10. {
  11.     ilosc++;
  12.     id = Tablica::ilosc;
  13.     nazwa = "Tablica";
  14.     nazwa += id;       
  15. }
  16. //********************************************************************************
  17. Tablica::Tablica(int rozmiar) : n(rozmiar)
  18. {
  19.     ilosc++;
  20.     id = Tablica::ilosc;
  21.     tab = new double[n];
  22.     wyzeruj();
  23.     nazwa = "Tablica";
  24.     nazwa += id;           
  25. }
  26. //********************************************************************************
  27. Tablica::Tablica(int rozmiar, char *name) : n(rozmiar)
  28. {
  29.     ilosc++;
  30.     id = Tablica::ilosc;
  31.     tab = new double[n];
  32.     wyzeruj();
  33.     nazwa = name;
  34. }
  35. //********************************************************************************
  36. Tablica::Tablica(const Tablica& kTablica) : n(kTablica.n)
  37. {
  38.     ilosc++;
  39.     // pobieramy rozmiar kopiowanej tablicy
  40.     tab = new double(n);
  41.     // kopiujemy tablice
  42.     memcpy(tab, kTablica.tab, n*sizeof(double));
  43.     srd = kTablica.srd;
  44.     id = Tablica::ilosc;
  45.     nazwa = "Tablica";
  46.     nazwa += id;       
  47. }
  48. //********************************************************************************
  49. Tablica::~Tablica()
  50. {
  51.     cout << "\nDESTRUKOR: " << this->nazwa << endl ;
  52.     ilosc--;
  53.     delete[] tab;
  54.     tab = NULL;
  55. }
  56. //********************************************************************************
  57. void Tablica::wypelnij()
  58. {
  59.     for(int i=0; i<n; i++)
  60.         {  
  61.             do{
  62.                 cout << "Wprowadz " << i+1 << "# element: ";
  63.                 cin.clear(); cin.sync();
  64.                 cin >> tab[i]; cout <<endl;
  65.               }while(cin.fail());
  66.         }
  67.     srednia();
  68. }
  69. //********************************************************************************
  70. void Tablica::wyzeruj()
  71. {
  72.     for(int i=0; i<n; i++) {tab[i]=0;}
  73. }
  74. //********************************************************************************
  75. void Tablica::srednia()
  76. {
  77.     double temp = 0;
  78.     for(int i=0; i<n; i++)
  79.     {
  80.         temp += tab[i];
  81.     }
  82.     srd = (double)temp/(double)n;
  83.    
  84. }
  85. //********************************************************************************
  86. void Tablica::wyswietl(int m, int p) const
  87. {
  88.         system("CLS");
  89.         cout << "\nTablica nr:" << this->id <<endl;
  90.         cout << "\t--------------\n";
  91.         cout << "\tSrednia : " << srd;
  92.         cout << "\n\t--------------\n";
  93.                
  94.     if(m==1) //notacja dziesietna
  95.     {
  96.         for(int k=0; k<n; k++)
  97.         {
  98.             cout << "\t" << k+1 <<")\t"<< setprecision(p) << fixed << tab[k] << endl;
  99.         }      
  100.     }
  101.     if(m==2)//notacja naukowa
  102.     {
  103.         for(int k=0; k<n; k++)
  104.         {
  105.             cout << "\t" << k+1 <<")\t"<< setprecision(p) << scientific << tab[k] << endl;
  106.         }      
  107.     }
  108.     if(m==3)//notacja szesnastkowa
  109.     {
  110.         for(int k=0; k<n; k++)
  111.         {
  112.             unsigned tmp = static_cast<unsigned int>(tab[k]);
  113.             cout << "\t" << k+1 <<")\t"<< hex << tmp << endl;
  114.         }      
  115.     }
  116.     cout << "\t--------------\n\n";
  117. }
  118. //********************************************************************************
  119. size_t Tablica::ilosc_bajtow() const
  120. {
  121.     return (sizeof(*this));
  122. }
  123. //********************************************************************************
  124. void Tablica::insert_sort()
  125.     {
  126.      int k;
  127.      double temp;
  128.  
  129.      for(int i=0; i<(n-1); i++)
  130.      {
  131.         if(tab[i+1]<tab[i])                   //Sprawdzamy czy element na nastepnej pozycji jest mniejszy od obencego.
  132.           {
  133.             k = i;
  134.             while(tab[i+1]<tab[k])            //Wtedy zliczamy do poczatku ile jest mniejszych elementow
  135.             {                                 //Zmienna k to wskaznik odpowiedniego miejsca.
  136.                 k--;
  137.             }
  138.             if(k==i) swap(tab[i], tab[i+1]);  //Jezeli element przesuwamy tylko o jedno miejsce,
  139.                                               //poprostu zamieniamy dwa sasiadujace.
  140.             else                              //W innym wypadku, kopiujemy element do tempa, przesuwamy
  141.             {                                 // wszytskie elementy w prawo, i wsadzamy go w odpowiednie miejsce.
  142.                 temp = tab[i+1];
  143.  
  144.                 for(int l=i+1; l>k; l--)
  145.                 {
  146.                     tab[l] = tab[l-1];
  147.                 }
  148.  
  149.                 tab[k+1] = temp;
  150.             }
  151.           }
  152.       }
  153.      wyswietl(1,0);
  154.     }
  155. //********************************************************************************
  156. Tablica Tablica::operator+(const Tablica& b)
  157. {
  158.     int rB = b.rozmiar();
  159.     int rA = rozmiar();
  160.     int k = (rA > rB) ? rA : rB;  //r --> rozmiar wiekszej z dodawanych tablic
  161.     Tablica temp(k);
  162.     for(int i=0; i<k ; i++)
  163.     {
  164.         temp.tab[i] = ((i >= rA) ? 0 : tab[i]) + ((i >= rB) ? 0 : b.tab[i]);
  165.     }
  166.     temp.srednia();
  167.     return temp;
  168. }
  169. //********************************************************************************
  170. Tablica& Tablica::operator=(const Tablica& obiekt)
  171. {
  172.     if(&obiekt == this) return *this;
  173.     if(obiekt.n != n)
  174.     {
  175.         delete[] tab;
  176.         n = obiekt.n;
  177.         tab = new double[n];
  178.     }
  179.    
  180.     memcpy(tab, obiekt.tab, n*sizeof(double));
  181.     srd = obiekt.srd;
  182.     return *this;
  183. }
  184. //********************************************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement