Wednesday, March 16, 2016

Мэдээлэл зүйн бодлого Лекц


Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц –  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 цагт бүтэн тойрно. Бүх бодис эгэл бөөмсөөс тогтоно г.м. Эдгээр алгоритмууд байгалийн хуулиудын тусламжтайгаар програмчлагдаж, цаг ямагт мөрдөгдөж байдаг.
Тэгвэл алгоритм ба компьютерын програмын хооронд ямар ялгаа байна вэ гэсэн асуулт тавья. Програм – энэ бол удирдамж, алгоритм – энэ ч гэсэн бас удирдамж байна. Тиймээ. Яг үнэндээ эдгээрийн хооронд зарчмын ялгаа байхгүй юм. Учир ньпрограмчлалын хэл дээр зохиосон алгоритмыг програм гэдэг ажээ. Компьютер бол алгоритмыг гүйцэтгэгч, хүн бол алгоритмыг зохиогч юм. Гүйцэтгэгчид алгоритмын зорилго ямар ч хамаагүй бөгөөд зөвхөн зохиогч л үүнийг мэдэж байдаг. Гэхдээ гүйцэтгэгч нь зохиогчийн тавьсан зорилгыг хангалттай сайн биелүүлдэг байхын тулд алгоритм сайн зохиогдсон байх нь мэдээж. Тэгвэл, сайн алгоритм дараах үндсэн чанаруудыг хангасан байх ёстой гэнэ:
1. Алгоритм нь дараалсан алхмууд буюу үйлдлүүдээс тогтсон байх – алгоритм нь аливаа даалгаврыг гүйцэтгэх төгсгөлөг тооны алхмуудаас бүрдсэн байх
2. Алгоритмын алхам бүр оновчтой, тодорхой байх – алгоритмын алхам бүрт чухам ямар үйлдэл хийгдэх нь тодорхой байх
3. Алгоритмд орох өгөгдөл, гарах үр дүн байх ёстой
4. Алгоритм нь үр дүнтэй (ашигтай) байх – алгоритм нь төгсгөлөг алхмын дараа даалгаврыг биелүүлж дуусгасан байх, хэрэв энэ нь боломжгүй бол даруй зогсдог байх; Өөрөөр хэлбэл ямар нэг тодорхой шийдэлд хүрдэг байх
г.м.

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





Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц –  6 Си программын бүтэц. Пропроцессор оролт гаралтын операторууд.
Операторын тухай
Оператор гэж юу вэ? Өмнөх лекцүүдийг уншиж байхад оператор гэсэн үг хэд хэд тааралдаж байгаа. Тэр үед нь оператор гэж чухам юу болох талаар оновчтой, тодорхой хариулт өгөөгүй билээ. Харин одоо хариулт өгөх гээд үзье.
Үүний тулд Си хэлийг хүний хэл яриатай, тухайлбал монгол хэлтэй харьцуулъя.
Монгол хэлний аливаа үг цагаан толгойн үсэгнүүдээс бүтдэг. Үүний адилаар, Си хэлний цагаан толгой нь Си хэл дээр ямар нэг үг бүтээнэ. Си хэлний үгийг лексем (lexeme эсвэл token) гэнэ. Бид Лекц#3 дээр Си хэлний цагаан толгой ба лексемүүдтэй танилцсан.   
Монгол үгнүүд монгол хэлнийхээ дүрмийн дагуу холбогдож өгүүлбэр бүтээдэг. Үүний адилаар, Си хэлний лексемүүд Си хэлнийхээ дүрмийн дагуу холбогдож өгүүлбэр бүтээдэг. Си хэл дээр бичигдсэн ийм өгүүлбэрийг оператор (statement) гэдэг байна.
Одоо монгол хэл дээр бичигдсэн ямар нэг текстийг (шүлэг, өгүүлэл г.м.) төсөөлөөд үз. Энэ нь хэд хэдэн өгүүлбэрүүдийн дараалал байдаг биз дээ. Үүний адилаар, Си хэл дээр бичигдсэн програмын текст нь хэд хэдэн операторуудын дараалал байна.
Програмд гүйцэтгэж буй  үүргээр нь операторуудыг:
          биелэгдэх оператор (executable statement)
          үл биелэгдэх оператор (non-executable statement)
гэж ангилдаг байна. Ингэж ангилахын учрыг олохын тулд дахиад монгол хэлтэй аналог хийе.
“Түүний нэр Баяр. Тэр 20 настай.” гэсэн хоёр өгүүлбэрийг авч үзье. Эдгээр өгүүлбэрүүд хэн нэгний нэр ба насны талаарх мэдээллийг бусдад өгч, таниулах үүрэгтэй байна. Түүнээс биш бусдыг ямар нэг үйлдэл хийхийг заагаагүй ажээ. Тэгвэл “Түүнийг нэрээр нь дууд. Түүний насыг асуу.” гэсэн хоёр өгүүлбэрийг авч үзье. Эдгээр өгүүлбэрүүд бол харин тус тусдаа шууд үйлдэл хийхийг заасан байна. Түүнээс биш хэн нэгний нэр ба насны талаарх мэдээллийг өгөөгүй байна. Үүний адилаар, компьютерээр шууд ямар нэг үйлдэл хийлгэх үүрэгтэй операторыг биелэгдэх оператор гээд харин програмын тухай мэдээллийг хөрвүүлэгчид өгөх үүрэгтэй операторыг үл биелэгдэх оператор гээд байгаа юм.
Хөрвүүлэгч нь үл биелэгдэх операторуудын тусламжтайгаар програмын бүтэц, зохион байгуулалт, боловсруулах өгөгдлүүдийн талаарх мэдээллийг олж аваад түүндээ тулгуурлан биелэгдэх операторуудыг машины код руу хөрвүүлнэ. Ө.х. машины код нь зөвхөн биелэгдэх операторуудын “орчуулга” байдаг байна. Учир нь үл биелэгдэх операторууд хөрвүүлэлтийн шатанд үүргээ гүйцэтгээд “хаягддаг” ажээ. Гэхдээ өгөгдлүүд хаягдахгүй гэдгийг санах хэрэгтэй.
Тэгэхээр зөвхөн биелэгдэх операторууд л харгалзах машины командуудтай байдаг гэж ойлгож болох нь ээ. Ингэхдээ нэг биелэгдэх операторт нэг буюу түүнээс олон машины команд харгалзсан байдаг.
Ямар ямар биелэгдэх болон үл биелэгдэх операторууд байдаг вэ?
Си хэлний биелэгдэх операторууд нь:
          утга оноох оператор
          оролт, гаралтын операторууд
          функц дуудах оператор
          нөхцөл шалгах оператор буюу Салаалалт бүтэц
          давталтын оператор буюу Давталт бүтэц
          сонголтын оператор буюу Сонголт бүтэц
          шилжүүлэх операторууд
          нийлмэл оператор буюу блок
г.м. болно. Харин үл биелэгдэх операторын тухайд бол, ийм оператор нь зарлах, таниулах г.м. үүрэгтэй гэснийг санаж байгаад:
          өгөгдөл зарлах
          функцын толгой хэсэг
          функцын прототип тодорхойлох
г.м.-ийг хамааруулж болно. Түүнчлэн препроцессорын директивийг ч бас хамааруулж үзэж болох талтай.
Эдгээр операторууд нь бүгд урьдчилан тодорхойлогдсон загварын дагуу бичигдэх бөгөөд түүнийх нь дагуу хөрвүүлэгч тэдгээрийг “танин мэднэ”. Хэрэв зохих загварыг баримтлаагүй байвал хөрвүүлэгч алдаа өгөх болно.
Оролт, гаралтын операторууд
Оролт, гаралтын операторууд нь харгалзан оролтын хэрэгслээр компьютерт өгөгдөл оруулах, мөн гаралтын хэрэгслээр өгөгдөл (үр дүн) гаргах үйлдлүүдийг илэрхийлнэ. Бидний хувьд оролтын хэрэгслийн үүргийг гар (keyboard), гаралтын хэрэгслийн үүргийг дэлгэц (display) гүйцэтгэж байгаа. 
Гаралтын оператор
Гаралтын операторыг бичихдээ printf() гэсэн стандарт функц ашигладаг. Програмаас дэлгэц рүү өгөгдөл гаргах үйлдлийг дараах загвар бүхий оператораар илэрхийлдэг:
printf(форматын_мөр, аргумент1, аргумент2, ...);
Энд:
          printf( ) – гаралтын үйлдлийг гүйцэлдүүлэх стандарт функц
          форматын_мөр:
o       “%d” – int төрлийн бүхэл утга
o       “%u” – unsgned int төрлийн бүхэл утга
o       “%c” – char төрлийн бүхэл утга
o       “%f” – float төрлийн бодит утга
o       “%lf” – double төрлийн бодит утга
Оролтын оператор
Оролтын операторыг бичихдээ scanf() гэсэн стандарт функц ашигладаг. Програмд гараас өгөгдөл оруулах үйлдлийг дараах загвар бүхий оператораар илэрхийлдэг:
scanf(форматын_мөр, &аргумент1, &аргумент2, ...);
Энд:
          scanf( ) – оролтын үйлдлийг гүйцэлдүүлэх стандарт функц
          форматын_мөр:
o       “%d” – int төрлийн бүхэл утга
o       “%u” – unsgned int төрлийн бүхэл утга
o       “%c” – char төрлийн бүхэл утга
o       “%f” – float төрлийн бодит утга
·             “%lf” – double төрлийн бодит утга
























Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 7  Динамик өгөгдлийн бүтэц
   Өгөгдлийн бүтэц гэдэг нь өгөгдлийг үр ашигтай ашиглах боломжтой байдлаар хадгалах буюу зохион байгуулахыг хэлнэ. Өөр өөр төрлийн өгөгдлийн бүтцүүд нь өөр өөрийн гэсэн тусгай үүрэгтэй болон давуу талтай байдаг.  Жишээ нь tree нь өгөгдлийн сан зохион байгуулахад илүү тохиромжтой байдаг бол хэш хүснэгт нь хөрвүүлэгчдэд тодорхойлогч хайх зорилгоор ашиглагддаг.  Өгөгдлийн бүтцүүд нь их хэмжээний өгөгдлүүдийг үр ашигтайгаар зохион байгуулах зорилготой жишээ нь: томоохон хэмжээний өгөгдлийн сан болон интернэт хаяглалтын үйлчилгээнд ашигладаг. Аливаа нэгэн үр ашигтай алгоритмийг зохион байгуулахад зөв өгөглийн санг ашиглах нь чухал. Зарим нэгэн программчиллийг загварчилахдаа алгоритм гэхээсээ илүүтэйгээр өгөгдлийн санг түлхүү ашигладаг. Хадгалах болон дуудаж ашиглах үйлдлүүд нь Үндсэн болон хоёрдогч санах ойн аль алинд нь ашиглагдаж болно.
Энгийн өгөгдлийн бүтцүүд
Өгөгдлийн бүтцийн жагсаалт
Массив буюу Хүснэгт (Array)
Стек, Stack
Дараалал, Queue
Граф, Graph
Мод, Tree
Овоолго, Heap
Хэш хүснэгт, Hash Table
Үндсэн зарчим
Өгөгдлийн бүтэц нь ерөнхийдөө өөрөө санах ойд хадгалагдсан , хөтөлбөрийн удирдагдаж болох юм гэсэн хаягийн нь битийн мөр заасан нь санах ойд ямар нэг газарт нь нөхөж суулгах нь компьютерийн чадвар, нөөц мэдээлэл дээр суурилсан байдаг. Тиймээс бүртгэлийн болон массив өгөгдлийн бүтэц арифметик үйл ажиллагаанд мэдээллийн зүйлсийн хаягуудыг тооцоолох үндэслэсэн байх; холбоотой өгөгдлийн бүтцүүдийн бүтэц нь өөрөө хүрээнд өгөгдөл зүйлсийн хаягуудыг хадгалах суурилсан байдаг байна. Олон өгөгдлийн бүтцүүд нь заримдаа
 ( XOR холбосон шиг), төрийн бус ердийн байдлаар нэгтгэн аль аль нь зарчмуудыг ашиглаж байна.  Өгөгдлийн бүтцийн шийдэл нь ихэвчлэн байгаа бүтэц, жишээ бий болгох, удирдахыг журмын багцыг бичих шаардлагатай. Өгөгдлийн бүтцийн үр ашигтай эдгээр үйл ажиллагаа нь тус тусад нь дүн шинжилгээ хийж болохгүй. Энэ ажиглалт нь хийсвэр өгөгдлийн төрөл Хэрэв энэ гүйцэтгэж болох үйл ажиллагаанд шууд бус байдлаар тодорхойлж байдаг бөгөөд энэ нь өгөгдлийн бүтэц, (тэдний орон зай , цаг хугацааны зардал гэх мэт) эдгээр үйл ажиллагааны шинж чанарын математик онолын үзэл баримтлалыг урам дэм өгдөг.
Дэмждэг хэл
Ийм BCPL ( үндсэн Combined Programming Language) , өгөгдлийн бүтцүүдийн хувьд дутмаг дэмжлэг үзүүлэх ихэнх угсралт хэл , зарим нь доод түвшний хэл . Олон өндөр түвшний програмчлалын хэл, гэх мэт зарим MASM дээд шатны угсралт хэл, , нөгөө талаас , тусгай байдгийг мэдэх , эсвэл , бусад барьсан ийм С хэлээр векторууд (нэг хэмжээст массивт ) зэрэг зарим өгөгдлийн бүтэц, дэмжлэг Pascal болон олон- хэмжээст массивт .  Ихэнх програмчлалын хэл өгөгдлийн бүтцийн шийдлүүд янз бүрийн хөтөлбөрт дахин ашиглах боломжийг олгодог номын сангийн механизмыг зарим төрлийн онцлог. Орчин үеийн хэл нь ихэвчлэн хамгийн түгээмэл өгөгдлийн бүтцийг хэрэгжүүлэх нь стандарт сангуудын хамт ирдэг. Жишээ нь C + + Стандарт Загвар Номын сан, Java цуглуулгууд хүрээ , болон Microsoft-ийн . NET Framework- байна.  Орчин үеийн хэлнүүд бас ерөнхийдөө модульчлагдсан нэвтрүүлэг нь номын сангийн модулийн интерфэйс , түүний хэрэгжилтийн хооронд ялгадаг дэмждэг. Зарим үйлчлүүлэгч хэрэгжүүлэх нарийвчилсан дарж нуу олгодог ил тод бус мэдээлэл төрлийг өгнө. Ийм C + + , Java болон Smalltalk зэрэг объект хандалтат програмчлалын хэл, энэ зорилгоор хичээлд ашиглаж болох юм. Олон гэгддэг өгөгдлийн бүтэц олон тооцоолох утас зэрэг мэдээлэл бүтэцрүү хандах боломж олгож байгаа юм.







Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 8  Өгөгдлийн бүтэц төрөл
            Өгөгдлийн бүтэц гэдэг нь өгөгдлийг үр ашигтай ашиглах боломжтой байдлаар хадгалах буюу зохион байгуулахыг хэлнэ. Өөр өөр төрлийн өгөгдлийн бүтцүүд нь өөр өөрийн гэсэн тусгай үүрэгтэй болон давуу талтай байдаг.  Жишээ нь tree нь өгөгдлийн сан зохион байгуулахад илүү тохиромжтой байдаг бол хэш хүснэгт нь хөрвүүлэгчдэд тодорхойлогч хайх зорилгоор ашиглагддаг.  Өгөгдлийн бүтцүүд нь их хэмжээний өгөгдлүүдийг үр ашигтайгаар зохион байгуулах зорилготой жишээ нь: томоохон хэмжээний өгөгдлийн сан болон интернэт хаяглалтын үйлчилгээнд ашигладаг. Аливаа нэгэн үр ашигтай алгоритмийг зохион байгуулахад зөв өгөглийн санг ашиглах нь чухал. Зарим нэгэн программчиллийг загварчилахдаа алгоритм гэхээсээ илүүтэйгээр өгөгдлийн санг түлхүү ашигладаг. Хадгалах болон дуудаж ашиглах үйлдлүүд нь Үндсэн болон хоёрдогч санах ойн аль алинд нь ашиглагдаж болно.
Энгийн өгөгдлийн бүтцүүд
Өгөгдлийн бүтцийн жагсаалт
Массив буюу Хүснэгт (Array)
Стек, Stack
Дараалал, Queue
Граф, Graph
Мод, Tree
Овоолго, Heap
Хэш хүснэгт, Hash Table
Үндсэн зарчим
Өгөгдлийн бүтэц нь ерөнхийдөө өөрөө санах ойд хадгалагдсан , хөтөлбөрийн удирдагдаж болох юм гэсэн хаягийн нь битийн мөр заасан нь санах ойд ямар нэг газарт нь нөхөж суулгах нь компьютерийн чадвар, нөөц мэдээлэл дээр суурилсан байдаг. Тиймээс бүртгэлийн болон массив өгөгдлийн бүтэц арифметик үйл ажиллагаанд мэдээллийн зүйлсийн хаягуудыг тооцоолох үндэслэсэн байх; холбоотой өгөгдлийн бүтцүүдийн бүтэц нь өөрөө хүрээнд өгөгдөл зүйлсийн хаягуудыг хадгалах суурилсан байдаг байна. Олон өгөгдлийн бүтцүүд нь заримдаа
 ( XOR холбосон шиг), төрийн бус ердийн байдлаар нэгтгэн аль аль нь зарчмуудыг ашиглаж байна.  Өгөгдлийн бүтцийн шийдэл нь ихэвчлэн байгаа бүтэц, жишээ бий болгох, удирдахыг журмын багцыг бичих шаардлагатай. Өгөгдлийн бүтцийн үр ашигтай эдгээр үйл ажиллагаа нь тус тусад нь дүн шинжилгээ хийж болохгүй. Энэ ажиглалт нь хийсвэр өгөгдлийн төрөл Хэрэв энэ гүйцэтгэж болох үйл ажиллагаанд шууд бус байдлаар тодорхойлж байдаг бөгөөд энэ нь өгөгдлийн бүтэц, (тэдний орон зай , цаг хугацааны зардал гэх мэт) эдгээр үйл ажиллагааны шинж чанарын математик онолын үзэл баримтлалыг урам дэм өгдөг.
Дэмждэг хэл
Ийм BCPL ( үндсэн Combined Programming Language) , өгөгдлийн бүтцүүдийн хувьд дутмаг дэмжлэг үзүүлэх ихэнх угсралт хэл , зарим нь доод түвшний хэл . Олон өндөр түвшний програмчлалын хэл, гэх мэт зарим MASM дээд шатны угсралт хэл, , нөгөө талаас , тусгай байдгийг мэдэх , эсвэл , бусад барьсан ийм С хэлээр векторууд (нэг хэмжээст массивт ) зэрэг зарим өгөгдлийн бүтэц, дэмжлэг Pascal болон олон- хэмжээст массивт .  Ихэнх програмчлалын хэл өгөгдлийн бүтцийн шийдлүүд янз бүрийн хөтөлбөрт дахин ашиглах боломжийг олгодог номын сангийн механизмыг зарим төрлийн онцлог. Орчин үеийн хэл нь ихэвчлэн хамгийн түгээмэл өгөгдлийн бүтцийг хэрэгжүүлэх нь стандарт сангуудын хамт ирдэг. Жишээ нь C + + Стандарт Загвар Номын сан, Java цуглуулгууд хүрээ , болон Microsoft-ийн . NET Framework- байна.  Орчин үеийн хэлнүүд бас ерөнхийдөө модульчлагдсан нэвтрүүлэг нь номын сангийн модулийн интерфэйс , түүний хэрэгжилтийн хооронд ялгадаг дэмждэг. Зарим үйлчлүүлэгч хэрэгжүүлэх нарийвчилсан дарж нуу олгодог ил тод бус мэдээлэл төрлийг өгнө. Ийм C + + , Java болон Smalltalk зэрэг объект хандалтат програмчлалын хэл, энэ зорилгоор хичээлд ашиглаж болох юм. Олон гэгддэг өгөгдлийн бүтэц олон тооцоолох утас зэрэг мэдээлэл бүтэцрүү хандах боломж олгож байгаа юм.



















Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 9  Динамик өгөгдлийн бүтэц, Өгөгдлийн бүтэц төрөл
Програмд ашиглагдаж буй өгөгдөл болгон ямар нэг утгатай байна (тоон, тэмдэгт г.м.). Хөрвүүлсний дараа өгөгдөл нь санах ойд тодорхой зай (нүд эсвэл нүднүүд) эзэлнэ. Тэр зайнд нь өгөгдлийн утга 2-тын кодоор хадгалагдана.
Харин өгөгдлийг санах ойд ямар зай эзлүүлэх, тэр зайнд өгөгдлийн утгыг ямар аргаар кодлох вэ зэргийг хөрвүүлэгчид “зааж” өгдөг програмчлалын хэлний ойлголтыг өгөгдлийн төрөл гэдэг байна. Тэгвэл өгөгдөл санах ойд ямар зай эзлэх, түүний утгыг яаж кодлох зэрэг нь өгөгдөл ямар утга авч байна вэ гэдгээс шалтгаалдаг. Тиймээс өгөгдлийн төрөл гэдэг нь үнэн хэрэгтээ түүний авах боломжтой утгын олонлог юм. Өгөгдлийн төрөл нь албаны үгээр илэрхийлэгдэнэ.
Өгөгдлийн төрөл нь өгөгдлийг зарлах (data declaration) гэсэн ойлголттой нягт холбоотой. Өгөгдлийг зарлана гэдэг нь тухайн өгөгдөлтэй хэрхэн харьцахыг хөрвүүлэгчид “зааварласан” бичиглэл үйлдэж байгаа хэрэг. Мэдээж өгөгдлийг ашиглаж эхлэхээсээ өмнө ингэж зарлах ёстой нь ойлгомжтой байх. Адил төрлийн өгөгдлүүдийг зарлахдаа дараах загварыг баримталж бичнэ
Энд:

·         өгөгдлийн_төрөл - өгөгдлийн төрлийг заасан албаны үг
·         өгөгдлүүдийн_нэр(с) – өгөгдлүүдийг нэрлэхийн тулд програм зохиогчийн сонгож авсан чөлөөт индентификаторуудыг таслалаар тусгаарлан цувуулж бичсэн жагсаалт.
Өгөгдлийг зарласан бичиглэлийн төгсгөлд цэгтэй таслал “;” тавьж буйг анхаараарай.
Си хэлэнд дараах үндсэн өгөгдлийн төрлүүд тодорхойлогдсон байдаг.
Бүхэл тооны хувьд:

Өгөгдлийн төрөл
Санах ойд эзлэх зай байтаар
Утгын муж
Тайлбар
unsigned char
1
0 .. 255

signed char
1
-128 .. 127
signed гэсэн үгийг бичихгүй байж болно
Enum
2
-32768 .. 32767

unsigned int
2
0 .. 65535

signed int
2
-32768 .. 32767
signed гэсэн үгийг бичихгүй байж болно
Unsigned short
2
0 .. 65535

signed short
2
-32768 .. 32767
signed гэсэн үгийг бичихгүй байж болно
unsigned long
4
0 .. 4294967295

signed long
4
-2147483648 .. 2147483647
signed гэсэн үгийг бичихгүй байж болно

гэсэн төрлүүд тодорхойлогдсон байна.
Signed гэсэн төрлүүд бол тэмдэгтэй бүхэл тоог илэрхийлэх бөгөөд хамгийн ахлах битийг тэмдгийн бит болгон авдгаараа unsignedтөрлөөсөө ялгаатай. Тэмдэгтэй ба тэмдэггүй бүхэл төрлүүдийн ялгаа дараах жишээн дээр тод харагдана. k=16 гэсэн өгөгдөл int (буюуsigned int) төрөл байг. Тэгвэл –k=-16 болно. Харин k=16 гэсэн өгөгдөлunsigned int төрөл байсан бол –k=65520 болно. Учир нь энэ тохиолдолд:
-k = 2N - |k|
гэсэн хувиргалтыг хийн 65520 гэсэн утгыг гаргаж байгаа юм. Энд N – unsigned төрлийг дүрслэх битийн тоо, тухайн тохиолдолд N=16.
Эх код дотор, unsigned гэж зарлагдаагүй ямар ч бүхэл өгөгдлийг хөрвүүлэгч автоматаар signed төрлийнх гэж тооцох болно. Тийм учраас тэмдэгтэй бүхэл өгөгдлийг зарлахын тулд charintshortlong үгнүүдийг бичихдээ signed гэсэн угтварыг орхиж болно. Харин зарлахдаа зөвхөн signed эсвэл unsigned гэж бичээд charintshort,long үгнүүдийг орхисон бол signed нь signed int,unsigned нь unsigned int төрөлтэй эквивалент байх болно.
Бүхэл өгөгдлийг зарлаж буй зарим нэг жишээ:
char symbol, cc; /*энд symbol ба cc гэсэн char төрлийн өгөгдлүүд зарлав*/
unsigned char code; /*энд code гэсэн unsigned char төрлийн өгөгдөл зарлав*/
int number, row; /*энд number, row гэсэн unsigned char төрлийн өгөгдлүүд зарлав*/
unsigned long long_num; /*энд long_num гэсэн unsigned long төрлийн өгөгдөл зарлав*/
г.м.
Бодит тооны хувьд:

Өгөгдлийн төрөл
Санах ойд эзлэх зай байтаар
Абсолют утгын муж
Тайлбар
float
4
3.4E-38 .. 3.4E+38
Дан нарийвчлал
double
8
1.7E-308 .. 1.7E+308
Давхар нарийвчлал
long double
10
3.4E-4932 .. 1.1E+4932
Дээд нарийвчлал

гэсэн төрлүүд тодорхойлогдсон байна. Өмнөх лекцэд дурдсанчлан бодит тоо санах ойд мантисс ба зэрэг бүхий хөвөгч цэгтэй хэлбэрээр хадгалагддаг.
Бодит тоон өгөгдөл зарлаж буй жишээнүүд:
float x, X, cc3, pot_8; /*энд x, X, cc3, pot_8 гэсэн float төрлийн өгөгдлүүд зарлав*/
double e, stop, B4; /*энд e, stop, B4 гэсэн double төрлийн өгөгдлүүд зарлав*





















Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 10  Динамик өгөгдлийн бүтэц, Өгөгдлийн бүтэц төрөл
Өгөгдлийн төрөл
Хүснэгтийн талбарын төрлийн утгууд логикийн хувьд ялгаатай. Жишээ нь текст тоо хоёрын логик ялгаа илэрхий билээ. Учир нь тоог цагаан толгойн үсгийн дэс дарааллаар байрлуулж болохгүй, эсвэл нэрүүд дээр арифметик үйлдэл гүйцэтгэж болдоггүй. Иймд өгөгдлийн янз бүрийн төрлүүд бие биеээсээ ялгарах ёстой ба тэдгээр дээр тодорхой үйлдлүүдийг хийж болдог. 
Талбар бүр тодорхой төрлийн утга авна. 
Үүнд: 
• Тоон
• Текстэн буюу тэмдэгт

Өгөгдөл гэж юу вэ?
Өгөгдөл гэдэг нь тоо болон тэмдэгтүүдийн цогц юм. Жишээ нь: 123, аав, нар гэх мэт.

Мэдээ гэж юу вэ?
Мэдээ гэдэг нь ямар нэг зорилгогүйгээр цуглуулсан өгөгдөл. Жишээ нь: цаг минут.

Мэдээлэл гэж юу вэ?
Мэдээлэл гэдэг нь тодорхой зорилготойгоор ямар нэг хэрэгцээ шаардлагыг хангахуйцаар боловсруулагдсан мэдээг хэлнэ. Жишээ нь: Маргааш цас орно. Дулаан хувцасаа өмсөж гараарай. 

Өгөгдлийн сан /Database/гэж юу вэ?
Өгөгдлийн сан нь өөр хоорондоо харилцан холбоотой өгөгдлүүдийн цуглуулга юм. Өөрөөр өгөгдлийн санг “Олон хэрэглэгч олон зорилгоор ашиглаж болох өгөгдлүүдийн цогц” гэж тодорхойлдог.

Багана – талбар /field/ 
Мөр – бичлэг/record/
Өгөгдлийн баазын хүснэгт бүр нь мөр болон багануудын цогц байна. Мөр нь обьектын тодорхой үзэгдэлд харгалздаг бол багана нь үзэгдлийн аттрибутад харгалзана.

Файл гэж юу вэ?
Нийт оруулсан мэдээллээ нэр өгч сануулан, файл болгодог. Өөрөөр хэлбэл нэг мэдээллийн санг файл гэнэ. 

Relationship холболт
Relational database-ийн хүснэгтүүдэд нэг давхацсан /адилхан/ талбар байх ёстой. Энэ давхцагч талбар нь нэг хүснэгтийн нөгөө хүснэгттэй холбох холбоос байх болно. Тэгэхээр relationship гэдэг нь нэг хүснэгтийн бичлэгийг нөгөө хүснэгтийн бичлэгтэй холбох холбоос юм. Үүний ачаар тус тусдаа хүснэгтүүд хоорондоо харилцан уялдаа холбоотой болж цогц өгөгдлийн санг үүсгэх юм. Хүснэгтүүдийг хооронд нь холбох 3 янзын холбоос байдаг. Үүнд: 
1. Нэг нь нэгтэй /one to one/
2. Нэг нь олонтой /one to many/
3. Олон нь олонтой /many to many/

Primary key/Foreign key-түлхүүр талбар
Relatonal database-ийн хүснэгтийн бичлэгүүд давхардсан байж болохгүй. Үүний тулд нэг бичлэгийг нөгөөгөөс ялгаж өгч байдаг дор хаяж нэг талбар байх ёстой. Ийм талбарыг түлхүүр талбар буюу primary key гэнэ. Жишээ нь: 5 талбартай хоёр бичлэгийн 4 талбарын утга нь адилхан байлаа гэхэд үлдсэн ганц талбарын утгууд нь өөр хоорондоо ялгаатай байх ёстой. 
Түлхүүр талбарыг мөн хүснэгтүүд хооронд relationship үүсгэхэд ашиглана. Энэ тохиолдолд эхний хүснэгтэд primary key болж орсон бол нөгөө хүснэгтэд түүнийг foreign key гэнэ.

Query
Хэрэглэгч өгөгдлийн сангаас мэдээлэл авахын тулд өгөгдлийн сан руу хүсэлт илгээдэг. Энэ хүсэлтийг query гэнэ. 

Өгөгдлийн сан зохион байгуулах алхамууд
1. Та өөрийн Database-ийн зорилгыг тодорхойлох
2. Танд ямар ямар Table хэрэгтэйг тодорхойлох
3. Таны баазад ямар ямар талбар хэрэгтэйг тодорхойлох
4. Таны тодорхойлсон Table хооронд ямар харьцаа холбоо байгааг тодорхойлох
5. Загварыг сайжруулах










Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 11  Мэдээлэл зүйн бодлого аргачлал
Энэ алгоритмыг хоёр янзаар бичиж болно.  Нэг нь рекурсив функцтайгаар нөгөөх нь стек өгөгдлийн бүтцийг ашиглаж рекурсгүй хийх боломжтой.
Рекурсив функцийг ашигласан код

template <class Type>
int partition(Type a[],int l,int r)
{
     Type v = a[r];
     int i = l-1, j = r;
     for(;;)
     {
          while(a[++i]
          while(j>1&&a[--j]>v);
          if (i>=j) break;
          swap(a,i,j);
     }
     swap(a,i,r);
     return i;
}
void quickSort(Type a[],int l,int r)
{
     if (l
     {
          int i = partition(a,l,r);
          quickSort(a,l,i-1);
          quickSort(a,i+1,r);
     }
}

Рекурсгүй хувилбар нь

template <class Type>
void quickSort(Type a[],int l,int r)
{
     int i;
     Stack<int> st;
     for(;;)
     {
          while(r>l)
          {
               int i = partition(a,l,r);
               if (i-1>r-i)
               {
                    st.push(l); st.push(i-1);
                    l = i+1;
               }
               else
               {
                    st.push(i+1); st.push(r);
                    r = i-1;
               }
          }
          if (st.empty()) break;
          st.pop(r); st.pop(l);
     }
}

Жишээ кодууд:

/*
int массив эрэмбэлэх
*/
#include <stdio.h>
#include <stdlib.h>
int compare_int(const void *a,const void *b) {
        int *x = (int *) a;
        int *y = (int *) b;
        return *x - *y;
}
int main(){
        int i;
        int a[] = {9, 45, 234, 32, 3424, 345, 78, 85};
        qsort(a, 8, sizeof(int), compare_int);
        for(i = 0; i < 8; i++){
                printf("%d\n", a[i]);
        }     
return 0;
}


/*
Тэмдэгт мөр эрэмбэлэх
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_str(const void *a,const void *b) {
        return (strcmp((char *)a,(char *)b));
}
int main(){
        int i;
        char a[4][20] = {"Sharavsambuu", "Xacaa", "Munkhbaatar", "Gansukh"};
        qsort(a, 4, sizeof(a[0]), compare_str);
        for(i = 0; i < 4; i++){
                printf("%s\n", a[i]);
        }     
return 0;
}








Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 12  Алгоритм бичих

Алгоритм гэж юу вэ?
Програмыг компьютерт шууд бичиж оруулах ёстой юу? Тэгж болно. Гэхдээ, програмчлалд анхлан суралцаж буй хүний хувьд эхлээд бичих гэж буй програмынхаа загвар буюу бүдүүвчийг зохиогоод дараа нь түүнийхээ дагуу програмаа бичих нь илүү үр дүнтэй гэж мэргэжилтнүүд үздэг. Ийм загвар буюу төлөвлөөг алгоритм гэдэг. Эсвэл “алгоритм бол тодорхой үр дүн гаргаж авахын тулд дараалан гүйцэтгэх ёстой үйлдлүүдийн жагсаалт юм”. Эсвэл “алгоритм бол тодорхой үр дүн гаргаж авахын тулд баримтлах ерөнхий дүрэм юм”. Алгоритм зохиох процессыг мэдээж алгоритмчлал гэнэ. Ер нь хүн ямар ч ажлыг хийхдээ эхлээд төлөвлөгөө гаргадаг шүү дээ. Тэрэнтэй л адил гэсэн үг. Алгоритм гэдэг үг өөрөө, 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.      1.       Үгээр илэрхийлэх (эх хэлээр бичих)
2.      2.       График дүрслэл (геометрын объектууд ашиглан илэрхийлэх)
3.      3.       Хуурмаг код (эх хэл, програмчлалын хэл, математикийн үндсэн тэмдэглэгээнүүд г.м.ийн холимог ямар нэгэн зохиомол, хагас дүрэмжсэн “хэл” ашиглах)
4.      4.       Програм (програмчлалын хэл дээр бичих)
Эхний хоёр хэлбэртэй танилцъя.
Хоёр натурал тооны хамгийн их ерөнхий хуваагчийг (ХИЕХ) олох Евклидийн алгоритмыг үгээр илэрхийлвэл:
1.       Хоёр тоо өг
2.       Хэрэв хоёр тоо тэнцүү бол аль нэгийг нь хариу болгон аваад алгоритмыг төгсгөх, үгүй бол 3-р алхамд шилжих
3.       Хоёр тооны аль ихийг нь тодорхойлох
4.       Их тоог их тоо, бага тооны ялгавраар солих
5.       2-р алхамд шилжих
гэсэн хэлбэртэй болно. Энэ алгоритм хоёр тоо тэнцүү болох хүртэл хийгдэж, эцэст нь ХИЕХ-ийг гаргаж өгнө.Хатуу тогтсон дүрэм байхгүй, нэг өгүүлбэрийг олон янзаар тайлбарлаж болдог, хэтэрхий нуршуу болох магадлалтай г.м. шалтгааны улмаас үгээр илэрхийлэх хэлбэр нь тийм ч өргөн дэлгэрээгүй ажээ.Бид хичээлдээ график дүрслэлийн аргыг ашиглах болноГрафик дүрслэлээр, алгоритмыг өөр хоорондоо холбогдсон геометр объектуудын дараалал хэлбэрээр илэрхийлдэг. Ийм дүрслэлийг алгоритмын блок-схем хэмээн нэрийднэ. Блок-схемийг бүрдүүлэгч объектуудыг үйлдлийн блокууд гэнэ. Учир нь блок болгон тодорхой нэг эсвэл хэд хэдэн үйлдлийг төлөөлдөг. Тиймээс блокуудыг хооронд нь холбосон шугамыг шилжилтийн шугам гэх бөгөөд энэ нь үйлдэл хийгдэх дарааллыг тодорхойлж өгдөг. Шугамыг заримдаа сумтай, заримдаа сумгүй зурдаг. Бидний хувьд сумтай зурах нь илүү тохиромжтой. Шилжилтийн шугам, блокуудыг нийтэд нь блок-схемийн элементүүд гэдэг.
Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 13 Си хэл дээр программ бичих
Си хэлний ач холбогдол, ангилал
Си хэл нь анх үйлдлийн системд зориулагдан бүтээгдсэн хэл юм.  UNIX үйлдлийн системийг бүтээхдээ программчилалын хүчтэй орчинг бүрдүүлэхийг зорьсон хүмүүс энэ хэлийг боловсруулжээ.  UNIX үйлдлийн системийг дэлхий нийтээр өргөн хэрэглэх болсноор программчилалын Си хэлний хэрэглээ ч нэмэгдэх болжээ.  UNIX үйлдлийн системийн  90%  нь энэ хэл дээр бичигдсэн , тэр ч бүү хэл Си хэлний өөрийнх компилятор нь хүртэл энэ хэл дээр бичигджээ.
 Мөн UNIX үйлдлийн системийн бараг бүх үйлчилгээний программ хангамжууд, UNIX үйлдлийн систем дээр ажиллах ихэнх хэрэглээний программ хангамжууд Си хэл дээр бичигдсэн , цаашид ч энэ хэл дээр бичигдэх болно.  Иймээс Си хэл нь одоо ч хүртэл программчилалын хүчтэй зэвсэг хэмээн тооцогдсоор байна.
 Си хэл бол сурахад хялбар, маш бага кодчилол хийх боломжтой хэл юм.
Си программын бүтэц , онцлог шинжүүд
Си программ нь функцуудын олонлогоос бүрдэх бөгөөд  эдгээр функцууд нь нэг буюу хэд хэдэн эх файлд хадгалагдаж болно. Эдгээр эх файл бүр нь тус тусдаа хөрвүүлэгддэг. (машины хэлд)  
 Си программд зөвхөн нэг л функц “main” нэртэй байж болох бөгөөд бусад функцууд нь дурын байдлаар нэрлэгдэж болно.  Си программ бичихэд ядаж нэг функц заавал бичих бөгөөд энэ нь “main” функц юм. Си хэлний функц нь бас процедурын үүрэг гүйцэтгэнэ.  Ө.х  Си  хэл нь бусад хэл шиг функцийг  функц , процедур гэж ялгадаггүй.  Си хэл дээр бичигдсэн программ “main” функцээс эхэлж ажиллах бөгөөд хэрвээ программ хэвийн ажилласан бол энэ функцээр үйл ажиллагаагаа дуусгах болно. Программ ажилллах явцад “main” функц нь бусад функцийг  дуудаж болох бөгөөд тэр функц нь цааш өөр  функц дуудах гэх мэтчилэн үйл ажиллагаа нь үргэлжилнэ. Тухайн функц үйл ажиллагаагаа дуусгамагц түүнийг дуудсан функцэд удирдлагаа шилжүүлнэ.
 Программын жишээ :
  main()
{
   int k;
   printf(“ Now I,ll print pi number ”);
   PrintfPI();
}
  
СЭДЭВ 2. СИ ПРОГРАММЧИЛАЛ ГЭЖ ЮУ ВЭ ?
Хэрвээ та урьд өмнө нь хэзээ ч программ бичиж байгаагүй бол энэ сэдэв танд программ анхлан бичихэд чинь туслана.
Программ гэж юу вэ ?
    Бидний сайн мэдэх компьютер бол тийм ч их ухаантай машин биш юм. Тэр бол зөвхөн зааврыг үг дуугүй дагадаг сайн туслагч төдий юм.  Тэрээр таны өгсөн даалгаврыг биелүүлэхээр хэдэн ч өдрөөр , уйтгарлахгүйгээр , амрахгүйгээр ажиллаж чадна.   Гэвч тэр юу хийхээ өөрөө бие даан шийдвэрлэж, бодож чадахгүй.  Иймээс тэдэнд юу хийхийг нь Программ зохиогч хэлж, зааж өгдөг. 
 Түүгээр ямар нэг ажил хийлгэхийн тулд түүнд өгч байгаа командуудын олонлогийг программ гэж  нэрлэнэ. Одоогоор бидний ашиглах боломжтой мянга мянган программ зохиогдоод байгаа бөгөөд эдгээр нь маш олон төрөл , чиглэлээр зохиогдсон болно.
Си программ бичихэд юу хэрэгтэй вэ ?
Си хэл дээр программ бичиж түүнийгээ ажиллуулахын тулд юуны түрүүнд Си  компилятор хэрэгтэй.  Си компилятор нь таны бичсэн программыг компиляци хийх  буюу хөрвүүлэх үйл ажиллагааг хийдэг.  Хөрвүүлэх гэдэг нь хүнд ойлгомжтой буюу Си хэл дээр бичигдсэн программыг  машинд ойлгомжтой буюу командуудын дараалалд хөрвүүлэх үйл ажиллагааг хэлнэ.
Программчилах процесс
Ихэнх хүмүүс программ бичихдээ дараах дарааллыг баримталдаг.
v  Программаа яг юу хийхийг тодорхойлно. ( Үйл ажиллагааг нь төсөөлнө. )
v  Алгоритмаа тодорхойлоод программаа бичнэ.
v  Си программыг  дурын текст боловсруулагч программ дээр бичиж болно. Гэхдээ ихэнх Си компиляторууд нь өөртөө текст боловсруулагчтай байдаг.  Си хэл дээр бичигдсэн программ нь  .С  өртгөтгөлтэй файлд хадгалагдана.
v  Программаа хөрвүүлэх
v  Программын алдааг хянаж, засварлах
v  Си компилятор нь танд алдааны тухай мэдээллүүд өгдөг. Хэрвээ алдаагаа засаж дууссан бол программ ажиллахад бэлэн боллоо гэсэн үг.
v  Программаа ажиллуулах, үр дүнг нь үзэх

Одоогоор хэрэглэгдэж байгаа ихэнх Си компиляторууд нь маш өргөн боломжтой бөгөөд  энэ бүх үйл ажиллагааг  нэгэн программаас хийх боломжийг бүрдүүлсэн байдаг.  Жишээ нь  Turbo C компилятор нь  манайд өргөн хэрэглэгддэг  бөгөөд энэ нь программ бичих , үр дүнг нь харах  зэрэг үйл ажиллагааг нэг дэлгэцэнд меню ашиглан хийх боломжийг бүрдүүлсэн сайн компилятор юм.













Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 14  Си хэл дээр программ бичих
printf функц
Таны программ ажиллаж дуусаад тодорхой үр дүнг гаргах бөгөөд түүнийг бид үзэх буюу дэлгэцэнд үр дүн нь хэвлэгдэх  зайлшгүй шаардлагатай байдаг.  Си хэлэнд үүнийг хэрэгжүүлдэг printf гэсэн функц байдаг. Энэ функц нь дэлгэцэнд тоо, тэмдэгт , үг гаргахад  ашиглагдана.  printf  функц нь маш өргөн боломжтой бөгөөд ихэнх хүмүүс боломжийг нь бүрэн ашиглаж чаддаггүй.
printf функцын формат
Энэ  функцын үндсэн формат нь :
       printf(Удирдлагын тэмдэгт мөр [,өгөгдөл] );

Тайлбар: Си хэлэнд функцуудын форматыг бичиж үзүүлэхдээ зарим тусгай тэмдэглэгээг хэрэглэдэг ба энд [ ] гэсэн тэмдэглэгээг ашигласан байна.  Ер нь тэмдэглэгээг  зөвхөн танд ойлгуулах үүднээс л ашигладаг ба энэ нь тайлбарлаж буй  функцын бичлэгт ордоггүй юм.  Иймээс энэ функцыг  ашиглахдаа [ ] хаалтыг бичихгүй байх болно. Энэ хаалтанд бичигдсэн өгөгдөл түүнийг бичихгүй байж болно гэсэн утгыг агуулдаг.

Удирдлагын тэмдэгт мөр нь тухайн өгөгдөл ямар хэлбэрээр дэлгэцэнд гарахыг тодорхойлдог.
  printf(“ Жишээ %d”,1);     /* Энэ жишээнд Жишээ 1 гэсэн үгийг хэвлэж байна*/
 Си хэлэнд тэмдэгт мөрийг заавал хашилтанд  (“”) бичдэг.  Тэгэхээр удирдлагын тэмдэгт мөр нь заавал хашилтанд  бичигдэнэ.
 Си хэлэнд бичигдсэн команд бүр “;”-аар төгсөх ёстой.  Өөрөөр хэлбэл энэ нь команд дуусч байна, үүнийг биелүүлэх ёстой гэдгийг Си энэ тэмдэгтээр мэдэх болно.
Тэмдэгт мөр хэвлэх
Бид дэлгэцэнд тэмдэгт мөр мэдээлэл хэвлэхдээ энэ функцыг ашиглана.
   printf(“ Сайн байна уу !  ”);
 Энэ комманд биелэгдэхэд дэлгэцэнд  Сайн байна уу !  гэсэн үг хэвлэгдэнэ.
 printf(“ Сайн байцгаана уу  !”);
printf(“ Хичээлээ эхлэцгээе !”);   гэсэн коммандууд юу хэвлэхийг үзэцгээе.
 Сайн байцгаана уу  !  Хичээлээ эхлэцгээе  ! 
 Си нь тэмдэгт мөр хэвлээд  дараа нь курсорыг дараагийн мөрт автоматаар шилжүүлдэггүй. Тэгвэл ингэж курсорын байрлалыг удирдахдаа Удирдлагын тэмдэгт мөр  дотор тусгай тэмдэгтүүдийг ашигладаг. 
Курсорын байрлал удирдах тэмдэгтүүд
Си хэлэнд маш олон ийм тэмдэгтүүд байдаг ба тэднээс зарим хэсгийг нь л их өргөн ашигладаг.  
  Хүснэгт 3.1   Курсорын байрлал удирдах тэмдэгтүүд
Код
Тайлбар
\n
 Шинэ мөр
\a
 Дуут дохио гаргах
\t
 Tab тэмдэгт ( Хэд хэдэн хоосон зай )
\\
 \ тэмдэгтийг өөрийг нь хэвлэх
\”
 “ тэмдэгт хэвлэх
\r
 Мөрийн эхэнд
 “\a” тусгай тэмдэгтийг хэвлэхэд дуут дохио гардаг. Өмнөх жишээнд бид хоёр тэмдэгт мөр хэвлэхэд тэд 2 мөрт биш , 1 мөрт гарч байсан . Тэгвэл одоо \n  тусгай тэмдэгт ашиглан энэ үйлдлийг гүйцэтгэе.  Эхлээд эхний тэмдэгт мөрөө хэвлээд дараа нь курсорыг дараагийн мөрт шилжүүлэх шаардлагатай. 
 printf(“ Сайн байцгаана уу  !\n”);
printf(“ Хичээлээ эхлэцгээе !”);
 Си тэмдэгт мөрийг хэвлэж байгаад \n тэмдэгт дайралдангуут курсорын байрлалыг дараагийн мөрт шилжүүлдэг.  Ингэсний дараа хэвлэгдэх тэмдэгтүүд шинэ байрлалаас цааш хэвлэгдэх болно.
 Тусгай тэмдэгтүүдийг ашигласан жишээ :
 printf(“Тэмдэгт\tмөр\tхэвлэв.\n”);       /* Тэмдэгт                 мөр          хэвлэв. */
printf(“Дохио дуугарав. \a\n”);                /*  Дохио дуугарав.             */
printf(“Тэр  \”Үгүй\”  гэж хэлсэн.\n”);    /* Тэр “Үгүй” гэж хэлсэн.   */
printf(“\\ тэмдэгтийг  хэвлэв.\n”);           /*  \\ тэмдэгтийг хэвлэв.     */
Хөрвүүлэлтийн тусгай тэмдэгтүүд
 Та тэмдэгт болон тоо хэвлэхдээ тэдгээрийг яаж хэвлэгдэхийг тодорхойлох хэрэгтэй болдог.  Ингэж тодорхойлохдоо хөрвүүлэлтийн тусгай тэмдэгтүүдийг ашигладаг.
     Хүснэгт 3.2  Хөрвүүлэлтийн тусгай тэмдэгтүүд

Тэмдэгт
 Тайлбар
%d
int төрлийн утгыг төлөөлнө.
%i
int төрлийн утгыг төлөөлнө.
%c
Зөвхөн нэг тэмдэгт
%s
Тэмдэгт мөр
%o
unsigned int (8-т тооллын систем)
%u
unsigned int
%x
unsigned int (16-т тооллын систем)
%X
unsigned int (16-т)
%f
Бодит тоон утга [-]dddd.ddd
%e
Бодит тоон утга [-]d.ddd e [+/-]ddd
%%
% тэмдэгт
%p
XXXX:YYYY санах ойн хаяг
%hd, %hi, %ho, %hx
short int
%ld, %li, %lo, %lx
long int
%le, %lE, %lf, %lg
Double
%Le, %LE %Lf, %Lg
long double

Жич : Хамгийн хялбар бөгөөд  юуны түрүүнд бидэнд хэрэг болох тусгай тэмдэгтүүдийг  тод хараар бичэв.
 Тоо, тэмдэгт хэвлэхдээ Удирдлагын тэмдэгт мөр дотор хөрвүүлэлтийн тусгай тэмдэгтүүдийг бичих ба дараа нь Удирдлагын тэмдэгт мөрийн  ард хэвлэх утгуудаа таслалаар зааглан харгалзуулан жагсааж өгдөг.
 Жишээ :
 printf(“%s  %d  %f  %c\n”,”Hi”,14,-8.76,’x’);
 Энэ жишээ нь дараах үр дүнг хэвлэнэ.
 Hi  14  -8.760000  x
 “Hi” тэмдэгт мөр нь  хашилтанд бичигдэнэ. Харин Си хэлэнд нэг тэмдэгтийг ‘’ хашилтанд  бичдэг.  –8.76 гэсэн бодит тоог хэвлэхэд  Си  түүнийг  -8.760000 болгож хэвлэсэн байна.  Си хэлэнд бодит тоог хэвлэхдээ % ба f  тэмдэгтийн хооронд . тэмдэгтийг хэрэглэн хэвлэгдэх хэлбэрийг тодорхойлно.
 Жишээ :
 printf(“%f  %.3f  %.2f  %.1f”, 4.5678, 4.5678, 4.5678, 4.5678);
 Үр дүн :      4.567800   4.578   4.57   4.6
 fprintf() функц
 Энэ функц нь  өгөгдлийг урсгал (принтер,диск,файл) хэмээн нэрлэгдэх виртуал төхөөрөмжид гаргадаг.
 Бичих хэлбэр :  int  fprintf(FILE *stream, const char *format[, argument, . . . ]);
 Энэ функц нь UNIX үйлдлийн системд өргөн хэрэглэгддэг.
 Жишээ :
 #include<stdio.h>
 int main(void)
{
int n=3;
float x=45.875;
/* Дэлгэцэнд  хэвлэх  */
printf(“ Сайн байна уу ? \n”);
/* Принтерт хэвлэх  */
fprintf(stdprn,“ Сайн байна уу ?  \n”);
/* Дэлгэцэнд  хэвлэх  */
printf(“ x=%f  ба  n=%d \n”,x,n);
/* “Принтерт  хэвлэх  */
fprintf(stdprn,“ x=%f  ба  n=%d \n”,x,n);
}






































Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц – 15 Си хэл дээр программ бичих
      Бүх программчилалын хэлүүд хувьсагч тодорхойлж, өгөгдөлтэй ажиллах тодорхой механизмуудтай байдаг.  Си хэлэнд энгийн өгөгдлийн төрлүүд болох бүхэл, бодит тоо, тэмдэгтэн төрлүүдтэй ажиллах олон арга замууд байдаг.
     Бусад программчилалын хэлүүдэд байдаггүй тийм аргууд нь  Си  хэлийг улам ч хүчирхэг болгодог.  Энэ бүлэгт үзэх санаануудыг Си хэлэнд эхлэн суралцагч хэн бүхэн сайн ойлгох хэрэгтэй.  Өгөгдлийн төрлүүд болон тэдгээртэй ажиллах үйлдлүүдийн олонлог нь Си хэлийг улам уян хатан болгодог ч , зарим талдаа буюу Си хэлийг төгс эзэмшиж ойлгоход хүндрэлтэй байдаг талтай.
Идентификаторууд
Хувьсагчид болон функцийн нэрийг идентификатор гэнэ. Си хэлний идентификатор нь үсэг, тоо, доогуур зураас тэмдэгтээс бүрдсэн 32 тэмдэгт хүртэлх урттай байж болно. Идентификаторийг том болон жижиг үсгээр бичиж болох ба Си хэлэнд том жижиг үсгийг ялгаатайд тооцдог. Өөрөөр хэлбэл Count, count , COUNT гэсэн гурван нэр нь гурвуулаа ялгаатай нэрүүд болно.  Практикаас үзэхэд өөрийн бичих программаа илүү ойлгомжтой болгохын тулд хувьсагчдын нэрийг жижиг үсгээр, тогтмолуудыг том үсгээр бичиж ашигладаг.

Зөв идентификатор
 Буруу идентификатор
far_out
Tom’s
TIME
whicha$macallit
age
%dollar
Time
do-it

     Зөвлөгөө  :
v  Хувьсагчийн нэрийг үсгээр эхлэх
v  Хувьсагчийг түлхүүр үгтэй ижлээр нэрлэж болохгүй. ( do, while , if ,  int, float , case  . . . )
v  Хувьсагчдыг гүйцэтгэж байгаа үүрэгтэй нь зохисон нэрээр нэрлэх
v  Дотоод хувьсагч ялангуяа индекс зэргийг богино , гадаад хувьсагчийг арай уртаар нэрлэхэд тохиромжтой.
Түлхүүр үгүүд
Си хэлэнд бүх түлхүүр үгийг жижиг үсгээр бичдэг. Хувьсагчийн нэр нь түлхүүр үгтэй яг ижил байж болохгүй. Гэхдээ бичлэгийн хувьд түлхүүр үгээс ялгаатай байж болно.
 Жишээ нь :
Түлхүүр үг
Хувьсагч
for
FOR
if
IF
 Хүснэгт 4.1
int
extern
else
Char
register
For
float
Typedef
do
double
static
While
struct
goto
switch
Union
return

case
Long
sizeof
default
short
Break
auto
unsigned
continue
If
asm
cdecl
huge
interrupt
pascal
void
const
Volatile
enum
signed
_cs
Near
_es
_ss
far
_ds

Энгийн өгөгдлийн төрлүүд
Си хэлэнд 4 үндсэн энгийн төрөл байдаг.
int
Энэ төрлийн хувьсагч бүхэл тоон утга агуулна. Гэхдээ авах утгууд нь зарим төрлийн систем дээр өөр өөр байдаг боловч ихэнхдээ 1 үг буюу 2 byte урттай байдаг.
Int утга         :  -32768 . . . 32767   ( тэмдэгтэй )
unsigned int :     0 . . . 65535 ( тэмдэггүй )
char
Энэ төрлийн хувьсагч нь тэмдэгт утга агуулна. Char утга нь 1 byte –ийн хэмжээтэй байдаг.
Char утга         :  -128 . . . 127   ( тэмдэгтэй )
unsigned char :     0 . . . 255 ( тэмдэггүй )
float
Энэ төрлийн хувьсагч нь бодит тоон утга агуулна. float утга нь 4 byte-ийн хэмжээтэй байдаг ба 10E-38 … 10E+38 завсар дахь бодит тоон утга агуулах чадалтай.
double
Энэ нь  float төрлийн адил бодит тоон утга агуулах ба 8 byte хэмжээтэй.

 Хувиргагчид
Си хэлэнд дараах хувиргагчдыг хэрэглэн өгөгдлийн төрлийг хувиргаж болдог.

short int
Энэ нь int утгаас их биш утга авна гэсэн үг. Энэ төрлийн хэмжээ нь системээс хамааралтай байдаг. Зарим системд энэ утга нь int утгын хагас хэмжээтэй байхад заримд нь адил хэмжээтэй байдаг.









Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
                                 Лекц –  Алгоритмыг дүрслэх хэлбэрүүд

Алгоритмын график дүрслэл буюу блок-схем
Компьютерт зориулсан програмын алгоритмыг хэрхэн бичдэг вэ? Өөрөөр хэлбэл тэмдэглэгээний ямар хэлбэрүүдийг ашиглан алгоритмыг зохиодог вэ? Энд дараах хэлбэрүүд байна:
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. Абсолют хэмжигдхүүний утгыг дэлгэцэнд хэвлэж гаргана





























Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц –  Бодлого бодох үйл ажиллагааны үе шатууд,
 Алгоритмыг дүрслэх хэлбэрүүд
Алгоритмын төрлүүд
Алгоритмыг төрлөөр нь шугаман ба шугаман бус гэж хоёр ангилдаг.
Шугаман алгоритм (Linear algorithms)
Зөвхөн Процесс бүтцээс тогтсон алгоритм нь шугаман алгоритм болно. Учир нь түүний биелэлт зөвхөн нэг чиглэлд, дээрээс доошоо, эхлэлээс төгсгөл рүү шууд “урсана”.
Шугаман алгоритмын жишээнүүд авч үзье.
· Жишээ 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. Гурвалжны талууд abc болно. Дараах:
cosA = (b+ 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[(b+c2–a2)/(2*b*c)] томъёог бодоод гарах хариуг A_rad-д утга болгож өгнө.
7. arc sin(b*sin A_ 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_radB_radC_rad) градуст шилжүүлж (A_gradB_gradC_grad) байна.
· Жишээ 4. Хүнээс нэрийг нь асуугаад, дараа нь түүнийг мэндчилэх алгоритм:
Блок-схем
Тайлбар

1. Алгоритм эхлэнэ.
2. Дэлгэцэнд “Чамайг хэн гэдэг вэ?” гэсэн өгүүлбэрийг хэвлэж гаргана.
3. Хэн нэгэн хүний нэрийг гаднаас оруулж name-д утга болгож өгнө.
4. Дэлгэцэнд “Сайн уу” гэсэн үг хэвлээд араас нь name-ийн утгыг хэвлэж гаргана.
5. Алгоритм төгсөнө.
Энэ жишээ өмнөх 3 жишээнээс ялгаатай нь ямар нэг тооцоо хийлгүй, зөвхөн хэрэглэгчтэй хялбар харилцан яриа үүсгэж байна. Алгоритм ажиллангуут хүний нэрийг асууна. Гараас нэр оруулмагц дэлгэцэнд мэндчилгээ хэвлэгдэх болно. Тухайлбал Бат гэж оруулахад “Сайн уу, Бат” гэж гарна.
Шугаман бус алгоритм (Nonlinear algorithms)
Алгоритм нь салаалалт юм уу давталт агуулсан бол түүнийг шугаман бус алгоритм гэнэ. Учир нь түүний биелэгдэх чиглэл буюу “урсгал” нь мөчирлөсөн юм уу мушгирсан байдалтай болдог.
Тухайн тохиолдолд шугаман бус алгоритм нь зөвхөн салаалалт, эсвэл зөвхөн давталт агуулсан байх бол ерөнхий тохиолдолд салаалалт+давталт агуулсан байна. Жишээ алгоритмууд үзье.
Салаалалт.
· Жишээ 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³ба a£20 байвал:

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

a-ийн утгыг 2-оор ихэсгээд 4-р алхамд шилжинэ.
4. a-ын утгыг дэлгэцэнд хэвлэж гаргана.
5. Алгоритм төгсөнө.
Энэ жишээнд, a тоо [0,20] завсарт орших уу гэсэн нөхцлийг “(a>=0) And (a<=20)” гэж бичсэн байна. Мэдээж 0 ба 20 үед л [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 үед л [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 гаралтаар явна. Харгалзах үйлдлүүд хийгдэнэ. Иймэрхүү маягаар, 200 байгаад л байвал, түүний агшин зуурын утгыг хэвлэн, 2-оор ихэсгэх үйлдлүүд давтагдах болно. Давталт хийгдсээр дэлгэцэнд 2 4 6 8 10 12 ... 196 198 гэж гарсны дараа юу болохыг авч үзье. k=k+2 үйлдлээр k-ийн утга 200 болж таарна. Нөхцөл шалгахад 200=200 учраас k нь 200-аас хэтрээгүй гэсэн үг. Тиймээс 1 гаралтаар явж дэлгэцэнд 200 гэж хэвлэгдэнэ. k=202 болно. Дахиад 200 нөхцлийг шалгана. Мэдээж 202 нь 200-аас эрс их тоо (202>200) учир одоо бол 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 баганатай хүснэгт болон гарч ирж байгаа юм. Хэрэв график байгуулвал гадаргуу зурагдах болно 



























Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
                          Лекц –  4 Си программын бүтэц. Препроцессор
Программчлалын бүтэц
Программ нь бэлтгэл хэсэг, дэд хэсэг болон үндсэн программаас тогтдог. Программын бэлтгэл хэсэг нь уг программын бүхий л хэсэгт ашиглагдаж болох стандарт хувьсагч, тогтмол болон функцуудын  байрлаж буй толгой файлуудыг include директивээр тодорхойлж өгдөг. Үүний дараа программын аль ч хэсэгт хэрэглэж болох глобал төрөл, тогтмол хувьсагч, хэрэглэгчийн функцуудыг тодорхойлж өгдөг. Ер нь Си хэлний хувьсагчийг программын аль ч хэсгийн эхэнд тодорхойлж өгч болдог. Си хэлний программууд нь Main() функцыг агуулж байдаг. Программ ажиллаж эхлэхэд энэ функц дотор бичигдсэн код эхлэн ажилладаг бөгөөд үүнийг үндсэн программ гэдэг. Жишээ:
Тэмдэгт мөрийг хэвлэх
/*миний эхний программ*/
#include<stdio.h>
#define greeting “Сайн байна уу?”
main()
{
printf(greeting);
}  /Программыг бичиж дуусаад Run & ctrl+F9 хослолыг сонгоно/. Юуны өмнө программын текстийг компилятор хүлээн авч хөрвүүлэлт хийнэ.хөрвүүлж дуусаад Хэрвээ алдаа гарсан байвал гарсан алдаануудын тухай мэдээллүүдийг өгөөд ажиллагаагаа зогсооно. Харин алдаагүй хөрвөж дууссан бол уг текстэд харгалзах объект файлыг  (*.OBJөргөтгөл бүхийдискэнд үүсгэж, ажиллагаа холбогчид шилждэг. Нэг программ хэд хэдэн хэсгээс тогтож болох бөгөөд холбогч нь тэдгээр хэсэг бүрийн объект файлуудыг нэгтгэн дискэнд биелэх файлыг (*.EXEөргөтгөлтэй ) үүсгэдэг. Энэхүү биелэх файл санах ойд ачаалсанаар уг программ ажилладаг.

Толгой файлын тухай

Өмнөх хэсгийн жишээ программын эхний мөрөнд #include<stdio.h> гэсэн мөр байгааг анзаарч байгаа байх. Энэ мөрний <stdio.h> гэдэг нь си хэлний стандарт толгой файл буюу тогтмол, төрөл, функцуудын санг агуулсан файлын нэр юм. Си хэлийг ашиглан программ бичихдээ өөр файлд тодорхойлогдсон функц, тогтмол, макро зэргийг ашиглах бүрэн боломжтой. Хэрэв ийм боломжгүй бол ялангуяа том хэмжээний программ бичиж байгаа тохиолдолд их хэмжээний тогтмол болон функцуудыг нэг файлдаа тодорхойлох нь файлын хэмжээ болон программын бүтцийн хувьд тун эмх замбараагүй болдог. Харин тогтмол макро, функцуудыг нэг файлд ялгаж торхойлоод түүнийгээ өөрийн файлдаа холбож өгвөл программын бүтэц энгийн болоод ойлгомжтой болох юм. Ийм файлыг толгой файл гэх бөгөөд файл нь “.h” өргөтгөлтэй байна.   
Толгой файлыг мөн сан гэж нэрлэж болно. Жишээ нь:
/*defs.h*/
Void fun1()
{
}
/*my.c*/
#include”defs.h”
Main()
{….
Fun1();
……….} Толгой файлыг зааж өгөхдөө  #include директивийг ашиглах бөгөөд түүний ард файлыг нэрийг (“”) давхар хашилтанд тэмдгээр хашиж бичнэ. Директивийг заавал мөрийн эхлэлээс бичих ёстой. Си хэлэнд өөрийн гэсэн толгой файлууд байдаг. Энэ файлуудад Си-д нийтлэг ашиглагдах тогтмолууд, функцууд болон макронуудыг тодорхойлж өгсөн байдан. Энэхүү стандарт толгой файлуудыг тодорхойлох тохиолдолд#include директивийн ард толгой файлын нэрийг бичихдээ (“”) биш (<>)буюу өнцгөн хаалтанд хийнэ.
Жишээ нь: Математик болон логикийн функц, тогтмол, макронууд ньmath.h гэсэн стандарт толгой файлд агуулагдаж байдаг. Мөн stdio.hтолгой файлаас scanf(), printf() функцуудыг ашиглаж байгаа.
б. Цагаан толгой, түлхүүр үгнүүд

Си хэлний цагаан толгой
Си хэлний цагаан толгойд:
·         Латин цагаан толгойн том, жижиг үсгүүд: (A, B, ..., Z, a, b, ..., z)
·         Цифрүүд: 0, 1, 2, 3, 4 , 5, 6, 7, 8, 9
·         Тусгай тэмдгүүд:
,
{ }
|
[ ]
( )
+
-
/
%
\
;
.
:
?
=
_
!
&
*
#
~
^
·         Үл дүрслэгдэх тэмдэгтүүд: лексемүүдийг нэг нэгээс нь тусгаарлах үүрэг бүхий сул зай, табуляци, шинэ мөрөнд шилжих г.м.
Цагаан толгойн тусламжтайгаар хэлний бусад бүрдэл хэсгүүд болох тайлбар, лексем зэргийг бүтээдэг. Си хэлэнд:
·         идентификаторууд (чөлөөт нэрс)
·         албаны (нөөц) үгс
·         тогтмолууд
·         тэмдэгт мөр төрлийн тогтмолууд
·         үйлдлийн тэмдгүүд
·         тусгаарлагч тэмдгүүд
гэсэн 6 төрлийн лексем байна. Эдгээр лексемүүдийг ашиглан програмын эх кодыг бичнэ.
Түлхүүр үг
Түлхүүр үг гэдэг нь тодорхойлолгүйгээр үүргийнх нь дагуу шууд ашиглаж болох тодорхой тооны үг юм. Түлхүүр үгийг идентификатор тодорхойлоход  ашиглаж болохгүй .Си хэлэнд дараах түлхүүр үгнүүд байна.
Auto
Double
Int
Struct
Break
Else
Long
Switch
Case
Enum
Register
Typedef
Char
Extern
Return
Union
Const
Float
Short
Unsigned
Continue
For
Signed
Void
Default
Goto
Sizeof
Volatile
Do
If
Static
while




г. Стандарт ба хэрэглэгчийн идентифипатор,
 бичих дүрэм

Хэрэглэгч программдаа ашиглагдах хувьсагч, тогтмол, функц, макрозэрэгт өгсөн нэрүүдийг хэрэглэгчийн тодорхойлсон идентификатор гэдэг. Хэрэглэгчийн тодорхойлсон идентификаторт доорх шаардлагууд тавигдана. Үүнд :
·         Идентификатор нь нэг болон хэд хэдэн тэмдэгтээс тогтоно.
·         Тоо болон латин үсэг аль аль нь орж болох боловч заавал үсгээр эхэлсэн байх ёстой.
·         Зөвхөн доогуур зураас ашиглана. Харин
,
{ }
|
[ ]
( )
+
-
/
%
\
;
.
:
?
=
_
!
&
*
#
~
^
гэх мэт тэмдэгтүүд болон цэг таслал зэргийг оруулж болохгүй.
·         Түлхүүр үгтэй ижилхэн байж болохгүй
·         Кирилл үсэг оруулж болохгүй
Идентификаторт орж байгаа том, жижиг үсгүүд хоорондоо ялгаатай гэдгийг бүү март. Учир нь Си хэл том, жижиг үсгийг ялгаатай гэж үздэг. Идентификаторыг программд тодорхойлж өгөх хэрэгтэй байдаг. Жишээ нь:
 Зөв  бичигдсэн идентификаторууд :   X, y_, x2, value, _mydata, kom16, TIME, time, aa, b2c3, week_days
Буруу бичигдсэн идентификаторууд :  cout, 81_sales, my age, add49+89, for…

д.Өгөгдлийн төрлүүд /стандарт ба хэрэглэгчийн төрөл, тоочих төрөл,интервалын төрөл/

Програм нь бүхэл тоо болон бодит тоо гэх мэт төрөл бүрийн өгөгдлийг хадгалж боловсруулж байдаг. Хөрвүүлэгч өгөгдсөн утгыг ямар төрлийн өгөгдөл болохыг мэдэх хэрэгтэй байдаг учраас өгөгдлүүдийг төрөлжүүлэх шаардлагатай болдог. Мөн төрөл нь программчлалын хэлэнд ашиглагдаж байгаа өгөгдлийн хэмжээг тодорхойлж өгч байдаг. Өгөгдлийн хэмжээ гэдэг нь тухайн өгөгдлийн санах ойд эзлэх зайг хэлж байгаа юм. Программчлалын си хэлний төрлийг программчлалын бусад хэлний адилаар стандарт ба хэрэглэгчийн гэж хувааж болно. Стандарт төрөл гэдэг нь ямар нэгэн байдлаар тодорхойлолгүйгээр шууд хэрэглэж болохуйц төрлийг хэлнэ.  Харин хэрэглэгчийн төрөл гэдэг нь программд тодорхойлсны дараа хэрэглэдэг төрлийг хэлдэг.   












Батлав. МХМБСТэнхмийн эрхлэгч ........................................................../О.Мөнхбаяр/
Лекц –  5 Оролт гаралтын оператууд
C++ хэлний Оролт ба Гаралтын обьектууд
С хэл дээр Оролт / Гаралт-н үйлдэл гүйцэтгэхдээ stdio.h файлын scanf, printfфункцуудыг ашигладаг. Эдгээр функцуудыг С++ хэлний хөрвүүлэгч програмд ч ашиглаж болно. Гэвч Обьект Хандалтат Програмчлалын онцлогийг хэрэглэх үед С-ийн printf() ба scanf() болон бусад функцууд шаардлага хангадаггүй. Өөрөөр хэлбэл нэгэнт объект хандалтат програмчилалын хэлийг ашиглан энэ технологийн давуу талыг хэрэглэх үед өөрийнх нь оролт гаралтын объектыг ашиглах нь тохиромжтой байдаг юм.
С++-д хэрэглэгддэг оролт гаралтын операторууд нь iostream.h толгой файлд буюу header файлд тодорхойлогддог. iostream.h файл нь оролт гаралтын өгөгдлийн урсгал ба оролт, гаралтын тодорхойлолтоос бүрдэнэ. Энэ нь С++-ийн нэг үндсэн ухагдахуун болох классын дүрслэлийг агуулна гэсэн үг юм. Өөрөөр хэлбэл:iostream.h гэдэг нь Оролт, Гаралтын үйлдлүүдэд ашиглагдах класс юм.

cin, cout, cerr ба clog объектуудын давуу тал
Объектын нэр
Төхөөрөөмж(тодорхойлоогүй үеийн)
С- дэх ижил чанар
Хийх үйлдэл
Cin
Гар
Stdin
Стандарт оруулах төхөөрөмжтэй ажиллана
Cout
Дэлгэц
Stdout
Стандарт гаргах төхөөрөмжтэй ажиллана
Cerr
Дэлгэц
Stderr
Стандарт алдааны мэдээлэл гаргана
Clog
Дэлгэц
-
Стандарт багцлагдсан алдаа
cin –г (insertion оператор) >>, cout-г (extraction оператор) >>- тэй цуг хэрэглэгддэг.
C++-ийн оролт, гаралтын >>, >> операторууд
>> болон << операторууд нь  битийн зүүн ба баруун шилжүүлэлтийггүйцэтгэхээс гадна оролт ба гаралтын үйлдэлд ашиглагддаг. С++-д ингэж хэд хэдэн үйлдэл гүйцэтгэдэг операторуудыг дахин тодорхойлогдсон оператор гэдэг. cin, cout, объектуудын хамт << ба  >> операторууд нь char, int, float гэх мэтийн бүх стандарт өгөгдлийн төрлүүдэд ажиллахаас гадна хэрэглэгчийн тодорхойлсон төрөлд ч оруулах ба гаргах үйлдлийг  хийдэг уян хатан чанартай.
Жишээ№1: Гараас өгөгдөл оруулах ба гаргах үйлдэл
            #include <iostream.h>
main()
{ float cm = 0;           
cout << "centimeter:"; cin >> inch;
cout << "n inch = "; cout << cm/2.54;
 }
С++ ийн оролт гаралтанд С-ийн n, r, a зэрэг бүх курсор удирдах тэмдэгтүүд ашиглагдах боломжтой. Түүнчлэн С++ хэлэнд гаралтыг хувиргах төрөл бүрийн хэвшүүлэгчид байдаг.
Хэвшүүлэх хэлбэрүүд
 Програмд олон хувьсагч ашиглагдаж байхад тэдгээрт гараас утга олгох дэлгэцэнд хэвлэхдээ хувьсагч хооронд зай, tab шилжилт авах ба шинэ мөрөндшилжүүлэн өгч болно.
C++ хэлний Хэвшүүлэгчид
Тайлбар
Dec
Гаралтыг 10-тын тоололд (decimal) шилжүүлнэ
Hex
16-тын тоололд (hexadecimal)
Oct
8-тын тоололд (octal)
Flush
Гаргах төхөөрөмжид буфер дэх бүх өгөгдлийг гаргах
Endl
Гаргах урсгалд flush ба шинэ мөрийг гаргах. Өөрөөр хэлбэл: Дараагын мэдээлэл шинэ мөрөнд гарна
Ends
Урсгалд (/0) null тэмдэгт оруулах
Setprecision(int)
Бутархай тооны таслалаас хойшхи оронгийн тоо тодорхойлох
Setiosflags(төлөв)
Хаалтан дотрох хэвшүүлэх төлвийн утгаар гаргах хэлбэрийг тохируулах
Resetionflags(long)
Setiosflags-аар өөрчилсөн хэлбэрийг шинээр тогтоох
Setw(int)
Дэлгэцэнд мэдээлэл хэвлэгдэх талбарын өргөнийг тохируулах
Хэвшүүлэгчийн үйлчлэх хүрээ дараачийн хэвшүүлэгч хүртэл үргэлжилнэ.
Тоонд ашиглагдах хэвшүүлэгчдийг мэдсэнээр бүхэл тоог 10-т, 19-т, 8-тын хэлбэрээр хэвлэж чадна. Ямар ч хэлбэрийг сонгоогүй үед энэ нь 10-тын тоололд байдаг. Жишээ№2: Тоог 16-т, 8-т, 10-тын тооллын системүүдэд хэвлэх.
#include <iostream.h>
main()
{ int a=520;
  cout<<hex<<a<<endl;
  cout<<oct<<a<<endl;
  cout<<dec<<a<<endl;}
Мэдээлэл хэвлэгдэж гарах талбарын өргөнийг тодорхойлж өгөх.
cout<<setw(10)<<50<<setw(10)<<80<<setw(10)<<40;
Энэ үйлдлийг хийснээр:     50       80     40
гэж дэлгэцэнд гарах ба өөрөөр хэлбэл хэвлэгдэх утга болгонд арван тэмдэгтийн зайг хуваарилж өгнө. Setw()  нь тоон утгыг гаргаж өгсөн зайны баруун талд харин тэмдэгт өгөгдлийг зүүн талд нь шахаж хэвлэдэг ба үүнийг нь тусгай хэвшүүлэгч төлвүүдийн тусламжтайгаар өөрчилж болно.
cout<<setw(10)<<setiosflags(ios::right)<<i<<setw(10)<<i<<setw(10)<<i<<endl;
setiosflags(ios::right) гэсэн үйлдэл нь дараагынхаа өгөгдлийг setw-ээр хуваарилсан зайны баруун тал руу нь шахаж хэвлэхийг заана.
Setprecision() нь таслалтай тооны утгыг нарийвчлан хэвлэхэд ашиглагдана.
            cout<<3.145787<<endl;
            cout<<setprecision(3)<<3.6486215<<endl;
Эхний мөрний үр дүн нь: 3.145787 гэж гарах бол
хоёр дах мөрийнх нь 3.648 гэж гарна.
iostream.h-н хэвшүүлэх төлвүүд
Хэвшүүлэгч төлөвүүд
Гүйцэтгэх үүргүүд
ios::left
setw()-гээр тогтоогдсон зайны зүүн талд жигдрүүлэх
ios::rigth
setw()-гээр тогтоогдсон зайны баруун талд жигдрүүлэх
ios::scientific
Тоог шинжлэх ухааны тэмдгэлгээгээр хэвшүүлэх /е тоогоор илэрхийлэх/ Өөрөөр хэлбэл: Энэ төлвийг тогтоосны дараа хэвлэгдсэн тоонууд шинжлэх ухааны хэлбэрээр гарна
ios::fixed
Тоог ердийн 10-тын хэлбэрээр хэвшүүлэх /таслалаас хойш 6 оронгоор илэрхийлдэг/
ios::dec
Тоог 10 сууриар илэрхийлэх
ios::hex
16 сууриар илэрхийлэх
ios::oct
8 сууриар илэрхийлэх
ios::uppercase
Шинжлэх ухааны тэмдгэлгээгээр ба 16-тын тоололд илэрхийлэгдсэн тооны тэмдэгтүүд (буюу үсгүүд)-ийг том үсэг болгоно
ios::showbase
Тооны суурийг харуулах (8-тын тоог 0, 16-тын тоог 0Х)
ios::showpos
Тоог нэмэх тэмдэгтэйгээр хэвлэх
Жишээлбэл:
Тоог шинжлэх ухааны хэлбэрээр дэлгэцэнд гаргах:  cout<<setiosflags(ios::scientific)<<x<<endl;
Тоог 10-тын тооллын системээр илэрхийлэх:
cout<<setiosflags(ios::fixed)<<x<<endl;
Тооны суурийг харуулах:
cout<<setiosflags(ios::showbase)<<i<<endl;
Class (класс, анги) буюу Өгөгдлийн Хийсвэр Төрлийн (ӨХТтухай
ОХ Технологийн үндсэн ойлголтууд
Class.Класс гэдэг нь өгөгөл (data) болон үйлдлүүд (method буюу функц) -ийн багц гэж ойлгож болно.Класс бол C хэлний бүтэц төрөлтэй маш төсөөтэй.Энэ нь програмд хэрэглэгдэх хувьсагчдийг үүсгэхэд хэрэглэгдэх загвар гэж ойлгож болно.
Object.Обьект бол классын тухайн нэг тохиолдол юм.Өөрөөр хэлбэл ямар нэг төрлийн хувьсагч зарладагтай адил обьект нь классын нэг хувьсагч юм.
Method.Энэ нь класс дотор агуулагдах функц юм.
Message.Энэ нь функц дуудахтай адил ухагдахуун юм.Обьект хандалтат програмчлалд бид функц дуудахын оронд мэдээ илгээх (send message) болно.
Өгөгдлийн хийсвэр төрөл
Өгөгдлийн хийсвэр төрөл буюу класс нь энгийнээр тодорхойлбол Бүтэцтэй адилхан хэрэглэгчийн үүсгэж буй өгөгдлийн төрөл юм. Бүтцээс ялгарах гол онцлог нь өгөгдлийн далдлалт буюу програмын кодны дурын хэсгээс хандахаас хамгаалагдсан гишүүн өгөгдлүүдтэй байдаг.
Класс гэдэг нь хоорондоо логикийн хувьд уялдаа холбоотой хувьсагчид болон тэдгээр дээр үйлдэл хийх функцуудыг агуулсан хэрэглэгчийн тодорхойлсон төрөл юм. Класс төрөлтэйгээр зарлагдсан хувьсагчыг тухайн классын обьект гэж нэрлэдэг.
Обьект гэдэг нь физик биет, түүний хийсвэрлэл юм. Амьдрал дээрхи обьект буюу физик биет буюу үзэгдэл нь өөрийгөө тодорхойлох шинж чанарууд болон оршин байх төлөв байдлуудтай байдаг. Тэрхүү шинж чанар, төлөв байдлууд нь ижил байдаг обьектуудыг нэг бүлэг буюу класс болгоод, шинж чанаруудыг нь стандарт өгөгдлийн төрлүүдтэй хувьсагчид, төлөв байдлыг нь функцууд болгож бичиж өгдөг. Өөрөөр хэлбэл: класс гэдэг нь ямар нэгэн обьектийг тодорхойлж чадах гишүүн хувьсагчид, төлөв байдлыг нь тодорхойлох (тэдгээр хувьсагчид дээр үйлдэл хийх) гишүүн функцуудаас бүтдэг.
Програмд Class-г тодорхойлох формат:
class Классын нэр{
Хандалт:
гишүүн өгөгдлийн төрөл1 гишүүн өгөгдлийн нэр1;
гишүүн өгөгдлийн төрөл2 гишүүн өгөгдлийн нэр2;
...
гишүүн өгөгдлийн төрөл2 гишүүн өгөгдлийн нэр2;
Хандалт:
Гишүүн функцуудын тодорхойлолтууд; ...}
Жишээ нь: Компьютер гэсэн класс байвал гишүүн өгөгдлүүд болон функцууд нь дараах байдалтай байна.
class PC{
private:
int RAM;
float Speed;
char *manufacturer[30];
int Hard;
public:
void get_values(void)
{
cout<<”manufacturer name:”; cin>>manufacturer;
cout<<”CPU Speed:”; cin>>Speed;
cout<<”Hard disk size:”; cin>>Hard;
cout<<”RAM size:”; cin>>RAM;
}
Public хэсэг гэж юу вэ?
Класс дотор зарлагдаж буй гишүүн өгөгдлүүд болон функцуудын өмнө public:буюу private: гэсэн хандалтуудыг бичиж өгдөг. Аль нэгийг нь бичээгүй болprivate хандалттай болдог. Энэхүү хандалт нь нэг удаа бичигдсэн бол дараагын хандалт тодорхойлогдох хүртэл, бичигдсэн бүх хувьсагчид, функцуудад хэрэгждэг. Дээрх 2 хандалтын үүрэг нь:
Ямар нэг функц буюу хувьсагч нь <public> түлхүүр үгийн араас зарлагдсан бол <public> хандалттай болох бөгөөд тухайн обьектын хүрээн дэх аливаа дуудах програмын хувьд хэрэглэгдэх боломжтой. Private хандалттай хувьсагчид руу програмын дурын хэсгээс хандах боломжгүй. Иймээс зөвхөн классын <public> хэсэгт тодорхойлсон функцийг дуудах замаар private хэсэг дэхь функц,хувьсагчдийг хэрэглэж чадна.
Тухайн нэг классын гишүүн функцийг классын мужаас гадна зарлахад функц бүрийн нэрний өмнө давхар хос цэгээр классынх нь нэрийг тусгаарлан бичиж өгдөг. Ингэснээр ижил нэртэй функцүүдийг өөр өөр классын хувьд тодорхойлж өгч байгаа юм. Өөрөөр хэлбэл компилятор тэдгээрийг аль нь аль классынх болохыг ялгаж танина.
Класс дотор private гишүүн агуулагдсан байхын нэг гол учир нь уг классын гишүүн функцүүдээр тэдгээрийг өөрчлөх болон унших боломжтой байдаг.
Ихэвчилэн тухайн классын үндсэн хувьсагчид ба функцүүдийг private хэсэгт харинpublic хэсэгт нэмэлт хувьсагчид ба функцүүдийг зарладаг. Практикт ихэвчлэн хувьсагчдийг зөвхөн private хэсэгт харин функцүүдийг public хэсэгт зарладаг .Гэвч хувьсагчид эсвэл функц нөгөө хэсэгтээ зарлагдсан байдаг. Мэдээж энэ нь ямар бодлогын даалгавар тавигдсан, мөн програмын онцлогоос болох нь ойлгомжтой.
Private гишүүн өгөгдөл рүү мөн дараах аргуудаар хандаж болдог.
1        friend буюу найз функц ба найз классын тусламжтайгаар аливаа өөр класын private гишүүн өгөгдөл рүү хандаж болно. (Энэ тухай дараа дараагийн лекцээр тайлбарлана.)
2        Өөр арга нь хэрвээ хоёр ба түүнээс дээш класс удамшил харьцаатай бол удамшсан класс удамшуулсан классынхаа private өгөдөл гишүүдийг ашиглаж чадна. Мөн энэ тухай классын удамшил лекцээр тайлбарлана.
Өгөдлийн далдалт.
Өгөдлийн далдалт бол обьектын гаднах интерфейс бөгөөд дотоод үйл ажилгааны хоорондын ойлголт юм. Объектийн ашиглагчид бол хэглэгч болон програмын хэсгүүд юм. Өгөдлийн далдалт бол тухайн програмын үйл явц болонүйл явдал нь хэрэглэгчид харагдахгүй байгаа гэж ойлгож болно. Үүний нэг сайн тал нь програмын гаднах хэсэг нь тухайн объектын үйл явцтай огт холбоогүй учраас тэдгээрийг өөрчлөх гэх мэт үйлдэл хийхэд амар байдаг. Өгөгдлийн далдлалтыгprivate, public гэсэн түлхүүр үгүүдийг ашиглан хэрэгжүүлдэг.
Өгөдлийн далдлалт юунд хэрэгтэй вэ ?
1 Бид хүмүүс тийм учраас алдаа гаргаж болно үүнээс урьдчилан сэргийлж өгөдлийн далдлалт ашигладаг.
2 Програмын явцад өгөдлийн нэр давхцах эсвэл аливаа өөр програмын алдаанаас өгөдлийн далдалт сэргийлдэг.
C++ д хувсагчдийн хамрах хүрээ 4 янз байдаг .
1.Global
2.Local
3.File
4.Class