ΠΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΡΠ΄ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ Π²Π²Π΅ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -5. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ xNegative, Π½ΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, Π·Π°Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° size < 10 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ size < 1. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ, ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΡΡΡΠΎΠΊΠΈ 61 ΠΈ 62 ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ 65 ΠΈ 66 ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ β ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ, Π° ΡΠ°Π· ΡΠ°ΠΊ, ΡΠΎ ΠΎΡ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ xSize ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΎΡ Π½Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ xZero, xTooSmall, xTooBig ΠΈ xNegative. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ xSize, Π° Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ β ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΡΠΈΠΏΠΎΠ² ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΎΡ xSize. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 20.3.
ΠΠΈΡΡΠΈΠ½Π³ 20.3. ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
1: #include <iostream.h>
2:
3: const int DefaultSize = 10;
4:
5: class Array
6: {
7: public:
8: // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ
9: Array(int itsSize = DefaultSize);
10: Array(const Array &rhs);
11: ~Array() { delete [] pType;}
12:
13: // ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
14: Array& operator=(const Array&);
15: int& operator[](int offSet);
16: const int& operator[](int offSet) const;
17:
18: // ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ°
19: int GetitsSize() const { return itsSize; }
20:
21: // ΡΡΠ½ΠΊΡΠΈΡ-Π΄ΡΡΠ³
22: friend ostream& operator<< (ostream&, const Array&);
23:
24: // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
25: class xBoundary { };
26: class xSize { };
27: class xTooBig : public xSize { };
28: class xTooSmall : public xSize { };
29: class xZero : public xTooSmall { };
30: class xNegative : public xSize { };
31: private:
32: int *pType;
33: int itsSize;
34: };
35:
36:
37: Array::Array(int size):
38: itsSize(size)
39: {
40: if (size β 0)
41: throw xZero();
42: if (size > 30000)
43: throw xTooBig();
44: if (size <1)
45: throw xNegative();
46: if (size < 10)
47: throw xTooSmall();
48:
49: pType = new int[size];
50: for (int i = 0; i<size; i++)
51: pType[i] = 0;
52: }
53:
54: int& Array::operator[](int offSet)
55: {
56: int size = GetitsSize();
57: if (offSet >= 0 && offSet < GetitsSize())
58: return pType[offSet];
59: throw xBoundary();
60: return pType[0]; // ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
61: }
62:
63:
64: const int&Array::operator[](int offSet) const
65: {
66: int mysize = GetitsSize();
67: if (offSet >= 0 && offSet < GetitsSize())
68: return pType[offSet];
69: throw xBoundary();
70:
71: return pType[0]; // ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
72: }
73:
74: int main()
75: {
76:
77: try
78: {
79: Array intArray(0);
80: for (int j = 0; j< 100; j++)
81: {
82: intArray[j ] = j;
83: cout << "intArray[" << j << "] okay...\n";
84: }
85: }
86: catch (Array::xBoundary)
87: {
88: cout << "Unable to process your input!\n";
89: }
90: catch (Array::xTooBig)
91: {
92: cout << "This array is too big...\n";
93: }
94:
95: catch (Array::xTooSmall)
96: {
97: cout << "This array is too small...\n";
98: }
99: catch (Array::xZero)
100: {
101: cout << "You asked for an array";
102: cout << " of zero objects!\n";
103: }
104:
105:
106: catch (.. .)
107: {
108: cout << "Something went wrong!\n";
109: }
110: cout << "Done.\n";
111: return 0;
112: }
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
This array is too small...
Done.
ΠΠ½Π°Π»ΠΈΠ·: ΠΠ΄Π΅ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ ΡΡΡΠΎΠΊΠΈ 27β30, Π³Π΄Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ»Π°ΡΡΡ xTooBig, xTooSmall ΠΈ xNegative ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° xSize, Π° ΠΊΠ»Π°ΡΡ xZero β ΠΎΡ ΠΊΠ»Π°ΡΡΠ° xTooSmall.
ΠΠ»Π°ΡΡ Array ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ, Π½ΠΎ ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ? ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΡΡ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ! ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΡΠΉΡΠ΅ Π±Π»ΠΎΠΊ catch, ΠΈ Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΈΡΠΊΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° xZero, Π² Π½Π΅ΠΌ ΠΈΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° xTooSmall. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΎΠ·Π½ΠΈΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° xZero, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° xTooSmall, ΡΠΎ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ xTooSmall. ΠΡΠ΄ΡΡΠΈ ΡΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌ, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° xZero Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π»Π΅ΠΆΠΈΡ Π² ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΌΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΡΠΎΡΠ»ΠΈ Π² Π½Π°ΡΠ°Π»Π΅, Π° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ Π·Π° Π½ΠΈΠΌΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° β xZero ΠΈ xTooSmall.
ΠΠ°Π½Π½ΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
Π§Π°ΡΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° ΠΎΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠΏ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ β ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π»ΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 20.4.
ΠΠΈΡΡΠΈΠ½Π³ 20.4. Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
1: #include <iostream.h>
2:
3: const int DefaultSize = 10;
4:
5: class Array
6: {
7: public:
8: // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ
9: Array(int itsSize = DefaultSize);
10: Array(const Array &rhs);
11: ~Array() { delete [] pType;}
12:
13: // ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
14: Array& operator=(const Array&);
15: int& operator[](int offSet);
16: const int& operator[](int offSet) const;
17:
18: // ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ°
19: int GetitsSize() const { return itsSize; }
20:
21: // ΡΡΠ½ΠΊΡΠΈΡ-Π΄ΡΡΠ³
22: friend ostream& operator<< (ostream&, const Array&);
23:
24: // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
25: class xBoundary { };
26: class xSize
27: {
28: public:
29: xSize(int size):itsSize(size) { }
30: ~xSize(){ }
31: int GetSize() { return itsSize; }
32: private:
33: int itsSize;
34: };
35:
36: class xTooBig : public xSize
37: {
38: public:
39: xTooBig(int size):xSize(size){ }
40: };
41:
42: class xTooSmall : public xSize
43: {
44: public:
45: xTooSmall(int size):xSize(size){ }
46: };
47:
48: class xZero : public xTooSmall
49: {
50: public:
51: xZero(int size):xTooSmall(size){ }
52: };
53:
54: class xNegative : public xSize
55: {
56: public:
57: xNegative(int size):xSize(size){ }
58: };
59:
60: private:
61: int *pType;
62: int itsSize;
63: };
64:
65:
66: Array::Array(int size):
67: itsSize(size)
68: {
69: if (size == 0)
70: throw xZero(size);
71: if (size > 30000)
72: throw xTooBig(size);
73: if (size <1)
74: throw xNegative(size);
75: if (size < 10)
76: throw xTooSnall(size);
77:
78: pType = new int[size];
79: for (int i = 0; i<size; i++)
80: pType[i] = 0;
81: }
82:
83:
84: int& Array::operator[] (int offSet)
85: {
86: int size = GetitsSize();
87: if (offSet >= 0 && offSet < GetitsSize())
88: return pType[offSet];
89: throw xBoundary();
90: return pType[0];
91: }
92:
93: const int&Array::operator[] (int offSet) const
94: {
95: int size = GetitsSize();
96: if (offSet >= 0 && offSet < GetitsSize())
97: return pType[offSet];
98: throw xBoundary();
99: return pType[0];
100: }
101:
102: int main()
103: {
104:
105: try
106: {
107: Array intArray(9);
108: for (int j = 0; j< 100; j++)
109: {
110: intArray[j] = j;
111: cout << "intArray[" << j << "] okay..." << endl;
112: }
113: }
114: catch (Array::xBoundary)
115: {
116: cout << "Unable to process your input!\n";
117: }
118: catch(Array::xZero theException)
119: {
120: cout << "You asked for an Array of zero objectsl " << endl;
121: cout << "Received " << theExesptiQn,GatSize() << endl;
122: }
123: catch (Array:;xTooBig theException)
124: {
125: cout << "This Array is too big,,, " << endl;
126: cout << "Received " << theException,GetSize() << endl;
127: }
128: catch (Array;:xTooSmall theException)
129: {
130: cout << "This Array is too small... " << endl;
131: cout << "Received " << theException.GetSize() << endl;
132: }
133: catch (...)
134: {
135: cout << "Something went wrong, but I've no idea what!\n";
136: }
137: cout << "Done.\n";
138: return 0;
139: }
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
This array is too small...
Received 9
Done.
ΠΠ½Π°Π»ΠΈΠ·: ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° xSize Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-ΡΠ»Π΅Π½ itsSize (ΡΡΡΠΎΠΊΠ°ΠΠ) ΠΈ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ GetSize() (ΡΡΡΠΎΠΊΠ° 31). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-ΡΠ»Π΅Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΡΡΠΎΠΊΠ΅ 29.