SlideShare a Scribd company logo
1 of 41
ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ, 
Е-НЭЭЛТТЭЙ ИНСТИТУТ 
Дэд алгоритм, түүний хэлбэр 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
www.emust.edu.mn 
Лекц - 10
Агуулга: 
01 
Дэд алгоритмын тухай ухагдхуун 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
www.emust.edu.mn 
01 
02 
02 
Дэд алгоритмыг бичих 
03 
Дэд алгоритмыг дуудах ба түүнээс буцах 
04 
Дэд алгоритмыг аргумент 
05 
Дэд алгоритм- функц 
06 
07 
Хүснэгтэн аргументтай дэд алгоритм 
Рекурсив функц ба дэд алгоритм
Судлах зүйл: 
Компьютерийг зохион бүтээхдээ хүний оюуны хөдөлмөрийг үнэхээр 
хөнгөвчлөх тийм хүчирхэг техник болгож чадсан байдаг. Яагаад гэсэн 
асуултанд зарим талаар бид хариулж чадах мэдлэгтэй болсон. 
Нэгдүгээрт, бидний бичсэн харьцангуй цөөн тооны үйлдлийг олон дахин 
биелүүлдэг, ө.х. давталтыг гүйцэтгэдэг. Тэгэхдээ нэг ижил үйлдлийг давтах 
бүртээ өөр өөр мэдээллийг боловсруулж, шинэ үр дүнд хүрч чаддаг нь 
компьютерийн нэг гайхамшиг юм. Үүнийг сайн ойлгох нь алгоритм, програм 
зохиож сурахад бидэнд маш хэрэгтэй зүйл. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
5.1. Дэд алгоритмын тухай ухагдахуун 
Бид дараах жишээг авч үзье. 
Жишээ 1: 
Функцыг 
ашиглан өгсөн a,b,c бодит утганд 
хэмжигдэхүүний утгыг бодож ол. 
Энд арг a, b, c; үр дүн t ба энэ 
бодлогын алгоритмыг дараах 
хэлбэртэй бичиж болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энэ алгоритмд х, у хоёр бодит хэмжигдэхүүний максимумыг олж хутах 
хувьсагчид олгох үйлдлийг гурван удаа давтаж бичсэн байна (дээрх алгоритмд энэ 
хэсгүүдийг хайрцаглаж ялгав). Үнэндээ зарчмийн хувьд нэг ижил үйлдлүүдийг 
үүнээс ч олон удаа бичих шаардлага гарч болно. Ингэж олон удаа бичих 
шаардлагатай болж байгаа, тодорхой үр дүн өгдөг эсвэл тодорхой үйлдэл 
гүйцэтгэдэг алгоритмын хэсгийг тусад нь бие даасан алгоритм хэлбэртэй бичээд 
түүнийг шаардлагатай байранд нь хэрэглэх боломж компьютерт өөрт нь (улмаар 
програмчлалд) байдаг юм. 
Дэд алгоритм гэсэн нэр томъёо оруулсан учраас түүнээс ялгах зорилгоор тодорхой 
бодлогын (алг түлхүүр үгээр эхэлсэн) алгоритмыг үндсэн алгоритм гэж ярина. 
Үндсэн алгоритмд дэд алгоритмыг ашиглаж болохоос гадна нэг дэд алгоритмд өөр 
дэд алгоритмыг ашиглаж болно. Иймд дэд алгоритмыг ашиглаж байгаа алгоритмыг 
эх алгоритм гэж товчилж ярина. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Тодорхойлолт: Бие даасан шинжтэй, тодорхой үр дүн өгдөг юмуу 
эсвэл тодорхой (зурах, бичих, файл нээх ба хаах гэх мэт) үйлдэл 
гүйцэтгэдэг алгоритмыг тусад нь бичиж, олон дахин ашиглах 
боломжийг хангаад дэд алгоритм гэж нэрлэнэ. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Дэд алгоритм (дэд програм)-ыг бичиж хэрэглэх үед 
1. Дэд алгоритмыг ямар хэлбэртэй бичих вэ? 
2. Эх алгоритмаас дэд алгоритмд шилжих үйлдлийг яаж бичиж тэмдэглэх вэ? 
3. Дэд алгоритм биелэгдсэний дараа эх алгоритмд буцаж түүнийг цааш нь 
үргэлжпүүлэх боломжийг яаж хангах вэ? 
4. Дэд алгоритмд шаардагдах утгуудыг эх алгоритмаас яаж дамжуулах ба дэд 
програмын үр дүнг эх алгоритмд хэрхэн дамжуулах вэ? 
гэсэн дөрвөн асуудлыг шийдсэн байх ёстой байдаг. 
Эдгээр асуудлыг нэг бүрчлэн авч үзье. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
5.2. Дэд алгоритмыг бичих 
Аливаа дэд алгоритм нь (алгоритм болохын хувьд) бидний үзсэн үндсэн 
үйлдлүүдээс тогтсон бөгөөд алгоритмын бүх шинжийг хангасан байна. 
Тухайлбал төгсгөлөг тооны үйлдэл биелсний дараа заавал төгсч эх алгоритмд 
удирдлагыг буцаадаг байх ёстой. 
Тодорхой дэд алгоритмыг үндсэн болон бусад дэд 
алгоритмаас ялгахын тулд түүнийг нэрлээд дэд_алг 
түлхүүр үгээр эхэлсэн, алгоритмын төгсгөлийг заасан 
буц гэсэн түлхүүр үгээр төгссөн байх доорх ерөнхий 
хэлбэртэй бичнэ: 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Жишээлбэл: 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
5.3. Дэд алгоритмыг дуудах ба түүнээс буцах 
Ямар нэг алгоритм дотор тодорхой дэд алгоритмыг ашиглах, 
ө.х. уг дэд алгоритмыг биелүүлж, ө.х. дэд алгоритмын биед бичигдсэн 
үйлдлүүдээр өгөгдсөн алгоритмыг биелүүлж түүний үр дүнг авах 
буюу эсвэл дэд алгоритмын гүйцэтгэдэг ажпыг хийлгэх шаардлагатай 
үед уг дэд алгоритмын нэрээр нь түүнд ханддаг. Ингэж тодорхой 
алгоритмд хандах үйлдлийг уламжлал ёсоор дэд алгортмыг дуудах 
үйлдэл гэж нэрлэдэг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Бид дэд алгоритмыг 
дуудахад ямар ч түлхүүр үг 
хэрэглэхгүй зөвхөн 
шаардлагатай дэд алгоритмын 
нэрийг бичих аргыг сонгож 
хэрэглэе. 
Жишээлбэл дээр бичсэн тах 
нэртэй дэд алгоритмыг 
ашиглан энэ бүлгийн ж1_1 
алгоритмыг дараах хэлбэртэй 
бичиж болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энд мах дэд алгоритмыг гурван удаа ашиглах (max алгоритмыг 
дуудсан үйлдлийг хайрцаглаж тэмдэглэв) бүртээ түүний үр дүн xymax 
хувьсагчийн утгыг авч t бутархайг бодож байна. 
Ингэж нэрээр дуудаж дэд алгоритмыг биелүүлэхэд энэ нэрийг 
нэг нийлмэл үйлдэл гэж төсөөлөн ойлгож болно. Ийм замаар цөөхөн 
хэдэн үндсэн үйлдэлтэй алгоритмын хэлийг бид өөрийн хэрэгцээнд 
тохируулан өргөтгөж байдаг гэж ойлгож бас болно. 
Дэд алгоритмын нэрийг сонгохдоо түүнд харгалзах нийлмэл 
үйлдэл “юу хийдэг вэ?” гэдгийг хэлж байхаар зөв сонгох явдал чухал 
байдаг. Практикт гол төлөв “бич”, “зур”, “min”, “sin”, “cos” гэх 
мэтчилэн хийх үйлдлийг нь заасан нэрийг сонгодог. Дэд алгоритмын 
бие нь хаирн энэ үйлдлийг “яаж хийж” байгааг харуулдаг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Дэд алгоритмыг дуудах үйлдэл биелэхэд алгоритмыг 
биелүүлэх удирдлага уг дэд алгоритмд шилжиж улмаар түүний 
үйлдлүүд биелж эхэлнэ. Ингээд ТҮҮНИЙ бие үйлдлүүд биелж дэд 
алгоритмын үр дүн бэлэн болоход удирдлагыг эх алгоритмд (дэд 
алгоритмыг дуудсан үйлдлийн дараачийн үйлдэлд) буцаах ёстой. 
Ингэж чадвал дэд алгоритм биелсний дараа эх алгоритмыг цааш 
үргэлжлүүлэн биелүүлэх нөхцөл хангагдана. Иймээс дэд 
алгоритмаас "буцах" үйлдэл зайлшгүй шаардлагатаи болдог ба дэд 
алгоритмын төгсгөлд бидний бичсэн буц гэсэн түлхүүр үг энэ 
буцах үйлдлийг илэрхийлж байгаа юм. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Дэд алгоритмд хандаж байгаа алгоритмын биелэх зарчимыг 
4.1 зурагт үзүүлэв. Үндсэн алгоритмд ямар нэг дэд алгоритмыг 
дуудах үйлдэл хүртэл түүний үйлдлүүд дарааллаараа биелнэ. 
Ингээд алгоритмыг дуудах (max) үйлдэл биелэхэд дараачийн 
командын хаяг буюу буцах хаягийг (командын заагч IР 
регистрийн утгыг) санаж хадгалаад дэд алгоритмд шилжнэ. Дэд 
алгоритмын бие үйлдлүүд биелж улмаар буц үйлдэл биелэхдээ уг 
дэд алгоритмд шилжих үед хадгалж авсан хаягийн 
тусламжтайгаар эх алгоритмд буцаж очно. Дэд алгоритмыг дуудах 
бусад үйлдэл ч яг энэ зарчмаар биелж нэг алгоритмыг олон дахин 
ашиглах боломж хангагддаг юм. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
5.4. Дэд алгоритмын аргумент, үр дүнг дамжуулах 
Үндсэн алгоритмд гаднаас өгөх шаардлагатай анхны утгыг бид 
алгоритмын аргумент гэж нэрлэсэн ба аргументын утгыг оруул үйлдлээр 
гаднаас оруулдаг. Тэгвэл дэд алгоритмд шаардагдах анхны утгыг дэд 
алгоритмын аргумент гэж нэрлэх ба харин дэд алгоритмаас үндсэн 
алгоритмд буцаах утгыг дэд алгоритмын үр дүн гэнэ. Дэд алгоритмын 
аргументын утгыг үндсэн алгоритмаас дамжуулж өгөх хэд хэдэн аргыг 
програмчлалын практикт хэрэглэдэг. 
Дээрх ж1_2 алгоритмд тах дэд алгоритмын аргумент нь х, у үр 
дүн нь xymax байгаа ба тэдгээрийг дамжуулахын тулд ижил нэртэй 
хувьсагчийг үндсэн ба дэд алгоритмд хоёуланд нь хэрэглэсэн байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Үндсэн алгоритм болон 
түүний дэд алгоритмуудад 
бүгдэд нь хэрэглэж болохоор 
тодорхойлсон хувьсагчийг 
глобаль хувьсагч гэж нэрлэдэг. 
Иймд дээрх жишээнд глобаль 
хувьсагчийг хэрэглэх замаар 
аргументын утгыг дамжуулж 
мөн түүний үр дүнг авч байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Глобальхувьсагчаараргументынутгыгдамжуулахньзаримтохиолдолдтох 
иромжгүйбайдаг. Жишээлбэл, 
дээрбичсэнтахдэдалгоритмыгашиглахболгонд 
x:= арг_1; y:= арг_2; max; 
(энд арг_1, арг_2 нь хоёр аргументын жинхэнэ утга) гэсэн гурван 
үйлдлийг заавал бичих шаардлагатай байна. 
Ийм учраас математикт функцыг 푦 푥 = 2 ∗ 푥2 + 푥 + 5; 
푓 푥, 푦 = 푥2 + 푦2 гэх мэт хувьсагчаас хамаарсан хэлбэртэй бичиж 
аргументийн тодорхой утганд харгалзах функцын утгыг, жишээлбэл 
y(2), y(a), f(1.5, 2.0) гэж бичдэгтэй адил дэд алгоритм (програмыг) 
аргументтай бичих аргыг програмчлалд мөн хэрэглэдэг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
max дэд алгоритмыг x, y 
гэсэн хоёр аргументтай 
бичвэл дээр бидний бичсэн 
ж1_2 алгоритм дараах 
хэлбэртэй болно. 
алг ж1_3 
бодит a, b, c, t, xymax ; 
оруул (a, b, c) ; 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Дэд алгоритм дотор тодорхойлогдсон бөгөөд зөвхөн тэнд хэрэглэгдэх 
хэмжигдэхүүнийг локаль хувьсагч гэж програмчлалд нэрлэдэг. Дээрх тах 
алгоритмд х, у хоёр хувьсагч энэ алгоритмын локаль хувьсагч болж 
тодорхойлогдоно. 
Ийнхүү дэд алгоритмыг 
гэсэн ерөнхий хэлбэртэй бичиж болох ба энэ тохиолдолд түүнийг дуудах 
үйлдэл 
нэр(ж_параметр_1,...,ж_параметр_n) ; 
хэлбэртэй байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Дэд алгоритмыг тодорхойлж бичих үед 
дэд_алг нэр (төрөл_1 параметр_1,..., төрөл_n параметр_n) ; 
илэрхийлэлд параметр_1,..., параметр_п нь хувьсагчийн нэр байх бөгөөд 
аргументын жинхэнэ утгыг өгөхгүй, харин зөвхөн ямар төрлийн хэдэн 
аргументтай алгоритм болохыг л заах үүрэгтэй. Иймд дэд алгоритмын толгойд 
(эхэнд) бичиж байгаа хувьсагчийг хийсвэр аргумент гэж нэрлэнэ Харин дэд 
алгоритмыг дуудах 
нэр(ж_параметр_1,...,ж_параметр_n) ; 
илэрхийлэлд бичиж байгаа ж_параметр_1, ... , ж_параметр_п нь алгоритм 
биелэх үед харгалзан параметр_1 ,...,параметр_п хувьсагчийн жинхэнэ утга 
болгон өгч байгаа утгууд учраас жинхэнэ аргумент гэж програмчлалд нэрлэдэг. 
Жинхэнэ аргументын тоо болон утгын төрөл нь дэд алгоритмын тодорхойлолтонд 
бичсэн байгаа хийсвэр аргументын тоо, харгалзах хувьсагчийн төрөлтэй тохирч 
байхыг шаардана. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Тэгэхдээ дэд алгоритмыг дуудах нэр (ж_параметр_1, ..., 
ж_параметр_n) үйлдэл биелж дэд алгоритмд удирдлага очих үед 
{параметр_1:= ж_параметр_1; параметр_2:= ж_параметр_2 ; 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
...; 
параметр_n:= ж_параметр_n 
} ; 
гэсэн үйлдэл автоматаар хийгддэг, ө.х. параметр_1 ,...,параметр_п 
хувьсагчууд утгатай болсон байдаг гэж ойлгох хэрэгтэй.
алг ж1_3 
бодит a, b, c, t, xymax ; 
оруул (a, b, c) ; 
max (a, b+c) ; 
t:= xymax ; 
max (a, a+c) ; 
t:= t+xymax ; 
max(a+b*c, 3.1415) ; 
t:= t/(1+xymax) ; 
гарга(t) 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
төгс 
дэд_алг max (бодит x, y) 
xymax:= x ; 
хэрэв y> xymax бол xymax:= y 
буц ; 
Жишээ 1_3
5.5. Дэд алгоритм- Функц 
Програмчлалдөгөгдөлмэдээлэлоруулах, мэдээллийггаргажхэвлэх, 
файлнээх,файлхаахгэхмэттодорхойүйлдэл (ажил) 
гүйцэтгэдэгдэдпрограм(алгоритм) - ыгашигладаг. Жишээлбэл, 
дээрбиднийолонудаабичижбайсаноруул, гаргаүйлдлүүдийг, 
харгалзахдэдалгоритмыгдуудсанүйлдэлгэжодооойлгожболно. 
Иймтөрлийндэдалгоритмаасгаднатодорхойнэгутгабодожөгдөгдэдалгоритм 
(програм) маштүгээмэлхэрэглэгддэг. 
Жишээлбэл, дээрх ж1_3алгоритмдбичсэнмаксимумутгыголохдэд 
алгоритмнь х, ухувьсагчийнөгөгдсөнутгынхувьдmax = 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
푥, 푥 ≥ 푦 
푦, 푦 > 푥 томъёогоор 
тодорхойлогдохнэгбодиттоонутгыгөгчбайна.
Ийм төрлийн алгоритм нь аргументын өгсөн утганд харгалзах функцийн 
утгыг өгдөг математикийн функцтэй адил учраас ийм алгоритмыг мөн функц гэж 
нэрлээд дээр бидний бичсэнээс ялгаатай хэлбэрээр тодорхойлж бичдэг. 
Алгоритм хэлэнд функцийг бичихдээ функц гэсэн түлхүүр үгээр эхэлж 
функцийн нэр, аргументүүдийг нь зааж өгөх бөгөөд функц түлхүүр үгийн өмнө уг 
функцийн үр дүн буюу утгын төрлийг заасан ямар нэг түлхүүр үгийг нэмж бичнэ. 
Үүнээс гадна функцийн утгыг ө.х. ямар утгыг үр дүн болгон буцаахыг мөн зааж 
өгөх шаардлагатай болдог. Үүний тулд дэд алгоритмын төгсгөлд буц үйлдлийг 
бичихдээ хаалтан дотор буцаах утгыг бичих аргыг бид хэрэглэе. Иймд алгоритм 
хэлэнд функцийг 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
гэсэн ерөнхий хэлбэртэй 
бичнэ. Энд буцаах утга нь 
тодорхойлолтонд зааж бичсэн 
төрлийн хувьсагч эсвэл энэ 
төрлийн утгатай дурын 
илэрхийлэл байж болно.
Одоо функц ашиглан ж1_3 алгоритмыг шинээр бичье: 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
алг ж1_4 
бодит a, b, c, t ; 
оруул (a, b, c) ; 
t:= 
t:= t/(1 
гарга(t) ; 
төгс 
функц max(x, y) 
хэрэв y>x бол x:= y 
буц(x) ; 
max(a, b+c) max(a, a+c); 
max(a, b*c, 3.1415);
Энд тах(а, b + с) + тах(а, а + с) нийлбэрийг бодохын тулд тах функцэд хоёр удаа 
хандаж өгсөн утгуудыг хооронд нь нэмнэ. Дараагийн мөр дотор уг функцийг бас 
нэг удаа ашиглаж байна. 
Бид дэд алгоритмын тухай болон түүний функц ба дэд_алг гэсэн хоёр төрөл 
байдаг тухай үзлээ. Аргументын өгсөн утганд тодорхой нэг уггыг харгалзуулан 
бодож өгдөг дэд алгоритмыг функц хэлбэртэй бичих нь илүү тохиромжтой. Учир 
нь аргументын тодорхой утганд харгалзах функцийн үггыг арифметик, логикийн 
илэрхийлэлд нэг гишүүн болгон шууд бичиж болдог. Гэтэл "бичих", "унших", 
"нээх", "хаах" гэх мэт тодорхой үйлдэл биелүүлэх эсвэл хэд хэдэн утга бодоход 
зориулсан дэд алгоритмыг дэд_алг хэлбэртэй голдуу бичиж шаардлагатай 
үйлдлийг гүйцэтгэхийн тулд харгалзах дэд алгоритмыг нэрээр нь дуудаж тусгай 
нэг үйлдэл мэт бичиж ашигладаг байна. 
Функц зохиож ашиглах өөр нэг жишээ авч үзье. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Жишээ 1: Ямар нэг энгийн бутархайн хүртвэр, хуваарь болох т ба л хоер натурал 
тоо өгөгдсөн бол энэ бутархайг хурааж бич. 
Энгийн бутархайг хураахын тулд түүний хүртвэр, хуваарь тус бүрииг 
тэдгээрийн хамгийн их ерөнхий хуваагч (ХИЕХ) -д хуваах хэрэгтэй. Иймд өгсөн 
бутархайн хүртвэр, хуваарийг харгалзан т, n; харин хураасан бутархайн хүртвэр, 
хуваарийг харгалзан тх, пх гэвэл 
mx = m/ хиех (m, n); nx = n/ хиех (m, n) 
байх тул ХИЕХ -ийг олох функц зохиож ашиглах нь илүү тохиромжтой болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Хоёр натурал тооны ХИЕХ ийг хоёр аргументтай хиех(m, n) (m>n байх) функц 
гэвэл 
хиех 푚, 푛 = 
푚 , хэрэв 푛 = 0 
хиех 푛, 푚 − 푛 , хэрэв > 0 
байна гэж тодорхойлдог аргыг Евклидийн алгоритм гэж нэрлэдэг. 
Жишээлбэл, энэалгоритмаархиех(6, 4) ньхиех(4, 6-4) буюухиех(4, 2) -тайтэнцүү; 
харинхиех(4, 2) ньхиех(2, 4-2) буюухиех(2, 2) -тайтэнцүү; мөнхиех(2, 2) 
ньхиех(2, 2-2) буюухиех(2, 0) -тайтэнцүүбахиех(2, 0) ньтодорхойлолтёсоор 2 
байна. Иймд 
хиех(6, 4)= хиех(4, 2)= хиех(2, 2)= хиех(2, 0)= 2 
Евклидийналгоритмнь т, пхоёртооныХИЕХ - ийголохынтулдn 
хувьсагчийнутгатэгболтол 
{k := n ; n := m -n ; m := k}; 
үйлдлийгдавтахалгоритмюм. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Иймд дараах хэлбэртэй функцийг бичиж болно. 
функц хиех(нат m, n) 
нат k ; 
хэрэв m < n бол {k:= n ; n:= m ; m:= k} ; 
n > 0 бол_давт 
{k:= n ; 
n:= m- n ; 
m:= k 
} 
буц(m) ; 
Энд, хэрэв хоёрдугаар аргументын утга нэгдүгээр аргументын утгаас их бол 
тэдгээрийн утгыг эхлээд хооронд нь сольж байна. Мөн бага тоо нь анхнаасаа тэг 
байвал их тоо нь шууд ХИЕХ болох ёстой учир өмнөх нөхцөлт давталтыг 
ашиглана. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Одоо энэ функцийг ашиглан Жишээ 1 бодлогын алгоритмыг бичье. Энд арг m, n; 
үрдун тх, пх (хураасан бутархайн хүртвэр, хуваарь) байна: 
алг ж2_1 
нат m, n, mx, nx ; 
оруул (m, n) ; 
m2 + n2 = 0 or n=0 бол_давт 
{гарга (‘өгөгдөл буруу’) ; оруул(m, n)} ; 
mx:= m/ хиех(m, n) ; 
nx:= n/ хиех(m, n) ; 
гарга(m, ‘/’, n, ‘=’, mx, ‘/’, nx) 
төгс 
Энд бутархайн хүртвэр, хуваарь хоёулаа эсвэл хуваарь тэгтэй тэнцүү бол бутархайг 
дахиж оруулахыг шаардаж байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энэ алгоритмд хиех(m, n) утгыг 
хоёр удаа бичсэн нь үнэндээ нэг 
ажлыг хоёр удаа хийлгэж байгаа 
хэрэг бөгөед энэ нь алгоритм, 
програм зохиож бичих үед 
• бичих ажпыг хөнгөвчлөх 
• алгоритм биелэх хурдыг 
нэмэгдүүлэх 
гэсэн өөртөө байнга тавьж байх 
ёстой хоёр шаардлагыг анхаараагүй 
хэрэг юм. Иймд хиех(т, п) утгыг нэг 
л удаа бодуулж түүнийгээ хоёр удаа 
хэрэглэх байдлаар дээрх алгоритмыг 
арай өөрөөр бичиж болно. 
алг ж2_2 
нат m, n, mx, nx, ex ; 
оруул (m, n) ; 
m2+n2=0 or n=0 бол_давт 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
{гарга(‘өгөгдөл_буруу’); 
оруул(m, n)} ; 
ex:= хиех(m, n) ; 
mx:= m /ех ; 
nx:= n /ех ; 
гарга(m, ‘/’, n, ‘=’, mx, ‘/’, nx) ; 
төгс 
функц хиех(нат m, n) 
нат k ; 
хэрэв m < n бол {k:= n; m:= n; n:= k} ; 
n > 0 бол_давт 
{k:= n ; 
n:= m- n ; 
m:= k 
} 
буц(m) ;
Эндхи-хфункцийнтодорхойлолтондбичсэнхийсвэраргументбуюу 
т, п хувьсагчньлокальхувьсагчболохучраасүндсэналгоритмдахь 
т, пнэртэиямарчхолбоогүйюм. 
Үнэндээбидфункцдотордурынөөрнэрийгсонгожболохбаисанболов 
ч 
хиех 푚, 푛 = 
푚 , хэрэв 푛 = 0 
хиех 푛, 푚 − 푛 , хэрэв > 0 
томъёотойижилүсэгтэмдэглэгээгхэрэглэвэл, голньфункцийгбичих, 
уншихадилүүойлгомжтойболдог. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
5.6. Хүснэгтэн аргументтай дэд алгоритм 
Нэг болон олон хэмжээст хүснэгтийг боловсруулдаг дэд алгоритм, функц 
практикт түгээмэл шаардагддаг. Жишээлбэл, хүснэгтийн максимум, минимум 
элементийг олох; хоёр матрицийг нэмэх, үржүүлэх; элементүүдийн өсөх юмуу эсвэл 
буурах дарааллаар хүснэгтийг эрэмбэлэх зэрэг үйлдэл түгээмэл шаардагддаг тул эдгээр 
үйлдлийг гүйцэтгэх алгоритмыг дэд алгоритм болон функц хэлбэртэй тодорхойлж бичих 
нь илүү тохиромжтой. Ийм тохиолдолд дэд алгоритмын аргумент нь хүснэгт байх ёстой 
болно. 
Дэд алгоритмын аргументын утгыг глобаль хувьсагчийн тусламжтайгаар 
дамжуулах нь ихэнх тохиолдолд тохиромжгүй байдаг гэж дээр ярьсан билээ. Иймд дэд 
алгоритм, функцийг хийсвэр аргументтай бичдэг. Одоо хийсвэр аргумент нь хүснэгт байх 
үед хэрхэн бичихийг үзье. 
Апиваа хүрнэгтийг боловсруулахын тулд хүснэгт гэсэн түлхүүр үгийн 
тусламжтайгаар түүнийг тодорхойлж нэр, хэмжээс болон элементийн тоог зааж өгдөг. 
Ингэхэд санах ой хуваарилагддаг ба ингэснээр түүний элементэд Дугаараар Нь хандаж 
бичих нөхцөл бүрддэг. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Ийм учраас хүснэгтэн аргументтай дэд алгоритм, функцийн хувьд 
хийсвэр аргументыг тодорхойлж өгөхдөө нэгдүгээрт энэ аргумент нь хүснэгт 
гэдгийг ялгаж зааж өгөх шаардлагатай, хоёрдугаарт уг хүснэгтийн элементийн 
тоо буюу хэмжээг аргумент болгон мөн авдаг байхаар тодорхойлох нь зүйтэй 
байдаг. Ингэснээр дэд алгоритм, функцийг дуудаж биелүүлэх үед дурын I тооны 
элементтэй ямарч хүснэгтийг жинхэнэ аргумент болгон өгч боловсруулах 
боломжтой болдог. 
Хийсвэр аргументын жагсаалт дотор хүснэгтийг тодорхойлохдоо үндсэн 
алгоритмд гүүнийг тодорхойлдог аргыг хэрэглэдэг. Тэгэхдээ дэд алгоритмыг 
дуудаж биелүүлэх үед хүснэгтийн жинхэнэ үтгыг (ө.х. бүтэн хуснэгтийг) хуулж 
дамжуулбал санах ой их шаардагдахаас гадна хугацаа алдахад хүрдэг учраас 
хүснэгтийн хаягийг зөвхөн дамжуулах аргыг хэрэглэдэг гэж бид тохиръё. 
Ингэснээр хүснэгтэн аргументыг тодорхойлохдоо элементийн максимум тоог 
бичих шаардлагагүй болдог. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Жишээ 1: Натраль тоо п, т ба а1,а2,...,аn; b1,b2,...,bт гэсэн хоёр бодит 
дараалал өгөгдсөн бол хоёр дарааллын максимум утгуудын ялгаварын квадратыг ол. 
Энд хүснэгтийн максимумыг олох алгоритм хоёр удаа шаардагдах тул өгсөн 
хүснэгтийн хамгийн их утгыг олж өгөх функцийг зохиож ашиглавал зохино Тэгэхдээ 
аргумент нь эхний удаа п элементтэй а1,а2,...,ап хүснэгт, дараа нь т элементтэй bх,b2,...,bт 
хүснэгт байх учраас хүснэгтэн аргументтай функц байвал илүү тохиромжтой болно. 
Иймд дараах функцийг бичье: 
функц array_max(бодит хүснэгт а(5), нат n) 
бодит max ; нат i ; 
max:= a1 ; 
i:= 2, n үед_давт 
хэрэв max < ai бол max:= ai 
буц(max) ; 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Энэ функцийн нэгдүгээр аргумент нь хүснэгтийг тодорхойлж 
байгаа бол хоёр дахь аргумент хүснэгтийн уртыг зааж өгнө. 
Тэгэхдээ энд бичсэн хүснэгт а(5) гэсэн тодорхойлолтонд бичсэн 5 
утга нь уг хүснэгт таван элементтэй гэж зааж байгаа биш харин 
түүний хэмжээсийг (энд нэг хэмжээстэй) зааж өгөх гол үүрэгтэй гэж 
ойлгох хэрэгтэй. Учир нь дээр хэлсэн ёсоор функцийг ,дуудаж 
ашиглах үед өмнө тодорхойлогдсон хүснэгтийн хаягийг дамжуулж 
өгснөөр жинхэнэ хүснэгттэй холбогдоно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Одоо энэ функцийг ашиглан жишээнд өгсөн бодлогын алгоритмыг дараах хэлбэртэй 
бичиж болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
алг ж4 
нат mn=20 ; 
бодит хүснэгт a(mn), b(mn) ; 
нат n, m, i ; 
бодит s ; 
оруул (n) ; 
оруул (ai; i:= 1, n) ; 
оруул (m) ; 
оруул (bi; i:= 1, m) ; 
s:= (array_max(a, n) – array_max(b, m))2 ; 
гарга (s) 
төгс 
Энд array_тах функцийг ашиглаж 
жинхэнэ аргументыг өгөхдөө 
хүснэгтиин зөвхөн нэрийг бичсэн 
байгааг анхаарах хэрэгтэй. 
Үнэндээ хүснэгтийн нэр бол 
түүний эхлэлийг заадаг хаяг юм. 
Ийм болохоор үүнийг авсан дэд 
алгоритм уг хүснэгтэнд хандах 
боломж бүрддэг байна.
Жишээ 2:Бодиттооа1,а2,b1,b2,с1,с2өгөгдсөнбол 
푎1푥 + 푏1푦 = 푐1 
푎2푥 + 푏2푦 = 푐2 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
гэсэн 
шугамантэгшитгэлийнсистемийншийдийгол. 
Шугаман тэгшитгэлийн системийг бодох Крамерийн дүрэм гэж байдаг. Энэ дүрэм 
ёсоор системийн үл мэдэгдэгчүүдийн өмнөх коэфициент болон сул гишүүнээр 
зохиосон 푑 = 
푎1 푏1 
푎2 푏2 
, 푑푥 = 
푐1 푏1 
푐2 푏2 
, 푑푦 = 
푎1 푐1 
푎2 푐2 
гэсэн гурван тодорхойлогчоор 
системийн шийдийг шинжлэж тогтоодог. Үүнд: 
1. Хэрэв d ≠ 0 бол систем ганц шийдтэй бөгөөд x=d/ d, y= d/ d байна. 
x y 2. Хэрэв d=0, dx= 0, dy= 0 буюу d=0 ба 푑2 푥 
+ 푑푦 
2 = 0бол систем төгсгөлгүй олон 
шийдтэй. 
3. Хэрэв d=0 ба푑푥 
2 + 푑푦 
2 ≠ 0бол систем огт шийдгүй байна.
Эндээс үзвэл хоёрдугаар эрэмбийн тодорхойлогч бодох алгоритм гурван 
удаа шаардагдах тул өгсөн матрицад харгалзах тодорхойлогчийг бодох функцийг 
зохиож ашиглавал зохино. Тэгэхдээ аргумент нь хоёрдугаар эрэмбийн квадрат 
матриц байх тул матрицийн хэмжээг заасан аргумент шаардагдахгүй. Иймд 
функц det(бодит хүснэгт a(2,2)) 
бодит y ; 
y:= a11a22-a12a21 
буц(y) ; 
функцийг бичвэл түүнийг ашиглан шугаман тэгшитгэлийн системийг шинжлэх 
алгоритмыг дараах хэлбэртэй бичиж болно. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 
алг ж5 
нат n = 2 ; 
бодит хүснэгт а(n,n), с(n), d(n), b(n,n) ; 
бодит dd ; 
нат i, j, k ; 
текст s ; 
i := 1, n үед_давт 
{j:= 1, n үед_давт оруул( аij); 
оруул(сi) 
} ; 
dd:=det(а); 
k:= 1, n үед_давт 
{i := 1, n үед_давт 
{j := 1, n үед_давт bij := aij ; 
bik:= сi ; 
} ; 
хэрэв dd≠0 
бол { гарга('х=', d1/dd, 'у=', d2/dd); s:= 'систем ганц 
шийдтэй'} 
эсвэл хэрэв d1 
2 +d2 
2 =0 
бол s := 'систем төгсгөлгүй олон шийдтэй' 
эсвэл s := 'систем шийдгүй' ; 
гарга(s) 
төгс
Энд dх,dу тодорхойлогчийг (k := 1, n үед_давт) давталтаар 
бодохын тулд d(n), b(n,n) гэсэн хоёр нэмэлт хүснэгтийг ашиглаж 
байгаа бөгөөд а(n, n) хүснэгтийн мөрийг b(n,n) хүснэгт рүү хуулж 
бичсэний дараа харгалзах баганы элементийг сул гишүүнээр солих 
замаар k дугаар баганыг сул гишүүний баганаар сольсон шинэ 
матриц зохиогоод түүнийг тодорхойлогч бодох функцийн аргумент 
болгон өгч байна. 
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ

More Related Content

What's hot (20)

Лекц №11
Лекц №11Лекц №11
Лекц №11
 
5 algorithm
5 algorithm5 algorithm
5 algorithm
 
Давталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогуудДавталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогууд
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогууд
 
Ush 2014 new3
Ush 2014 new3Ush 2014 new3
Ush 2014 new3
 
U.cs101 алгоритм программчлал-1(1)
U.cs101   алгоритм программчлал-1(1)U.cs101   алгоритм программчлал-1(1)
U.cs101 алгоритм программчлал-1(1)
 
тооллын систем
тооллын системтооллын систем
тооллын систем
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголт
 
U.cs101 lecture 6
U.cs101   lecture 6U.cs101   lecture 6
U.cs101 lecture 6
 
Medeelel 10
Medeelel 10Medeelel 10
Medeelel 10
 
Html хичээл
Html хичээлHtml хичээл
Html хичээл
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
алгоритм 8
алгоритм 8алгоритм 8
алгоритм 8
 
салаалсан алгоритм
салаалсан алгоритмсалаалсан алгоритм
салаалсан алгоритм
 
hicheel2
hicheel2hicheel2
hicheel2
 
U.it101 lab 4
U.it101 lab 4U.it101 lab 4
U.it101 lab 4
 
It101 lect9
It101 lect9It101 lect9
It101 lect9
 
2
22
2
 
It101 1
It101 1It101 1
It101 1
 
олонлог, логикийн элементүүд
олонлог, логикийн элементүүдолонлог, логикийн элементүүд
олонлог, логикийн элементүүд
 

Similar to U.cs101 алгоритм программчлал-10

Similar to U.cs101 алгоритм программчлал-10 (20)

алгоритмчлалын үндэс
алгоритмчлалын үндэсалгоритмчлалын үндэс
алгоритмчлалын үндэс
 
U.cs101 алгоритм программчлал-4-zasah
U.cs101   алгоритм программчлал-4-zasahU.cs101   алгоритм программчлал-4-zasah
U.cs101 алгоритм программчлал-4-zasah
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
U.cs101 алгоритм программчлал-5
U.cs101   алгоритм программчлал-5U.cs101   алгоритм программчлал-5
U.cs101 алгоритм программчлал-5
 
алгоритмчлалын үндэс
алгоритмчлалын үндэсалгоритмчлалын үндэс
алгоритмчлалын үндэс
 
Mathcad beginning-part1
Mathcad beginning-part1Mathcad beginning-part1
Mathcad beginning-part1
 
Algoritm 10-p aнги
Algoritm 10-p aнгиAlgoritm 10-p aнги
Algoritm 10-p aнги
 
онол
онолонол
онол
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
алгоритм 10 р анги
алгоритм 10 р ангиалгоритм 10 р анги
алгоритм 10 р анги
 
10g boloroo2
10g boloroo210g boloroo2
10g boloroo2
 
It101 lab 4
It101 lab 4It101 lab 4
It101 lab 4
 
It101 lab 4
It101 lab 4It101 lab 4
It101 lab 4
 
It101 lab 4
It101 lab 4It101 lab 4
It101 lab 4
 
энхсаран цахим1
энхсаран цахим1энхсаран цахим1
энхсаран цахим1
 
алгоритм
алгоритмалгоритм
алгоритм
 
алгоритм
алгоритмалгоритм
алгоритм
 
Lec4 хereglegchiinpunkts
Lec4 хereglegchiinpunktsLec4 хereglegchiinpunkts
Lec4 хereglegchiinpunkts
 
алгоритм
алгоритмалгоритм
алгоритм
 

More from Badral Khurelbaatar

U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-13
U.cs101   алгоритм программчлал-13U.cs101   алгоритм программчлал-13
U.cs101 алгоритм программчлал-13Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-11
U.cs101   алгоритм программчлал-11U.cs101   алгоритм программчлал-11
U.cs101 алгоритм программчлал-11Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9 Badral Khurelbaatar
 

More from Badral Khurelbaatar (7)

U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15
 
U.cs101 алгоритм программчлал-13
U.cs101   алгоритм программчлал-13U.cs101   алгоритм программчлал-13
U.cs101 алгоритм программчлал-13
 
U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12
 
U.cs101 алгоритм программчлал-11
U.cs101   алгоритм программчлал-11U.cs101   алгоритм программчлал-11
U.cs101 алгоритм программчлал-11
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9
 
U.cs101 lection-8
U.cs101  lection-8 U.cs101  lection-8
U.cs101 lection-8
 

U.cs101 алгоритм программчлал-10

  • 1. ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ, Е-НЭЭЛТТЭЙ ИНСТИТУТ Дэд алгоритм, түүний хэлбэр Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ www.emust.edu.mn Лекц - 10
  • 2. Агуулга: 01 Дэд алгоритмын тухай ухагдхуун Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ www.emust.edu.mn 01 02 02 Дэд алгоритмыг бичих 03 Дэд алгоритмыг дуудах ба түүнээс буцах 04 Дэд алгоритмыг аргумент 05 Дэд алгоритм- функц 06 07 Хүснэгтэн аргументтай дэд алгоритм Рекурсив функц ба дэд алгоритм
  • 3. Судлах зүйл: Компьютерийг зохион бүтээхдээ хүний оюуны хөдөлмөрийг үнэхээр хөнгөвчлөх тийм хүчирхэг техник болгож чадсан байдаг. Яагаад гэсэн асуултанд зарим талаар бид хариулж чадах мэдлэгтэй болсон. Нэгдүгээрт, бидний бичсэн харьцангуй цөөн тооны үйлдлийг олон дахин биелүүлдэг, ө.х. давталтыг гүйцэтгэдэг. Тэгэхдээ нэг ижил үйлдлийг давтах бүртээ өөр өөр мэдээллийг боловсруулж, шинэ үр дүнд хүрч чаддаг нь компьютерийн нэг гайхамшиг юм. Үүнийг сайн ойлгох нь алгоритм, програм зохиож сурахад бидэнд маш хэрэгтэй зүйл. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 4. 5.1. Дэд алгоритмын тухай ухагдахуун Бид дараах жишээг авч үзье. Жишээ 1: Функцыг ашиглан өгсөн a,b,c бодит утганд хэмжигдэхүүний утгыг бодож ол. Энд арг a, b, c; үр дүн t ба энэ бодлогын алгоритмыг дараах хэлбэртэй бичиж болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 5. Энэ алгоритмд х, у хоёр бодит хэмжигдэхүүний максимумыг олж хутах хувьсагчид олгох үйлдлийг гурван удаа давтаж бичсэн байна (дээрх алгоритмд энэ хэсгүүдийг хайрцаглаж ялгав). Үнэндээ зарчмийн хувьд нэг ижил үйлдлүүдийг үүнээс ч олон удаа бичих шаардлага гарч болно. Ингэж олон удаа бичих шаардлагатай болж байгаа, тодорхой үр дүн өгдөг эсвэл тодорхой үйлдэл гүйцэтгэдэг алгоритмын хэсгийг тусад нь бие даасан алгоритм хэлбэртэй бичээд түүнийг шаардлагатай байранд нь хэрэглэх боломж компьютерт өөрт нь (улмаар програмчлалд) байдаг юм. Дэд алгоритм гэсэн нэр томъёо оруулсан учраас түүнээс ялгах зорилгоор тодорхой бодлогын (алг түлхүүр үгээр эхэлсэн) алгоритмыг үндсэн алгоритм гэж ярина. Үндсэн алгоритмд дэд алгоритмыг ашиглаж болохоос гадна нэг дэд алгоритмд өөр дэд алгоритмыг ашиглаж болно. Иймд дэд алгоритмыг ашиглаж байгаа алгоритмыг эх алгоритм гэж товчилж ярина. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 6. Тодорхойлолт: Бие даасан шинжтэй, тодорхой үр дүн өгдөг юмуу эсвэл тодорхой (зурах, бичих, файл нээх ба хаах гэх мэт) үйлдэл гүйцэтгэдэг алгоритмыг тусад нь бичиж, олон дахин ашиглах боломжийг хангаад дэд алгоритм гэж нэрлэнэ. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 7. Дэд алгоритм (дэд програм)-ыг бичиж хэрэглэх үед 1. Дэд алгоритмыг ямар хэлбэртэй бичих вэ? 2. Эх алгоритмаас дэд алгоритмд шилжих үйлдлийг яаж бичиж тэмдэглэх вэ? 3. Дэд алгоритм биелэгдсэний дараа эх алгоритмд буцаж түүнийг цааш нь үргэлжпүүлэх боломжийг яаж хангах вэ? 4. Дэд алгоритмд шаардагдах утгуудыг эх алгоритмаас яаж дамжуулах ба дэд програмын үр дүнг эх алгоритмд хэрхэн дамжуулах вэ? гэсэн дөрвөн асуудлыг шийдсэн байх ёстой байдаг. Эдгээр асуудлыг нэг бүрчлэн авч үзье. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 8. 5.2. Дэд алгоритмыг бичих Аливаа дэд алгоритм нь (алгоритм болохын хувьд) бидний үзсэн үндсэн үйлдлүүдээс тогтсон бөгөөд алгоритмын бүх шинжийг хангасан байна. Тухайлбал төгсгөлөг тооны үйлдэл биелсний дараа заавал төгсч эх алгоритмд удирдлагыг буцаадаг байх ёстой. Тодорхой дэд алгоритмыг үндсэн болон бусад дэд алгоритмаас ялгахын тулд түүнийг нэрлээд дэд_алг түлхүүр үгээр эхэлсэн, алгоритмын төгсгөлийг заасан буц гэсэн түлхүүр үгээр төгссөн байх доорх ерөнхий хэлбэртэй бичнэ: Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 9. Жишээлбэл: Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 10. 5.3. Дэд алгоритмыг дуудах ба түүнээс буцах Ямар нэг алгоритм дотор тодорхой дэд алгоритмыг ашиглах, ө.х. уг дэд алгоритмыг биелүүлж, ө.х. дэд алгоритмын биед бичигдсэн үйлдлүүдээр өгөгдсөн алгоритмыг биелүүлж түүний үр дүнг авах буюу эсвэл дэд алгоритмын гүйцэтгэдэг ажпыг хийлгэх шаардлагатай үед уг дэд алгоритмын нэрээр нь түүнд ханддаг. Ингэж тодорхой алгоритмд хандах үйлдлийг уламжлал ёсоор дэд алгортмыг дуудах үйлдэл гэж нэрлэдэг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 11. Бид дэд алгоритмыг дуудахад ямар ч түлхүүр үг хэрэглэхгүй зөвхөн шаардлагатай дэд алгоритмын нэрийг бичих аргыг сонгож хэрэглэе. Жишээлбэл дээр бичсэн тах нэртэй дэд алгоритмыг ашиглан энэ бүлгийн ж1_1 алгоритмыг дараах хэлбэртэй бичиж болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 12. Энд мах дэд алгоритмыг гурван удаа ашиглах (max алгоритмыг дуудсан үйлдлийг хайрцаглаж тэмдэглэв) бүртээ түүний үр дүн xymax хувьсагчийн утгыг авч t бутархайг бодож байна. Ингэж нэрээр дуудаж дэд алгоритмыг биелүүлэхэд энэ нэрийг нэг нийлмэл үйлдэл гэж төсөөлөн ойлгож болно. Ийм замаар цөөхөн хэдэн үндсэн үйлдэлтэй алгоритмын хэлийг бид өөрийн хэрэгцээнд тохируулан өргөтгөж байдаг гэж ойлгож бас болно. Дэд алгоритмын нэрийг сонгохдоо түүнд харгалзах нийлмэл үйлдэл “юу хийдэг вэ?” гэдгийг хэлж байхаар зөв сонгох явдал чухал байдаг. Практикт гол төлөв “бич”, “зур”, “min”, “sin”, “cos” гэх мэтчилэн хийх үйлдлийг нь заасан нэрийг сонгодог. Дэд алгоритмын бие нь хаирн энэ үйлдлийг “яаж хийж” байгааг харуулдаг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 13. Дэд алгоритмыг дуудах үйлдэл биелэхэд алгоритмыг биелүүлэх удирдлага уг дэд алгоритмд шилжиж улмаар түүний үйлдлүүд биелж эхэлнэ. Ингээд ТҮҮНИЙ бие үйлдлүүд биелж дэд алгоритмын үр дүн бэлэн болоход удирдлагыг эх алгоритмд (дэд алгоритмыг дуудсан үйлдлийн дараачийн үйлдэлд) буцаах ёстой. Ингэж чадвал дэд алгоритм биелсний дараа эх алгоритмыг цааш үргэлжлүүлэн биелүүлэх нөхцөл хангагдана. Иймээс дэд алгоритмаас "буцах" үйлдэл зайлшгүй шаардлагатаи болдог ба дэд алгоритмын төгсгөлд бидний бичсэн буц гэсэн түлхүүр үг энэ буцах үйлдлийг илэрхийлж байгаа юм. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 14. Дэд алгоритмд хандаж байгаа алгоритмын биелэх зарчимыг 4.1 зурагт үзүүлэв. Үндсэн алгоритмд ямар нэг дэд алгоритмыг дуудах үйлдэл хүртэл түүний үйлдлүүд дарааллаараа биелнэ. Ингээд алгоритмыг дуудах (max) үйлдэл биелэхэд дараачийн командын хаяг буюу буцах хаягийг (командын заагч IР регистрийн утгыг) санаж хадгалаад дэд алгоритмд шилжнэ. Дэд алгоритмын бие үйлдлүүд биелж улмаар буц үйлдэл биелэхдээ уг дэд алгоритмд шилжих үед хадгалж авсан хаягийн тусламжтайгаар эх алгоритмд буцаж очно. Дэд алгоритмыг дуудах бусад үйлдэл ч яг энэ зарчмаар биелж нэг алгоритмыг олон дахин ашиглах боломж хангагддаг юм. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 15. 5.4. Дэд алгоритмын аргумент, үр дүнг дамжуулах Үндсэн алгоритмд гаднаас өгөх шаардлагатай анхны утгыг бид алгоритмын аргумент гэж нэрлэсэн ба аргументын утгыг оруул үйлдлээр гаднаас оруулдаг. Тэгвэл дэд алгоритмд шаардагдах анхны утгыг дэд алгоритмын аргумент гэж нэрлэх ба харин дэд алгоритмаас үндсэн алгоритмд буцаах утгыг дэд алгоритмын үр дүн гэнэ. Дэд алгоритмын аргументын утгыг үндсэн алгоритмаас дамжуулж өгөх хэд хэдэн аргыг програмчлалын практикт хэрэглэдэг. Дээрх ж1_2 алгоритмд тах дэд алгоритмын аргумент нь х, у үр дүн нь xymax байгаа ба тэдгээрийг дамжуулахын тулд ижил нэртэй хувьсагчийг үндсэн ба дэд алгоритмд хоёуланд нь хэрэглэсэн байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 16. Үндсэн алгоритм болон түүний дэд алгоритмуудад бүгдэд нь хэрэглэж болохоор тодорхойлсон хувьсагчийг глобаль хувьсагч гэж нэрлэдэг. Иймд дээрх жишээнд глобаль хувьсагчийг хэрэглэх замаар аргументын утгыг дамжуулж мөн түүний үр дүнг авч байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 17. Глобальхувьсагчаараргументынутгыгдамжуулахньзаримтохиолдолдтох иромжгүйбайдаг. Жишээлбэл, дээрбичсэнтахдэдалгоритмыгашиглахболгонд x:= арг_1; y:= арг_2; max; (энд арг_1, арг_2 нь хоёр аргументын жинхэнэ утга) гэсэн гурван үйлдлийг заавал бичих шаардлагатай байна. Ийм учраас математикт функцыг 푦 푥 = 2 ∗ 푥2 + 푥 + 5; 푓 푥, 푦 = 푥2 + 푦2 гэх мэт хувьсагчаас хамаарсан хэлбэртэй бичиж аргументийн тодорхой утганд харгалзах функцын утгыг, жишээлбэл y(2), y(a), f(1.5, 2.0) гэж бичдэгтэй адил дэд алгоритм (програмыг) аргументтай бичих аргыг програмчлалд мөн хэрэглэдэг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 18. max дэд алгоритмыг x, y гэсэн хоёр аргументтай бичвэл дээр бидний бичсэн ж1_2 алгоритм дараах хэлбэртэй болно. алг ж1_3 бодит a, b, c, t, xymax ; оруул (a, b, c) ; Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 19. Дэд алгоритм дотор тодорхойлогдсон бөгөөд зөвхөн тэнд хэрэглэгдэх хэмжигдэхүүнийг локаль хувьсагч гэж програмчлалд нэрлэдэг. Дээрх тах алгоритмд х, у хоёр хувьсагч энэ алгоритмын локаль хувьсагч болж тодорхойлогдоно. Ийнхүү дэд алгоритмыг гэсэн ерөнхий хэлбэртэй бичиж болох ба энэ тохиолдолд түүнийг дуудах үйлдэл нэр(ж_параметр_1,...,ж_параметр_n) ; хэлбэртэй байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 20. Дэд алгоритмыг тодорхойлж бичих үед дэд_алг нэр (төрөл_1 параметр_1,..., төрөл_n параметр_n) ; илэрхийлэлд параметр_1,..., параметр_п нь хувьсагчийн нэр байх бөгөөд аргументын жинхэнэ утгыг өгөхгүй, харин зөвхөн ямар төрлийн хэдэн аргументтай алгоритм болохыг л заах үүрэгтэй. Иймд дэд алгоритмын толгойд (эхэнд) бичиж байгаа хувьсагчийг хийсвэр аргумент гэж нэрлэнэ Харин дэд алгоритмыг дуудах нэр(ж_параметр_1,...,ж_параметр_n) ; илэрхийлэлд бичиж байгаа ж_параметр_1, ... , ж_параметр_п нь алгоритм биелэх үед харгалзан параметр_1 ,...,параметр_п хувьсагчийн жинхэнэ утга болгон өгч байгаа утгууд учраас жинхэнэ аргумент гэж програмчлалд нэрлэдэг. Жинхэнэ аргументын тоо болон утгын төрөл нь дэд алгоритмын тодорхойлолтонд бичсэн байгаа хийсвэр аргументын тоо, харгалзах хувьсагчийн төрөлтэй тохирч байхыг шаардана. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 21. Тэгэхдээ дэд алгоритмыг дуудах нэр (ж_параметр_1, ..., ж_параметр_n) үйлдэл биелж дэд алгоритмд удирдлага очих үед {параметр_1:= ж_параметр_1; параметр_2:= ж_параметр_2 ; Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ ...; параметр_n:= ж_параметр_n } ; гэсэн үйлдэл автоматаар хийгддэг, ө.х. параметр_1 ,...,параметр_п хувьсагчууд утгатай болсон байдаг гэж ойлгох хэрэгтэй.
  • 22. алг ж1_3 бодит a, b, c, t, xymax ; оруул (a, b, c) ; max (a, b+c) ; t:= xymax ; max (a, a+c) ; t:= t+xymax ; max(a+b*c, 3.1415) ; t:= t/(1+xymax) ; гарга(t) Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ төгс дэд_алг max (бодит x, y) xymax:= x ; хэрэв y> xymax бол xymax:= y буц ; Жишээ 1_3
  • 23. 5.5. Дэд алгоритм- Функц Програмчлалдөгөгдөлмэдээлэлоруулах, мэдээллийггаргажхэвлэх, файлнээх,файлхаахгэхмэттодорхойүйлдэл (ажил) гүйцэтгэдэгдэдпрограм(алгоритм) - ыгашигладаг. Жишээлбэл, дээрбиднийолонудаабичижбайсаноруул, гаргаүйлдлүүдийг, харгалзахдэдалгоритмыгдуудсанүйлдэлгэжодооойлгожболно. Иймтөрлийндэдалгоритмаасгаднатодорхойнэгутгабодожөгдөгдэдалгоритм (програм) маштүгээмэлхэрэглэгддэг. Жишээлбэл, дээрх ж1_3алгоритмдбичсэнмаксимумутгыголохдэд алгоритмнь х, ухувьсагчийнөгөгдсөнутгынхувьдmax = Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 푥, 푥 ≥ 푦 푦, 푦 > 푥 томъёогоор тодорхойлогдохнэгбодиттоонутгыгөгчбайна.
  • 24. Ийм төрлийн алгоритм нь аргументын өгсөн утганд харгалзах функцийн утгыг өгдөг математикийн функцтэй адил учраас ийм алгоритмыг мөн функц гэж нэрлээд дээр бидний бичсэнээс ялгаатай хэлбэрээр тодорхойлж бичдэг. Алгоритм хэлэнд функцийг бичихдээ функц гэсэн түлхүүр үгээр эхэлж функцийн нэр, аргументүүдийг нь зааж өгөх бөгөөд функц түлхүүр үгийн өмнө уг функцийн үр дүн буюу утгын төрлийг заасан ямар нэг түлхүүр үгийг нэмж бичнэ. Үүнээс гадна функцийн утгыг ө.х. ямар утгыг үр дүн болгон буцаахыг мөн зааж өгөх шаардлагатай болдог. Үүний тулд дэд алгоритмын төгсгөлд буц үйлдлийг бичихдээ хаалтан дотор буцаах утгыг бичих аргыг бид хэрэглэе. Иймд алгоритм хэлэнд функцийг Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ гэсэн ерөнхий хэлбэртэй бичнэ. Энд буцаах утга нь тодорхойлолтонд зааж бичсэн төрлийн хувьсагч эсвэл энэ төрлийн утгатай дурын илэрхийлэл байж болно.
  • 25. Одоо функц ашиглан ж1_3 алгоритмыг шинээр бичье: Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ алг ж1_4 бодит a, b, c, t ; оруул (a, b, c) ; t:= t:= t/(1 гарга(t) ; төгс функц max(x, y) хэрэв y>x бол x:= y буц(x) ; max(a, b+c) max(a, a+c); max(a, b*c, 3.1415);
  • 26. Энд тах(а, b + с) + тах(а, а + с) нийлбэрийг бодохын тулд тах функцэд хоёр удаа хандаж өгсөн утгуудыг хооронд нь нэмнэ. Дараагийн мөр дотор уг функцийг бас нэг удаа ашиглаж байна. Бид дэд алгоритмын тухай болон түүний функц ба дэд_алг гэсэн хоёр төрөл байдаг тухай үзлээ. Аргументын өгсөн утганд тодорхой нэг уггыг харгалзуулан бодож өгдөг дэд алгоритмыг функц хэлбэртэй бичих нь илүү тохиромжтой. Учир нь аргументын тодорхой утганд харгалзах функцийн үггыг арифметик, логикийн илэрхийлэлд нэг гишүүн болгон шууд бичиж болдог. Гэтэл "бичих", "унших", "нээх", "хаах" гэх мэт тодорхой үйлдэл биелүүлэх эсвэл хэд хэдэн утга бодоход зориулсан дэд алгоритмыг дэд_алг хэлбэртэй голдуу бичиж шаардлагатай үйлдлийг гүйцэтгэхийн тулд харгалзах дэд алгоритмыг нэрээр нь дуудаж тусгай нэг үйлдэл мэт бичиж ашигладаг байна. Функц зохиож ашиглах өөр нэг жишээ авч үзье. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 27. Жишээ 1: Ямар нэг энгийн бутархайн хүртвэр, хуваарь болох т ба л хоер натурал тоо өгөгдсөн бол энэ бутархайг хурааж бич. Энгийн бутархайг хураахын тулд түүний хүртвэр, хуваарь тус бүрииг тэдгээрийн хамгийн их ерөнхий хуваагч (ХИЕХ) -д хуваах хэрэгтэй. Иймд өгсөн бутархайн хүртвэр, хуваарийг харгалзан т, n; харин хураасан бутархайн хүртвэр, хуваарийг харгалзан тх, пх гэвэл mx = m/ хиех (m, n); nx = n/ хиех (m, n) байх тул ХИЕХ -ийг олох функц зохиож ашиглах нь илүү тохиромжтой болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 28. Хоёр натурал тооны ХИЕХ ийг хоёр аргументтай хиех(m, n) (m>n байх) функц гэвэл хиех 푚, 푛 = 푚 , хэрэв 푛 = 0 хиех 푛, 푚 − 푛 , хэрэв > 0 байна гэж тодорхойлдог аргыг Евклидийн алгоритм гэж нэрлэдэг. Жишээлбэл, энэалгоритмаархиех(6, 4) ньхиех(4, 6-4) буюухиех(4, 2) -тайтэнцүү; харинхиех(4, 2) ньхиех(2, 4-2) буюухиех(2, 2) -тайтэнцүү; мөнхиех(2, 2) ньхиех(2, 2-2) буюухиех(2, 0) -тайтэнцүүбахиех(2, 0) ньтодорхойлолтёсоор 2 байна. Иймд хиех(6, 4)= хиех(4, 2)= хиех(2, 2)= хиех(2, 0)= 2 Евклидийналгоритмнь т, пхоёртооныХИЕХ - ийголохынтулдn хувьсагчийнутгатэгболтол {k := n ; n := m -n ; m := k}; үйлдлийгдавтахалгоритмюм. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 29. Иймд дараах хэлбэртэй функцийг бичиж болно. функц хиех(нат m, n) нат k ; хэрэв m < n бол {k:= n ; n:= m ; m:= k} ; n > 0 бол_давт {k:= n ; n:= m- n ; m:= k } буц(m) ; Энд, хэрэв хоёрдугаар аргументын утга нэгдүгээр аргументын утгаас их бол тэдгээрийн утгыг эхлээд хооронд нь сольж байна. Мөн бага тоо нь анхнаасаа тэг байвал их тоо нь шууд ХИЕХ болох ёстой учир өмнөх нөхцөлт давталтыг ашиглана. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 30. Одоо энэ функцийг ашиглан Жишээ 1 бодлогын алгоритмыг бичье. Энд арг m, n; үрдун тх, пх (хураасан бутархайн хүртвэр, хуваарь) байна: алг ж2_1 нат m, n, mx, nx ; оруул (m, n) ; m2 + n2 = 0 or n=0 бол_давт {гарга (‘өгөгдөл буруу’) ; оруул(m, n)} ; mx:= m/ хиех(m, n) ; nx:= n/ хиех(m, n) ; гарга(m, ‘/’, n, ‘=’, mx, ‘/’, nx) төгс Энд бутархайн хүртвэр, хуваарь хоёулаа эсвэл хуваарь тэгтэй тэнцүү бол бутархайг дахиж оруулахыг шаардаж байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 31. Энэ алгоритмд хиех(m, n) утгыг хоёр удаа бичсэн нь үнэндээ нэг ажлыг хоёр удаа хийлгэж байгаа хэрэг бөгөед энэ нь алгоритм, програм зохиож бичих үед • бичих ажпыг хөнгөвчлөх • алгоритм биелэх хурдыг нэмэгдүүлэх гэсэн өөртөө байнга тавьж байх ёстой хоёр шаардлагыг анхаараагүй хэрэг юм. Иймд хиех(т, п) утгыг нэг л удаа бодуулж түүнийгээ хоёр удаа хэрэглэх байдлаар дээрх алгоритмыг арай өөрөөр бичиж болно. алг ж2_2 нат m, n, mx, nx, ex ; оруул (m, n) ; m2+n2=0 or n=0 бол_давт Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ {гарга(‘өгөгдөл_буруу’); оруул(m, n)} ; ex:= хиех(m, n) ; mx:= m /ех ; nx:= n /ех ; гарга(m, ‘/’, n, ‘=’, mx, ‘/’, nx) ; төгс функц хиех(нат m, n) нат k ; хэрэв m < n бол {k:= n; m:= n; n:= k} ; n > 0 бол_давт {k:= n ; n:= m- n ; m:= k } буц(m) ;
  • 32. Эндхи-хфункцийнтодорхойлолтондбичсэнхийсвэраргументбуюу т, п хувьсагчньлокальхувьсагчболохучраасүндсэналгоритмдахь т, пнэртэиямарчхолбоогүйюм. Үнэндээбидфункцдотордурынөөрнэрийгсонгожболохбаисанболов ч хиех 푚, 푛 = 푚 , хэрэв 푛 = 0 хиех 푛, 푚 − 푛 , хэрэв > 0 томъёотойижилүсэгтэмдэглэгээгхэрэглэвэл, голньфункцийгбичих, уншихадилүүойлгомжтойболдог. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 33. 5.6. Хүснэгтэн аргументтай дэд алгоритм Нэг болон олон хэмжээст хүснэгтийг боловсруулдаг дэд алгоритм, функц практикт түгээмэл шаардагддаг. Жишээлбэл, хүснэгтийн максимум, минимум элементийг олох; хоёр матрицийг нэмэх, үржүүлэх; элементүүдийн өсөх юмуу эсвэл буурах дарааллаар хүснэгтийг эрэмбэлэх зэрэг үйлдэл түгээмэл шаардагддаг тул эдгээр үйлдлийг гүйцэтгэх алгоритмыг дэд алгоритм болон функц хэлбэртэй тодорхойлж бичих нь илүү тохиромжтой. Ийм тохиолдолд дэд алгоритмын аргумент нь хүснэгт байх ёстой болно. Дэд алгоритмын аргументын утгыг глобаль хувьсагчийн тусламжтайгаар дамжуулах нь ихэнх тохиолдолд тохиромжгүй байдаг гэж дээр ярьсан билээ. Иймд дэд алгоритм, функцийг хийсвэр аргументтай бичдэг. Одоо хийсвэр аргумент нь хүснэгт байх үед хэрхэн бичихийг үзье. Апиваа хүрнэгтийг боловсруулахын тулд хүснэгт гэсэн түлхүүр үгийн тусламжтайгаар түүнийг тодорхойлж нэр, хэмжээс болон элементийн тоог зааж өгдөг. Ингэхэд санах ой хуваарилагддаг ба ингэснээр түүний элементэд Дугаараар Нь хандаж бичих нөхцөл бүрддэг. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 34. Ийм учраас хүснэгтэн аргументтай дэд алгоритм, функцийн хувьд хийсвэр аргументыг тодорхойлж өгөхдөө нэгдүгээрт энэ аргумент нь хүснэгт гэдгийг ялгаж зааж өгөх шаардлагатай, хоёрдугаарт уг хүснэгтийн элементийн тоо буюу хэмжээг аргумент болгон мөн авдаг байхаар тодорхойлох нь зүйтэй байдаг. Ингэснээр дэд алгоритм, функцийг дуудаж биелүүлэх үед дурын I тооны элементтэй ямарч хүснэгтийг жинхэнэ аргумент болгон өгч боловсруулах боломжтой болдог. Хийсвэр аргументын жагсаалт дотор хүснэгтийг тодорхойлохдоо үндсэн алгоритмд гүүнийг тодорхойлдог аргыг хэрэглэдэг. Тэгэхдээ дэд алгоритмыг дуудаж биелүүлэх үед хүснэгтийн жинхэнэ үтгыг (ө.х. бүтэн хуснэгтийг) хуулж дамжуулбал санах ой их шаардагдахаас гадна хугацаа алдахад хүрдэг учраас хүснэгтийн хаягийг зөвхөн дамжуулах аргыг хэрэглэдэг гэж бид тохиръё. Ингэснээр хүснэгтэн аргументыг тодорхойлохдоо элементийн максимум тоог бичих шаардлагагүй болдог. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 35. Жишээ 1: Натраль тоо п, т ба а1,а2,...,аn; b1,b2,...,bт гэсэн хоёр бодит дараалал өгөгдсөн бол хоёр дарааллын максимум утгуудын ялгаварын квадратыг ол. Энд хүснэгтийн максимумыг олох алгоритм хоёр удаа шаардагдах тул өгсөн хүснэгтийн хамгийн их утгыг олж өгөх функцийг зохиож ашиглавал зохино Тэгэхдээ аргумент нь эхний удаа п элементтэй а1,а2,...,ап хүснэгт, дараа нь т элементтэй bх,b2,...,bт хүснэгт байх учраас хүснэгтэн аргументтай функц байвал илүү тохиромжтой болно. Иймд дараах функцийг бичье: функц array_max(бодит хүснэгт а(5), нат n) бодит max ; нат i ; max:= a1 ; i:= 2, n үед_давт хэрэв max < ai бол max:= ai буц(max) ; Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 36. Энэ функцийн нэгдүгээр аргумент нь хүснэгтийг тодорхойлж байгаа бол хоёр дахь аргумент хүснэгтийн уртыг зааж өгнө. Тэгэхдээ энд бичсэн хүснэгт а(5) гэсэн тодорхойлолтонд бичсэн 5 утга нь уг хүснэгт таван элементтэй гэж зааж байгаа биш харин түүний хэмжээсийг (энд нэг хэмжээстэй) зааж өгөх гол үүрэгтэй гэж ойлгох хэрэгтэй. Учир нь дээр хэлсэн ёсоор функцийг ,дуудаж ашиглах үед өмнө тодорхойлогдсон хүснэгтийн хаягийг дамжуулж өгснөөр жинхэнэ хүснэгттэй холбогдоно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 37. Одоо энэ функцийг ашиглан жишээнд өгсөн бодлогын алгоритмыг дараах хэлбэртэй бичиж болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ алг ж4 нат mn=20 ; бодит хүснэгт a(mn), b(mn) ; нат n, m, i ; бодит s ; оруул (n) ; оруул (ai; i:= 1, n) ; оруул (m) ; оруул (bi; i:= 1, m) ; s:= (array_max(a, n) – array_max(b, m))2 ; гарга (s) төгс Энд array_тах функцийг ашиглаж жинхэнэ аргументыг өгөхдөө хүснэгтиин зөвхөн нэрийг бичсэн байгааг анхаарах хэрэгтэй. Үнэндээ хүснэгтийн нэр бол түүний эхлэлийг заадаг хаяг юм. Ийм болохоор үүнийг авсан дэд алгоритм уг хүснэгтэнд хандах боломж бүрддэг байна.
  • 38. Жишээ 2:Бодиттооа1,а2,b1,b2,с1,с2өгөгдсөнбол 푎1푥 + 푏1푦 = 푐1 푎2푥 + 푏2푦 = 푐2 Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ гэсэн шугамантэгшитгэлийнсистемийншийдийгол. Шугаман тэгшитгэлийн системийг бодох Крамерийн дүрэм гэж байдаг. Энэ дүрэм ёсоор системийн үл мэдэгдэгчүүдийн өмнөх коэфициент болон сул гишүүнээр зохиосон 푑 = 푎1 푏1 푎2 푏2 , 푑푥 = 푐1 푏1 푐2 푏2 , 푑푦 = 푎1 푐1 푎2 푐2 гэсэн гурван тодорхойлогчоор системийн шийдийг шинжлэж тогтоодог. Үүнд: 1. Хэрэв d ≠ 0 бол систем ганц шийдтэй бөгөөд x=d/ d, y= d/ d байна. x y 2. Хэрэв d=0, dx= 0, dy= 0 буюу d=0 ба 푑2 푥 + 푑푦 2 = 0бол систем төгсгөлгүй олон шийдтэй. 3. Хэрэв d=0 ба푑푥 2 + 푑푦 2 ≠ 0бол систем огт шийдгүй байна.
  • 39. Эндээс үзвэл хоёрдугаар эрэмбийн тодорхойлогч бодох алгоритм гурван удаа шаардагдах тул өгсөн матрицад харгалзах тодорхойлогчийг бодох функцийг зохиож ашиглавал зохино. Тэгэхдээ аргумент нь хоёрдугаар эрэмбийн квадрат матриц байх тул матрицийн хэмжээг заасан аргумент шаардагдахгүй. Иймд функц det(бодит хүснэгт a(2,2)) бодит y ; y:= a11a22-a12a21 буц(y) ; функцийг бичвэл түүнийг ашиглан шугаман тэгшитгэлийн системийг шинжлэх алгоритмыг дараах хэлбэртэй бичиж болно. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
  • 40. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ алг ж5 нат n = 2 ; бодит хүснэгт а(n,n), с(n), d(n), b(n,n) ; бодит dd ; нат i, j, k ; текст s ; i := 1, n үед_давт {j:= 1, n үед_давт оруул( аij); оруул(сi) } ; dd:=det(а); k:= 1, n үед_давт {i := 1, n үед_давт {j := 1, n үед_давт bij := aij ; bik:= сi ; } ; хэрэв dd≠0 бол { гарга('х=', d1/dd, 'у=', d2/dd); s:= 'систем ганц шийдтэй'} эсвэл хэрэв d1 2 +d2 2 =0 бол s := 'систем төгсгөлгүй олон шийдтэй' эсвэл s := 'систем шийдгүй' ; гарга(s) төгс
  • 41. Энд dх,dу тодорхойлогчийг (k := 1, n үед_давт) давталтаар бодохын тулд d(n), b(n,n) гэсэн хоёр нэмэлт хүснэгтийг ашиглаж байгаа бөгөөд а(n, n) хүснэгтийн мөрийг b(n,n) хүснэгт рүү хуулж бичсэний дараа харгалзах баганы элементийг сул гишүүнээр солих замаар k дугаар баганыг сул гишүүний баганаар сольсон шинэ матриц зохиогоод түүнийг тодорхойлогч бодох функцийн аргумент болгон өгч байна. Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ

Editor's Notes

  1. Cover 1