Бағдарламалу технологиясы



жүктеу 1,63 Mb.
бет44/73
Дата03.02.2022
өлшемі1,63 Mb.
#35497
түріОқулық
1   ...   40   41   42   43   44   45   46   47   ...   73
Ба?дарламалу технологиясы

8.2 Жолдық айнымалы ұғымы

C# тілінде жолдармен жұмыс істеу үшін (мәтіндермен, символдардың кез келген бірігуі) сәйкес класымен анықталатын арнайы string типі қолданылады. String класы сілтемелік типке жатады және кез келген ұзындықтағы жолдық айнымалыларды анықтауға көмектеседі.

Барлық сілтемелік типтердегідей айнымалылардың мәні үйіндіде сақталады. Бірақ string типіндегі айнымалылардың ерекшелігі – олардың болжап болмайтын «еркін» ұзындығы. Сондықтан string типіндегі айнымалының мәнін өзгерту үйіндіде жаңа өзгертілген мәнді құру жолымен орындалады. Бұл орайда басқа айнымалылардың мәндері өзгермейді. Жолдық айнымалылармен жұмыс жасауда осы ерекшелікті ескеру керек.

C# тілінде өзгермейтін (immutable) класс ұғымы да бар. Осы кластар үшін объект мәнін өзгертуге болмайды. Бар объект негізінде әдістер жаңа объект құра алады, бірақ алдынғы объект мәні өзгертілмейді. Осындай өзгермейтін класқа string класы да жатады. Осы кластың бір де бір әдісі басқа объекттердің мәнін өзгерте алмайды. String класының әдістері мен қасиеттері 8.4 және 8.4-кестесінде көрсетілген.


8.4-кесте – String класы

Қасиет

Сипаттама

public char this[ int Index] {get:};

Бұл қасиет жолдан керекті символды алуға көмектеседі (тек оқу үшін)

public int Length(){get:};

Жолдың ұзындығын қайтарады (өзгертілмейді)

Length қасиеті S жолдық айнымалының «ұзындығын», яғни жолдық айнымалының символдар санын анықтауға көмектеседі, сондықтан бағдарламада жиі қолданылады.

Жол символына оның индексі бойынша қол жеткізу әрбір символ бойынша талдау жүргізген кезде жиі қолданылады.

Мәтін сөздерін сұрыптау немесе жеке жолдық айнымалыларды салыстыру үшін Compare() әдісін қолдану керек, мысалы, s1 және s2 айнымалыларын салыстыру былай орындалады:

if (Compare (s1,s2)==0)

Класс әдістерін қолдануды оқулықтың басқа бөлмдерінде қарастырамыз.

Жолдық айнымалыларды қолданудан бұрын оларды бағдарламада жариялауды үйрену керек.

string класының объекттері сілтемелік типтегі айнымалылар сияқты жарияланады - класс конструкторы айқын немесе айқын емес шақырылады.


8.5-кесте – String класының кейбір әдістері

Әдіс

Сипаттама




public static int Compare (string S1, string S2);

Екі жолды салыстырады және егер S1 < S2 болса, теріс сан қайтарылады. Егер S1 == S2 болса, нөл саны, егер S1 > S2 болса, оң сан қайтарылады. Әдісті орындау барысында символдар регистрінің айырмашылығы, мезгіл мен ақша бірлігінің ұлттық жазылуы , т.б. ескерілмейді.




public static int CompareOrdinal(string S1, string S2);

Екі жолды символдарының сандық мәндерін салыстыру арқылы салыстырады




public static string Concat (params object[]);

Жолдарды біріктіреді




public void CopyTo (int SourceInd, char[] Dest, int DestInd, int Count);

Dest массивінде DestInd символынан бастап мынаны көшіреміз: жолдың SourceInd символынан бастап Count санынан аспайтын символдарды




public bool EndsWith (string S);

Егер жол S ішкі жолымен аяқталса, true қайтарылады.




public static string Format (string S, params object[]);

S жолын құрады




public int InfexOf(string S);

S ішкі жолы немесе символы табылса, оның бірінші индексі қайтарылады, егер табылмаса, теріс сан қайтарылады.




public static string Join (string S, params string[] ss);

ss жолдарын S бөлгіші арқылы бір ұзын жолға біріктіреді.




public static int LastIndexOf (string S);

S ішкі жолы немесе символы табылса, оның соңғы табылған индексі қайтарылады, егер табылмаса, теріс сан қайтарылады.




public string PaddLeft (int TotalWidth, char C);

Жолдың ұзындығы TotalWidth тең болғанша оны сол жағынан C символдарымен толықтырады.




public static string Remove (int StartIndex, int count);

Ағымдағы жолдан StartIndex символынан бастап count аспайтын символдарды жояды.




public string Replace (string S, string ss);

Ағымдағы жолдың S ішкі жолын ss түрлендіреді.

public string[] Split(params char[] delimiters);

Жолды delimiters шектеулеріне сәйкес сөздерге бөледі.

public bool StartsWith (string S);

Ағымдағы жол S ішкі жолынан басталса, true қайтарылады.

public string SubString ( int BegInd, int EndInt);

Ағымдағы жолдан BegInd және EndInd символдарымен шектелген ішкі жолды қайтарады.

public string TpLower();

Ағымдағы жолды кіші әріптермен жазып қайтарады.

public string Insert (int Ind. string S);

Ind индексінен бастап S ішкі жолын орналастырады.

public string Trim();

Бос орындары өшірілген жол қайтарылады.

public string TrimEnd();

Бос орындар жойылған алғашқы жолды қайтарады

public string TrimStart();

Бос орындар жойылған алғашқы жолды қайтарады







public string ToUpper();

Ағымдағы жолды үлкен әріптермен жазып қайтарады.

Жолдық айнымалыны жариялаған кезде конструктор айқын шақырылмайды. Мысалы:

string st1 = "Жол";

Жолдық айнымалыны string класының конструкторларын айқын шақырып жариялауға болады, мысалы: бірінші ұзындығы нөл болатын жолдық айнымалыны жариялау, ал одан кейін оған мәнді меншіктеу:

string st2 = new string(' ', 0);

st2 = "Жол 2";.

Жолдық айнымалыны жариялаудан кейін оны бағдарламада түрлі операцияларда қолдануға болады. Негізгі операциялар: меншіктеу, баламалылығын тексеру (== немесе !=), жолдарды тіркестіру (қосу).

Егер st1 жолдық айнымалыға басқа st2 жолдық айнымалы меншіктелсе, онда st1 айнымалысы st2 айнымалының мәні сақталған үйінді (жады аумағындағы адрес) сілтемесіне ие болады. Сонымен жолдық айнымалыларды меншіктеуде олардың мәндерінің орнына сілтемелер «көбейтіледі».

Басқа сілтемелік айнымалылардан өзге жолдық айнымалылардың баламалылығын тексеру кезінде олардың сілтемелері емес, мәні салыстырылады.

Тіркестіру операциясын орындау барысында (Concat() әдісі – + операциясы)бір жолдық айнымалының мәніне басқа жолдық айнымалының мәні қосылады. Сондықтан алынған мән бір топта жаңа сілтеме бойынша орналасады.

Жолдық айнымалылар қолданылатын мысалды қарастырайық:

using System;

namespace ConsoleApplication1

{ class Program

{

static void Main()



{

string a = "Tabigat ";

Console.WriteLine("a sozi = {0}", a);

string b = new string(' ', 0);

Console.WriteLine("b sozinin yzindigi = {0} символов", b.Length);

Console.WriteLine("b sozinin engiziniz");

b = Console.ReadLine();

Console.WriteLine("b sozi = {0}", b);

string c = a + b;

Console.WriteLine("Operazia zhymisi c = a + b; с = {0}", c);

Console.WriteLine("a sozinin yzindigi = {0} символов", a.Length);

Console.WriteLine("b sozinin yzindigi = {0} символов", b.Length);

Console.WriteLine("Olardin ortak yzindigi = {0} символов", c.Length);

Console.WriteLine("Operazia zhymisi if (string.Compare(a, b) >= 0) вывод a > b;");

Console.WriteLine(" else (вывод b >= a);");

if (string.Compare(a, b) >= 0) Console.WriteLine(" a > b");

else Console.WriteLine(" b >= a");

c = a.Remove(1, 2);

Console.WriteLine("c = a.Remove(1,2); c = {0}", c);

Console.WriteLine("Enter pernesin basiniz");

Console.ReadLine();

}

}



}

Бағдарлама жұмысы:

a sozi = Tabigat

b sozinin yzindigi = 0 символов

b sozinin engiziniz

Tabigat


b sozi = Tabigat

Operazia zhymisi c = a + b; с = Tabigat Tabigat

a sozinin yzindigi = 8 символов

b sozinin yzindigi = 7 символов

Olardin ortak yzindigi = 15 символов

Operazia zhymisi if (string.Compare(a, b) >= 0) вывод a > b;

else (вывод b >= a);

a > b


c = a.Remove(1,2); c = Tigat

Enter pernesin basiniz

Бағдарламада жолдық айнымалыларды жариялаудың бірнеше жолдары, қосу операциясы арқылы айнымалыларды біріктіру әдісі, айнымалының «ұзындығын» анықтау үшін пайдаланылатын Length қасиеті қолданылады.

Бағдарламада Compare бүтін санды әдісі жолдық айнымалыларды салыстыру үшін қолданылған. Диалог режімінде b айнымалыға түрлі мәндерді беріп Compare әдісінің жұмысын тексеруге болады.

Ағымдағы айнымалыларды қолданатын әдістері a.Remove мысалында қарастырылған.

String класының қасиеті жолдық айнымалыны символдар массиві ретінде қарастырады, және әрбір символды оның индексі арқылы шақырады. Осы char типіндегі қасиет символды өзгертпей, тек қарап шығуға мүмкіндік береді.

Жолдық айнымалылармен жұмыс жасайтын әдістерді қолданатын бірнеше мысалдарды қарастырайық. Мәтіндермен жұмыс жасау барысында міндеттердің бірі мәтінді сөздер массиві түрінде көрсету болып табылады. Мәтіндермен жұмыс ітеу барысындағы мәселенің бірі мәтінді сөздер массив түрінде ұсыну. Осы мәселені шешудің екі жолын қарастырайық – мәтіннің әрбір символын талдау арқылы сөздерді бөлу және Join, Split арнайы әдістерін қолдану арқылы. Split динамикалық әдісі мәтінді элементтерге бөлуді орындайды. Join статикалық әдісі кері операцияны орындайды – элементтерден жолды құрайды.

8.1-есебі. Диалог режімінде 20 сөзден аспайтын мәтін енгізіледі. Барлық сөздерді жеке массивке орналастыру және шығару керек. Бір немесе бірнеше «бос орын» символымен бөлінген кез келген символдар жиыны сөз болып есептеледі.

Бағдарлама коды:

using System;

namespace ConsoleApplication1

{

class Program



{

static void Main()

{

int j, k;



string[] clova;

clova = new string[20];

string str1 = new string(' ', 0);

string b = new string(' ', 0);

string str2 = new string(' ', 0);

Console.WriteLine("Matindi engiziniz");

str1 = Console.ReadLine();

j=0;


for (int i = 0; i < str1.Length; i++)

{

if (str1[i]!=' ')



{

b = str1[i].ToString();

str2 = str2 + b;

}

else



if (str2[0] != ' ')

{

clova[j] = str2;



str2 = "";

j++;


}

}

if (str2[0] != ' ')



{

clova[j] = str2;

str2 = "";

j++;


}

for (int i=0;i

Console.WriteLine(" {0} soz = {1} ", i+1, clova[i]);

Console.WriteLine("Enter pernesin basiniz");

Console.ReadLine();

}

}



}
Бағдарлама жұмысы:

Matindi engiziniz

20 sozden aspaitin matin engizildi

1 soz = 20

2 soz = sozden

3 soz = aspaitin

4 soz = matin

5 soz = engizildi

Enter pernesin basiniz
Осы бағдарламада мына үзінді

if (str2[0] != ' ')

{

clova[j] = str2;



str2 = "";

j++;


}

екі рет қолданылады. Мәтіннің соңында «бос орын» символы болмауы мүмкін, сондықтан str2 жолдық айнымалының «бос орын» символына теңдігі тексеріледі. Егер str2 айнымалы бос орынға тең болмаса, онда clova[j] массивіне соңғы сөз қосылады.

Бос орынды мәтінді тергеннен кейін арнайы жолмен қосуға болады, онда тексеруді орындамауға болады.

8.2-есебі. Жолда алгебралық өрнек жақшаларсыз жазылған. Мысалы, A·B+A·C·D+С·Х. Өрнек диалог режімінде енгізіледі. Алгебралық өрнектегі көбейткіштер санын анықтау керек.

Есепті шешудің бір жолы – өрнекті қосылғыштар түрінде көрсету және әрбір қосылғышта көбейту символдарын есептеу. Егер қосылғышта көбейту символы бар болса, онда осы қосылғыштың көбейткіштер саны бірге артады, әйтпесе қосылғышта көбейткіштер жоқ. Барлық қосылғыштардың көбейткіштерін қосып, өрнектегі жалпы көбейткіштер санын табамыз. Split динамикалық әдісі мәтінді элементтерге – қосылғыштарға бөледі, бөлгіш ретінде ‘+’ символы қолданылады. Қосылғыштардан тұратын алгебралық өрнекті құрастыру Join әдісі арқылы орындалады. Split және Join әдістері жолдағы жеке сөздермен жұмыс жасауды жеңілдетеді.

Мысалы, c:\Program Files\Microsoft Visual Studio .NET\readmy.html. Мұнда жеке сөз болып диск, барлық каталогтар мен файл аттары есептеледі, ал сөзді анықтауда кері көлбеу сызық қолданылады. (жеке сөздер: c:, Program Files, Microsoft Visual Studio .NET, readmy.html).

Бағдарлама коды:

using System;

namespace ConsoleApplication1

{

class Program



{

static void Main()

{

int k, n;



string[] kosilgish;

string str1 = new string(' ', 0);

Console.WriteLine("Algebralik ornekti engiziniz");

str1 = Console.ReadLine();

// clagaemoe массивінің өлшемі Split әдісі қайтаратын

// массивтің өлшеміне сәйкес автоматты түрде анықталады

kosilgish = str1.Split('+');

n = 0;


for (int i = 0; i < kosilgish.Length; i++)

{

Console.WriteLine("kosilgish[{0}]= {1}", i + 1, kosilgish[i]);



k = 0;

for (int j = 0; j < kosilgish[i].Length; j++)

if (kosilgish[i][j] == '*') k++;

if (k != 0) n = n + k + 1;

}

Console.WriteLine("Kobeitkishter sani ={0}",n);



//алгебралық өрнекті "құрастыруды" орындайық.

string algebr = string.Join("+", kosilgish);

Console.WriteLine("Jana ornek = {0}", algebr);

Console.WriteLine("Enter pernesin basiniz");

Console.ReadLine();

}

}



}

Бағдарлама жұмысы:

Algebralik ornekti engiziniz

a * b * c + ab * d + abc + b * b

kosilgish[1]= a * b * c

kosilgish[2]= ab * d

kosilgish[3]= abc

kosilgish[4]= b * b

Kobeitkishter sani =7

Jana ornek = a * b * c + ab * d + abc + b * b

Enter pernesin basiniz
Split және Join әдістері тек бір бөлгішті қолданған кезде жақсы жұмыс істейді.

Егер талдау барысында бірнеше бөлгіштер берілсе, онда жолды құрастыру барысында қиындықтар туындауы мүмкін – жолды бастапқы күйдегі қалпына келтіруге болмайды, өйткені қолданылған бөлгіш түрі белгісіз болады.




жүктеу 1,63 Mb.

Достарыңызбен бөлісу:
1   ...   40   41   42   43   44   45   46   47   ...   73




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау