Кабелімен немесе радиоарнасымен жүргізетін қозғалмалы роботтың жасауының мүмкіндігі
Түйіндеме. Берілген жұмыста қолданылатын əдістер мен əдістемелер функционалды түйіндерді құру мен
жасау кезінде модульді қағиданы жəне декомпозициялау əдісін қолдануды қарастырады. Модульді қағида
робототехникалық жүйелерді құру кезінде аса тиімді, ол заманауи құрылғыларды жаңартуға жəне бастапқы
қолданылған құрылымдық элементтердің негізінде олардың əркелі күйлерін құруға мүмкіндік береді. Жұмыс
жеке модульдерден РКҚ функционалды түйіндерін құрудың əдістемесін пайдалана отырып жүргізіледі.
Декомпозициялау əдісі құрылғылар мен бұйымдарды жеке құрылымдық элементтерге жіктеуге, оларды
талдауға, олардың ерекшеліктерінің сипаттамаларын анықтауға негізделеді.
Түйін сөздер: робот, манипулятор, трипод, қадағалар, қозғалтқыш, мехатроника
Khachikyan V.S., Antontsev A.V., AkhmetovaG.Zh.
Possibility of the mobile robot development controlled by wire or radiochannel
Summary. Methods and methodology in this paper include the application of a modular principle and the
decomposition method in the design and development of functional units. Modularity is very efficient in constructing
robotic systems. It can be upgraded and modified to create modern devices based on the same original structural
elements. Work was carried out using the methodology of designing functional units RTS from individual modules. The
decomposition method is to decompose devices and products to individual constituent elements, their analysis,
identifying their characteristics properties.
Key words: robot, manipulator, tripod, sensors, actuator, mechatronics.
ƏОЖ 004.378.15
Шаңғытбаев Н.Қ. магистрант
Ақтөбе политехникалық колледжі,
Ақтөбе қ, Қазақстан Республикасы
nurzhan.90@mail.ru
NET FRAMEWORK ПЛАТФОРМАСЫНДА МƏЛІМЕТТЕР ҚОРЫМЕН ЖҰМЫС ЖАСАУДА
DATAREADER, DATAADAPTER ОБЬЕКТІЛЕРІНІҢ ҚЫЗМЕТТЕРІ
Аңдатпа. Көптеген қосымшалармен жұмыс кезінде мəліметтер қоры мен байланысу қажеттілігі
туындайды. Сол кезде клиенттік қосымшасы орталықтандырылған мəліметтер қорымен немесе XML
мəліметтер қорымен немесе жергілікті мəліметтер қорымен, яғни клиент орналасқан компьютердегі мəліметтер
қорымен жұмыс жасау керек. ADO.NET технологиясы осы мəліметтер қоры мен байланыс орнатып, жұмыс
461
жасаудың тиімді жолын ұсынады, яғни жүйе қорларын толық пайдалану жолын ұсынады. Мақалада кодтарды
құруға жəне орындауға арналған интегральды басқару ортасы, яғни, NET Framework платформасы жəне
ADO.NET технологиясы қарастырылады. ADO.NET технологиясының негізгі объектілерінің DataSet, DataTable,
DataAdapter, DataReader қызметтеріне тоқталып өтіледі
Түйін сөздер: .NET Framework платформасы, ADO.NET технологиясы, DataSet обьектісі, DataTable
обьектісі, DataAdapter обьектісі, DataReader обьектісі, Data Provider провайдері.
ADO.NET мəліметтер қорына байланыс орнатуда негізгі екі компонентті пайдаланады. Олар:
мəліметтер жиыны (DataSet обьектісі), яғни мəліметтер локальді компьютерде сақталады жəне
сонымен бірге мəліметтердің провайдері (Data Provider), программа мен мəліметтер қоры
арасындағы байланыс орнатушы қызметін атқарады.
DataSet обьектісі
DataSet обьектісі – бұл мəліметтер көзінен бөлек, компьютер жадындағы мəліметтер. Сонымен
қатар бұл обьектіні мəліметтер қорының локальді көшірмесі ретінде қарауға болады. DataSet
мəліметтеріне кез келген мəліметтер көзінен деректерді құюға болады, мысалы SQL Server
мəліметтер қорынан, Microsoft Access жəне XML-файлдарынан алуға болады. DataSet жады да
сақталады жəне ол мəліметтер қорынан тəуелсіз басқаруды жəне жаңартулар жүргізуге құзыреті бар.
Қажетінде сервердегі мəліметтер қорын жаңартуға шаблон ретінде бола алады.
DataSet
обьектісі құрамында DataTable обьектісі жиындары бар(Бұл жиын болуы да жəне бос
болуы да мүмкін, яғни ешқандай DataTable обьектісі болмауы). Əрбір DataTable обьектісі
компьютер жадында жеке бір кесте ретінде болады. DataTable обьектісі екі жиын мен анықталады.
Олардың бірі DataColumns. Мұнда барлық DataTable кестесінің бағандары кіреді жəне кестелер
шектелген жиындарымен. Бірге осы екі жиын кестенің схемасын құрайды. Сонымен қатар DataTable
ға Data Rows жиыны да кіреді. DataSet обьектісінің деректері(мəліметтері) осында сақталады.
Сонымен қатар DataSet обьектісінің құрамында Data Relations жиыны бар. Data Relations түрлі
кестелердің араларында байланыс орнату үшін қажет. Data Relations құрамында, DataSet құратын
кестелерді анықтайтын Data Relation обьектілері бар. Мысалы ретінде DataSet құрған екеуара
байланысқан кестені алайық, олар Customers жəне Orders. Customers кестесінде əрбір сатып алушы
арнайы жеке жолда, қайталанбайтын идентификацияланған CustomerlD өрісінен тұрады. Orders
кестесінде тауарларға сұраныс берген сатып алушылар туралы ақпараттар орналасқан. Сұраныс
берушілер CustomerlD қайталанбайтын өрісімен идентификацияланады. Егер кейбір сатып алушылар
бірнеше сұраныс беретін болса, онда Orders кестесінде CustomerlD бірдей бірнеше жазбалар пайда
болуы мүмкін. Бұл мысалдағы байланыстың түрі «бірден көпке» болып табылады. Мұндай
байланыстың түрін Data Relation обьектісі құралымен анықтауға болады.
Сонымен қатар DataSet құрамында Extended Properties жиыны да бар. Мұнда DataSet тің
қосымша мəліметтері сақталады.
Мəліметтердің провайдері
Мəліметтер қорымен байланысты орнату жəне оны ұйымдастыру мəліметтердің провайдері
(Data Provider) арқылы жүзеге асады. Шындығында провайдерлер – бұл мəліметтерге тиімді де,
өнімді, байланысты қамтамасыз ететін, бір–бірімен байланысқан компоненттер жиыны. Қазіргі таңда
.NET Framework екі провайдермен жұмыс жасайды. Олардың бірі SQL Server 7.0 жəне одан да
жоғарғы версияларымен жұмыс жасауға арналған SQL Server .NET Data Provider жəне өзге де типтік
мəліметтер қорымен байланысу үшін OleDb .NET Data Provider. Кез–келген мəліметтер провайдері
əмбебап компоненттер класының жақын нұсқаларынан тұрады:
Connection – мəліметтер қорына қосылуды ұйымдастырады.
Command – мəліметтер көзін басқару үшін қолданылады; мəліметтерге қайта өңдеу жасауға
келмейтін командаларды орындайды. Мысалы INSERT, UPDATE жəне DELETE командалары немесе
басқа командалар, қалпына келтіруші обьекті DataReader (мысалы SELECT сияқты);
DataReader – мəліметтер қорымен қосылған кезінде, бір бағытта жазбалар жиынын оқуға
арналған.
DataAdapter – ажыратылған DataSet немесе DataTable обьектіслерін толтырады жəне олардың
мазмұндарын жаңартады.
ADO.NET те мəліметтермен байланыс былайша жүргізіледі: Connection обьектісі арқылы
қосымша мен мəліметтер қоры арасында байланыс орнатылады, яғни тікелей Command жəне
DataAdapter обьектілері қол жеткізе алатындай. Command обьектісі мəліметтер қорына тікелей
командаларын орындата алады. Егер де орындалған команда бірнеше жауаптар қайтаратын болса,
онда Command, DataReader обьектісі арқылы байланысты ашады. Алынылған нəтижеге қосымша
462
кодтарын пайдалана отырып, тікелей өңдеулерді жүргізуге болады немесе DataSet обьектісі арқылы,
яғни оны DataAdapter обьектісі көмегімен толтырады. Сонымен бірге мəліметтер қорын Command
немесе DataReader обьектілері арқылы жаңарта алады.
DataAdapter обьектісі
DataAdapter – бұл ажыратылған мəліметтер қорына байланыс орнататын, ADO.NET тегі негізгі
класс. Негізігі мағынасын алатын болсақ ол мəліметтер қоры жəне DataSet араларын
байланыстырушы қызметін атқарады. DataAdapter обьектісінің Fill əдісін шақырғанда, мəліметтер
қорынан алынған мəліметтермен Data Table немесе DataSet ті толтырады. Жадыға жүктелінген
мəліметтерді өңдеп болған соң, DataAdapter обьектісінің Update əдісін шақыру арқылы, дайын болған
жазбаны мəліметтер қорына енгізуге болады. Мəліметтер қоры команадаларын анықтайтын,
DataAdapter дің төрт қасиеті бар:
Select Command. Мəліметтер қорынан мəліметтерді алатын текст немесе командалардан
құралады. Fill əдісін шақырғанда Data Table немесе DataSet ті толтырады жəне орындайды.
Insert Command. Кесте жолына қоюға арналған, текст немесе командадан тұрады.
DeleteCommand. Кестеден жолдарды өшіретін, текст немесе командадан тұрады.
UpdateCommand. Мəліметтер қорын жаңартатын, текст немесе командадан тұрады.
Update командасын орындағанда барлық өңдеу жүргізілген мəліметтерді DataSet тен мəліметтер
қорына көшіреді. Орындау барысында InsertCommand, DeleteCommand немесе UpdateCommand
командалары сəйкесінше орындалады.
DataReader обьектісінің қызметі
Command обьектісінің көмегімен, мəндерді қайтаратын немесе мəндерді қайтармайтын
командаларды орындау қарапайым. Бірнеше мəндерді қайтару мақсатында Command обьектісінмен
сұраныс жасау үшін Execute Reader əдісіне жүгіну қажет. DataReader обьектісін қайтарады.
DataReader бір бағытты кезекті мəліметтерді оқуды тиімді əрі жылдам ұйымдастыратын
қысқаша обьект түрі. DataReader обьектісі қажетті мəнді тікелей қосымша кодына беру арқылы
нəтижелі жиыннан таңдауға мүмкіндік береді. Мұнымен DataSet тиімді, бірақ DataAdapter ге
қарағанда жөндеу жағынан тиімсіздеу. DataSet обьектісі арқылы алынған мəліметтер оқу үшін ғана
қолданылады, сондықтанда DataSet құралдары арқылы модификацияланбайды. Мұның өзінде де
мəліметтерді бір бағытта қарауға рұқсат етіледі: алдыңғыда оқылған деректерге қайта оралуға
болмайды. Сонымен бірге DataReader обьектісі əрдайым да байланыста болуға негізделген жəне ол
қызметін атқару барысында, активті байланысқа көпсалалы қосылуды талап етеді.
DataReader объектісін құру
DataReader обьектісін тікелей жасауға болмайды, ол Command объектісінің ExecuteReader əдісі
бойынша жасалынады. Деректер провайдерлерінің басқада мүшелеріне сəйкес, əрбір DataProvider
класының өзінің DataReader класы бар. OleDbCommand обьектісі OleDbDataReader ді қайтарады, ал
SqlCommand обьектісі Sql Data Reader ді қайтарады. Мысалы:
System.Data.OleDb.OleDbDataReader inyOleDbReader;
System.Data.SqlClient.SqlDataReader mySqlReader;
// Бұл команда жаңа OleDbReader обьектісін құрады жəне оны айнымалыға жазады.
myOleDbReader - myOleDbCommand.ExecuteReaderO;
// Бұл команда жаңа SqlReader обьектісін құрады жəне оны айнымалыға жазады.
mySqlReader = mySqlCommand.ExecuteReader();
Command объектісінің ExecuteReader əдісін шақырғанда орындау керек команданы орындайды
жəне жаңадан сəйкес DataReader обьектісін құрады, яғни айнымалының сілтемелі типін жазуға
болады.
DataReader обьектісінің көмегімен мəліметтерге қарапайым байланысты орнату
DataReader обьектісіне сілтеме алған кезде, жадыларға жазылған деректердегі жазбаларды
көруге болады. Жаңа DataReader обьектісінің оқу нұсқағышы, нəтижелі жиынның бірінші жазбасына
қондырылады. Оны қолжеткізерлік ету үшін Read əдісін шақыру керек. Егер жазбаға қол жеткізілген
болса, DataReader обьектісінің нұсқағышын Read əдісі келесі жазбаға ауыстырады жəне True (true)
мəнін қайтарады, басқа жағдайда осы əдіс False (false) мəнін қайтарады. Read əдісі While (while)
цикліндегі артық жазбаларға қолданылады. Мысалы:
while (myDataReader.Read())
{
// Бұл код əрбір нəтижелі жиынның жазбаларына бір
// реттен ғана қолданылады.
}
463
Жазбаларды DataReader обьектісінің көмегімен оқығанда жеке өрістердің мəндері индексаторлар
арқылы қол жеткілікті немесе үнсіз келісім бойынша обьектілердің массиві түріндегі элементтерге,
яғни индекс бойынша немесе өрістердің аттары бойынша қаратуға рұқсат етіледі. Мысалы:
while (myDataReader.ReadO)
{
object myObject = myDataReader[3];
object myOtherObject - myDatafieader["CustomerID"];
}
DataReader байланыс амалы барлық мəндері обьектілер түрінде ұсынады, алайда DataReader ден
типтенген деректерді де алуға рұқсат. Бұл туралы толық мағұлмат алда айтылады.
Мəліметтерді DataReader көмегімен оқығаннан кейін, DataReader ді жабу үшін, Close əдісі
шақырылуы қажет. Бұлай болмаған жағдайда DataReader көп салалы активті байланысқа қосылуын
тежейді. Оны басқа обьектілерге жарамсыз етеді. CloseConnection нің Command Behavior қасиетін
қондырып, ExecuteReader əдісін шақырғанда, сіз автоматты түрде Close əдісін шақырмастан,
байланысты жауып тастайсыз.
myDataReader.Close();
DataReader обьектісі көмегімен бағанды таңдау
Келесі мысал Console терезесінде баған мəнін шақырудағы нəтижелі жиынның артық
жазбаларын көрсетеді. Бұл мысалда Connection қасиеті myConnection атымен байланысты анықтайды,
OleDbCommand обьектісі myOleDbCommand атымен түгелдігін тұжырымдайды.
// Активті байланысты ашу,
myConnection.Ореn();
// DataReader объектісін құру жəне oiyReader //айнымалысына жазу.
System. Data.OleDb.OleDbDataReader -nyReader =
myOleDbCornmand. ExecuteReader();
// деректерді оқымастан бұрын Read əдісін шақыру.
while (myReader.Read())
{
// Өріске рұқсатты атымен алуға болады
// немесе оның реттік номері арқылы алуға болады.
Console.WriteLine(myReader["Customers"].ToString());
}
// Олармен жұмыстан кейін DataReader ді міндетті түрде //жабыңыз
myReader,Closet);
// жəне байланыс қажет болмаған жағдайда
myConnection.Close;
DataReader обьектісінің көмегімен деректерге рұқсат алу
1. Command обьектісінің Execute Reader əдісін шақырып жəне нəтижелі DataReader обьектісін
сəйкес айнымалы типіне жазыңыз.
2. Циклдің ішінде түрлі амал жүргізіп, While (while) циклінде нəтижелі жиынды өңдеңіз.
Деректермен байланыспастан бұрын, DataReader обьектісінің Read əдісі шақырылуы тиіс.
3. Болғаннан соң, байланысты жабу үшін, DataReader обьектісінің Close əдісін шақырыңыз.
DataReader обьектісінің көмегімен типтелген мəліметтерді алу
DataReader мəліметтерді обьектілер күйінде ұсынып қана қоймай, сонымен бірге нəтижелі
жиыннан деректерді алатын, өзінің жеке əдістерінде де қолдайды. Бұл əдістердің аттары Get сөзінен
құралады жəне мəліметтерді алатын типтердің аттары да. Мысалы ретінде қарастыратын болсақ,
Boolean мəнін алатын əдіс GetBoolean деп аталған. Егер кейбір баған мəліметтерінің типтері анық
болса, осы бағаннан қатаң типтенген мəліметтерді алу үшін DataReader обьектісінің əдістерін қолдана
беруіңізге болады. Мысалы:
string myString;
myString = myDataReader.GetBoolean(S);
Мəлімет алудың мұндай амалын қолдануда өрістің атын емес, реттілік номерін көрсетіңіз керек.
Егер өріс аты белгілі болған болса, онда GetOrdinal əдісін шақыру арқылы оның реттілік номерін
анықтауға болады. Мысалы ол былай болады:
int CustomerlD;
string Customer;
// 'CustomerlD' өрістің реттік номерін анықтайды.
464
CustomerlD = myDatafleader.GetOrdinal("CustomerlD");
// осы өрістен бағанды алып жəне Customer айнымалысына //жазу.
Customer = myDataReader.GetString(CustomerlD);
DataReader обьектісінің көмегімен типтелген мəліметтерді алу жолдары
1. Қажетінше өрістің реттілік номерін анықтаңыз, GetOrdinal шақырып жəне қажет өрістің
атын беріңіз.
2. DataReader обьектісінің Get əдісін шақырыңыз, өрістің реттілік номерін көресетіңіз, яғни
алғыңыз келетін мəнді.
DataAdapter обьектісін құру жəне баптау
DataAdapter обьектілері мəліметтер қоры мен DataSet обьектісі арасындағы байланысты,
мəліметтер алмасуды қамтамасыз етеді жəне олардың берілуін қамтамасыз етеді. Кей қосымшаларда
мəліметтердің бір жақты оқылуын қамтамасыз етеді, ал басқаларына мəліметтерді алып қана қоймай,
мəліметтер қорын басқару қажет. DataAdapter обьектісі мəліметтерді ала алады, DataSet обьектісін
толтыра алады жəне қажет болса, мəліметтер қорын жаңарта алады.
Visual Studio .NET да DataAdapter обьектісінің екі түрі бар. Олар: SqlDataAdapter, ол SQL Server
7.0 нұсқасымен немесе одан да жоғары нұсқаларымен жасау мақсатында қолданылады, жəне бір түрі
OleDbDataAdapter, бұл түрі өзге мəліметтер қорымен жұмыс жасауға қолданылады, яғни
OleDbProvider ді қолдаушы.
Ереже бойынша, əрбір жұптағы мəліметтермен алмасуды «DataSet обьектісінің DataTable
обьектісі-мəліметтер қоры кестесі» жеке DataAdapter обьектісі басқарады. DataSet те бірнеше кесте
болуы мүмкін, сондықтан да DataSet ке қосылған əрбір кестесі үшін, жеке DataAdapter обьектісін
құру қажет етіледі.
DataAdapter ді құрудың үш түрі бар. Server Explorer терзесінен мəліметтер қорының элементін
алып қою арқылы, жаңа Data Adapter Configuration мастері көмегімен немесе осы обьектіні кодпен
шақыру жəне баптау. Бұл түрі қолмен шақыруға жатады.
Server Explorer терзесі көмегімен Data Adapter ді құру
Data Adapter ді құрудың қарапайым жолы, Server Explorer терзесі көмегімен жасалынуы. Server
Explorer терзесіндегі, Data Connections ағаш күйіндегі байланыстағы түйіні құрамында барлық жұмыс
жасап тұрған байланыстар түйіндер ретінде болады. Түйінді ашқаннан кейін, сіздер байланыстағы
мəліметтер қоры туралы қосымша деректер аласыз, соның ішінде байланыстағы кестелер тізімі,
ақпараттар жəне сақтаулы процедураларда бар. Кестені анықтайтын Data Adapter обьектісін құру үшін,
Server Explorer терзесінен кестені дизайнер терезесіне алып қойсаңыз жеткілікті. Осы кезде сізге
қажетті(сəйкес типті) Data Adapter обьектісін құрасыз (SqlDataAdapter немесе OleDb DataAdapter).
Сонымен қатар Data Adapter обьектісінің бапталуы да қарастырылған, яғни ол кестелердің
бағандарын қайтарады. Ол үшін кестенің байланыстар түйінін ашыңыз жəне қажетті бағандарды
таңдаңыз. Ctrl батырмасын баса отырып, сəйкес элементті шертіңіз. Сосын таңдалған бағандарды
дизайнер терезесіне сүйреп қойыңыз. Таңдаған бағандарға конфигурацияланған Data Adapter
обьектісін аласыз.
Server Explorer терзесі көмегімен Data Adapter ді құрудың жолдары
1. Қосымшадағы мəліметтер қоры байланысын көрсететін, Server Explorer терзесіндегі түйінді ашыңыз.
2. Мəліметтер қорының кестесін көрсету үшін, Tables түйінін ашыңыз.
3. Қажетті кестені таңдаңыз. Егер барлық кесте қажет етілмесе, онда бағандар тізімін алу
мақсатында түйінді ашыңыз. Ctrl батырмасын баса отырып, қажетті бағанды шертіңіз.
Жаңа Data Adapter обьектісінің экземплярын құру жəне баптау үшін, таңдалынған бағандарды
дизайнер терезесіне сүйреп қойыңыз.
ƏДЕБИЕТТЕР
1. Рихтер Дж. Программирование на платформе Microsoft .NET Framework. Пер. с англ. – 2-е изд., М.:
Изд.-торг. дом «Русская Редакция», 2003. – 512 с.
2. Просиз Дж. Программирование для Microsoft .NET. Пер. с англ. – М.: Изд.-торг. дом «Русская
Редакция», 2003. – 704 с.
3. Платт Д. С. Знакомство с Microsoft .NET.Пер. с англ. – М.: Изд.-торг. дом «Русская Редакция», 2001. – 240 с.
4. Microsoft Corporation. Тестирование производительности Web-приложений Microsoft .NET. Пер. с англ.
– М.: Изд.-торг. дом «Русская Редакция», 2003. – 352 с.
5. Microsoft Corporation. Анализ требований и создание архитектуры решений на основе Microsoft .NET.
Пер. с англ. – М.: Изд.-торг. дом «Русская Редакция»,2004. – 416 с.
Microsoft Corporation. Основы Microsoft Visual Studio .NET. Пер. с англ. – M.: Изд.-торг.дом «Русская
Редакция», 2003. – 464 с.
465
REFERENCES
1. Rihter Dzh. Programmirovanie na platforme Microsoft .NET Framework. Per. s angl. – 2-e izd., M.: Izd.-torg.
dom «Russkaja Redakcija», 2003. – 512 s.
2. Prosiz Dzh. Programmirovanie dlja Microsoft .NET. Per. s angl. – M.: Izd.-torg. dom «Russkaja Redakcija»,
2003. – 704 s.
3. Platt D. S. Znakomstvo s Microsoft .NET.Per. s angl. – M.: Izd.-torg. dom «Russkaja Redakcija», 2001. – 240 s.
4. Microsoft Corporation. Testirovanie proizvoditel'nosti Web-prilozhenij Microsoft .NET. Per. s angl. – M.: Izd.-
torg. dom «Russkaja Redakcija», 2003. – 352 s.
5. Microsoft Corporation. Analiz trebovanij i sozdanie arhitektury reshenij na osnove Microsoft .NET. Per. s
angl. – M.: Izd.-torg. dom «Russkaja Redakcija»,2004. – 416 s.
Microsoft Corporation. Osnovy Microsoft Visual Studio .NET. Per. s angl. – M.: Izd.-torg.dom «Russkaja
Redakcija», 2003. – 464 s.
Шангитбаев Н.К.
Функции объектов DataReader, DataAdapter для работы с базами данных
на платформе .NET Framework
Резюме. В статье рассматриваются интегрированная управляемая среда для создания и исполнения
кода - платформа.NET Framework и объекты ADO.NET - DataSet, DataTable, DataAdapter, DataReader.
Ключевые слова: платформа .NET Framework, технология ADO.NET, обьект DataSet, обьект DataTable,
обьект DataAdapter, обьект DataReader, провайдер Data Provider.
Shangytbaev N.K.
Functions of objects of DataReader, DataAdapter for operation with databases
on the platform .net Framework
Summary. In article are considered integrated management environment for creating and executing code -
platform .NET Framework and objects of ADO.NET - DataSet, DataTable, DataAdapter, DataReader.
Key words: platform .NET Framework, technology ADO.NET, object DataSet, object DataTable, object
DataAdapter, object DataReader, provider Data Provider.
ƏОЖ 004.4
Шарипжанұлы А. студент, Алғожаева Р.C.
Қ.И.Сəтбаев атындағы Қазақ ұлттық техникалық университеті
Қазақстан Республикасы, Алматы қаласы
aibek.sharipjan@mail.ru
Достарыңызбен бөлісу: |