y-ting natigelik mani: 4
33
Көбейту операциясы int, uint, long, ulong, float, double, decimalтәрізді арифметикалық
типтегі операндтарға қолданылады. Егер екі операнд та бүтін сан болса, бөлінді де бүтін
сан болады.
Бөлу операциясыда жоғарыдағы арифме-тикалық типтегі операндтарға
қолданылады. Егер екі операнд та бүтін сан болса, бөлінді де бүтін сан болады, әйтпесе
бөлінді типі тип-терді түрлендіру ережесіне сәйкес тағайын-далады.
Қалдық табу (%) операциясы әртүрлі типтегі - бүтін, нақты, қаржылық
шамаларға қолданылады. Егер екі опе-ранд та бүтін сан болса, нәтиже x-(x/y)*y
формуласымен анықталады. Егер бір операнд нақты сан болса, нәтиже x-n*y (n – х-ті
у-ке бөлгендегі бүтін сан) формуласымен анықталады. Мысалы:
using System; // Kaldyk_tabu.cs программасы
namespace Kakdyk_tabu
{ class Class1
{ static void Main()
{ int x = 11, y = 4;
float z = 4;
Console.WriteLine("x = {0} y = {1} z = {2}",x,y,z);
// Нәтиже x = 11 y = 4 z = 4
Console.WriteLine("z * y = " + z * y); // Нәтиже 16
Console.WriteLine("z * 1e308 = " + z * 1e308);
// Нәтиже шексіздік
Console.WriteLine(
"x / y = " + x / y); // Нәтиже 2
Console.WriteLine("x / z = " + x / z); // Нәтиже 2.75
Console.WriteLine("x % y = " + x % y); // Нәтиже 3
Console.WriteLine("1e-324 / 1e-324 = " +
1e-324 / 1e-324); //
Нәтиже NAN
}
}
}
5-6-
шы лекция. C# тілінің операторлары
•
Жалпы мәліметтер
•
Тармақталу операторы
•
Ауыстырғыш оператор
•
Циклдік операторлар
•
C# тіліндегі жиымдар
•
Бір өлшемді жиымдар
•
Төртбұрышты жиымдар
34
•
Сатылы жиымдар
1
. Жалпы мәліметтер
Кез келген программаны алгоритм блокта-рының өзара байланысуына қарай үш
түрлі басқару құрылымынан жасауға болады. Оларды құрылымдық программалаудың
базалық құрас-тырғыштары (конструкциялары) деп атайды.
Бірнеше операторлардың тізбектей орында-луынан тұратын құрастырғыш реттік
(сызық-тық) деп аталады. Қандай да бір шарттың орын-далуына тәуелді құрастырғышты
тармақталу деп атаймыз. Цикл операторлар тізбегінің бірнеше рет қайталап орындалуын
білдіреді.
Оператор – тілдің қарапайым сөйлемі, ол белгілі бір әрекет немесе амал орындап, ;
таңбасымен аяқталады.
Сызықтық (реттік) құрылым бірінен кейін бірі орындалып тізбектеле орналасқан
бір-неше операторлардан тұрады.
Тармақты – шартқа байланысты екі оператордың бірінің орындалуы
Цикл – операторлар бөлігінің бірнеше рет қайталана орындалуы.
Кез келген нүктелі үтірмен аяқталатын өрнек оператор болып саналады. Ол
көбінесе берілген өрнек бойынша есептеу ісін атқарады. Бос опера-тор да өрнектің бір
түрі болып табылады. Мысалдар:
i++;
// инкремент операциясы
a *= b+c;
// көбейтіп меншіктеу амалы
fun(i, k); // функцияны шақыру орындалады
while(true);
// бос оператордан цикл (шексіз)
Блок немесе құрама оператор – бұл жүйелі жақшалармен шектелген
сипаттамалар мен операторлар тізбегі {…}. Блок компилятор үшін бір оператор сияқты
орындалады, ол синтаксис бойынша бір оператор болғанмен, алгоритм бойынша бірнеше
операторлардан тұрады.
Басқару операторлары
Бұлар программадағы операторлардың орын-далу реттілігін анықтайды да,
алгоритмдерді жү-зеге асырудың негізгі құралы болып табылады.
Басқару операторларының түрлері (категория-лары – санаттары):
1. Таңдау операторлары, олар мынадай түйінді сөздер арқылы енгізіледі: if, if ... else
..., switch.
2. Циклдік (қадамдық – итеративтік) операторлар, while, do ... while, for, foreach
түйінді сөздері арқылы енгізіледі.
3. Көшу (ауысу) операторлары, goto, break, continue түйінді сөздері арқылы
енгізіледі.
2. Таңдау (тармақталу) операторы
Тармақталу операторлары: if, else
және ауыстырғыш оператор: switch
if
шартты операторы есептеу жолының екі бағытта тармақталуын жүзеге асырады.
Оператор форматы:
if
(өрнек) 1-оператор;[else2-оператор;]
Шартты оператордың құрылымдық схемасы:
3. Switch операторы
switch
(ауыстырғыш) операторы есептеу процесін бірне-ше тармаққа бөліп жібереді.
Оның алгоритмдік схемасы келесі слайдта көрсетілген. Оператор форматы:
switch ( өрнек )
{
case 1_тұрақты_өрнек: [1_операторлар_тізімі]
case 2_тұрақты_өрнек: [2_операторлар_тізімі]
...
35
case n_тұрақты_өрнек: [n_операторлар_тізімі]
[default: операторлар ]
}
5. C# тіліндегі жиымдар (массивтер)
C# тіліндегі жиымдар C/С++ тілдерінен өзгеше-леу болып келеді. Бірден
мысалдар келтірейік.
int[ ] k; //k жиымын анықтау
k=new int [3]; //3 бүтін саннан тұратын жиым
k[0]=-
5; k[1]=4; k[2]=55; //Жиым элементтері
//Жиымның 3-элементін экранға шығару
Console.WriteLine(k[2].ToString());
Бұлар түсінікті шығар. Жиым былай анықталады:
int[ ] k;
Мынадай вариантлар дұрыс емес:
int k[ ]; // Қате!
int k[3]; // Қате!
int [3] k; // Қате!
Жиымды сипаттау үшін мәлімет типінен соң, бос тік жақшалар қойылады да, оның
аты жазылады:
float[ ] ar;
ar
айнымалысының типі — жылжымалы нүктелі сандар жиымы (нақты сан), ал
негізінде ar — бұл вариантуыш. С# тілінде жиым сілтемелік тип (refe-rence type) болып
табылады. Сөз тіркесі де осы типке жатады.
ar
айнымалысының алғашқы анықталған мәні — null. Бұл жиымға компьютер
жадынан орын бөлу үшін, new операторы арқылы жиымдағы элемент-тер санын көрсету
керек:
ar = new float[3] ;
Жоғарыдағы екі операторды біріктіріп жазуға да болады:
float[ ] ar = new float[3];
Бұған қоса, жиымды сипаттау кезінде оны бірден инициалдауға болады:
float[ ] ar = new float[3] { 3.14, 2.17, 100 };
Инициалдау мәндерінің саны жиымда көрсетілген элементтер санымен сәйкес болуы
тиіс.
Инициалдау кезінде жиым элементтері санын бермеуге де болады:
float[ ] аr = new float[] { 3.14, 2.17, 100 };
new
сөзін жазбауға да рұхсат етілген:
float
[ ] аr = { 3.14, 2.17, 100 };
Кейіннен программада arайнымалысына басқа өлшемдегі float типін меншіктеуге де
болады:
ar = newfloat[5];
Мұнда float типті 5 мәнді сақтауға арналған жады бөлінеді, алғашқыда олардың
бәрінің де мәні 0-ге тең деп саналады.
Алдыңғы бөлінген float типті 3 мәнді сақтауға арналған жады қоқыс ретінде
(garbage collection) өздігінен босатылады, өйткені С# тілінде delete операторы жоқ.
Сөз тіркестеріндегі сияқты жиым элементте-рінің санын мынадай өрнекпен
анықтауға болады:
ar.Length;
С# тілінде бір өлшемді жиымдар және одан өзге жиымдардың жиымы болып
табылатын екі (одан да көп) өлшемді төртбұрышты және сатылы (тураланбаған - jagged)
жиымдар құру мүмкіндік бар.
36
6 бүтін саннан тұратын ажиымының теріс элемент-терінің қосындысы мен санын
және ең үлкен элемен-тін анықтайтын программа құрамыз.
using System;
namespace Listing6_1
{ class Class1
{ static void Main()
{ const int n = 6;
int[ ] a = new int[n] { 3, 12, 5, -9, 8, -4 };
Console.WriteLine("Берілген жиым:" );
for ( int i = 0; i < n; ++i )
Console.Write( "\t" + a[i] );
Console.WriteLine( );
long sum = 0; // теріс элементтері қосындысы
int num = 0; // теріс элементтері саны
for ( int i =0; i < n; ++i )
if ( a[i] < 0 )
{ sum += a[i];
++num;
}
Console.WriteLine(" Теріс сандар қосындысы = " + sum );
Console.WriteLine(" Теріс сандар саны = " + num );
int max = a[0]; // максимал элемент
for ( int i = 1; i < n; ++i )
if ( a[i] > max ) max = a[i];
Console.WriteLine( "Максимал элементі = " + max );
}
}
}
7-
ші лекция. Енгізу-шығару мысалдары. Басқару операторлары элементтеріне
мысалдар
•
Консольдік енгізу-шығару (Console класы ) мүмкіндіктері;
•
Басқару операторлары элементтері (тармақ, цикл, басқаруды
беру).
Консольге мәлімет шығару
using System;
namespace A
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Берік";
37
Console.Write( i );
Console.Write( " y = {0:F2} \nd = {1:D3}", y, d );
Console.WriteLine( " s = " + s );
}
}
}
Консольден мәлімет енгізу
using System;
namespace A
{ class Class1
{ static void Main()
{
string s = Console.ReadLine(); //
вводстроки
char c = (char)Console.Read(); //
вводсимвола
Console.ReadLine();
stringbuf; //
буфердлявводачисел
buf = Console.ReadLine();
int i = Convert.ToInt32( buf ); //
преобразованиевцелое
buf = Console.ReadLine();
double x = Convert.ToDouble( buf ); //
преобразованиеввещ.
buf = Console.ReadLine();
double y = double.Parse( buf ); //
преобразованиеввещ.
}
}
}
Басқару операторларының элементтері
Блок (құрама оператор)
Блок — жүйелі жақшаларға алынған операторлар тізбегі:
begin end
{ }
Блок компилятор үшін бір оператор болып саналады, синтаксис бойынша бір
оператор керек болғанмен, алгоритм бойынша — бірнеше оператор орындалады.
Блокта бір-ақ оператор болуы мүмкін, кейде ол тіпті бос болады.
«
Өрнек» операторы
Нүктелі үтірмен аяқталған кез келген өрнек оператор болып есептеледі, ол белгілі
бір амалдар орындауды керек етеді.
i++; // выполняется операция инкремента
a *= b
+ c; // выполняется умножение с присваиванием
fun( i, k ); // выполняется вызов функции
Бос оператор
o
Бос оператор ; синтаксис бойынша оператор керек
болғанмен, мағынасы бойынша — ол қажет етілмегенде қолданылады:
o
while ( true );
Бос оператордан тұратын бұл цикл шексіз орындалуды көрсетеді
o
;;;
Үш бос оператор
38
Тармақталу операторы:
o
тармақталу (if)
o
ауыстыру (switch)
if шартты операторы
if ( a < 0 ) b = 1;
if ( a < b && (a > d || a == 0)) ++b;
else { b *= a; a = 0; }
if ( a < b ) if ( a < c ) m = a;
else m = c;
else
if ( b < c ) m = b;
else m = c;
8-
ші лекция. Кездейсоқ сандарды пайдалану. Символдар және сөз тіркестері
•
Кездейсоқ сандар тізбегін алу;
Жиымдарды пайдаланатын программаларда олардың мәні ретінде кездейсоқ
сандарды қолданған ыңғайлы болып табылады.
С# кітапханасында кездейсоқ сандар беретін Random класы бар, ол System атаулар
кеңістігінде анықталған.
Кездейсоқ сандар тізбегін алу үшін алдымен төмендегідей конструктор көмегімен
класс экземплярын (данасын) жасау керек:
Random a = new Random();
// 1
Random b = new Random( 1 );
// 2
мұндағы 1-жолдағы параметрсіз конструктор кездейсоқ сандарды уақыт көрсеткіші
негізінде қрастырады. Сондықтан ол қайталаған сайын жаңа сандар тізбегін беріп
отырады. Ал, 2-жолдағы int типіндегі параметрі бар конструктор қайталаған сайын
тұрақты сандар тізбегін береді.
Кездейсоқ сандар тізбегін алу үшін алдымен төмендегідей конструктор көмегімен
класс экземплярын (данасын) жасау керек:
Random a = new Random();
// 1
Random b = new Random( 1 );
// 2
мұндағы 1-жолдағы параметрсіз конструктор кездейсоқ сандарды уақыт көрсеткіші
негізінде қрастырады. Сондықтан ол қайталаған сайын жаңа сандар тізбегін беріп
отырады. Ал, 2-жолдағы int типіндегі параметрі бар конструктор қайталаған сайын
тұрақты сандар тізбегін береді.
Аты
Сипаттамасы
Next ()
int
типіндегі оң сандар диапазонынан бүтін оң сандар тізбегін
қайтарады.
Next(макс)
[0, макс]
аралығындағы (диапазонынанда-ғы ) бүтін оң сандар тізбегін
қайтарады.
Next(мин, макс)
[мин, макс]
диапазонынан бүтін оң сандар тізбегін қайтарады.
NextBytes(жиым)
[0, 255]
диапазонынандағы сандар тізбегін қайтарады.
NextDouble()
[0, 1]
диапазонынандағы нақты оң сандар сандар тізбегін қайтарады.
39
Кездейсоқ сандар тізбегін алу тәсілдерін пайдалану мысалы
using System;
namespace Listing6_10
{ class Class1
{static void Main()
{Random a = new Random();
Random b = new Random(1);
const int n = 10;
Console.WriteLine("\
n Диапазон [0, 1]:");
for (int i = 0; i < n; ++i)
Console.Write("{0 ,6:0.##}“,a.NextDouble());
Console.WriteLine("\
n Диапазон [0, 1000]:");
for (int i = 0; i < n; ++i)
Console.Write(" " + b.Next(1000));
Console.WriteLine("\
n Диапазон [-10, 10]:");
for (int i = 0; i < n; ++i)
Console.Write(" " + a.Next(-10, 10));
Console.WriteLine("\
n Массив [0, 255]:");
byte[] mas = new byte[n]; a.NextBytes(mas);
for (int i = 0; i < n; ++i)
Console.Write(" " + mas[i]);
}
}}
Программа жұмысының нәтижесі:
Диапазон [0, 1]:
0,02 0,4 0,24 0,55 0,92 0,84 0,9 0,78 0,78 0,74
Диапазон [0, 1000]:
248 110 467 771 657 432 354 943 101 642
Диапазон [-10, 10]:
-8 9 -6 -10 7 49 -5 -2 -1
Массив [0, 255]:
181 105 60 50 70 77 9 28 133 150
1.
Символдар мен сөз тіркестері
Мәтіндік мәліметтерді өңдеу программа-лаудағы ең бір жиі кездесетін жұмыс түрі
болып саналады. Оның мынадай мүмкіндік-тері бар: символдарды, символдар жиымын,
сөз тіркестерін, өзгермелі және өзгермейтін тіркестерді өңдеу, т.с.с.
1.1.
Символдарды пайдалану
Символдық тип char Unicode кодтау жүйе-сінде символдарды сақтау үшін керек.
Сим-волдық тип С# тілінің құрамдас типі болып саналады да, .NET кітапханасының
System
атаулар кеңістігіндегі Char стандартты класы-на сәйкес келеді. Бұл класс
40
символдарды анықтап, олардың категориясын, төменгі немесе жоғарғы регистрге
ауыстыруға қатысты статикалық тәсілдерді де береді.
Енді мысалдар келтірейік
System.Char
класы тәсілдерін пайдалану
using System;
namespace Listing6_6
{ class Class1
{ static void Main()
{ try
{
char b = 'В',c = '\x63',d = '\u0032'; // 1
Console.WriteLine("{0} {1} {2}", b, c, d);
Console.WriteLine("{0} {1} {2}", char.ToLower(b), char.ToUpper(c),
char.GetNumericValue(d));
char a;
do // 2
{ Console.Write("Введите символ: ");
a = char.Parse(Console.ReadLine());
Console.WriteLine("Введен символ {0}, его код - {1}", a, (int)a);
if (char.IsLetter(a)) Console.WriteLine("Буква");
if (char.IsUpper(a)) Console.WriteLine("Верхний peг.");
if (char.IsLower(a)) Console.WriteLine("Hижний peг.");
if (char.IsControl(a)) Console.WriteLine("Управляющий");
if (char.IsNumber(a)) Console.WriteLine("Число");
if (char.IsPu
nctuation(a)) Console.WriteLine("Paздeлитeль");
} while (a != 'q');
}
catch
{
Console.WriteLine("Возникло исключение");
return;
}
}
}
}
Мұндағы 1-операторда 3 символдық айнымалы сипатталған. Олар әр түрлі
бейнелеу формаларын-дағы символдармен инициалданған. Сонан соң символдарды шығару
және түрлендіру әрекеттері орындалады.
2-
операторда пернелерден енгізілген символ талданады. Мұнда Ctrl пернесі
мен латын әріптерін пайдаланып, басқару символдарын да енгізуге болады. Енгізу кезінде
тіркесті бір ғана символ болуға тиіс char символына түрлендіретін Parse тәсілі
пайдаланылған. Онда тіркес енгізілетіндіктен, символ соңынан Enter пернесі басылады. Цикл
q символы енгізілгенше орындала береді.
Олар әр түрлі бейнелеу формаларындағы символдармен инициалданған.
Соңынан сим-волдарды шығару және түрлендіру әрекеттері орындалады.
1.2.
Символдар жиымдары
Символдар жиымдары басқа типтегі массивтер тәрізді бұрын айтылған
базалық Array класы негізінде құрылады.
Оның тәсілдерін мұнда қолдану бірсыпыра есептерді тиімді түрде шығару
мүмкіндігін береді.
Енді бір мысал келтірейік.
41
Символдар жиымын пайдалану мысалы
using System;
namespace Listing 6_7
{ class Class1
{ static void Main( )
{
char [ ] a = { 'm', 'a', 's', 's', 'i', 'v' };
// 1
char [ ] b = "а роза упала на лапу азора".ToCharArray(); // 2
PrintArray( "Исходный массив а:", a );
int pos = Array.IndexOf( a, 'm' );
a[pos] = 'M';
PrintArray( "Измененный массив а:", a );
PrintArray( "Исходный массив b:", b );
Array.Reverse( b );
PrintArray( "Измененный массив b:", b );
}
public static void PrintArray( string header, Array a )
{
Console.WriteLine( header );
foreach ( object x in a ) Console.Write( x );
Console.WriteLine( "\n" );
}
Программа жұмысы нәтижесі:
}
}
Символдық жиымды оның мәндерін бере отырып (1-оператор) немесе string
класының ToCharArray функциясын пайдалану жолымен тіркесті символ-дарға бөле
отырып инициалдауға болады.
Достарыңызбен бөлісу: |