int[,] с = {{1, 2, 3},{4, 5, 6 }; // new жазбаса да болады
int[,] d = new int[,] {{1, 2, 3},{4, 5, 6 }; // өлшемі
// есептеледі
int[,] e = new int[2,3] {{1, 2, 3},{4, 5, 6 }; // өлшемін
// артығымен сипаттау
n -1
0
n
m
a00 a01 a02 a03
a10 a11 a12 3
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
m -1
0
. . .
. . .
m жолдан және n бағанадан тұратын төрт бұрышты жиым (матрица),
мұнда а3,4
Осы жиым элементтерінің арифметикалық ортасы мен әр жолдағы оң элементтері санын анықтайық.
–
+
Ввод массива
sum = 0
начало
i = 1, m
nPosEI = 0
j = 1, n
sum += aij
aij > 0
++nPosEI
Вывод nPosEI
Вывод sum/m/n
конец
using System;
namespace Listing6_2
{ class Classl
{ static void Main( )
{ const int m = 3, n = 4;
int[,] a = new int[m, n] {
{ 2,-2, 8, 9 },
{-4,-5, 6,-2 },
{ 7, 0, 1, 1 }
};
Console.WriteLine("Исходный массив:");
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
Console.Write("\t" + a[i,j]);
Console.WriteLine( );
}
double sum = 0;
int nPosE1;
for (int i = 0; i < m; ++i)
{
nPosE1 = 0;
for (int j = 0; j < n; ++j)
{
sum += a[i, j];
if (a[i, j] > 0) ++nPosE1;
}
Console.WriteLine("В строке {0} {1} положит-х
элементов", i, nPosE1);
}
Console.WriteLine("Среднее арифметическое всех
эл-тов: " + sum/m/n);
}
}
}
Сатылы жиымдар
Сатылы жиымдарда оның жолдарындағы элементтер саны бірдей болмайды.
Компьютер жадында сатылы жиым төрт-бұрышты жиымнан басқаша сақталады: оның әр жолы элементтер саны әртүрлі болып келетін ішкі жиымдар түрінде болады.
Оның сипатталуы:
типі [][] аты;
Жиымның әр сатысына жады тікелей элементтер санына қарай жеке-жеке бөлінеді.
Мысалы, 2-өлшемді 3 жолдан тұратын сатылы жиым ашу керек болсын:
int[ ][ ] а = new int [3][ ];
// Оның 0-жолын анықтайық (5 элемент болсын)
а[0]=new int[5];
// Оның 1-жолын анықтайық (3 элемент болсын)
а[1] = new int[3];
// Оның 2-жолын анықтайық (4 элемент болсын)
а[2] = new int[4];
Мұндағы а[0] , а[1] және а[2] аттары арқылы пайдаланылатын жеке-жеке жиымдар.
Былай да сипаттай отырып, жады бөлуге болады:
int[ ][ ] а = { new int [5], new int [3], new int [4]};
Сатылы жиым элементтерін жазу кезінде әр өлшем бір тік жақшалар ішінде орналасады:
а[1][2] a[i][j] a[j][i]
System.Array класы
С# жиымдарының барлығы да Array атты базалық класс негізінде құрылған, оның қол-данушыға пайдалы бірнеше тәсілдері мен қасиеттері бар, солардың бірсыпырасын қа-рап шығайық.
Элементі
Түрі
Сипатталуы
Length
Қасиет
Жиым элементтерінің саны (барлық өлшемдері бойынша)
Rank
Қасиет
Жиым өлшемдерінің саны
Binary-Search
Статикалық тәсіл
Сұрыпталған жиымдағы екілік түрде іздеу
Clear
Статикалық тәсіл
Жиым элементтеріне келісім бойынша мән беру
Copy
Статикалық тәсіл
Бір жиым элементтерінің берілген диапазонын екінші жиымға көшіру
CopyTo
Тәсіл
Ағымдағы бірөлшемді жиым элементте-рінің бәрін басқа жиымға көшіру
Элементі
Түрі
Сипатталуы
GetValue
Тәсіл
Жиым элементінің мәнін алу
IndexOf
Статикалық тәсіл
Бір өлшемді жиымдағы элементтің алғашқы кездесу орнын анықтау
Lastlndex-Of
Статикалық тәсіл
Бір өлшемді жиымдағы элементтің соңғы кездесу орнын анықтау
Reverse
Статикалық тәсіл
Жиым элементтерін кері бағытта орналастыру
SetValue
Тәсіл
Жиым элементінің мәнін орнату
Sort
Статикалық тәсіл
Бір өлшемді жиымдағы элементтерді реттеу
Length қасиеті әртүрлі ұзындықтағы жиым-дарды өңдеу алгоритмін жүзеге асырады, мысалы, сатылы жиымдарды өңдеу. Жиым өлшемін беру орнына осыны қолдану жиым шегінен шығып кетуді болдырмайды.
Келесі программада бір өлшемді жиыммен жұмыс істеу кезіндегі Array класы элемент-терін қолдану мысалы көрсетілген.
using System;
namespace Listing6_3
{ class Classl
{
static void Main()
{
int[ ] a = {24, 50, 18, 3, 16, -7, 9, -1 };
PrintArray( "Исходный массив:", a );
Console.WriteLine( Array.IndexOf( a, 18 ) );
Array.Sort(a);
PrintArray( "Упорядоченный массив:“,a);
Console.WriteLine(Array.BinarySearch(a, 18) );
}
public static void PrintArray( string header, int[] a )
{
Console.WriteLine( header );
for ( int i = 0; i < a.Length; ++i )
Console.Write( "\t" + a[i] );
Console.WriteLine( );
}
}
}
Sort, IndexOf және BinarySearch тәсілде-рі статикалық тәсіл болып табылады, сол себепті оларды класс атын (экземпляр атын емес) көрсету арқылы пайдаланамыз да, жиым атын да береміз. Екілік іздеу тек рет-телген жиымға ғана қолданылады, ол IndexOf тәсіліндегі сызықтық іздеуден жылдам орындалады.
Программада 18-ге тең мәні бар жиым элементін осы екі тәсілмен де іздеу жүргізіледі.
Class1 класында қосымша PrintArray статикалық тәсілі сипатталған, ол жиымды экранға шығару үшін қолданылады. Оған екі параметр беріледі: header тақырып жолы және жиым. Жиым элементтерінің саны тәсіл ішінде Length қасиеті арқылы анықта-лады.
Сонымен, бұл тәсілді кез келген бір өлшемді жиымды экранға шығару үшін пайдалануға болады екен.
PrintArray тәсілін бір өлшемдіден басқа жиымдарға қолдану үшін оның екінші Array параметрін сипаттау керек, бірақ мұнда жиым элементінің мәнін GetValue тәсілі көмегімен алу қажет, өйткені Array класы үшін индекс арқылы элементті анықтау ісі қарастырыл-маған.
Жалпы түрде жиымды экранға шығару әрекеті былай атқарылады.
public static void PrintArray( string header.Array a )
{ Console.WriteLine( header );
for ( int i = 0; i < a.Length; ++i )
Console.Write( "\t" + a.GetValue(i) );
Console.WriteLine();
}
Келесі программада Array класы элементтері сатылы жиым үшін қолданылған.
using System;
namespace ConsoleApplication1
{
class Classl
{
static void Main( )
{
int[ ][ ] a = new int[3][ ];
a[0] = new int[5] { 24, 50, 18, 3, 16 };
a[1] = new int[3] { 7, 9, -1 };
a[2] = new int[4] { 6, 15, 3, 1 };
Console.WriteLine("Исходный массив:");
for (int i = 0; i < a.Length; ++i)
{
for (int j = 0; j < a[i].Length; ++j)
Console.Write("\t" + a[i][j]);
Console.WriteLine();
}
Console.WriteLine(Array.IndexOf(a[0], 18));
}
}
}
Цикл ішінде жолдар бойынша әрбір жиым ұзын-дығының қалай анықталғанына назар аудару керек.
Foreach циклі ( әрбірі үшін)
Бұл оператор топталған мәліметтер элементтерін бір-бірден қарастыру үшін керек. Мұндай топқа жиым (массив) жатады. Foreach операторының қолайлылығы – жиым элементінің санын анықтап, оның индексін бір-бірден арттырып отырмаймыз, тек жиымның барлық элементтерін қарастыру қажеттілігін көрсетеміз. Оператордың жазылуы:
foreach ( типі аты in өрнек ) { операторлар }
Мұндағы аты циклдің жергілікті айнымалысын көрсетеді, ол өрнек түрінде аты берілген жиымның барлық элементтерінің мәнін біртіндеп қабылдай-ды. Цикл ішінде оның айнымалысымен амалдар орындалады.
Мысалы, мынадай жиым берілген болсын:
int[] a = {24, 50, 18, 3, 16, -7, 9, -1};
Жиым элементтерін экранға шығару былай орындалады:
foreach ( int x in a )
{ Console.WriteLine( x ); }
Мұнда цикл ішінде орындалатын жалғыз оператор-ды жүйелі жақшаға алмаса да болады.
Енді бір өлшемді жиымды өңдейтін программаны қарастырайық, онда жиымның теріс элементтерінің қосындысы, саны және ең үлкен элементі анықта-лады.