ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π±ΡΠ» ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ², Π½ΠΎ ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΠΊΡΡΡΡ Π² ΠΏΠΎΠ»Π½ΡΡ ΡΠΈΠ»Ρ. ΠΠΎΡΡΠΎΠΌΡ Π² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠ° RangeArray, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΡ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΠ°ΠΊ Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π² C# Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½ΡΠ»Ρ. ΠΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π½Π°ΡΠΈΠ½Π°ΡΡ Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΡΡΠ΅ΡΠ°: Ρ 1 ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ -5 ΠΈ Π΄ΠΎ 5. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ Π·Π΄Π΅ΡΡ ΠΊΠ»Π°ΡΡ RangeArray ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΉΠ²ΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»Π°ΡΡ RangeArray, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°.
RangeArray Π³Π° = new RangeArray(-5, 10); // ΠΌΠ°ΡΡΠΈΠ²'Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΠΎΡ -5 Π΄ΠΎ 10 for(int i=-5; i <= 10; i++) ra[i] = i; // ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΡ -5 Π΄ΠΎ
10
ΠΠ΅ΡΡΡΠ΄Π½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° RangeArray Ρ ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΡ -5 Π΄ΠΎ 10 Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π³Π° Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΡ -5 Π΄ΠΎ 10.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠ»Π°ΡΡ RangeArray Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ RangeArrayDemo, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π·Π°Π΄Π°Π½Π½ΡΡ ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ . ΠΠ»Π°ΡΡ RangeArray ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠΈΠΏΠ° int, Π½ΠΎ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΡΠΈΠΏ Π½Π° Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ.
/* Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ»Π°ΡΡ RangeArray Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½ΡΠ»Ρ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° RangeArray ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΎΡ -5 Π΄ΠΎ 5, ΠΎΡ 1 Π΄ΠΎ 10 ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΡ 50 Π΄ΠΎ 56. */
using System;
class RangeArray {
// ΠΠ°ΠΊΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
int[] Π°; // ΡΡΡΠ»ΠΊΠ° Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² int lowerBound; // Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ int upperBound; // Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Length, public int Length { get; private set; }
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Error, public bool Error { get; private set; }
// ΠΠΎΡΡΡΠΎΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ, public RangeArray(int low, int high) { high++;
if (high <= low) {
Console.WriteLine("ΠΠ΅Π²Π΅ΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ");
high =1; // ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ² low = 0;
}
Π° = new int[high - low];
Length = high - low;
lowerBound = low; upperBound = --high;
// ΠΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° RangeArray. public int this[int index] {
// ΠΡΠΎ Π°ΠΊΡΠ΅ΡΡΠΎΡ get. get {
if(ok(index)) {
Error = false;
return a[index - lowerBound];
} else {
Error = true; return 0;
}
}
// ΠΡΠΎ Π°ΠΊΡΠ΅ΡΡΠΎΡ set. set {
if(ok(index)) {
a[index - lowerBound] = value;
Error = false;
}
else Error = true;
}
}
// ΠΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ // ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°Ρ , private bool ok(int index) {
if(index >= lowerBound & index <= upperBound) return true; return false;
}
}
// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ // Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠΌΠΈ ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, class RangeArrayDemo { static void Main() {
RangeArray ra = new RangeArray(-5, 5);
RangeArray ra2 = new RangeArray(1, 10);
RangeArray ra3 = new RangeArray(-20, -12);
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π³Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
Console.WriteLine("ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°: " + Π³Π°.Length); for(int i = -5; i <= 5; i++)
Π³Π°[i] = i;
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°: "); for(int i = -5; i <= 5; i++)
Console.Write(ra[i] + " ");
Console.WriteLine("\n");
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ra2 Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
Console.WriteLine("ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°2: " + ra2.Length); for(int i = 1; i <= 10; i++) ra2[i] = i;
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ra2: "); for(int i = 1; i <= 10; i++)
Console.Write(ra2[i] + " ") ;
Console.WriteLine("\n") ;
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π³Π°Π Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
Console.WriteLine("ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°Π: " + Π³Π°Π.Length); for(int i = -20; i <= -12; i++) ra3[i] = i; >
Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°Π: "); for (int i = -20; i <= -12; i++)
Console.Write(ra3[i] + " ");
Console.WriteLine("\n") ;
}
}
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°: 11
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°: -5-4-3-2-1012345 ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°2: 10
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°2: 12345678910 ΠΠ»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°Π: 9
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π³Π°Π: -20 -19 -18 -17 -16 -15 -14 -13 -12
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π°, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° RangeArray ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΡΡΠ΅ΡΠ°, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½ΡΠ»Ρ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° RangeArray.
Π Π½Π°ΡΠ°Π»Π΅ ΠΊΠ»Π°ΡΡΠ° RangeArray ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΊΡΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
// ΠΠ°ΠΊΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
int[] Π°; // ΡΡΡΠ»ΠΊΠ° Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² int lowerBound; // Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ β’int upperBound; // Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π° ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅. ΠΠ°ΠΌΡΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° RangeArray. ΠΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ lowerBound, Π° Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° β Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ upperBound.
ΠΠ°Π»Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Length ΠΈ Error.
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Length, public int Length { get; private set; }
// ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Error, public bool Error { get; private set; }
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π°ΠΊΡΠ΅ΡΡΠΎΡ set ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ ΠΊΠ°ΠΊ private. ΠΠ°ΠΊ ΠΏΠΎΡΡΠ½ΡΠ»ΠΎΡΡ Π²ΡΡΠ΅, ΡΠ°ΠΊΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° RangeArray.
// ΠΠΎΡΡΡΠΎΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ, public RangeArray(int low, int high) { high++;
if(high <= low) {
Console.WriteLine("ΠΠ΅Π²Π΅ΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ");
high = 1; // ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ²
low = 0;
}
Π° = new int[high - low];
Length = high - low;
lowerBound = low; upperBound = βhigh;
}
ΠΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° RangeArray ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° low, Π° Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° high. ΠΠ°ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° high ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ low Π΄ΠΎ high Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ°Π»Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°: ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ Π²ΡΠ΄Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΠΌΡΡΡ, Π° ΡΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅Π³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π°. ΠΠ°ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Length ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ ΡΠΈΡΠ»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ lowerBound ΠΈ upperBound.
ΠΠ°Π»Π΅Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ RangeArray ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
// ΠΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° RangeArray. public int this[int index] {
// ΠΡΠΎ Π°ΠΊΡΠ΅ΡΡΠΎΡ get. get {
if(ok(index) ) {
Error = false;
return a[index - lowerBound];
} else {
Error = true; return 0;
}
// ΠΡΠΎ Π°ΠΊΡΠ΅ΡΡΠΎΡ set. set {
if(ok(index)) {
a[index - lowerBound] = value;
Error = false;
}
else Error = true;
}
}
ΠΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ FailSof tArray, Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² Π°.
index - lowerBound
Π ΡΡΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° index, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ Ρ ΠΎΡΡΡΠ΅ΡΠΎΠΌ ΠΎΡ Π½ΡΠ»Ρ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΉ Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π°. ΠΠ°Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ lowerBound: ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΌ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ ok ().
// ΠΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ // ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°Ρ , private bool ok(int index) {