You are on page 1of 32

ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ,

Е-НЭЭЛТТЭЙ ИНСТИТУТ

ПРОГРАМЧЛАЛ

ЛЕКЦ-8 ДОТООД ФУНКЦУУД,


ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Багш: А.Түвшинбаяр /магистр/

www.emust.edu.mn
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Дотоод функцүүд

Функцийн амин чухал үүргүүдийн нэг нь санах ойг хэмнэх явдал хэмээн өмнө бид
дурдсан билээ. Өөрөөр хэлбэл функцийг дуудах бүрийд программын удирдлага нэг
л газар очдог бөгөөд функц дуудагдах тоогоор программд давтагдан бичигдэхгүй
гэсэн үг юм. Функц дуудах коммандад хүрмэгц удирдлага функцийн эхлэлийн
комманд дээр харайж очих бөгөөд, харин функц дуудахад удирдлага буцаж дуудсан
газраа ирдэг юм.
Функц хэдийгээр санах ойг хэмнэх сайн талтай ч маш олон дуудагдах тохиолдолд
программын хурдад муу нөлөө үзүүлж болох юм. Өөрөөр хэлбэл, тэр бүрийд
шаардлагатай регистрүүдийг стект хийх, аргументүүдийг мөн хадгалах, удирдлагыг
шилжүүлэх, харин буцах бүрийд регистрүүдийг сэргээх, удирлага буцаах зэрэг
үйлдлүүд хийгдэнэ.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Харин биелэлтийн хурдыг нэмэгдүүлэхийн тулд функцийг дотоод функц болгож болох
юм. Ийм функц нь программыг хөрвүүлэх үед функцийг дуудсан газар бүрт удирдлага
шилжүүлэх коммандыг биш харин уг функцийн коммандуудыг шууд орлуулан бичдэг
юм. Том хэмжээний функцүүдийн хувьд энгийн аргаар зохион байгуулах нь илүү байж
болох юм. Харин цөөн тооны коммандаас тогтсон функцүүдийг дотоод биш болгон
зохион байгуулах нь санах ойн хувьд ч бараг хэмнэлтгүй (бүр алдагдалтай ч байж
болно), хурдны хувьд ч алдагдалтай байж магадгүй. Нэг программд тун олон удаа
давтагдан орж байгаа бага хэмжээний бүлэг үйлдлийг функц болголгүй дахин давтан
бичих нь программын хурдыг хэмнэх боловч, программ дэндүү нүсэр бүтэцтэй,
ойлгомж муутай болох аюултай. Ийм л тохиолдолд дотоод функцийг ашиглах нь
зүйтэй. Доорх жишээнд дотоод функцийг ашиглаж үзүүлсэн байна.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
//inline.cpp
#include <iostream>
using namespace std;
inline float lbstokg(float pounds)
{
return 0.453592 * pounds;
}

int main()
{
float lbs;
cout << "\n Jingee oruulna uu (funteer): ";
cin >> lbs;
cout << "Tanii jin (kilogramaar)"<<lbstokg(lbs);
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Дотоод функцийг тодорхойлохын тулд inline гэсэн түлхүүр үгийг функцийн
тодорхойлолтод хэрэглэхэд л хангалттай. Харин функцийн урьдчилсан тодорхойлолт
биш, жинхэнэ биеийг нь үндсэн программаас өмнө тодорхойлж өгсөн байх ёстой. Уг
функцийн биеийг программ дотор шууд орлуулан ашиглах ёстойгоос ийм шаардлага
бий болж байна. Ийм тохиолдолд функцийн урьдчилсан тодорхойлолт шаардагдахгүй.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Стандарт утгууд

Функцийг дуудах үед бүх аргументэд утга өгөхгүй байж болно. Харин утга өгөхгүй
байж болох аргументүүдэд стандарт утгууд оноож өгсөн байх шаардлагатай.
Доор үзэх жишээ нь өмнө үзсэн overload функцтэй үр дүнгийн хувьд яг ижил боловч
программын хувьд бага зэрэг ялгаатай болохыг та анзаарах болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
//missarg.cpp
#include <iostream>
using namespace std;
void repchar(char='*', int=45);
int main()
{
repchar();
repchar('=');
repchar('+',30);
}
void repchar(char ch,int n)
{
for (int j=0; j<n; j++)
cout<<ch;
cout<<endl;
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Энэ программд repchar гэсэн функцийг 3 удаа дуудаж байна. Аргументийнх нь тоо зөрж
байхад яагаад эхний 2 удаа дуудахад ямар нэгэн алдаа гаргахгүй байна вэ? Үүний учир
нь уг функцийг аргументүүд нь стандарт утгуудтай байгаад оршиж байгаа юм. Дуудаж
буй программ уг аргументэд утга өгөхгүй бол функц уг аргументийн утгыг стандарт
утгаар нь авдаг. Стандарт утгуудыг функцийн урьдчилсан тодорхойлолтод зааж өгсөн
байна.

void repchar(char=‘*’, int=45);

Ингэж тодорхойлох үед мөн хувьсагчдын нэрийг зааж өгч болно.

void repchar(char ch=‘*’, int n=45);

Харин анхааруулахад, функцийн зөвхөн сүүлийн аргументүүдийн утгыг л орхиж болно.


Ө.х. энэ функцийг дуудахдаа эхний аргументийн утгыг орхиж, repchar(30) гэж дуудвал
компилятор төрөл тохирохгүй байгаа тухай алдаа өгөх болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Мэдээж хэрэг энэ тохиолдолд компилятор аргументийн утгыг 2 дугаар аргументийнх
гэж мэдэх боломжгүй хэрэг. Харин дундаас нь утга орхих шаардлагатай болвол орхисон
утгынхаа байранд хоосон таслал үлдээх ёстой.

repchar(‘+’,30);

Стандарт утгыг ашиглах нь аргументэд тохиромжгүй буюу буруу утга өгөх аюулыг
багасгадаг юм (Гэхдээ 100 хувь биш). Мөн программчлагч тухайн үед шаардагдахгүй ч
яваандаа хэрэг болж магадгүй аргументүүдийг ийм байдлаар тодорхойлж өгч болох юм.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Хувьсагчдын тухай

Одоо функц болон үндсэн программд байгаа хувьсагчуудын товчхон тайлбар үзье.
Хувьсагчийг дотор нь автомат, глобаль, статик гэж 3 ангилдаг.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Автомат хувьсагчууд

Бидний одоог хүртэл үзсэн бүх хувьсагчид функц болон программынхаа дотор талд
тодорхойлогдож байсан билээ.

void somefunc()
{
int somevar;
float othervar;

//коммандууд
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Ингэж функцийнхээ бие дотор тодорхойлогдсон хувьсагчдыг автомат хувьсагчууд гэж
нэрлэнэ. Жинхэнэ бичлэгээрээ бол автомат хувьсагчдыг тодорхойлохдоо төрлийнх нь
өмнө auto гэсэн үгийг бичих ёстой.

void somefunc()
{
auto int somevar;
auto float othervar;

//коммандууд

Гэхдээ энэ нь хувьсагчийн стандарт хэлбэр учраас ямар нэгэн түлхүүр үг ашиглаагүй
тодорхойлсон хувьсагчийг автомат хувьсагч гэж авдаг. Одоо автомат хувьсагчдын шинж
чанаруудыг авч үзье.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Хүчинтэй хугацаа

Автомат хувьсагч нь түүнийг тодорхойлсон функцийг дуудтал санах ойд үүсээгүй


байдаг (Ямар нэгэн блок доторх хувьсагчид уг блокт хандах үед л үүсдэгтэй нэг адил).
Дээрх жишээнд буй somevar болон othervar хувьсагчууд нь somefunc функцийг
дуудагдтал хаана ч байхгүй байна гэсэн үг. Тэдгээрийн тодорхойлогдсон блок нь санах
ойд үүсээгүй байгаа учраас л тэр. Функц дуудагдангуут л уг хувьсагчуудад
зориулагдсан санах ой бий болох бөгөөд харин функц ажиллаж дуусаад, удирдлага
буцах үед мөн хувьсагчид санах ойгоос арчигдах болно. Ингэж автоматаар үүсч, устдаг
учраас ийм хувьсагчдыг автомат гэж нэрлэсэн байна. Хувьсагч үүссэнээс устах хүртэл
хугацааг түүний хүчинтэй хугацаа гэнэ. Ингэж хүчинтэй хугацааг хязгаарлагдсанаар
санах ойн хэмнэлт үүсдэг юм. Функц дуусч, хувьсагч арчигдсанаар тэдгээрт
зориулагдаж байсан санах ой өөр функц, хувьсагчид ашиглагдах боломжтой болж
чөлөөлөгдөх болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Хүчинтэй хүрээ

Хувьсагчийн хүчинтэй хүрээ гэдэг нь энэ хувьсагчид хандаж болох функц болон
программуудыг хэлж байгаа юм. Өөрөөр хэлбэл, уг хувьсагчид хандахад unknown
variable (тодорхойлогдоогүй хувьсагч) гэсэн алдаа гарахгүй хүрээг хэлнэ. Автомат
хувьсагчид бол зөвхөн түүнийг тодорхойлсон байгаа функц дотроо л хүчинтэй байдаг
юм.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
void somefunc()
{
int somevar;
float othervar;

somevar=10;
othervar=123.45;
nextvar=15; //буруу
}
void main()
{
int nextvar;
somevar=20; //буруу
othervar=987.65; //буруу
nextvar=35;
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
nextvar гэсэн хувьсагч эхний функцэд хүчинтэй биш тул ингэж утга оноовол дээр
дурдсан алдааг өгөх болно. Үүний нэгэн адилаар somevar болон othervar хувьсагчид
үндсэн программд хүчингүй юм. Хувьсагчийн хүчинтэй хүрээ ингэж хязгаарлагдах нь
уг хувьсагчийн утгыг мэдэхгүй өөр функц дотроос өөрчлөх боломжийг хааж өгөх
болно. Ер нь энэхүү хүчинтэй хүрээ гэсэн ойлголт нь обьект хандлагат
программчлалын хувьд тун өргөн ашиглагдах болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Анхны утга

Автомат хувьсагч тодорхойлогдох үед түүнд ямар ч анхны утга өгөгдөхгүй. Түүний утга
нь 0 ч байх албагүй. Харин ямар нэгэн утгагүй тоо байх болно. Ийм учраас хувьсагчтай
анхны утга оноолгүйгээр ажиллах нь маш том, ойлгомжгүй алдаанд хүргэж болох
аюултай. Харин анхны утгыг шууд тодорхойлох үедээ оноох нь хамгийн зөв арга юм.

int n=33;

Автомат хувьсагчдыг зарим тохиолдолд локаль ч гэж нэрлэдэг.


ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Глобаль хувьсагчууд

Хувьсагчийн өөр нэгэн хэлбэр бол глобаль хувьсагч билээ. Автомат хувьсагч ямар нэгэн
функцийн дотор тодорхойлогддог бол глобаль хувьсагчид нь бүх функцийн гадна талд
тодорхойлогддог юм. Тэрээр бүх функцэд ашиглагддаг болохоор түүнийг глобаль гэж
нэрлэдэг бас болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
//extern.cpp
#include <iostream>
#include <conio.h> void getachar()
using namespace std; { ch=getch(); }
char ch='a';
void getachar(); void putachar()
void putachar(); { cout<<ch;}

int main()
{
while (ch!='\r')
{
getachar(); putachar();
}
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Дээрх программд байгаа getachar функц гарнаас нэг тэмдэг хүлээж авах ба харин энэ
тэмдэгээ дэлгэцэнд харуулахгүй. Харин хүлээж авсан тэрхүү тэмдгийг putachar гэсэн
функцээр дэлгэцэнд хэвлэж байгаа юм. Программын үр дүнд нь таны дарсан товч бүр
дэлгэцэнд доорх байдлаар хэвлэгдэн гарах болно.

I`m typing

Хамгийн гол анхаарах зүйл гэвэл ch гэсэн хувьсагчийг аль ч функц дотор
тодорхойлоогүй боловч бүх функц, үндсэн программ хүртэл түүнийг ашиглаж байна.
Глобаль хувьсагчийг тодорхойлсноос хойш тодорхойлогдсон бүх функц дотор түүнийг
ашиглаж болдог. Глобаль хувьсагчийн хүчинтэй хүрээ нь бүхэл программ болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Гадаад хувьсагчийн гол үүрэг

Хэд хэдэн функцэд ашиглагдах хувьсагчийг глобаль болгон тодорхойлох нь зүйтэй. Ер


нь глобаль хувьсагчууд нь уг программынхаа хувьд нэлээд чухал хувьсагчид байдаг.
Харин шаардлагагүй хувьсагчийг глобаль болгох нь тийм ч зөв арга биш. Учир нь
глобаль хувьсагчид бүх функц ханддаг учраас түүний утга нь санаандгүй байдлаар
өөрчлөгдөж, буруудах магадлал ихтэй юм.

Анхны утга

Глобаль хувьсагчид автомат хувьсагчийн нэгэн адил тодорхойлох үед нь анхны утга
оноож болно. Программ дуудагдаж, санах ойд ачаалагдах үед глобаль хувьсагчууд шууд
үүсч анхны утга нь оноогдоно. Гэхдээ автомат хувьсагчаас давуу тал нь хэрэв түүнд
анхны утга оноогоогүй байвал шууд 0 утга олгогддог явдал юм.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Хүчинтэй хугацаа ба хүрээ

Глобаль хувьсагч бүхий л программын туршид хүчинтэй байдаг. Программ санах ойд
ачаалагдах үед л глобаль хувьсагчууд үүсэх бөгөөд, уг программыг дуустал санах ойд
байрлах юм. Глобаль хувьсагчид тодорхойлогдсоноос хойш тодорхойлогдсон бүх
функцэд ашиглагдаж болно. Хэрэв ch хувьсагчийг үндсэн программын дараа
тодорхойлсон бол түүнийг бусад функцүүд нь ашиглаж болох боловч, үндсэн программ
ашиглаж чадахгүй.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Статик хувьсагчид

Одоо хувьсагчийн өөр нэгэн төрлийг үзье. Статик глобаль хувьсагчууд болон статик
автомат хувьсагчууд гэж байна. Статик гадаад хувьсагчийн тухай 15 дугаар бүлэгт үзэх
болно.
Статик автомат хувьсагч нь локаль хувьсагч шиг хүрээтэй атлаа глобаль хувьсагч шиг
хугацаанд хүчинтэй байдаг. Өөрөөр хэлбэл, зөвхөн тодорхойлогдсон функц дотроо
ашиглагдах боловч, программ (функц биш) эхлэхээс дуусах хүртэл санах ойгоос
арчигдахгүй байна гэсэн үг.
Статик автомат хувьсагч нь функцэд шаарлагатай ямар нэгэн хувьсагчийн утгыг
функцийг дахин дуудах хооронд өөрчлөхгүй байлгах шаардлагатай тохиолдолд
ашиглагдах ёстой юм. Одоо getavg() гэх дараагийн жишээг үзэцгээе.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
//static.cpp
#include <iostream>
using namespace std;
float getavg(float newdata)
float getavg(float); {
int main() static float total=0;
{ static int count=0;
float data=1, avg; count++;
while (data!=0) total+=newdata;
{ return total / count;
cout << " Toogoo oruulna uu: "; }
cin >> data;
avg=getavg(data);
cout << "Dundaj utga:" << avg << endl;
} }
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Энэ программ хэрэглэгчийн оруулж өгсөн тоонуудын дунджийг гаргах юм. Дунджийг
тооцохдоо getavg функцийг ашиглаж байна. Энд өмнө оруулсан тоонуудын дунджийг уг
функц дуудагдахын хооронд хадгалж байх шаарлага гарч байна. Хэрэв total ба count
гэсэн хувьсагчууд нь статик биш байвал уг функц нэг дуудагдаад буцах үед хувьсагчид
устаж тэдгээрийн утгууд үгүй болно. Ингээд дахин дуудагдах үед уг хувьсагчид дахин
тодорхойлогдож, шинээр 0 утга авах болно. Харин статикаар тодорхойлогдсон учраас
функц дахин дуудагдах үед өмнөх total, count хувьсагчуудын утга огт өөрчлөгдөөгүй
байх болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Анхны утга

Статик хувьсагчид бусад хувьсагчдын нэгэн адил тодорхойлох үед нь анхны утгыг
оноож өгч болно. Гэхдээ энэ анхны утга нь программ эхлэх үед цорын ганц удаа
олгогдох юм (Харин автомат хувьсагчид функц дуудагдах бүрд анхны утга оноогддог
билээ).
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
ТӨРӨЛ АВТОМАТ СТАТИК АВТО. ГЛОБАЛЬ

ХҮРЭЭ Функц Функц Бүхэл программ

ХУГАЦАА Функц Бүхэл программ Бүхэл программ

АНХНЫ
Тодорхойгүй 0 0
УТГА

Автомат боловч
Функцийн энгийн Хэд хэдэн функц
ЗОРИЛГО функц дуусахад утгаа
хувьсагчид дунд ашиглагдах
алддаггүй
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Хуурамч нэрээр утга буцаах нь

Аргументийг хуурамч нэрээр дамжуулж болдгийн нэг адил буцах утгыг нь ч хуурамч
нэрээр дамжуулж болно. Утгыг хуурамч нэрээр буцааснаар бид функцийг утга оноох
үйлдлийн зүүн талд ашиглах боломжтой болох юм.

//retref.cpp
int& setx();
#include <iostream.h>
{
int x;
return x;
int& setx();
}
void main()
{
setx()=92;
cout << “\nx=” << x;
}
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Энэ программд setx функцийн буцах утгыг хуурамч нэрээр дамжуулна гэж зааж өгсөн
байна. Уг функц x гэсэн глобаль хувьсагчийг буцаах болно. Нэгэнт энэ нь хуурамч нэр
учраас уг функц зүгээр нэг утга бус, бүтэн хувьсагч буцааж байгаа хэрэг юм. Тийм
учраас функцийн үр дүн болон буцаж байгаа хувьсагчид шууд утга оноож болно гэсэн
үг. Өөрөөр хэлбэл, функцэд утга оноохыг түүний буцааж буй хувьсагчид утга оноож
байна гэж ойлгож болно. Үр дүн нь:

x=92
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Функцийн заагч

Функц гэдэг нь санах ойд агуулагдаж байгаа хэлбэрээрээ үнэндээ хувьсагчаас нэг их
гойдын ялгаагүй юм. Учир нь гэвэл, хувьсагч гэдэг нь ямар нэгэн өгөгдлийг хадгалж
байгаа санах ойн хаягийг агуулж байдаг бол функц гэдэг нь мөн л ямар нэгэн бүлэг
үйлдлийг агуулж байгаа санах ойн хаягийг зааж байдаг ажээ. Хувсагчид заагч үүсгэж
болдгийн нэг адилаар бид заагч төрлийн хувьсагч тодорхойлоод, түүгээрээ функцийн
биелэх кодуудын эхлэх хаяг руу (ө.х. функц рүү) заалгаж болно.
ХУВЬСАГЧДЫН ТУХАЙ, ФУНКЦИЙН ЗААГЧ
Ингэж функцийн заагч тодорхойлохын нэг гол хэрэглээ бол функцийн аргументэд
функц өгөх асуудал юм. Жишээ болгож int төрлийн утга буцаадаг, аргумент авдаггүй
фнкцийн заагчийг тодорхойлъё.

int ( *ptr ) ()

Энд бичгдсэн хаалтуудаас алийг нь ч орхиж болохгүй. Хэрэв

int ( *ptr )

гэж тодорхойлвол энэ нь функцийн биш энгийн нэгэн int төрлийн заагч болно. Хэрэв

int *ptr ()

гэж тодорхойлвол энэ нь заагч хувьсагч биш, харин int төрлийн заагч утга буцаадаг
функцийг тодорхойлж байгаа хэрэг болно.
АШИГЛАСАН МАТЕРИАЛ
1. Программчлалын үндсэн ойлголт, ТЭРГҮҮН БҮЛЭГ
2. Программчлалын үндсэн ойлголт, 4-р бүлэг, -Функц, процедур, хувьсагчдын тухай,
функцийн заагч, Дотоод функцүүд, Стандарт утга, Рекурсив функц, Макро
3. U.CS101 Алгоритм програмчлал хичээлийн лекц
4. he2must.blogspot.com Дээд боловсролын суурь хичээлүүд

You might also like

  • Lecture 11
    Lecture 11
    Document24 pages
    Lecture 11
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 6 2018
    Lecture 6 2018
    Document50 pages
    Lecture 6 2018
    Amarsaikhan Tuvshinbayar
    100% (3)
  • Lecture 15
    Lecture 15
    Document40 pages
    Lecture 15
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lec1-1 Corporate Activity Shine
    Lec1-1 Corporate Activity Shine
    Document61 pages
    Lec1-1 Corporate Activity Shine
    Amarsaikhan Tuvshinbayar
    0% (1)
  • Programming Lec 6
    Programming Lec 6
    Document51 pages
    Programming Lec 6
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 13
    Lecture 13
    Document46 pages
    Lecture 13
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 12
    Lecture 12
    Document34 pages
    Lecture 12
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture - 10
    Lecture - 10
    Document35 pages
    Lecture - 10
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 9
    Lecture 9
    Document46 pages
    Lecture 9
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 2 2018
    Lecture 2 2018
    Document33 pages
    Lecture 2 2018
    Amarsaikhan Tuvshinbayar
    100% (1)
  • Lecture 7 20108
    Lecture 7 20108
    Document47 pages
    Lecture 7 20108
    Amarsaikhan Tuvshinbayar
    75% (4)
  • Lecture 8 2018
    Lecture 8 2018
    Document54 pages
    Lecture 8 2018
    Amarsaikhan Tuvshinbayar
    100% (3)
  • Lecture 1
    Lecture 1
    Document54 pages
    Lecture 1
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 1 2018
    Lecture 1 2018
    Document39 pages
    Lecture 1 2018
    Amarsaikhan Tuvshinbayar
    100% (6)
  • Lecture 5 2018
    Lecture 5 2018
    Document54 pages
    Lecture 5 2018
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 4 2018
    Lecture 4 2018
    Document47 pages
    Lecture 4 2018
    Amarsaikhan Tuvshinbayar
    100% (4)
  • Lecture 3 2018
    Lecture 3 2018
    Document42 pages
    Lecture 3 2018
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Baikal Hotolbor
    Baikal Hotolbor
    Document2 pages
    Baikal Hotolbor
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Baikal Hotolbor
    Baikal Hotolbor
    Document2 pages
    Baikal Hotolbor
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • IT101 Lecture 4
    IT101 Lecture 4
    Document72 pages
    IT101 Lecture 4
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 3
    Lecture 3
    Document72 pages
    Lecture 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 3
    Lecture 3
    Document72 pages
    Lecture 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 8
    Programming Lec 8
    Document32 pages
    Programming Lec 8
    Amarsaikhan Tuvshinbayar
    100% (1)
  • Lecture 2
    Lecture 2
    Document80 pages
    Lecture 2
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 6
    Programming Lec 6
    Document51 pages
    Programming Lec 6
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Koosen 2018 Algorithm Programming 3
    Koosen 2018 Algorithm Programming 3
    Document46 pages
    Koosen 2018 Algorithm Programming 3
    Amarsaikhan Tuvshinbayar
    100% (1)
  • Programming Lec 9
    Programming Lec 9
    Document39 pages
    Programming Lec 9
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • PL - 3
    PL - 3
    Document47 pages
    PL - 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 7
    Programming Lec 7
    Document57 pages
    Programming Lec 7
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 4
    Programming Lec 4
    Document39 pages
    Programming Lec 4
    Amarsaikhan Tuvshinbayar
    No ratings yet