Advertisement
simov

OOP Lab.10 - Генеричка низа

May 9th, 2014
1,841
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.05 KB | None | 0 0
  1. /* ZADACA 1 */
  2. /*
  3. Да се креира генеричка класа Array за работа со низи. Класата треба во себе да ги вклучи:
  4.  
  5. покажувач кон елементи од соодветниот тип
  6. број на елементи во рамките на низата
  7. Елементите во рамките на објектот треба динамички да се алоцираат. Класата треба да ги поддржува следниве методи:
  8. -----
  9. void Erase() - ги брише сите елементи од низата
  10. Т operator[](int i) - за пристап до соодветниот елемент во низата (вклучувајќи и проверка дали индексот е во границите)
  11. int GetLength() - го враќа бројот на елементите во низата
  12. -----
  13. Да се преоптовари operator<< (ostream) за работа со класата (да се претпостави дека елементите од низата го имаат преоптоварено операторот <<).
  14.  
  15. Надвор од класата да се напишат следниве функции:
  16. -----
  17. void BubbleSort(Array<T> t&)  - ги сорира елементите користејќи го BubbleSort алгоритмот (да се претпостави дека операторот > e преоптоварен за елементите од класата).
  18.  
  19. Т Sum(Array<T> &) - ги сумира елементите (да се претпостави дека операторот += e преоптоварен за елементите од класата).
  20.  
  21. Т Average(Array<T>&) - користејќи ја функцијата за сума пресметува просечна вредност на елементите ( операторот / е преоптоварен за елементите)
  22.  
  23. bool Equal (Array<T>&, Array<M>&) - проверува дали низите се еднакви (се претпоставува дека операторот == е преоптоварен за соодветните класи)
  24.  
  25. bool Equal (Array <T>&, Array<double>& ) - која ќе изврши пацијална специјализација и ќе смета дека:
  26.  - два елементи се исти ако и само ако се разликуваат за помалку од 0.1
  27.  - разликата од просечната вредност на низите мора да е помала од 0.5.
  28.  
  29. Sample input:
  30. 0.05
  31. 11
  32. 1
  33. 2
  34. 3
  35. 4
  36. 5
  37. 6
  38. 7
  39. 8
  40. 9
  41. 10
  42. 11
  43.  
  44. Sample output:
  45. The arrays:
  46. Array[0] = 1, Array[1] = 2, Array[2] = 3, Array[3] = 4, Array[4] = 5, Array[5] = 6, Array[6] = 7, Array[7] = 8, Array[8] = 9, Array[9] = 10, Array[10] = 11
  47. and
  48. Array[0] = 1, Array[1] = 2, Array[2] = 3, Array[3] = 4, Array[4] = 5, Array[5] = 6, Array[6] = 7, Array[7] = 8, Array[8] = 9, Array[9] = 10, Array[10] = 11
  49.  ARE same!
  50. The Average of the array adArray is: 6.05
  51. The arrays:
  52. Array[0] = 1, Array[1] = 2, Array[2] = 3, Array[3] = 4, Array[4] = 5, Array[5] = 6, Array[6] = 7, Array[7] = 8, Array[8] = 9, Array[9] = 10, Array[10] = 11
  53. and
  54. Array[0] = 1.05, Array[1] = 2.05, Array[2] = 3.05, Array[3] = 4.05, Array[4] = 5.05, Array[5] = 6.05, Array[6] = 7.05, Array[7] = 8.05, Array[8] = 9.05, Array[9] = 10.05, Array[10] = 11.05
  55.  ARE same!
  56. */
  57.  
  58. #include <iostream>
  59. #include <cmath>
  60. #include <cstdlib>
  61. using namespace std;
  62.  
  63. template <typename T>
  64. class Array{
  65.     private:
  66.     T* pole;
  67.     int size;
  68.    
  69.     public:
  70.     Array<T>(int ssize){
  71.         size=ssize;
  72.         pole = new T[size];
  73.     }
  74.     void Erase(){
  75.     for(int i=0;i<size;i++)
  76.         delete []pole;
  77.      pole=new T[size];
  78.     }
  79.    
  80.     T &operator[](int a){
  81.         return pole[a];}
  82.    
  83.     int GetLength(){return size;}
  84.    
  85.     friend ostream &operator<<(ostream &out,const Array<T> &a){  
  86.         for (int i=0;i<a.size;i++){
  87.             if(i==a.size-1) cout<<"Array["<<i<<"] = "<<a.pole[i];
  88.             else out<<"Array["<<i<<"] = "<<a.pole[i]<<", ";}
  89.         }
  90. };
  91.  
  92. template <typename T>
  93. void BubbleSort(Array<T> &t){
  94.     T pom;
  95.     for(int i=0;i<t.GetLength();i++)
  96.        for(int j=i;j<t.GetLength()-1;j++)
  97.        if(t[i]>t[j]){
  98.           pom=t[i];
  99.           t[i]=t[j];
  100.           t[j]=pom;}
  101.         }
  102.  
  103. template <typename T>
  104. T Sum(Array<T> &t){
  105.     T zbir=0;
  106.     for(int i=0;i<t.GetLength();i++)
  107. zbir+=t[i];
  108. return zbir;}
  109.  
  110. template <typename T>
  111. double Average(Array<T> &t){      
  112. return Sum(t)/t.GetLength();
  113.      }
  114.  
  115. template <typename T,typename M>
  116. bool Equal(Array<T>& a , Array<M>&b){
  117.     if(a.GetLength()==b.GetLength()){      
  118.     bool flag=true;
  119.     for(int i=0;i<a.GetLength();i++)
  120.     if(a[i]!=b[i]){
  121.         flag=false;
  122.         break;}
  123.  
  124.     if(flag)
  125.     return true;
  126.     else return false;
  127.     }
  128.     else return false;}
  129.  
  130.     template <typename T>
  131.     bool Equal (Array <T>&t, Array<double>&d){
  132.         if(t.GetLength()==d.GetLength()){
  133.             bool flag=true;
  134.             for(int i=0;i<t.GetLength();i++)
  135.             if(fabs(t[i]-d[i])>0.1){
  136.                 flag=false;
  137.                 break;}
  138.      if(fabs(Average(t)-Average(d))>0.5)
  139.          flag=false;
  140.  
  141.     if(flag)
  142.     return true;
  143.      else return false;
  144.     }
  145.     else return false;}
  146.  
  147. int main(){
  148.   int n;
  149.   double r;
  150.    
  151.   cin>>r;
  152.   cin>>n;
  153.    
  154.   Array<int> anArray(n);
  155.   Array<double> adArray(n);
  156.   Array<int> intArray2(n);
  157.  
  158.   for (int nCount = 0; nCount < n; nCount++){
  159.       cin>>anArray[nCount];
  160.       adArray[nCount] = anArray[nCount] + r;
  161.   }
  162.  
  163.   BubbleSort(anArray);
  164.   intArray2 = anArray;
  165.   cout<<"The arrays: "<<endl;
  166.   cout<<anArray;
  167.   cout<<endl<<"and "<<endl;
  168.   cout<<intArray2;
  169.   cout<<endl;
  170.   cout<<((Equal(anArray,intArray2))?" ARE":" ARE NOT")<<" same!"<<endl;
  171.   cout<<"The Average of the array adArray is: "<<Average(adArray)<<endl;
  172.  
  173.   cout<<"The arrays: "<<endl;
  174.   cout<<anArray;
  175.   cout<<endl<<"and "<<endl;
  176.   cout<<adArray;
  177.   cout<<endl;
  178.   cout<<((Equal(anArray,adArray))?" ARE":" ARE NOT")<<" same!";
  179.   return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement