SlideShare a Scribd company logo
Алгоритм гэж юу вэ?

Програмыг компьютерт шууд бичиж оруулах ѐстой юу? Тэгж болно. Гэхдээ, програмчлалд
анхлан суралцаж буй хүний хувьд эхлээд бичих гэж буй програмынхаа загвар буюу
бүдүүвчийг зохиогоод дараа нь түүнийхээ дагуу програмаа бичих нь илүү үр дүнтэй гэж
мэргэжилтнүүд үздэг. Ийм загвар буюу төлөвлөөг алгоритм гэдэг. Эсвэл “алгоритм бол
тодорхой үр дүн гаргаж авахын тулд дараалан гүйцэтгэх ѐстой үйлдлүүдийн жагсаалт юм”.
Эсвэл “алгоритм бол тодорхой үр дүн гаргаж авахын тулд баримтлах ерөнхий дүрэм юм”.
Алгоритм зохиох процессыг мэдээж алгоритмчлал гэнэ. Ер нь хүн ямар ч ажлыг хийхдээ
эхлээд төлөвлөгөө гаргадаг шүү дээ. Тэрэнтэй л адил гэсэн үг. Алгоритм гэдэг үг өөрөө, 783-
850 онд амьдарч байсан дундад азийн гарамгай тоочин Мухаммед ибн Муса аль-Хорезми
хэмээх хүний нэрний гажсан хувилбар болох Алхори[ө]мы (Algorithmi) гэсэн үгээс гаралтай
ажээ.

Эргэн тойрны амьдралд дүүрэн алгоритм байна. Ж.нь хот доторх автомашины жолооч гэрлэн
дохионд захирагдах дүрмийг баримталдаг. Түүнийг нь:

1. Хэрэв шар гэрэл асвал гэрлэн дохио солигдох (улаан эсвэл ногоон) гэж буй тул
анхааралтай бай

2.   Хэрэв улаан гэрэл асвал зогс

3.   Хэрэв ногоон гэрэл асвал хөдөл

хэмээн томъѐолъѐ. Энэ бол гэрлэн дохиод захирагдах алгоритм юм. Гэхдээ энэ алгоритмын
хувьд үйлдлийн эрэмбэ зайлшгүй чухал биш. Учир нь жолооч замын гэрлэн дохиотой
хэсгээр явж байгаад, чухам ямар гэрэл асч байна вэ (өөрөөр хэлбэл ямар нөхцөл биелж байна
вэ гэдгийг шалгаад) түүнд тохирсон алхмыг дээрх алгоритмаас сонгож гүйцэтгэнэ.

Тэгвэл (З+3)*(3+4)-23 гэсэн илэрхийллийг бодохын тулд:

1.   3 дээр 3-ыг нэмэх (=6)

2.   3 дээр 4-ийг нэмэх (=7)

3.   6-г 7-оор үржүүлэх (=42)

4.   2-ийг куб зэрэгт дэвшүүлэх (=8)

5.   42-оос 8-ыг хасах

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

Орчлон ертөнц ч өөрийн алгоритмтай. Дэлхий Нарыг дунджаар 150 сая км-ийн радиустай
“тойргоор” 1 жилд бүтэн тойрно. Дэлхий өөрийн тэнхлэгийг 24 цагт бүтэн тойрно. Бүх бодис
эгэл бөөмсөөс тогтоно г.м. Эдгээр алгоритмууд байгалийн хуулиудын тусламжтайгаар
програмчлагдаж, цаг ямагт мөрдөгдөж байдаг.

Тэгвэл алгоритм ба компьютерын програмын хооронд ямар ялгаа байна вэ гэсэн асуулт
тавья. Програм – энэ бол удирдамж, алгоритм – энэ ч гэсэн бас удирдамж байна. Тиймээ. Яг
үнэндээ эдгээрийн хооронд зарчмын ялгаа байхгүй юм. Учир нь програмчлалын хэл дээр
зохиосон алгоритмыг програм гэдэг ажээ. Компьютер бол алгоритмыг гүйцэтгэгч, хүн бол
алгоритмыг зохиогч юм. Гүйцэтгэгчид алгоритмын зорилго ямар ч хамаагүй бөгөөд зөвхөн
зохиогч л үүнийг мэдэж байдаг. Гэхдээ гүйцэтгэгч нь зохиогчийн тавьсан зорилгыг
хангалттай сайн биелүүлдэг байхын тулд алгоритм сайн зохиогдсон байх нь мэдээж. Тэгвэл,
сайн алгоритм дараах үндсэн чанаруудыг хангасан байх ѐстой гэнэ:

1. Алгоритм нь дараалсан алхмууд буюу үйлдлүүдээс тогтсон байх – алгоритм нь аливаа
даалгаврыг гүйцэтгэх төгсгөлөг тооны алхмуудаас бүрдсэн байх

2. Алгоритмын алхам бүр оновчтой, тодорхой байх – алгоритмын алхам бүрт чухам ямар
үйлдэл хийгдэх нь тодорхой байх

3.     Алгоритмд орох өгөгдөл, гарах үр дүн байх ѐстой

4. Алгоритм нь үр дүнтэй (ашигтай) байх – алгоритм нь төгсгөлөг алхмын дараа
даалгаврыг биелүүлж дуусгасан байх, хэрэв энэ нь боломжгүй бол даруй зогсдог байх;
Өөрөөр хэлбэл ямар нэг тодорхой шийдэлд хүрдэг байх

г.м.

Алгоритмын гүйцэтгэх даалгаврыг заримдаа бодлого (task) хэмээн нэрийддэг. Тиймээс
“мэдээлэл боловсруулах” гэдгийг “бодлого бодох” гэсэн үгээр сольж болно.

Алгоритмын график дүрслэл буюу блок-схем

Компьютерт зориулсан програмын алгоритмыг хэрхэн бичдэг вэ? Өөрөөр хэлбэл
тэмдэглэгээний ямар хэлбэрүүдийг ашиглан алгоритмыг зохиодог вэ? Энд дараах хэлбэрүүд
байна:

1.     Үгээр илэрхийлэх (эх хэлээр бичих)

2.     График дүрслэл (геометрын объектууд ашиглан илэрхийлэх)

3. Хуурмаг код (эх хэл, програмчлалын хэл, математикийн үндсэн тэмдэглэгээнүүд г.м.ийн
холимог ямар нэгэн зохиомол, хагас дүрэмжсэн “хэл” ашиглах)

4.     Програм (програмчлалын хэл дээр бичих)

Эхний хоѐр хэлбэртэй танилцъя.
Хоѐр натурал тооны хамгийн их ерөнхий хуваагчийг (ХИЕХ) олох Евклидийн алгоритмыг
үгээр илэрхийлвэл:

1.   Хоѐр тоо өг

2. Хэрэв хоѐр тоо тэнцүү бол аль нэгийг нь хариу болгон аваад алгоритмыг төгсгөх, үгүй
бол 3-р алхамд шилжих

3.   Хоѐр тооны аль ихийг нь тодорхойлох

4.   Их тоог их тоо, бага тооны ялгавраар солих

5.   2-р алхамд шилжих

гэсэн хэлбэртэй болно. Энэ алгоритм хоѐр тоо тэнцүү болох хүртэл хийгдэж, эцэст нь ХИЕХ-
ийг гаргаж өгнө.

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

Бид хичээлдээ график дүрслэлийн аргыг ашиглах болно.

График дүрслэлээр, алгоритмыг өөр хоорондоо холбогдсон геометр объектуудын дараалал
хэлбэрээр илэрхийлдэг. Ийм дүрслэлийг алгоритмын блок-схем хэмээн нэрийднэ. Блок-
схемийг бүрдүүлэгч объектуудыг үйлдлийн блокууд гэнэ. Учир нь блок болгон тодорхой нэг
эсвэл хэд хэдэн үйлдлийг төлөөлдөг. Тиймээс блокуудыг хооронд нь холбосон шугамыг
шилжилтийн шугам гэх бөгөөд энэ нь үйлдэл хийгдэх дарааллыг тодорхойлж өгдөг.
Шугамыг заримдаа сумтай, заримдаа сумгүй зурдаг. Бидний хувьд сумтай зурах нь илүү
тохиромжтой. Шилжилтийн шугам, блокуудыг нийтэд нь блок-схемийн элементүүд гэдэг.

Ямар үйлдлийг илэрхийлж буйгаас хамааран блок-схемийн нэлээн хэдэн элемент байна.
Бидний байнга хэрэглэх элементүүд бол:

                     Элементийн     Элементийн нэр
Элемент                                                 Төлөөлөх үйлдэл
                     нэр (англи)    (монголчилсон)
                                                        Алгоритмын Эхлэл эсвэл Төгсгөл
                     Terminator     “Эхлэл”/”Төгсгөл”
                                                        (дотор нь бичнэ)
                                                        Алгоритм гүйцэтгэгч буюу
                                                        компьютерт гаднаас өгөгдөл
                     Manual Input   “Оролт”
                                                        оруулах (дотор нь өгөгдлөө
                                                        бичнэ)

                                                        Үр дүнг хэрэглэгчид гаргаж
                     Display        “Гаралт”
                                                        үзүүлэх (дотор нь үр дүнг бичнэ)
Оролт-Гаралтын үйлдлийн
                    Data           “Оролт”/”Гаралт”     ерөнхий тэмдэглэгээ (дотор нь
                                                        бичнэ)
                                                        Өгсөн нөхцлийг шалгаж шийдвэр
                                                        гаргах буюу салаа замын аль
                    Decision       “Нөхцөл шалгах”
                                                        нэгээр нь явах (дотор нь нөхцлөө
                                                        бичнэ)

                                   “Параметрт
                    Preparation                         Давталт буюу циклийн эхлэл
                                   давталт”


                                                        Дээрхүүдээс бусад үйлдлүүд:
                    Process        “Процесс”            арифметик үйлдлүүд ба утга
                                                        олгох г.м. (дотор нь бичнэ)
                                   Шилжилтийн
                                                        Шилжилтийн шугам
                                   шугам
                                                        Тухайн хуудсанд багтахгүй
                                                        байгаа блок схемийг өөр
                                                        хуудаснаас үргэлжлүүлэхдээ
                    Connector      “Залгаас”
                                                        хоѐр хуудасны залгаасыг
                                                        тэмдэглэх (дотор нь тэмдгээ
                                                        тавина)

зэрэг болно. Эдгээрийг хэрхэн ашиглаж буй жишээг үзье. Өмнө дурдсан Евклидийн
алгоритмын блок-схемийг зурвал:




гэсэн байдалтай болох юм.

Блок руу орж буй сумыг оролт, гарч буй шугам буюу сумыг гаралт гэдэг. Ихэнх элемент нэг
оролт, нэг гаралттай байдаг бол харин “Нөхцөл шалгах” элемент нэг оролттой, хоѐр
гаралттай байна. Хоѐр гаралтанд нь үнэн ба худал гэсэн утгууд харгалзана. Заримдаа үнэн
гэдгийг 1-ээр, худал гэдгийг 0-ээр илэрхийлнэ. Заримдаа бас “тийм”, “үгүй” гэсэн үгээр
илэрхийлдэг.

Алгоритмын биелэлт ямагт сумын дагуу чиглэлд явагдана.

“Оролт” элемент нь компьютерын гараас (keyboard) өгөгдөл оруулах үйлдлийг илэрхийлдэг
бол “Гаралт” элемент компьютерын дэлгэцэнд (display) үр дүнг гаргах үйлдлийг илэрхийлнэ.

Блок-схемд зөвхөн нэг “Эхлэл”, нэг “Төгсгөл” байна.

“Оролт”, “Гаралт”, “Процесс” зэрэг элементийн дотор нэг буюу түүнээс олон харгалзах
үйлдлийг бичиж болно. Өөрөөр хэлбэл хэд хэдэн дараалсан “Оролтыг” нэг “Оролтонд”, хэд
хэдэн дараалсан “Гаралтыг” нэг “Гаралтанд”, хэд хэдэн дараалсан “Процессыг” нэг
“Процесс”дотор нэгтгэн бичиж болно.

Өөр нэгэн жишээ. Өгсөн тооны абсолют
хэмжигдхүүнийг олох алгоритмыг зуръя. Түүний блок-
схемийг хажуугийн зурагт харуулав. Энэ алгоритм яаж
ажиллах вэ? Үгээр тайлбарлавал:

1.   Нэг тоо өг

2. Хэрэв уг тоо сөрөг байвал абсолют хэмжигдхүүн нь
түүний эсрэг тоо болно, үгүй бол (тоо эерэг үед)
абсолют хэмжигдхүүн нь тэр тоо өөрөө байна

3. Абсолют хэмжигдхүүний утгыг дэлгэцэнд хэвлэж
гаргана

4.   Төгсгөл

гэж томъѐологдох ажээ.

Алгоритмын үндсэн бүтцүүд

Элементүүд нийлж тодорхой бүтцийг үүсгэдэг. Эдгээр бүтцийг алгоритмын үндсэн бүтэц
(АҮБ) хэмээн нэрийднэ. Ингэснээр алгоритмыг зөвхөн эдгээр бүтцээс тогтсон мэтээр авч
үзэх боломжтой. АҮБ-ийн гол онцлог бол тэдгээр нь зөвхөн нэг оролт, нэг гаралттай байна.

3 төрлийн АҮБ байдаг. Энэ нь Процесс, Салаалалт, Давталт юм. Салаалалт бүтэц гүйцэд ба
гүйцэд бус гэсэн 2 янз байдаг. Давталт бүтэц нь While (Байхад), Until (Хүртэл), Параметрт
гэсэн 3 хэлбэртэй байна. Эд бүгдийн схемийг дараах хүснэгтэд харууллаа.

                            Салаалалт
Процесс
                            Гүйцэд                          Гүйцэд бус
Давталт
While                      Until                           Параметрт




Дээрх схемүүдэд буй “Урсгал” бол нэг юм уу эсвэл бүлэг үйлдлийг илэрхийлнэ. “Нөхцөл”
бол ямар нэгэн логик илэрхийлэл байна.

Параметрт давталтын схемд буй “ДП” – Давталтын Параметр, “АУ” - давталтын параметрын
авах Анхны Утга, “ЭУ” – давталтын параметрын авах Эцсийн Утга, “АЛХАМ” – давталтын
параметрын утгын өөрчлөгдөх Алхам юм.

Салаалалт бүтэц бүхэлдээ болон Давталт бүтцийн эхний хоѐр төрөл нь “Нөхцөл шалгах
элементээс” тогтсон байна.

Алгоритмд Салаалалт орж ирснээр түүний хувьд хоѐр салаа зам бий болно. Чухам алинаар нь
явах нь нөхцөл биелэх эсэхээс хамаарна.

Алгоритмд Давталт орж ирснээр нэг юм уу эсвэл бүлэг үйлдлийг олон дахин давтах
боломжтой болдог. Ингэж давтагдах хэсгийг давталтын бие (bodyofcycle) хэмээн нэрийддэг.

While төрлийн давталт, нөхцөл биелж л байвал циклээ үргэлжлүүлнэ. Тэгж байгаад биелэхээ
болимогц давталт хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилжинэ.

Until төрлийн давталт, нөхцөл биелэх хүртэл л циклээ үргэлжлүүлж байгаад биелмэгц л
давталт хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилждэг.

Параметрт давталтын хувьд, давталтын параметр хэмээн нэрлэгдэх нэгэн хэмжигдхүүний
авах утгын тоогоор давталтыг хийдэг. Хэрэв параметр нэгэнт эцсийн утгаа авсан бол давталт
хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилжинэ.
Тиймээс While, Until төрлийн давталтыг Нөхцөлт давталт, харин Параметрт давталтыг
Тоолуурт давталт гэж нэрлэдэг. Нөхцөлт давталтын хувьд давталтын тоо урьдаас
мэдэгдэхгүй бол Тоолуурт давталтын тоог урьдчилан тодорхойлж болно. Тэр нь:

Nдавталт = |ЭУ - АУ| / АЛХАМ + 1

гэж олддог.

Алгоритмын төрлүүд

Алгоритмыг төрлөөр нь шугаман ба шугаман бус гэж хоѐр ангилдаг.

Шугаман алгоритм (Linearalgorithms)

Зөвхөн Процесс бүтцээс тогтсон алгоритм нь шугаман алгоритм болно. Учир нь түүний
биелэлт зөвхөн нэг чиглэлд, дээрээс доошоо, эхлэлээс төгсгөл рүү шууд “урсана”.

Шугаман алгоритмын жишээнүүд авч үзье.

    Жишээ 1. Өмнө үзсэн (З+3)*(3+4)-23 илэрхийллийг бодох алгоритм:

Блок-схем       Тайлбар
                1. Алгоритм эхлэнэ.

                2.   3 дээр 3-ыг нэмээд a-д утга болгож өгнө.

                3.   3 дээр 4-ийг нэмээд b-д утга болгож өгнө.

                4.   23-ийг олоод с-д утга болгож өгнө.

                5.   a-г b-ээр үржүүлж, с-г нэмэхэд гарах хариуг d-д утга болгож өгнө.

                6.   d-ийн утгыг дэлгэцэнд хэвлэж гаргана.

                7.   Алгоритм төгсөнө.




    Жишээ 2. Өгсөн x-ийн хувьд y=5*x2+3*x функцыг бодох алгоритм:

Блок-схем       Тайлбар
1.   Алгоритм эхлэнэ.

                   2.   x-ийн утгыг гаднаас оруулж өгнө.

                   3.   5*x2+3*x илэрхийллийг бодоод гарах хариуг y-д утга болгож өгнө.

                   4.   y-ийн утгыг дэлгэцэнд хэвлэж гаргана.

                   5.   Алгоритм төгсөнө.

Энд, гаднаас тоо оруулмагц тэр нь x-ийн утга болон очих ажээ. Тэгээд бодолт хийгдэж, үр
дүн дэлгэцэнд хэвлэгдэж байна.

    Жишээ 3. Гурвалжны талууд a, b, c болно. Дараах:

cosA = (b2 + c2 – a2)/ (2 * b * c)

sinB = (b * sinA) / a

C = 180o – (A + B)

томъѐонуудын тусламжтайгаар түүний A, B, C өнцгүүдийг тодорхойл (градусаар). Санамж:
arccos, arcsin тригонометрийн урвуу функцуудын утга радианаар илэрхийлэгддэг гэдгийг
сануулъя.

Энэ бодлогын алгоритм нь:

Блок-схем                            Тайлбар
1.   Алгоритм эхлэнэ.

                                  2.   a-ийн утгыг гаднаас оруулж өгнө.

                                  3.   b-ийн утгыг гаднаас оруулж өгнө.

                                  4.   c-ийн утгыг гаднаас оруулж өгнө.

                                  5.   180/3.14-ийг k-д утга утга болгож өгнө.

                                  6.  arccos[(b2 +c2–a2)/(2*b*c)] томъѐог бодоод гарах
                                  хариуг A_rad-д утга болгож өгнө.

                                  7.  arcsin(b*sinA_rad/a) томъѐог бодоод гарах хариуг
                                  B_rad –д утга болгож өгнө.

                                  8.  A_rad-ыг k-аар үржүүлээд A_grad-д утга болгож
                                  өгнө.

                                  9.  B_rad-ыг k-аар үржүүлээд B_grad-д утга болгож
                                  өгнө.

                                  10. C_grad=180o–(A_grad+B_grad) гэжолно.

                                  11. A_rad-ынутгыгдэлгэцэндхэвлэжгаргана.

                                  12. B_rad-ынутгыгдэлгэцэндхэвлэжгаргана.

                                  13. C_grad-ынутгыгдэлгэцэндхэвлэжгаргана.

                                  14. Алгоритм төгсөнө.

Энд, градус=радиан*180/π=радиан*k гэсэн томъогоор радианаар олдсон өнцгийн утгуудыг
(A_rad, B_rad, C_rad) градуст шилжүүлж (A_grad, B_grad, C_grad) байна.

   Жишээ 4. Хүнээс нэрийг нь асуугаад, дараа нь түүнийг мэндчилэх алгоритм:

Блок-схем               Тайлбар
1.   Алгоритм эхлэнэ.

                         2.  Дэлгэцэнд “Чамайг хэн гэдэг вэ?” гэсэн өгүүлбэрийг хэвлэж
                         гаргана.

                         3.  Хэн нэгэн хүний нэрийг гаднаас оруулж name-д утга болгож
                         өгнө.

                         4.  Дэлгэцэнд “Сайн уу” гэсэн үг хэвлээд араас нь name-ийн
                         утгыг хэвлэж гаргана.

                         5.   Алгоритм төгсөнө.

Энэ жишээ өмнөх 3 жишээнээс ялгаатай нь ямар нэг тооцоо хийлгүй, зөвхөн хэрэглэгчтэй
хялбар харилцан яриа үүсгэж байна. Алгоритм ажиллангуут хүний нэрийг асууна. Гараас нэр
оруулмагц дэлгэцэнд мэндчилгээ хэвлэгдэх болно. Тухайлбал Бат гэж оруулахад “Сайн уу,
Бат” гэж гарна.

Шугаман бус алгоритм (Nonlinearalgorithms)

Алгоритм нь салаалалт юм уу давталт агуулсан бол түүнийг шугаман бус алгоритм гэнэ.
Учир нь түүний биелэгдэх чиглэл буюу “урсгал” нь мөчирлөсөн юм уу мушгирсан байдалтай
болдог.

Тухайн тохиолдолд шугаман бус алгоритм нь зөвхөн салаалалт, эсвэл зөвхөн давталт
агуулсан байх бол ерөнхий тохиолдолд салаалалт+давталт агуулсан байна. Жишээ
алгоритмууд үзье.

Салаалалт.

   Жишээ 1. Өгсөн тооны урвууг олдог алгоритм:

Блок-схем                     Тайлбар
1.   Алгоритм эхлэнэ.

                             2.   x-ийн утгыг гаднаас оруулна.

                             3.   x 0 нөхцөл биелж буй эсэхийг шалгаад

                                  хэрэв тийм байвал:
                                     [1] 1/x-ийг олж y-д утга болгон өгнө;

                                     [2] y-ийн утгыг дэлгэцэнд хэвлэж гаргаад 4-р алхамд
                                     шилжинэ;
                                  үгүй бол:
                                     4-р алхамд шилжинэ.

                             4.   Алгоритм төгсөнө.

Энэ алгоритм бол гүйцэд бус салаалалтын жишээ юм. Учир нь “Нөхцөл шалгах” элементийн
хоѐр гаралтын зөвхөн нэгэнд нь тодорхой үйлдэл харгалзаж байна. Гаднаас оруулсан тоо 0-
ээс ялгаатай байвал л түүний урвууг бодож, дэлгэцэнд гаргах бөгөөд хэрэв 0 байвал бодолт
хийхгүй, үр дүн хэвлэхгүй, алгоритм шууд дуусна.

   Жишээ 2. Өмнөх алгоритмыг дараах байдлаар зуръя:

Блок-схем                           Тайлбар
                                    1. Алгоритм эхлэнэ.

                                    2.   x-ийн утгыг гаднаас оруулна.

                                    3.   x 0 нөхцөл биелж буй эсэхийг шалгаад

                                         Хэрэв тийм байвал:
                                            [1] 1/x-ийг олж y-д утга болгон өгнө;

                                            [2] y-ийн утгыг дэлгэцэнд хэвлэж гаргаад 4-р
                                            алхам руу шилжинэ;
                                         үгүй бол:
                                            “Хязгааргүй!” гэсэн мэдэгдлийг дэлгэцэнд
                                            гаргаад 4-р алхам руу шилжинэ.

                                    4.   Алгоритм төгсөнө.

Харин энэ алгоритм бол гүйцэд салаалтын жишээ юм. Учир нь “Нөхцөл шалгах” элементийн
хоѐр гаралтанд хоѐуланд нь тодорхой үйлдлүүд харгалзаж байна. Гаднаас оруулсан тоо 0-ээс
ялгаатай байвал түүний урвууг бодож, дэлгэцэнд гаргаад алгоритм дуусна. Эсрэгээр 0 байвал
бодолт хийлгүйгээр дэлгэцэнд “Хязгааргүй!” гэсэн үг хэвлээд алгоритм дуусна.
Салаалалт бүтэц дотроо бас Салаалалт бүтцийг агуулсан байж болно. Өөрөөр хэлбэл нөхцөл
шалгах үйлдлийн хоѐр гаралтын аль нэгэнд, эсвэл хоѐуланд нь дахиад нөхцөл шалгах үйлдэл
хийгдэж болно. Үгүй яах вэ дээ, модны мөчир дахиад мөчирлөж салаалдагтай л адил гэх үү
дээ. Ийм алгоритмын жишээтэй танилцъя.

    Жишээ 3. Бат, Болд хоѐрын насыг нь асуугаад, тэдгээрийг оруулмагц хэн нь насаар ах
болохыг мэдээлж гаргадаг алгоритм:

Блок-схем                                        Тайлбар
                                                 1. Алгоритм эхлэнэ.

                                                 2.  Дэлгэцэнд “Бат хэдэн настай вэ?”
                                                 гэж гаргана.

                                                 3.  Батын насыг гаднаас age1-т утга
                                                 болгож оруулна.

                                                 4.  Дэлгэцэнд “Болд хэдэн настай вэ?”
                                                 гэж гаргана.

                                                 5.  Болдын насыг гаднаас age2-т утга
                                                 болгож оруулна.

                                                 6. age1=age2 нөхцөл биелж буй эсэхийг
                                                 шалгаад

                                                      хэрэв тийм байвал:
                                                           “Бат Болд хоѐр нас чацуу” гэж
                                                           дэлгэцэнд гаргаад 7-р алхамд
                                                           шилжинэ;
                                                      үгүй бол:
                                                           age1>age2 нөхцөл биелж буй
                                                           эсэхийг шалгаад хэрэв тийм
                                                           байвал
                                                                “Бат насаар ах нь” гэж
                                                                дэлгэцэнд гаргаад 7-р
                                                                алхамд шилжинэ;
                                                           үгүй бол:
                                                                “Болд насаар ах нь” гэж
                                                                дэлгэцэнд гаргаад 7-р
                                                                алхамд шилжинэ.

                                                 7.   Алгоритм төгсөнө.
Ингэж давхар салаалалт ашиглан age1<age2, age1=age2, age1>age2 гэсэн 3 нөхцлийг хоѐр
Салаалалт бүтцээр буюу хоѐр “Нөхцөл шалгах” элементийн тусламжтайгаар тооцож байгаа
юм.

Логик холбоос.

Бидний үзсэн дээрх жишээнүүдэд, “Нөхцөл шалгах” элементийн тоо дотор нь бичигдсэн
нөхцлийн тоотой тэнцүү байна. Өөрөөр хэлбэл нэг нөхцөл шалгадаг элемент дотор нэг л
нөхцөл бичигдсэн байна. Тэгвэл And(Ба), Or(Буюу) гэсэн логик холбоосуудыг хэрэглэн нэг
нөхцөл шалгадаг элемент дотор хоѐр буюу түүнээс олон нөхцлийг бичиж болдог. Логик
холбоосыг хоѐр нөхцлийн дунд тавьдаг.

And холбоос нь түүний хоѐр талын нөхцөл хоѐулаа үнэн тохиолдолд үнэн гэсэн хариу өгөх
бөгөөд аль нэг нөхцөл л худал болчихвол худал гэсэн хариу гаргана. Тиймээс энэ холбоосыг
логик үржилт хэмээн нэрийднэ.

Or холбоос нь түүний хоѐр талын нөхцлийн аль нэг нь үнэн байвал үнэн гэсэн хариу өгөх
бөгөөд хоѐр талын нөхцөл хоѐулаа худал тохиолдолд л худал гэсэн хариу гаргана. Тиймээс
энэ холбоосыг логик нэмэлт хэмээн нэрийднэ.

Логик холбоос хэрэглэж буй тохиолдолд гол анхаарах зүйл бол Ба, Буюугийн ялгааг зөв
ойлгох явдал юм. Дараах жишээнүүдийг үзье.

    Жишээ 4. Өгсөн a тоо [0,20] завсарт байвал түүнийг 2-оор үржүүлэх, энэ завсарт орохгүй
бол 2-оор нэмэх алгоритм:

Блок-схем                                     Тайлбар
                                              1. Алгоритм эхлэнэ.

                                              2.   a-ын утгыг гаднаас оруулна.

                                              3.   Хэрэв a 0 ба a 20 байвал:

                                                      a-ийнутгыг 2 дахинихэсгээд 4-
                                                      ралхамдшилжинэ;
                                                   үгүй бол:
                                                      a-ийн утгыг 2-оор ихэсгээд 4-р
                                                      алхамд шилжинэ.

                                              4.   a-ын утгыг дэлгэцэнд хэвлэж гаргана.

                                              5.   Алгоритм төгсөнө.


Энэ жишээнд, a тоо [0,20] завсарт орших уу гэсэн нөхцлийг “(a>=0) And (a<=20)” гэж бичсэн
байна. Мэдээж a 0 ба a 20 үед л a [0,20] байна гэж үзнэ шүү дээ. Уг илэрхийлэл хэзээ худал
байх вэ? And холбоос түүний хоѐр талын аль нэг нөхцөл л худал бол худал гэсэн хариу
гаргадгийг дээр дурдсан. Тиймээс, гаднаас оруулсан утга 0-ээс бага юм уу 21-ээс их
болчихвол худал болно. Түүнчлэн логик холбоос ашигласны ачаар блок-схем зөвхөн ганц
дан Салаалалт бүтцийг агуулжээ. Хэрэв And оруулаагүй бол бид давхар салаалалт хийх
байсан.

    Жишээ 5. Өмнөх жишээний бодлогыг бид дараах байдлаар томъѐолж болно. Өгсөн a тоо
[0,20] завсрын гадна байвал түүнийг 2-оор ихэсгэх, энэ завсарт орох бол 2-оор үржүүлэх
алгоритм:

Блок-схем                                     Тайлбар
                                              1. Алгоритм эхлэнэ.

                                              2.   a-ын утгыг гаднаас оруулна.

                                              3.   Хэрэв a<0 буюу a>20 байвал:

                                                        a-ийнутгыг 2-оорихэсгээд 4-
                                                        ралхамдшилжинэ;
                                                   үгүй бол:
                                                        a-ийн утгыг 2 дахин ихэсгээд 4-р
                                                        алхамд шилжинэ.

                                              4.   a-ын утгыг дэлгэцэнд хэвлэж гаргана.

                                              5.   Алгоритм төгсөнө.


Энэ жишээнд, a тоо [0,20] завсрын гадна орших уу гэсэн нөхцлийг “(a<0) Or (a>20)” гэж
бичсэн байна. Мэдээж a<0 юм уу a>20 үед л a [0,20] байна гэж үзнэ шүү дээ. Уг илэрхийлэл
хэзээ худал байх вэ? Or холбоос түүний хоѐр талын нөхцөл хоѐулаа худал бол худал гэсэн
хариу гаргадгийг дээр дурдсан. Тиймээс, гаднаас оруулсан утга 0-оос их буюу тэнцүү ба 20-
иос бага буюу тэнцүү тохиолдолд худал гэсэн хариу гарна.

Давталт.

Алгоритмд яагаад давталт орж ирдэг вэ? Өгсөн бодлогыг хялбар аргаар түргэн шуурхай
бодохын тулд. Гэхдээ алгоритмдаа давталт ашиглах хэрэгцээ шаардлага байгаа эсэхийг
тухайн бодлогын нөхцөл тодорхойлно. Ж.нь ийм бодлого байна. “2-оос 10 хүртэлх бүх тэгш
тоог дэлгэцэнд хэвлэ”. Үүнийг бид ямар ч давталт ашиглалгүй зүгээр шугаман алгоритм
зохион гүйцэтгэж болно. Ингэхдээ гаралтын элементийг 5 удаа эсвэл нэг удаа ашиглана:
За тэгвэл, “2-оос 200 хүртэлх бүх тэгш тоог дэлгэцэнд хэвлэ” гэсэн бол яах вэ? Дээрх
шигээр, гэхдээ 100 Процесс блокийг доош цувуулах юм уу нэг Процесс дотор 100 ширхэг
тоог цувуулан бичиж болно нь л доо. Харин зарцуулах хөдөлмөр маань цаг үрсэн, зурагдах
блок-схем маань сунжирсан урт “болхи” болно. Энэ тохиолдолд давталт ашиглах нь
тохиромжтой.

 Давталтын 3 төрөл байдгийг бид өмнөх сэдвээс мэдэж авсан. Одоо дээрх бодлогыг эдгээр
төрөл бүрээр хэрхэн гүйцэтгэх жишээтэй танилцъя.

   Жишээ 1. 2-оос 200 хүртэлх бүх тэгш тоог дэлгэцэнд хэвлэх алгоритмд While төрлийн
нөхцөлт давталт ашигласан байдал:

Блок-схем            Тайлбар
                     1. Алгоритм эхлэнэ.

                     2.   k гэсэн хувьсагчид 2 гэсэн утга онооно.

                     3.   k-ийн утга 200-аас хэтрээгүй эсэхийг шалгаад

                          хэрэв тийм байвал:
                               [1] k-ийн утгыг дэлгэцэнд хэвлэж гаргана;

                               [2] k-ийн утгыг 2-оор ихэсгээд 3-р алхамд шилжинэ;
                          үгүй бол:
                               4-р алхамд шилжинэ.

                     4.   Алгоритм төгсөнө.
Алгоритм яаж ажиллаж байна вэ? Хамгийн эхлээд 2 гэсэн утгатай k гэсэн хувьсагчийг 200-
аас хэтрээгүй утгатай байна уу гэдгийг шалгана. 2<200 учраас 1 гаралтаар явна. Дэлгэцэнд 2
гэж гарна. Дараа нь k-г 2-оор ихэсгэнэ. Дахиад k-ийн утга 200-аас хэтрээгүй эсэхийг
шалгана. Мэдээж 4<200 учраас 1 гаралтаар явж, дэлгэцэнд 4 гэж гарна. k=6 болно. Дахиад
нөхцөл шалгана. 6<200 учраас мөн л 1 гаралтаар явна. Харгалзах үйлдлүүд хийгдэнэ.
Иймэрхүү маягаар, k 200 байгаад л байвал, түүний агшин зуурын утгыг хэвлэн, 2-оор
ихэсгэх үйлдлүүд давтагдах болно. Давталт хийгдсээр дэлгэцэнд 2 4 6 8 10 12 ... 196 198 гэж
гарсны дараа юу болохыг авч үзье. k=k+2 үйлдлээр k-ийн утга 200 болж таарна. Нөхцөл
шалгахад 200=200 учраас k нь 200-аас хэтрээгүй гэсэн үг. Тиймээс 1 гаралтаар явж дэлгэцэнд
200 гэж хэвлэгдэнэ. k=202 болно. Дахиад k 200 нөхцлийг шалгана. Мэдээж 202 нь 200-аас
эрс их тоо (202>200) учир одоо бол k 200 нөхцөл биелэхгүй. Тиймээс 0 гаралтаар явж,
алгоритм шууд төгсөх ажээ. Нөхцөл биелээд байхад давталт хийгдсээр, биелэхээ болимогц
давталт хийгдэхээ больчихож байна. Давталтын бие нь энд юу болох вэ? Яг давтагдаж
байгаа: k-г хэвлэх, k-г 2-оор ихэсгэх гэсэн үйлдлүүд бол давталтын бие юм. While бүтцийн
хувьд давталтын бие нь нөхцөл шалгах элементийн 1 гаралтанд харгалзаж байна.

    Жишээ 2. Дээрх бодлогын алгоритмд Until төрлийн нөхцөлт давталт ашигласан байдал:

Блок-схем          Тайлбар
                   1. Алгоритм эхлэнэ.

                   2.   k гэсэн хувьсагчид 2 гэсэн утга онооно.

                   3.   k-ийн утгыг дэлгэцэнд хэвлэж гаргана.

                   4.   k-ийн утгыг 2-оор ихэсгэнэ.

                   5.   k-ийн утга 200-аас хэтэрсэн эсэхийг шалгаад

                        хэрэв тийм байвал:
                            6-р алхамд шилжинэ;
                        үгүй бол:
                            3-р алхамд шилжинэ.

                   6.   Алгоритм төгсөнө.


Алгоритм яаж ажиллаж байна вэ? Хамгийн эхлээд k гэсэн хувьсагчийн утгыг хэвлэж байна.
Дэлгэцэнд 2 гэж гарна. Дараа нь k-г 2-оор ихэсгэнэ. Тэгээд k-ийн утга 200-аас хэтэрсэн байна
уу гэдгийг шалгана. 2>200 биш учраас 0 гаралтаар явж, дэлгэцэнд 4 гэж гарна. k=k+2 болно.
Дахиад k-ийн утга 200-аас хэтэрсэн эсэхийг шалгана. Мэдээж 4>200 биш учраас 0 гаралт
хийгдэж, дэлгэцэнд 6 гэж гарна. k=8 болно. Дахиад нөхцөл шалгана. Нөхцөл биелэхгүй тул
мөн л 0 гаралтаар явна. Харгалзах үйлдлүүд хийгдэнэ. Иймэрхүү маягаар, k>200 болох
хүртэл л түүний агшин зуурын утгыг хэвлэж, 2-оор ихэсгэх үйлдлүүд давтагдах болно.
Давталт хийгдсээр дэлгэцэнд 2 4 6 8 10 12 ... 196 198 гэж гарсны дараа юу болохыг авч үзье.
k=k+2 үйлдлээр k-ийн утга 200 болж таарна. Нөхцөл шалгахад 200=200 учраас k>200
болоогүй гэсэн үг. Тиймээс 0 гаралтаар явж дэлгэцэнд 200 гэж хэвлэгдэнэ. Тэгээд k=202
болно. Дахиад k 200 нөхцлийг шалгана. Одоо бол, 202 нь 200-аас эрс их тоо (202>200) учир
k>200 нөхцөл биелнэ. Тиймээс 1 гаралтаар явж, алгоритм шууд төгсөх ажээ. Нөхцөл
биелэхгүй байхад буюу нөхцөл биелэх хүртэл давталт хийгдсээр, биелмэгц давталт
хийгдэхээ больчихож байна. Давталтын бие нь энд юу болох вэ? Давтагдаж байгаа: k-г
хэвлэх, k-г 2-оор ихэсгэх гэсэн үйлдлүүд давталтын бие болно. Until бүтцийн хувьд
давталтын бие нь нөхцөл шалгах элементийн 0 гаралтанд харгалздаг байна.

    Жишээ 3. Өмнөх бодлогын алгоритмд Параметрт давталт ашигласан байдал:

Блок-схем                 Тайлбар
                          1. Алгоритм эхлэнэ.

                          2.   k=2 гэсэн утга авна.

                          3.   Хэрэв k 200 байвал:

                                   [1] k-ийн утгыг дэлгэцэнд хэвлэж гаргана;

                                   [2] k-ийн утгыг 2-оор ихэсгээд 3-р алхамд шилжинэ;
                               үгүй бол:
                                   4-р алхамд шилжинэ.

                          4.   Алгоритм төгсөнө.


Энэ тохиолдолд k гэсэн хувьсагчийг давталтын параметр буюу тоолуур болгон ашиглажээ.
Тоолуур [2,200] завсраас 2-оор өөрчлөгдсөн утгуудыг авна. Завсрын доод хязгаарын 2 гэсэн
утга бол Анхны Утга, дээд хязгаарын 200 бол Эцсийн Утга, өөрчлөлтийн 2 бол Алхам юм.
Түүний шинэ утга бүрт харгалзсан гаралтын үйлдэл хийгдэж байна. Дэлгэцэнд хамгийн
эхлээд 2, дараа нь 4, 6, 8, ... г.м. тоонууд гарна. Иймэрхүү маягаар k нь 100 өөр утга авахад
түүнийг нь дэлгэцэнд мөн 100 удаа хэвлэнэ. Хамгийн сүүлд k=200 болоход түүнийг
дэлгэцэнд гаргасны дараагаар бол тоолуур Эцсийн Утгаасаа хэтэрсэн утга авахгүй учраас
алгоритмын дараагийн хэсэг буюу төгсгөл рүү явах болно. Давталтын бие бол одоо зөвхөн k-
г хэвлэх ганц үйлдлээс тогтсон байна. Давталтын тоо нь тоолуурын авах утгын тоотой
тэнцүү байна.

Дээрх 3 жишээнд бид нэг бодлогыг давталтын 3 төрлөөр бодлоо. Гэхдээ практик дээр бол,
бодлогын нөхцөл, онцлогоос шалтгаалан аль нэг давталтын хэлбэрийг ашиглах нь илүү
тохиромжтой байх тохиолдол гардаг. Чухам алиныг нь вэ гэдгийг алгоритм зохиогч өөрөө
оновчтой сонгох ѐстой.

Давхар салаалалт гэж байдгийн адилаар давхар давталт бас байж болно. Өөрөөр хэлбэл нэг
Давталт бүтцийн доторх давталтын биед мөн Давталт бүтэц оршиж болно гэсэн үг. Хэрэв
гадна талын давталт N удаа, дотор талын давталт M удаа хийгдэхээр заагдсан байвал дотор
талын давталт нийт N*M удаа хийгдэнэ. Учир нь гадаад давталтын нэг эргэлтэнд дотоод
давталт M удаа хийгдэнэ шүү дээ. Одоо давхар давталт ашигласан жишээ үзье.

    Жишээ 4. z(x,y)=x2+y2 функцыг x [-5,5], y [-5,5] завсарт (x, y нь бүхэл тоо) бодуулах
алгоритм:

Блок-схем                Тайлбар
                         1. Алгоритм эхлэнэ.

                         2.    x=-5 гэсэн утга авна.

                         3.    Хэрэв x 5 байвал:

                                   [1] y=-5 гэсэн утга авна;

                                   [2] Хэрэв y 5 байвал:
                                          [[1]] z=x2+y2 томъѐог бодно;

                                          [[2]] z-ийн утгыг дэлгэцэнд хэвлэнэ;

                                          [[3]] y-ийн утгыг 1-ээр ихэсгээд [2]-р алхамд
                                          шилжинэ;
                                       үгүй бол:
                                          [3]-р алхамд шилжинэ;
                                   [3] x-ийн утгыг 1-ээр ихэсгээд 3-р алхамд шилжинэ.
                              үгүй бол:
                                   4-р алхамд шилжинэ.

                         4.    Алгоритм төгсөнө.

Алгоритм хэрхэн ажиллаж байна вэ? x нь -5-аас +5 хүртэлх 11 утга авах бүрд y нь -5-аас +5
хүртэлх утга авч байна. Өөрөөр хэлбэл x-ийн нэг утганд y-ийн 11 утга харгалзаж байна.
Иймээс дотоод давталтын бие болох [[1]], [[2]] үйлдлүүд (блок-схемийн тайлбарыг хар)
11*11=121 удаа хийгдэх нь ээ. Энд манай 2 хэмжээст функц 11 мөртэй, 11 баганатай хүснэгт
болон гарч ирж байгаа юм. Хэрэв график байгуулвал гадаргуу зурагдах болно.

More Related Content

What's hot

Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
Muuluu
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
Badral Khurelbaatar
 
Салаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогуудСалаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогууд
Баярсайхан Л
 
алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогууд
zulaazul_0603
 
U.cs101 алгоритм программчлал-4-zasah
U.cs101   алгоритм программчлал-4-zasahU.cs101   алгоритм программчлал-4-zasah
U.cs101 алгоритм программчлал-4-zasah
Badral Khurelbaatar
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогууд
Баярсайхан Л
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
Enkh Gvnj
 
Algoritmiin bodloguud
Algoritmiin bodloguudAlgoritmiin bodloguud
Algoritmiin bodloguud
shulam
 
алгоритм
алгоритмалгоритм
алгоритм
baterden
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
swf_cloud
 

What's hot (20)

Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Algoritm
AlgoritmAlgoritm
Algoritm
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
 
салаалсан алгоритм
салаалсан алгоритмсалаалсан алгоритм
салаалсан алгоритм
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
Салаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогуудСалаалсан алгоритмын бодлогууд
Салаалсан алгоритмын бодлогууд
 
Smallbasic
SmallbasicSmallbasic
Smallbasic
 
алгоритмын бодлогууд
алгоритмын бодлогуудалгоритмын бодлогууд
алгоритмын бодлогууд
 
U.cs101 алгоритм программчлал-4-zasah
U.cs101   алгоритм программчлал-4-zasahU.cs101   алгоритм программчлал-4-zasah
U.cs101 алгоритм программчлал-4-zasah
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогууд
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
Лекц 2 (Блок схем)
Лекц 2 (Блок схем)Лекц 2 (Блок схем)
Лекц 2 (Блок схем)
 
Algoritmiin bodloguud
Algoritmiin bodloguudAlgoritmiin bodloguud
Algoritmiin bodloguud
 
Programchlaliin c hel
Programchlaliin c helProgramchlaliin c hel
Programchlaliin c hel
 
алгоритм
алгоритмалгоритм
алгоритм
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
мэдээллийн технологи 1 тест
мэдээллийн технологи 1 тестмэдээллийн технологи 1 тест
мэдээллийн технологи 1 тест
 
Лекц №1
Лекц №1Лекц №1
Лекц №1
 
Lecture1
Lecture1Lecture1
Lecture1
 

Similar to алгоритмчлалын үндэс (20)

алгоритм
алгоритмалгоритм
алгоритм
 
онол
онолонол
онол
 
U.it101 lab 4
U.it101 lab 4U.it101 lab 4
U.it101 lab 4
 
U.it101 lab 4
U.it101 lab 4U.it101 lab 4
U.it101 lab 4
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
 
Mathcad beginning-part1
Mathcad beginning-part1Mathcad beginning-part1
Mathcad beginning-part1
 
Pp Lect6
Pp Lect6Pp Lect6
Pp Lect6
 
Pp Lect6 1
Pp Lect6 1Pp Lect6 1
Pp Lect6 1
 
9 10 объект хандлагат анализ (динамик ойлголт)
9 10 объект хандлагат анализ (динамик ойлголт)9 10 объект хандлагат анализ (динамик ойлголт)
9 10 объект хандлагат анализ (динамик ойлголт)
 
10g boloroo2
10g boloroo210g boloroo2
10g boloroo2
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
Excel 2007
Excel 2007Excel 2007
Excel 2007
 
Lec8 break
Lec8 breakLec8 break
Lec8 break
 
Lab10 2-it101
Lab10 2-it101Lab10 2-it101
Lab10 2-it101
 
Gosexem asuult 09
Gosexem asuult 09Gosexem asuult 09
Gosexem asuult 09
 
лекц4
лекц4лекц4
лекц4
 
бие даалт 1,2 бат өлзий
бие даалт 1,2  бат өлзийбие даалт 1,2  бат өлзий
бие даалт 1,2 бат өлзий
 
If presentation
If presentationIf presentation
If presentation
 
Lecture2
Lecture2Lecture2
Lecture2
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 

алгоритмчлалын үндэс

  • 1. Алгоритм гэж юу вэ? Програмыг компьютерт шууд бичиж оруулах ѐстой юу? Тэгж болно. Гэхдээ, програмчлалд анхлан суралцаж буй хүний хувьд эхлээд бичих гэж буй програмынхаа загвар буюу бүдүүвчийг зохиогоод дараа нь түүнийхээ дагуу програмаа бичих нь илүү үр дүнтэй гэж мэргэжилтнүүд үздэг. Ийм загвар буюу төлөвлөөг алгоритм гэдэг. Эсвэл “алгоритм бол тодорхой үр дүн гаргаж авахын тулд дараалан гүйцэтгэх ѐстой үйлдлүүдийн жагсаалт юм”. Эсвэл “алгоритм бол тодорхой үр дүн гаргаж авахын тулд баримтлах ерөнхий дүрэм юм”. Алгоритм зохиох процессыг мэдээж алгоритмчлал гэнэ. Ер нь хүн ямар ч ажлыг хийхдээ эхлээд төлөвлөгөө гаргадаг шүү дээ. Тэрэнтэй л адил гэсэн үг. Алгоритм гэдэг үг өөрөө, 783- 850 онд амьдарч байсан дундад азийн гарамгай тоочин Мухаммед ибн Муса аль-Хорезми хэмээх хүний нэрний гажсан хувилбар болох Алхори[ө]мы (Algorithmi) гэсэн үгээс гаралтай ажээ. Эргэн тойрны амьдралд дүүрэн алгоритм байна. Ж.нь хот доторх автомашины жолооч гэрлэн дохионд захирагдах дүрмийг баримталдаг. Түүнийг нь: 1. Хэрэв шар гэрэл асвал гэрлэн дохио солигдох (улаан эсвэл ногоон) гэж буй тул анхааралтай бай 2. Хэрэв улаан гэрэл асвал зогс 3. Хэрэв ногоон гэрэл асвал хөдөл хэмээн томъѐолъѐ. Энэ бол гэрлэн дохиод захирагдах алгоритм юм. Гэхдээ энэ алгоритмын хувьд үйлдлийн эрэмбэ зайлшгүй чухал биш. Учир нь жолооч замын гэрлэн дохиотой хэсгээр явж байгаад, чухам ямар гэрэл асч байна вэ (өөрөөр хэлбэл ямар нөхцөл биелж байна вэ гэдгийг шалгаад) түүнд тохирсон алхмыг дээрх алгоритмаас сонгож гүйцэтгэнэ. Тэгвэл (З+3)*(3+4)-23 гэсэн илэрхийллийг бодохын тулд: 1. 3 дээр 3-ыг нэмэх (=6) 2. 3 дээр 4-ийг нэмэх (=7) 3. 6-г 7-оор үржүүлэх (=42) 4. 2-ийг куб зэрэгт дэвшүүлэх (=8) 5. 42-оос 8-ыг хасах гэсэн алгоритмыг баримтлана. Энд бол үйлдлийн дараалал чухал байна. Түүнийг зөрчвөөс зөв хариуг гаргаж чадахгүй. Орчлон ертөнц ч өөрийн алгоритмтай. Дэлхий Нарыг дунджаар 150 сая км-ийн радиустай “тойргоор” 1 жилд бүтэн тойрно. Дэлхий өөрийн тэнхлэгийг 24 цагт бүтэн тойрно. Бүх бодис
  • 2. эгэл бөөмсөөс тогтоно г.м. Эдгээр алгоритмууд байгалийн хуулиудын тусламжтайгаар програмчлагдаж, цаг ямагт мөрдөгдөж байдаг. Тэгвэл алгоритм ба компьютерын програмын хооронд ямар ялгаа байна вэ гэсэн асуулт тавья. Програм – энэ бол удирдамж, алгоритм – энэ ч гэсэн бас удирдамж байна. Тиймээ. Яг үнэндээ эдгээрийн хооронд зарчмын ялгаа байхгүй юм. Учир нь програмчлалын хэл дээр зохиосон алгоритмыг програм гэдэг ажээ. Компьютер бол алгоритмыг гүйцэтгэгч, хүн бол алгоритмыг зохиогч юм. Гүйцэтгэгчид алгоритмын зорилго ямар ч хамаагүй бөгөөд зөвхөн зохиогч л үүнийг мэдэж байдаг. Гэхдээ гүйцэтгэгч нь зохиогчийн тавьсан зорилгыг хангалттай сайн биелүүлдэг байхын тулд алгоритм сайн зохиогдсон байх нь мэдээж. Тэгвэл, сайн алгоритм дараах үндсэн чанаруудыг хангасан байх ѐстой гэнэ: 1. Алгоритм нь дараалсан алхмууд буюу үйлдлүүдээс тогтсон байх – алгоритм нь аливаа даалгаврыг гүйцэтгэх төгсгөлөг тооны алхмуудаас бүрдсэн байх 2. Алгоритмын алхам бүр оновчтой, тодорхой байх – алгоритмын алхам бүрт чухам ямар үйлдэл хийгдэх нь тодорхой байх 3. Алгоритмд орох өгөгдөл, гарах үр дүн байх ѐстой 4. Алгоритм нь үр дүнтэй (ашигтай) байх – алгоритм нь төгсгөлөг алхмын дараа даалгаврыг биелүүлж дуусгасан байх, хэрэв энэ нь боломжгүй бол даруй зогсдог байх; Өөрөөр хэлбэл ямар нэг тодорхой шийдэлд хүрдэг байх г.м. Алгоритмын гүйцэтгэх даалгаврыг заримдаа бодлого (task) хэмээн нэрийддэг. Тиймээс “мэдээлэл боловсруулах” гэдгийг “бодлого бодох” гэсэн үгээр сольж болно. Алгоритмын график дүрслэл буюу блок-схем Компьютерт зориулсан програмын алгоритмыг хэрхэн бичдэг вэ? Өөрөөр хэлбэл тэмдэглэгээний ямар хэлбэрүүдийг ашиглан алгоритмыг зохиодог вэ? Энд дараах хэлбэрүүд байна: 1. Үгээр илэрхийлэх (эх хэлээр бичих) 2. График дүрслэл (геометрын объектууд ашиглан илэрхийлэх) 3. Хуурмаг код (эх хэл, програмчлалын хэл, математикийн үндсэн тэмдэглэгээнүүд г.м.ийн холимог ямар нэгэн зохиомол, хагас дүрэмжсэн “хэл” ашиглах) 4. Програм (програмчлалын хэл дээр бичих) Эхний хоѐр хэлбэртэй танилцъя.
  • 3. Хоѐр натурал тооны хамгийн их ерөнхий хуваагчийг (ХИЕХ) олох Евклидийн алгоритмыг үгээр илэрхийлвэл: 1. Хоѐр тоо өг 2. Хэрэв хоѐр тоо тэнцүү бол аль нэгийг нь хариу болгон аваад алгоритмыг төгсгөх, үгүй бол 3-р алхамд шилжих 3. Хоѐр тооны аль ихийг нь тодорхойлох 4. Их тоог их тоо, бага тооны ялгавраар солих 5. 2-р алхамд шилжих гэсэн хэлбэртэй болно. Энэ алгоритм хоѐр тоо тэнцүү болох хүртэл хийгдэж, эцэст нь ХИЕХ- ийг гаргаж өгнө. Хатуу тогтсон дүрэм байхгүй, нэг өгүүлбэрийг олон янзаар тайлбарлаж болдог, хэтэрхий нуршуу болох магадлалтай г.м. шалтгааны улмаас үгээр илэрхийлэх хэлбэр нь тийм ч өргөн дэлгэрээгүй ажээ. Бид хичээлдээ график дүрслэлийн аргыг ашиглах болно. График дүрслэлээр, алгоритмыг өөр хоорондоо холбогдсон геометр объектуудын дараалал хэлбэрээр илэрхийлдэг. Ийм дүрслэлийг алгоритмын блок-схем хэмээн нэрийднэ. Блок- схемийг бүрдүүлэгч объектуудыг үйлдлийн блокууд гэнэ. Учир нь блок болгон тодорхой нэг эсвэл хэд хэдэн үйлдлийг төлөөлдөг. Тиймээс блокуудыг хооронд нь холбосон шугамыг шилжилтийн шугам гэх бөгөөд энэ нь үйлдэл хийгдэх дарааллыг тодорхойлж өгдөг. Шугамыг заримдаа сумтай, заримдаа сумгүй зурдаг. Бидний хувьд сумтай зурах нь илүү тохиромжтой. Шилжилтийн шугам, блокуудыг нийтэд нь блок-схемийн элементүүд гэдэг. Ямар үйлдлийг илэрхийлж буйгаас хамааран блок-схемийн нэлээн хэдэн элемент байна. Бидний байнга хэрэглэх элементүүд бол: Элементийн Элементийн нэр Элемент Төлөөлөх үйлдэл нэр (англи) (монголчилсон) Алгоритмын Эхлэл эсвэл Төгсгөл Terminator “Эхлэл”/”Төгсгөл” (дотор нь бичнэ) Алгоритм гүйцэтгэгч буюу компьютерт гаднаас өгөгдөл Manual Input “Оролт” оруулах (дотор нь өгөгдлөө бичнэ) Үр дүнг хэрэглэгчид гаргаж Display “Гаралт” үзүүлэх (дотор нь үр дүнг бичнэ)
  • 4. Оролт-Гаралтын үйлдлийн Data “Оролт”/”Гаралт” ерөнхий тэмдэглэгээ (дотор нь бичнэ) Өгсөн нөхцлийг шалгаж шийдвэр гаргах буюу салаа замын аль Decision “Нөхцөл шалгах” нэгээр нь явах (дотор нь нөхцлөө бичнэ) “Параметрт Preparation Давталт буюу циклийн эхлэл давталт” Дээрхүүдээс бусад үйлдлүүд: Process “Процесс” арифметик үйлдлүүд ба утга олгох г.м. (дотор нь бичнэ) Шилжилтийн Шилжилтийн шугам шугам Тухайн хуудсанд багтахгүй байгаа блок схемийг өөр хуудаснаас үргэлжлүүлэхдээ Connector “Залгаас” хоѐр хуудасны залгаасыг тэмдэглэх (дотор нь тэмдгээ тавина) зэрэг болно. Эдгээрийг хэрхэн ашиглаж буй жишээг үзье. Өмнө дурдсан Евклидийн алгоритмын блок-схемийг зурвал: гэсэн байдалтай болох юм. Блок руу орж буй сумыг оролт, гарч буй шугам буюу сумыг гаралт гэдэг. Ихэнх элемент нэг оролт, нэг гаралттай байдаг бол харин “Нөхцөл шалгах” элемент нэг оролттой, хоѐр
  • 5. гаралттай байна. Хоѐр гаралтанд нь үнэн ба худал гэсэн утгууд харгалзана. Заримдаа үнэн гэдгийг 1-ээр, худал гэдгийг 0-ээр илэрхийлнэ. Заримдаа бас “тийм”, “үгүй” гэсэн үгээр илэрхийлдэг. Алгоритмын биелэлт ямагт сумын дагуу чиглэлд явагдана. “Оролт” элемент нь компьютерын гараас (keyboard) өгөгдөл оруулах үйлдлийг илэрхийлдэг бол “Гаралт” элемент компьютерын дэлгэцэнд (display) үр дүнг гаргах үйлдлийг илэрхийлнэ. Блок-схемд зөвхөн нэг “Эхлэл”, нэг “Төгсгөл” байна. “Оролт”, “Гаралт”, “Процесс” зэрэг элементийн дотор нэг буюу түүнээс олон харгалзах үйлдлийг бичиж болно. Өөрөөр хэлбэл хэд хэдэн дараалсан “Оролтыг” нэг “Оролтонд”, хэд хэдэн дараалсан “Гаралтыг” нэг “Гаралтанд”, хэд хэдэн дараалсан “Процессыг” нэг “Процесс”дотор нэгтгэн бичиж болно. Өөр нэгэн жишээ. Өгсөн тооны абсолют хэмжигдхүүнийг олох алгоритмыг зуръя. Түүний блок- схемийг хажуугийн зурагт харуулав. Энэ алгоритм яаж ажиллах вэ? Үгээр тайлбарлавал: 1. Нэг тоо өг 2. Хэрэв уг тоо сөрөг байвал абсолют хэмжигдхүүн нь түүний эсрэг тоо болно, үгүй бол (тоо эерэг үед) абсолют хэмжигдхүүн нь тэр тоо өөрөө байна 3. Абсолют хэмжигдхүүний утгыг дэлгэцэнд хэвлэж гаргана 4. Төгсгөл гэж томъѐологдох ажээ. Алгоритмын үндсэн бүтцүүд Элементүүд нийлж тодорхой бүтцийг үүсгэдэг. Эдгээр бүтцийг алгоритмын үндсэн бүтэц (АҮБ) хэмээн нэрийднэ. Ингэснээр алгоритмыг зөвхөн эдгээр бүтцээс тогтсон мэтээр авч үзэх боломжтой. АҮБ-ийн гол онцлог бол тэдгээр нь зөвхөн нэг оролт, нэг гаралттай байна. 3 төрлийн АҮБ байдаг. Энэ нь Процесс, Салаалалт, Давталт юм. Салаалалт бүтэц гүйцэд ба гүйцэд бус гэсэн 2 янз байдаг. Давталт бүтэц нь While (Байхад), Until (Хүртэл), Параметрт гэсэн 3 хэлбэртэй байна. Эд бүгдийн схемийг дараах хүснэгтэд харууллаа. Салаалалт Процесс Гүйцэд Гүйцэд бус
  • 6. Давталт While Until Параметрт Дээрх схемүүдэд буй “Урсгал” бол нэг юм уу эсвэл бүлэг үйлдлийг илэрхийлнэ. “Нөхцөл” бол ямар нэгэн логик илэрхийлэл байна. Параметрт давталтын схемд буй “ДП” – Давталтын Параметр, “АУ” - давталтын параметрын авах Анхны Утга, “ЭУ” – давталтын параметрын авах Эцсийн Утга, “АЛХАМ” – давталтын параметрын утгын өөрчлөгдөх Алхам юм. Салаалалт бүтэц бүхэлдээ болон Давталт бүтцийн эхний хоѐр төрөл нь “Нөхцөл шалгах элементээс” тогтсон байна. Алгоритмд Салаалалт орж ирснээр түүний хувьд хоѐр салаа зам бий болно. Чухам алинаар нь явах нь нөхцөл биелэх эсэхээс хамаарна. Алгоритмд Давталт орж ирснээр нэг юм уу эсвэл бүлэг үйлдлийг олон дахин давтах боломжтой болдог. Ингэж давтагдах хэсгийг давталтын бие (bodyofcycle) хэмээн нэрийддэг. While төрлийн давталт, нөхцөл биелж л байвал циклээ үргэлжлүүлнэ. Тэгж байгаад биелэхээ болимогц давталт хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилжинэ. Until төрлийн давталт, нөхцөл биелэх хүртэл л циклээ үргэлжлүүлж байгаад биелмэгц л давталт хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилждэг. Параметрт давталтын хувьд, давталтын параметр хэмээн нэрлэгдэх нэгэн хэмжигдхүүний авах утгын тоогоор давталтыг хийдэг. Хэрэв параметр нэгэнт эцсийн утгаа авсан бол давталт хийгдэхээ больж, алгоритмын биелэлт дараагийн бүтэц рүү шилжинэ.
  • 7. Тиймээс While, Until төрлийн давталтыг Нөхцөлт давталт, харин Параметрт давталтыг Тоолуурт давталт гэж нэрлэдэг. Нөхцөлт давталтын хувьд давталтын тоо урьдаас мэдэгдэхгүй бол Тоолуурт давталтын тоог урьдчилан тодорхойлж болно. Тэр нь: Nдавталт = |ЭУ - АУ| / АЛХАМ + 1 гэж олддог. Алгоритмын төрлүүд Алгоритмыг төрлөөр нь шугаман ба шугаман бус гэж хоѐр ангилдаг. Шугаман алгоритм (Linearalgorithms) Зөвхөн Процесс бүтцээс тогтсон алгоритм нь шугаман алгоритм болно. Учир нь түүний биелэлт зөвхөн нэг чиглэлд, дээрээс доошоо, эхлэлээс төгсгөл рүү шууд “урсана”. Шугаман алгоритмын жишээнүүд авч үзье. Жишээ 1. Өмнө үзсэн (З+3)*(3+4)-23 илэрхийллийг бодох алгоритм: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. 3 дээр 3-ыг нэмээд a-д утга болгож өгнө. 3. 3 дээр 4-ийг нэмээд b-д утга болгож өгнө. 4. 23-ийг олоод с-д утга болгож өгнө. 5. a-г b-ээр үржүүлж, с-г нэмэхэд гарах хариуг d-д утга болгож өгнө. 6. d-ийн утгыг дэлгэцэнд хэвлэж гаргана. 7. Алгоритм төгсөнө. Жишээ 2. Өгсөн x-ийн хувьд y=5*x2+3*x функцыг бодох алгоритм: Блок-схем Тайлбар
  • 8. 1. Алгоритм эхлэнэ. 2. x-ийн утгыг гаднаас оруулж өгнө. 3. 5*x2+3*x илэрхийллийг бодоод гарах хариуг y-д утга болгож өгнө. 4. y-ийн утгыг дэлгэцэнд хэвлэж гаргана. 5. Алгоритм төгсөнө. Энд, гаднаас тоо оруулмагц тэр нь x-ийн утга болон очих ажээ. Тэгээд бодолт хийгдэж, үр дүн дэлгэцэнд хэвлэгдэж байна. Жишээ 3. Гурвалжны талууд a, b, c болно. Дараах: cosA = (b2 + c2 – a2)/ (2 * b * c) sinB = (b * sinA) / a C = 180o – (A + B) томъѐонуудын тусламжтайгаар түүний A, B, C өнцгүүдийг тодорхойл (градусаар). Санамж: arccos, arcsin тригонометрийн урвуу функцуудын утга радианаар илэрхийлэгддэг гэдгийг сануулъя. Энэ бодлогын алгоритм нь: Блок-схем Тайлбар
  • 9. 1. Алгоритм эхлэнэ. 2. a-ийн утгыг гаднаас оруулж өгнө. 3. b-ийн утгыг гаднаас оруулж өгнө. 4. c-ийн утгыг гаднаас оруулж өгнө. 5. 180/3.14-ийг k-д утга утга болгож өгнө. 6. arccos[(b2 +c2–a2)/(2*b*c)] томъѐог бодоод гарах хариуг A_rad-д утга болгож өгнө. 7. arcsin(b*sinA_rad/a) томъѐог бодоод гарах хариуг B_rad –д утга болгож өгнө. 8. A_rad-ыг k-аар үржүүлээд A_grad-д утга болгож өгнө. 9. B_rad-ыг k-аар үржүүлээд B_grad-д утга болгож өгнө. 10. C_grad=180o–(A_grad+B_grad) гэжолно. 11. A_rad-ынутгыгдэлгэцэндхэвлэжгаргана. 12. B_rad-ынутгыгдэлгэцэндхэвлэжгаргана. 13. C_grad-ынутгыгдэлгэцэндхэвлэжгаргана. 14. Алгоритм төгсөнө. Энд, градус=радиан*180/π=радиан*k гэсэн томъогоор радианаар олдсон өнцгийн утгуудыг (A_rad, B_rad, C_rad) градуст шилжүүлж (A_grad, B_grad, C_grad) байна. Жишээ 4. Хүнээс нэрийг нь асуугаад, дараа нь түүнийг мэндчилэх алгоритм: Блок-схем Тайлбар
  • 10. 1. Алгоритм эхлэнэ. 2. Дэлгэцэнд “Чамайг хэн гэдэг вэ?” гэсэн өгүүлбэрийг хэвлэж гаргана. 3. Хэн нэгэн хүний нэрийг гаднаас оруулж name-д утга болгож өгнө. 4. Дэлгэцэнд “Сайн уу” гэсэн үг хэвлээд араас нь name-ийн утгыг хэвлэж гаргана. 5. Алгоритм төгсөнө. Энэ жишээ өмнөх 3 жишээнээс ялгаатай нь ямар нэг тооцоо хийлгүй, зөвхөн хэрэглэгчтэй хялбар харилцан яриа үүсгэж байна. Алгоритм ажиллангуут хүний нэрийг асууна. Гараас нэр оруулмагц дэлгэцэнд мэндчилгээ хэвлэгдэх болно. Тухайлбал Бат гэж оруулахад “Сайн уу, Бат” гэж гарна. Шугаман бус алгоритм (Nonlinearalgorithms) Алгоритм нь салаалалт юм уу давталт агуулсан бол түүнийг шугаман бус алгоритм гэнэ. Учир нь түүний биелэгдэх чиглэл буюу “урсгал” нь мөчирлөсөн юм уу мушгирсан байдалтай болдог. Тухайн тохиолдолд шугаман бус алгоритм нь зөвхөн салаалалт, эсвэл зөвхөн давталт агуулсан байх бол ерөнхий тохиолдолд салаалалт+давталт агуулсан байна. Жишээ алгоритмууд үзье. Салаалалт. Жишээ 1. Өгсөн тооны урвууг олдог алгоритм: Блок-схем Тайлбар
  • 11. 1. Алгоритм эхлэнэ. 2. x-ийн утгыг гаднаас оруулна. 3. x 0 нөхцөл биелж буй эсэхийг шалгаад хэрэв тийм байвал: [1] 1/x-ийг олж y-д утга болгон өгнө; [2] y-ийн утгыг дэлгэцэнд хэвлэж гаргаад 4-р алхамд шилжинэ; үгүй бол: 4-р алхамд шилжинэ. 4. Алгоритм төгсөнө. Энэ алгоритм бол гүйцэд бус салаалалтын жишээ юм. Учир нь “Нөхцөл шалгах” элементийн хоѐр гаралтын зөвхөн нэгэнд нь тодорхой үйлдэл харгалзаж байна. Гаднаас оруулсан тоо 0- ээс ялгаатай байвал л түүний урвууг бодож, дэлгэцэнд гаргах бөгөөд хэрэв 0 байвал бодолт хийхгүй, үр дүн хэвлэхгүй, алгоритм шууд дуусна. Жишээ 2. Өмнөх алгоритмыг дараах байдлаар зуръя: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. x-ийн утгыг гаднаас оруулна. 3. x 0 нөхцөл биелж буй эсэхийг шалгаад Хэрэв тийм байвал: [1] 1/x-ийг олж y-д утга болгон өгнө; [2] y-ийн утгыг дэлгэцэнд хэвлэж гаргаад 4-р алхам руу шилжинэ; үгүй бол: “Хязгааргүй!” гэсэн мэдэгдлийг дэлгэцэнд гаргаад 4-р алхам руу шилжинэ. 4. Алгоритм төгсөнө. Харин энэ алгоритм бол гүйцэд салаалтын жишээ юм. Учир нь “Нөхцөл шалгах” элементийн хоѐр гаралтанд хоѐуланд нь тодорхой үйлдлүүд харгалзаж байна. Гаднаас оруулсан тоо 0-ээс ялгаатай байвал түүний урвууг бодож, дэлгэцэнд гаргаад алгоритм дуусна. Эсрэгээр 0 байвал бодолт хийлгүйгээр дэлгэцэнд “Хязгааргүй!” гэсэн үг хэвлээд алгоритм дуусна.
  • 12. Салаалалт бүтэц дотроо бас Салаалалт бүтцийг агуулсан байж болно. Өөрөөр хэлбэл нөхцөл шалгах үйлдлийн хоѐр гаралтын аль нэгэнд, эсвэл хоѐуланд нь дахиад нөхцөл шалгах үйлдэл хийгдэж болно. Үгүй яах вэ дээ, модны мөчир дахиад мөчирлөж салаалдагтай л адил гэх үү дээ. Ийм алгоритмын жишээтэй танилцъя. Жишээ 3. Бат, Болд хоѐрын насыг нь асуугаад, тэдгээрийг оруулмагц хэн нь насаар ах болохыг мэдээлж гаргадаг алгоритм: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. Дэлгэцэнд “Бат хэдэн настай вэ?” гэж гаргана. 3. Батын насыг гаднаас age1-т утга болгож оруулна. 4. Дэлгэцэнд “Болд хэдэн настай вэ?” гэж гаргана. 5. Болдын насыг гаднаас age2-т утга болгож оруулна. 6. age1=age2 нөхцөл биелж буй эсэхийг шалгаад хэрэв тийм байвал: “Бат Болд хоѐр нас чацуу” гэж дэлгэцэнд гаргаад 7-р алхамд шилжинэ; үгүй бол: age1>age2 нөхцөл биелж буй эсэхийг шалгаад хэрэв тийм байвал “Бат насаар ах нь” гэж дэлгэцэнд гаргаад 7-р алхамд шилжинэ; үгүй бол: “Болд насаар ах нь” гэж дэлгэцэнд гаргаад 7-р алхамд шилжинэ. 7. Алгоритм төгсөнө.
  • 13. Ингэж давхар салаалалт ашиглан age1<age2, age1=age2, age1>age2 гэсэн 3 нөхцлийг хоѐр Салаалалт бүтцээр буюу хоѐр “Нөхцөл шалгах” элементийн тусламжтайгаар тооцож байгаа юм. Логик холбоос. Бидний үзсэн дээрх жишээнүүдэд, “Нөхцөл шалгах” элементийн тоо дотор нь бичигдсэн нөхцлийн тоотой тэнцүү байна. Өөрөөр хэлбэл нэг нөхцөл шалгадаг элемент дотор нэг л нөхцөл бичигдсэн байна. Тэгвэл And(Ба), Or(Буюу) гэсэн логик холбоосуудыг хэрэглэн нэг нөхцөл шалгадаг элемент дотор хоѐр буюу түүнээс олон нөхцлийг бичиж болдог. Логик холбоосыг хоѐр нөхцлийн дунд тавьдаг. And холбоос нь түүний хоѐр талын нөхцөл хоѐулаа үнэн тохиолдолд үнэн гэсэн хариу өгөх бөгөөд аль нэг нөхцөл л худал болчихвол худал гэсэн хариу гаргана. Тиймээс энэ холбоосыг логик үржилт хэмээн нэрийднэ. Or холбоос нь түүний хоѐр талын нөхцлийн аль нэг нь үнэн байвал үнэн гэсэн хариу өгөх бөгөөд хоѐр талын нөхцөл хоѐулаа худал тохиолдолд л худал гэсэн хариу гаргана. Тиймээс энэ холбоосыг логик нэмэлт хэмээн нэрийднэ. Логик холбоос хэрэглэж буй тохиолдолд гол анхаарах зүйл бол Ба, Буюугийн ялгааг зөв ойлгох явдал юм. Дараах жишээнүүдийг үзье. Жишээ 4. Өгсөн a тоо [0,20] завсарт байвал түүнийг 2-оор үржүүлэх, энэ завсарт орохгүй бол 2-оор нэмэх алгоритм: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. a-ын утгыг гаднаас оруулна. 3. Хэрэв a 0 ба a 20 байвал: a-ийнутгыг 2 дахинихэсгээд 4- ралхамдшилжинэ; үгүй бол: a-ийн утгыг 2-оор ихэсгээд 4-р алхамд шилжинэ. 4. a-ын утгыг дэлгэцэнд хэвлэж гаргана. 5. Алгоритм төгсөнө. Энэ жишээнд, a тоо [0,20] завсарт орших уу гэсэн нөхцлийг “(a>=0) And (a<=20)” гэж бичсэн байна. Мэдээж a 0 ба a 20 үед л a [0,20] байна гэж үзнэ шүү дээ. Уг илэрхийлэл хэзээ худал
  • 14. байх вэ? And холбоос түүний хоѐр талын аль нэг нөхцөл л худал бол худал гэсэн хариу гаргадгийг дээр дурдсан. Тиймээс, гаднаас оруулсан утга 0-ээс бага юм уу 21-ээс их болчихвол худал болно. Түүнчлэн логик холбоос ашигласны ачаар блок-схем зөвхөн ганц дан Салаалалт бүтцийг агуулжээ. Хэрэв And оруулаагүй бол бид давхар салаалалт хийх байсан. Жишээ 5. Өмнөх жишээний бодлогыг бид дараах байдлаар томъѐолж болно. Өгсөн a тоо [0,20] завсрын гадна байвал түүнийг 2-оор ихэсгэх, энэ завсарт орох бол 2-оор үржүүлэх алгоритм: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. a-ын утгыг гаднаас оруулна. 3. Хэрэв a<0 буюу a>20 байвал: a-ийнутгыг 2-оорихэсгээд 4- ралхамдшилжинэ; үгүй бол: a-ийн утгыг 2 дахин ихэсгээд 4-р алхамд шилжинэ. 4. a-ын утгыг дэлгэцэнд хэвлэж гаргана. 5. Алгоритм төгсөнө. Энэ жишээнд, a тоо [0,20] завсрын гадна орших уу гэсэн нөхцлийг “(a<0) Or (a>20)” гэж бичсэн байна. Мэдээж a<0 юм уу a>20 үед л a [0,20] байна гэж үзнэ шүү дээ. Уг илэрхийлэл хэзээ худал байх вэ? Or холбоос түүний хоѐр талын нөхцөл хоѐулаа худал бол худал гэсэн хариу гаргадгийг дээр дурдсан. Тиймээс, гаднаас оруулсан утга 0-оос их буюу тэнцүү ба 20- иос бага буюу тэнцүү тохиолдолд худал гэсэн хариу гарна. Давталт. Алгоритмд яагаад давталт орж ирдэг вэ? Өгсөн бодлогыг хялбар аргаар түргэн шуурхай бодохын тулд. Гэхдээ алгоритмдаа давталт ашиглах хэрэгцээ шаардлага байгаа эсэхийг тухайн бодлогын нөхцөл тодорхойлно. Ж.нь ийм бодлого байна. “2-оос 10 хүртэлх бүх тэгш тоог дэлгэцэнд хэвлэ”. Үүнийг бид ямар ч давталт ашиглалгүй зүгээр шугаман алгоритм зохион гүйцэтгэж болно. Ингэхдээ гаралтын элементийг 5 удаа эсвэл нэг удаа ашиглана:
  • 15. За тэгвэл, “2-оос 200 хүртэлх бүх тэгш тоог дэлгэцэнд хэвлэ” гэсэн бол яах вэ? Дээрх шигээр, гэхдээ 100 Процесс блокийг доош цувуулах юм уу нэг Процесс дотор 100 ширхэг тоог цувуулан бичиж болно нь л доо. Харин зарцуулах хөдөлмөр маань цаг үрсэн, зурагдах блок-схем маань сунжирсан урт “болхи” болно. Энэ тохиолдолд давталт ашиглах нь тохиромжтой. Давталтын 3 төрөл байдгийг бид өмнөх сэдвээс мэдэж авсан. Одоо дээрх бодлогыг эдгээр төрөл бүрээр хэрхэн гүйцэтгэх жишээтэй танилцъя. Жишээ 1. 2-оос 200 хүртэлх бүх тэгш тоог дэлгэцэнд хэвлэх алгоритмд While төрлийн нөхцөлт давталт ашигласан байдал: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. k гэсэн хувьсагчид 2 гэсэн утга онооно. 3. k-ийн утга 200-аас хэтрээгүй эсэхийг шалгаад хэрэв тийм байвал: [1] k-ийн утгыг дэлгэцэнд хэвлэж гаргана; [2] k-ийн утгыг 2-оор ихэсгээд 3-р алхамд шилжинэ; үгүй бол: 4-р алхамд шилжинэ. 4. Алгоритм төгсөнө.
  • 16. Алгоритм яаж ажиллаж байна вэ? Хамгийн эхлээд 2 гэсэн утгатай k гэсэн хувьсагчийг 200- аас хэтрээгүй утгатай байна уу гэдгийг шалгана. 2<200 учраас 1 гаралтаар явна. Дэлгэцэнд 2 гэж гарна. Дараа нь k-г 2-оор ихэсгэнэ. Дахиад k-ийн утга 200-аас хэтрээгүй эсэхийг шалгана. Мэдээж 4<200 учраас 1 гаралтаар явж, дэлгэцэнд 4 гэж гарна. k=6 болно. Дахиад нөхцөл шалгана. 6<200 учраас мөн л 1 гаралтаар явна. Харгалзах үйлдлүүд хийгдэнэ. Иймэрхүү маягаар, k 200 байгаад л байвал, түүний агшин зуурын утгыг хэвлэн, 2-оор ихэсгэх үйлдлүүд давтагдах болно. Давталт хийгдсээр дэлгэцэнд 2 4 6 8 10 12 ... 196 198 гэж гарсны дараа юу болохыг авч үзье. k=k+2 үйлдлээр k-ийн утга 200 болж таарна. Нөхцөл шалгахад 200=200 учраас k нь 200-аас хэтрээгүй гэсэн үг. Тиймээс 1 гаралтаар явж дэлгэцэнд 200 гэж хэвлэгдэнэ. k=202 болно. Дахиад k 200 нөхцлийг шалгана. Мэдээж 202 нь 200-аас эрс их тоо (202>200) учир одоо бол k 200 нөхцөл биелэхгүй. Тиймээс 0 гаралтаар явж, алгоритм шууд төгсөх ажээ. Нөхцөл биелээд байхад давталт хийгдсээр, биелэхээ болимогц давталт хийгдэхээ больчихож байна. Давталтын бие нь энд юу болох вэ? Яг давтагдаж байгаа: k-г хэвлэх, k-г 2-оор ихэсгэх гэсэн үйлдлүүд бол давталтын бие юм. While бүтцийн хувьд давталтын бие нь нөхцөл шалгах элементийн 1 гаралтанд харгалзаж байна. Жишээ 2. Дээрх бодлогын алгоритмд Until төрлийн нөхцөлт давталт ашигласан байдал: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. k гэсэн хувьсагчид 2 гэсэн утга онооно. 3. k-ийн утгыг дэлгэцэнд хэвлэж гаргана. 4. k-ийн утгыг 2-оор ихэсгэнэ. 5. k-ийн утга 200-аас хэтэрсэн эсэхийг шалгаад хэрэв тийм байвал: 6-р алхамд шилжинэ; үгүй бол: 3-р алхамд шилжинэ. 6. Алгоритм төгсөнө. Алгоритм яаж ажиллаж байна вэ? Хамгийн эхлээд k гэсэн хувьсагчийн утгыг хэвлэж байна. Дэлгэцэнд 2 гэж гарна. Дараа нь k-г 2-оор ихэсгэнэ. Тэгээд k-ийн утга 200-аас хэтэрсэн байна уу гэдгийг шалгана. 2>200 биш учраас 0 гаралтаар явж, дэлгэцэнд 4 гэж гарна. k=k+2 болно. Дахиад k-ийн утга 200-аас хэтэрсэн эсэхийг шалгана. Мэдээж 4>200 биш учраас 0 гаралт хийгдэж, дэлгэцэнд 6 гэж гарна. k=8 болно. Дахиад нөхцөл шалгана. Нөхцөл биелэхгүй тул мөн л 0 гаралтаар явна. Харгалзах үйлдлүүд хийгдэнэ. Иймэрхүү маягаар, k>200 болох хүртэл л түүний агшин зуурын утгыг хэвлэж, 2-оор ихэсгэх үйлдлүүд давтагдах болно. Давталт хийгдсээр дэлгэцэнд 2 4 6 8 10 12 ... 196 198 гэж гарсны дараа юу болохыг авч үзье. k=k+2 үйлдлээр k-ийн утга 200 болж таарна. Нөхцөл шалгахад 200=200 учраас k>200
  • 17. болоогүй гэсэн үг. Тиймээс 0 гаралтаар явж дэлгэцэнд 200 гэж хэвлэгдэнэ. Тэгээд k=202 болно. Дахиад k 200 нөхцлийг шалгана. Одоо бол, 202 нь 200-аас эрс их тоо (202>200) учир k>200 нөхцөл биелнэ. Тиймээс 1 гаралтаар явж, алгоритм шууд төгсөх ажээ. Нөхцөл биелэхгүй байхад буюу нөхцөл биелэх хүртэл давталт хийгдсээр, биелмэгц давталт хийгдэхээ больчихож байна. Давталтын бие нь энд юу болох вэ? Давтагдаж байгаа: k-г хэвлэх, k-г 2-оор ихэсгэх гэсэн үйлдлүүд давталтын бие болно. Until бүтцийн хувьд давталтын бие нь нөхцөл шалгах элементийн 0 гаралтанд харгалздаг байна. Жишээ 3. Өмнөх бодлогын алгоритмд Параметрт давталт ашигласан байдал: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. k=2 гэсэн утга авна. 3. Хэрэв k 200 байвал: [1] k-ийн утгыг дэлгэцэнд хэвлэж гаргана; [2] k-ийн утгыг 2-оор ихэсгээд 3-р алхамд шилжинэ; үгүй бол: 4-р алхамд шилжинэ. 4. Алгоритм төгсөнө. Энэ тохиолдолд k гэсэн хувьсагчийг давталтын параметр буюу тоолуур болгон ашиглажээ. Тоолуур [2,200] завсраас 2-оор өөрчлөгдсөн утгуудыг авна. Завсрын доод хязгаарын 2 гэсэн утга бол Анхны Утга, дээд хязгаарын 200 бол Эцсийн Утга, өөрчлөлтийн 2 бол Алхам юм. Түүний шинэ утга бүрт харгалзсан гаралтын үйлдэл хийгдэж байна. Дэлгэцэнд хамгийн эхлээд 2, дараа нь 4, 6, 8, ... г.м. тоонууд гарна. Иймэрхүү маягаар k нь 100 өөр утга авахад түүнийг нь дэлгэцэнд мөн 100 удаа хэвлэнэ. Хамгийн сүүлд k=200 болоход түүнийг дэлгэцэнд гаргасны дараагаар бол тоолуур Эцсийн Утгаасаа хэтэрсэн утга авахгүй учраас алгоритмын дараагийн хэсэг буюу төгсгөл рүү явах болно. Давталтын бие бол одоо зөвхөн k- г хэвлэх ганц үйлдлээс тогтсон байна. Давталтын тоо нь тоолуурын авах утгын тоотой тэнцүү байна. Дээрх 3 жишээнд бид нэг бодлогыг давталтын 3 төрлөөр бодлоо. Гэхдээ практик дээр бол, бодлогын нөхцөл, онцлогоос шалтгаалан аль нэг давталтын хэлбэрийг ашиглах нь илүү тохиромжтой байх тохиолдол гардаг. Чухам алиныг нь вэ гэдгийг алгоритм зохиогч өөрөө оновчтой сонгох ѐстой. Давхар салаалалт гэж байдгийн адилаар давхар давталт бас байж болно. Өөрөөр хэлбэл нэг Давталт бүтцийн доторх давталтын биед мөн Давталт бүтэц оршиж болно гэсэн үг. Хэрэв гадна талын давталт N удаа, дотор талын давталт M удаа хийгдэхээр заагдсан байвал дотор
  • 18. талын давталт нийт N*M удаа хийгдэнэ. Учир нь гадаад давталтын нэг эргэлтэнд дотоод давталт M удаа хийгдэнэ шүү дээ. Одоо давхар давталт ашигласан жишээ үзье. Жишээ 4. z(x,y)=x2+y2 функцыг x [-5,5], y [-5,5] завсарт (x, y нь бүхэл тоо) бодуулах алгоритм: Блок-схем Тайлбар 1. Алгоритм эхлэнэ. 2. x=-5 гэсэн утга авна. 3. Хэрэв x 5 байвал: [1] y=-5 гэсэн утга авна; [2] Хэрэв y 5 байвал: [[1]] z=x2+y2 томъѐог бодно; [[2]] z-ийн утгыг дэлгэцэнд хэвлэнэ; [[3]] y-ийн утгыг 1-ээр ихэсгээд [2]-р алхамд шилжинэ; үгүй бол: [3]-р алхамд шилжинэ; [3] x-ийн утгыг 1-ээр ихэсгээд 3-р алхамд шилжинэ. үгүй бол: 4-р алхамд шилжинэ. 4. Алгоритм төгсөнө. Алгоритм хэрхэн ажиллаж байна вэ? x нь -5-аас +5 хүртэлх 11 утга авах бүрд y нь -5-аас +5 хүртэлх утга авч байна. Өөрөөр хэлбэл x-ийн нэг утганд y-ийн 11 утга харгалзаж байна. Иймээс дотоод давталтын бие болох [[1]], [[2]] үйлдлүүд (блок-схемийн тайлбарыг хар) 11*11=121 удаа хийгдэх нь ээ. Энд манай 2 хэмжээст функц 11 мөртэй, 11 баганатай хүснэгт болон гарч ирж байгаа юм. Хэрэв график байгуулвал гадаргуу зурагдах болно.