KralMarko123

Genericka niza

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