I wrote a program, then I found out that I need to use functions and templates, which I did not do. Like what I have not tried, it does not work. So after the day of digging through textbooks and google decided to unsubscribe here.
Actually, I ask you to make the functions:
void PrintMax(Array<int> WA); void PrintMin(Array<int> WA); void QuickSort(int *items, int len); void QS(int *items, int left, int right);
Were set through templates.
Speaking of ABS (), I donβt know why, but abs () doesnβt work for me, even with #include <math.h>
Code:
//********************************************************************** // ΠΠ°Π΄Π°Π½ΠΈΠ΅: Π ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ (int), ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠΌ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π½Π°ΠΉΡΠΈ // Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΠΊ, // ΡΡΠΎΠ±Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π²Π½ΡΠ΅ Π½ΡΠ»Ρ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠ΅. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ // ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
// ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. //********************************************************************** #include <iostream> using namespace std; const int DefaultSize=8; //Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° //ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ //*************************ΠΠ°ΡΡΠΈΠ²*************************************** template <class T> class Array { public: //ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Array(int size); Array(const Array& rhs); ~Array() {delete [] pType;} //ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Array& operator = (const Array&); T& operator[] (int offset) { if (offset>=0&&offset<GetSize()) return pType[offset]; throw xBoundary(); return pType[0]; } const T& operator [] (int offset) const { if (offset>=0&&offset<GetSize()) return pType[offset]; throw xBoundary(); return pType[0]; } //Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π²ΡΠ²ΠΎΠ΄Π° template <class X> friend ostream& operator<< (ostream&, Array<X>&); //ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° int GetSize() const {return itsSize;} //ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ class xBoundary {}; //ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° class xSize //ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° { public: virtual void PrintError() {cout<<"Size error!\n";} }; class xBig :public xSize { public: virtual void PrintError() {cout<<"Entered size is big!\n";} }; class xSmall :public xSize { public: virtual void PrintError() {cout<<"Entered size is small!\n";} }; class xZero :public xSmall { public: virtual void PrintError() {cout<<"Can not be zero!\n";} }; class xNegative :public xSize { public: virtual void PrintError() {cout<<"Can not be negative!\n";} }; private: T *pType; int itsSize; }; //ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°-ΠΊΠ»Π°ΡΡΠ° ΠΠ°ΡΡΠΈΠ² template <class T> ostream& operator << (ostream& output, Array<T>& theArray) { for (int i=0;i<theArray.GetSize();i++) output<< "["<<i<<"]"<<theArray[i]<<endl; return output; } template <class T> Array<T>::Array(int size): itsSize(size) { //ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° if (size==0) throw xZero(); if (size>100) throw xBig(); if (size<1) throw xNegative(); if (size<2) throw xSmall(); pType=new T[size]; for (int i=0;i<itsSize;i++) pType[i]=0; } template <class T> Array<T>::Array(const Array& rhs) { itsSize=rhs.GetSize(); pType=new T[itsSize]; for (int i=0;i<itsSize;i++) pType[i]=rhs[i]; } template <class T> Array<T>& Array<T>::operator = (const Array& rhs) { if (this==&rhs) return *this; delete [] pType; itsSize=rhs.GetSize(); pType=new T[itsSize]; for (int i=0;i<itsSize;i++) pType[i]=rhs[i]; return *this; } //*******************ΠΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ !int****************************** class xType {}; //*******************ΠΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ********************************** void PrintMax(Array<int> WA); void PrintMin(Array<int> WA); void QuickSort(int *items, int len); void QS(int *items, int left, int right); Array<int> ConvertAndSend(Array<int> WA); int ABS(int N); //********************ΠΠ»Π°Π²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ*********************************** int main() { int choise; while (true) { cout<<"Please enter array size: "; cin>>choise; cout<<"At now enter array elementh:\n"; try //ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ { Array<int> workArray(choise); for (int i=0;i<workArray.GetSize();i++) cin>>workArray[i]; PrintMax(workArray); PrintMin(workArray); workArray = ConvertAndSend(workArray); cout<<"Array after sort:\n"<<workArray<<endl; } catch (Array<int>::xBoundary) {cout<<"Boundary error!\n";} catch (Array<int>::xSize& theException) {theException.PrintError();} cout<<"Would do you like work on a new array? y(1)/n(other)\n"; cin>>choise; if (choise!=1) break; } return 0; } void PrintMax(Array<int> WA) { int max=0; for (int i=0;i<WA.GetSize();i++) if (max<WA[i]) max=WA[i]; cout<<"Maximum element of array: "<<max<<endl; } void PrintMin(Array<int> WA) { int min=2147483647; for (int i=0;i<WA.GetSize();i++) if (min>WA[i]) min=WA[i]; cout<<"Minimum element of array: "<<min<<endl; } //ΠΌΠΎΡ Π½Π΅ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Π½ΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Linux ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ int ABS(int N) { if (N>0) return N; else return -N; } //**********************ΠΠΎΡΠ΅ ΠΎΡ !ΡΠΌΠ°************************************ Array<int> ConvertAndSend(Array<int> WA) { int temp[WA.GetSize()]; for (int i=0;i<WA.GetSize();i++) temp[i]=WA[i]; QuickSort(temp,WA.GetSize()); for (int i=0;i<WA.GetSize();i++) WA[WA.GetSize()-i-1]=temp[i]; return WA; } //************ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ************** void QuickSort(int items[], int len) { //Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π²ΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° QS(items, 0, len); } void QS(int items[], int left, int right) { int i, j, x, y; i = left; j = right; //Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ x = items[( left+right) / 2 ] ; //ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² do { while((ABS(items[i]) < ABS(x)) && (ABS(i) < ABS(right))) i++; while((ABS(x) < ABS(items[j])) && (ABS(j) > ABS(left))) j--; if(i <= j) { y = items[i]; items[i] = items[j]; items[j] = y; i++; j-- ; } } while(i <= j ); //Π²ΡΠ·Π²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π½Π΅Π΄ΠΎΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ if(left < j) QS(items, left, j ) ; if(i < right) QS(items, i, right); }