7.2 Бағдарламада класс әдістерін қолдану
Әртүрлі есептерді шешу мысалдары арқылы бағдарламаларда әдістерді қолдануды қарастырайық.
7.1-есеп. Диалог режимінде үш бүтін сандар енгізіледі. Ең үлкен санды тауып, оны шығару керек. Бүтін типтегі функция (әдіс) қолданылады.
Есепті шешу алгоритмі келесі амалдардан тұрады:
– Диалог режимінде үш бүтін сандарды енгізу керек, мысалы, a,b,c;.
– бірінші айнымалыда ең үлкен сан жазылғанын жариялаймыз (m айнымалысына a мәні меншіктеледі);
– m айнымалысының мәнін b айнымалысының мәнімен салыстырамыз, ең үлкен мәнді m айнымалысына меншіктейміз;
– m айнымалысының мәнін c айнымалысының мәнімен салыстырамыз, ең үлкен мәнді m айнымалысына меншіктейміз;
– монитор экранына m айнымалысының мәнін шығарамыз.
Салыстыру процесін келесі бүтін типті функция түрінде жазайық:
static int maxc(int aa, int bb, int cc)
{
int mm;
mm = aa;
if (mm < bb) mm = bb;
if (mm < cc) mm = cc;
return mm;
}
Бағдарламаның толық коды:
using System;
namespace ConsoleApplication1
{
class Program
{
static int maxc(int aa, int bb, int cc)
{
int mm;
mm = aa;
if (mm < bb) mm = bb;
if (mm < cc) mm = cc;
return mm;
}
static void Main()
{
int a,b,c,m;
string buf;
Console.Write("a bytin canin engiziniz ");
buf = Console.ReadLine();
a = Convert.ToInt32(buf);
Console.Write("b bytin canin engiziniz ");
buf = Console.ReadLine();
b = Convert.ToInt32(buf);
Console.Write("c bytin canin engiziniz ");
buf = Console.ReadLine();
c = Convert.ToInt32(buf);
m = maxc(a,b,c);
Console.WriteLine("Algashki sandar: {0}, {1}, {2}", a, b, c);
Console.WriteLine("Maksimal san = {0}", m);
Console.WriteLine("Enter pernesin basiniz");
Console.ReadLine();
}
}
}
Бағдарлама жұмысы:
a bytin canin engiziniz 21
b bytin canin engiziniz 34
c bytin canin engiziniz 17
Algashki sandar: 21, 34, 17
Maksimal san = 34
Enter pernesin basiniz
maxc()функциясының денесінде бүтін типті mm айнымалысын жарияладық.
Бағдарламалауда жергілікті және ауқымды айнымалылар ұғымы және олармен жұмыс жасау ережелері бар.
Кез келген функция ішінде жарияланған айнымалылар жергілікті айнымалылар деп аталады.
Класс ішінде, бірақ оның кез келген функциясының сыртында жарияланған айнымалылар осы кластың ауқымды айнымалылары деп аталады.
C# тілінде атаулары бірдей жергілікті және ауқымды айнымалыларды қолдануға рұқсат етілмейді, бағдарламаның барлық айнымалыларында жеке аттары болуы керек.
Әдіс терминологиясында «көз көрерлік аймағы» ұғымы болады. Кластың кез келген әдісі өз класының барлық ауқымды айнымалыларын «көреді» және оларды қолдана алады.
Жергілікті айнымалының «өмір» уақытын әдіс жұмысының уақыты анықтайды.
7.2–есеп. Диалог режимінде үш бүтін сандар енгізіледі. Оларды кему тәртібінде шығару керек. Класс әдісін қолдану керек.
Есеп түсінікті, бірақ алгоритм анық емес. Үш айнымалының орнына екі айнымалы болса, онда есепті шешу оңай болар еді.
A және B айнымалылары бар деп есептейік. Олардың мәнін X және Y айнымалыларына жазу керек, ең үлкен мәнді X айнымалысына, ал ең кіші мәнді Y жазамыз.
Ол үшін A және B айнымалыларының мәнін салыстыру керек, егер A B-дан үлкен болса, онда X айнымалысына A мәнін меншіктейміз, ал B мәнін Y айнымалысына меншіктейміз. Әйтпесе B мәнін X айнымалысына, ал A мәнін Y айнымалысына меншіктейміз.
Екі айнымалы үшін құрылған алгоритмді біз үш айнымалы үшін де былай қолдана аламыз:
Алдымен A және В салыстырамыз, нәтижелерін X және Y жазамыз.
Х және C салыстырамыз, нәтижелерін Х және Z жазамыз. Ең үлкен мәнді Х айнымалысына жазылады.
Z және Y салыстырамыз, нәтижелерін Y және Z жазамыз. Кему тәртібінде табылған сандарды Y және Z айнымалыларына жазылады.
Сонымен, бір алгоритмді – екі санды салыстыруды және ең үлкен және ең кіші санды табуды біз үш рет орындадық. Нәтижесінде X, Y және Z айнымалылар тізбегін аламыз, онда сандар кему тәртібінде орналасады.
Екі айнымалыға арналған алгоритмді орындау үшін static void maxmin(int aa, int bb, out int xx, out int yy) әдісін қолданайық.
Өзіміз үшін maxmin әдісінің атауында мынаны ескереміз: қайтарылатын параметрлер ең үлкен, ең кіші тәртібінде орналасады
Бағдарламаның коды:
using System;
namespace ConsoleApplication1
{
class Program
{
static void maxmin(int aa, int bb, out int xx, out int yy)
{
if (aa>bb) {xx = aa; yy = bb;}
else { xx = bb; yy = aa;}
}
static void Main(string[] args)
{
int a, b, c, x, y, z;
string buf;
Console.Write("a bytin canin engiziniz ");
buf = Console.ReadLine();
a = Convert.ToInt32(buf);
Console.Write("b bytin canin engiziniz ");
buf = Console.ReadLine();
b = Convert.ToInt32(buf);
Console.Write("c bytin canin engiziniz ");
buf = Console.ReadLine();
c = Convert.ToInt32(buf);
Console.WriteLine("Algashki rettilik: {0}, {1}, {2}", a, b, c);
maxmin(a,b,out x,out y);
maxmin(c,x,out x,out z);
maxmin(y,z,out y,out z);
Console.WriteLine("Alingan rettilik: {0}, {1}, {2}", x, y, z);
Console.WriteLine("Enter pernesin basiniz");
Console.ReadLine();
}
}
}
Бағдарлама жұмысы:
a bytin canin engiziniz 5
b bytin canin engiziniz -3
c bytin canin engiziniz 8
Algashki rettilik: 5, -3, 8
Alingan rettilik: 8, 5, -3
Enter pernesin basiniz
Келтірілген мысалда static void maxmin(int aa, int bb, out int xx, out int yy) әдісі бағдарламадан екі (int aa, int bb) параметрді алады және оған екі (out int xx, out int yy) параметрді қайтарады.
Сонымен бірге, бағдарламада қолданылатын нақты параметрлерде xx, yy формалды параметрлердің орнында мәндер болуы тиіс.
Параметрлерді қайтаруды ref сілтемесімен ұйымдастыруға болады, бірақ бұл үшін қайтарылатын нақты параметрлер сілтемелік типте болуы керек.
Математикалық есептерде қолданылатын функцияны пайдалану мысалы ретінде теңдеу түбірлерін табатын ортасынан бөлу әдісінің бағдарламалық жүзеге асыруын қарастырайық.
7.3-есебі. Ортасынан бөлу әдісін пайдаланып, 1 мен 2 аралығындағы кесіндіде t = 0.0001 дәлдігімен теңдеу түбірлерін табу:
Ортасынан бөлу әдісі берілген кесіндінің ұштарында функцияның мәні әртүрлі таңбада болады деп көздейді, мысалы , «-» и «+».
Демек, осы кесіндіде функция нөлге тең болатын кем дегенде бір x бар.
7.1-суреті – Ортасынан бөлу әдісін қолдану
X мәнін табу алгоритмі берілген кесіндіні тең бірдей бөліктерге бөлуге және функцияның мәні әртүрлі таңбада болатын бөлікті таңдауға негізделген. Осы процесс функцияның нөлге тең болатын шешім табылғанша немесе кесінді ұзындығы берілген дәлдіктен кем болғанша қайталанады (осы жағдайда теңдеудің түбірі табылды деп есептеледі).
Алгоритмде аргументтің түрлі мәндерінде функция шешімін бірнеше рет есептеу орындалады. Сондықтан осы процессті жеке әдісте бөліп жазу керек, мысалы f атауы бар әдіс.
Бағдарлама коды:
using System;
namespace ConsoleApplication1
{
class Program
{
static double f(double a)
{ return (Math.Cos(2/a)-2*Math.Sin(1/a)+1/a); }
static void Main()
{
double a, b, x, ya, yb, t;
a = 1;
b = 2;
t = 0.0001;
ya=f(a);
x=(a+b)/2;
yb=f(x);
while (b-a>t && yb!=0)
{
if (ya*yb<0)
{b=x; x=(a+b)/2; yb=f(x);}
else
{ a=x; ya=yb; x=(a+b)/2; yb=f(x);}
}
Console.WriteLine("Tendeydin tybiri = {0}", x);
Console.WriteLine("Enter pernesin basiniz");
Console.ReadLine();
}
}
}
Бағдарлама жұмысы:
Tendeydin tybiri = 1,87564086914063
Enter pernesin basiniz
f() функциясын қолдану бағдарлама көрнекілігін өсіреді және оның жазылуын жеңілдетеді.
Достарыңызбен бөлісу: |