Нүүр хуудас | Танилцуулага | Блог гэж юу вэ Хичээл | Холбоос | Холбоо барих

Sunday, December 27, 2015

Компьютерийн хөгжлийн үеүд
 1954 оноос хойш 20-оод жилд мянгаад компьютерүүд зохиогдож хэдэн арван сая компьютерүүд хэрэглэгдэж байна. Компьютерийн хөгжлийн дүнд тэдний хурд багтаамж, санах ой, тооцоолох чадал асар их нэмэгджээ. Эдгээр хөгжлийн түвшнээс хамаарч хөгжлийн түвшинг үеүдэд хуваан ангиллаа.Эдгээр үед нь компьютерийн техник хангамж болон программ хангамжийн онцгой дэвшлүүдийг агуулсан болно.
 Эхний үе (1942-1959)
Анхны компьютерүүд өгөгдөл болон инструкциудыг хадгалах зориулалт бүхий хэлхээндээ вакум хоолойг ашигладаг. Гэвч вакум хоолой нь болхи том, хэт халдаг, бүрэн найдьвартай электрон төхөөрөмж биш байсан тул асар их алдаатай үйлдэл гардаг байв. Дараа нь соронзон цөмүүд нь санах төхөөрөмжийг хийхэд хэрэглэгддэг болжээ (Зур-B13) Программчлал нь машин хэл дээр хийгддэг байв.
 2 дахь үе (1959-1965)
Компьютерийн 2 дахь үеийн хөгжилд вакум хоолойг транзистороор сольсон  явдал орлоо.  Транзистор нь унтраалга мэтээр ажилладаг бөгөөд гэрлийн унтраалга шиг ажиллах боловч ямар нэг хөдөлгөөн түүнд байхгүй.Ингэснээр компьютерийн овор багасч, нэг үйлдлийг микро секундэд гүйцэтгэх, олон мянган тэмдэгтийг хадгалах боломж бүрджээ. Ингэснээр компьютер үйлдвэрлэгчид илүү багтаамжтай, хурдтай найдвартай,  халаалт өгдөггүй, жижиг оврын компьютерүүд хийх болжээ. Программууд нь машин болон симболик хэл дээр бичигдэж байв. Симболик хэл гэдэг нь компьютерийн команд болон өгөгдлийг дүрслэхэд хэрэглэдэг симбол тэмдэгтүүд юм.
 3 дахь үе (1965-1970)
3 дахь үеийн компьютерүүд нь жижиг хэсгүүд бүхий интеграл хэлхээнээс бүрдэнэ. Энд компьютерийн бүхий л хэсгүүд оролт, гаралт, хадгалах, боловсруулах хүчин чадал нэмэгдсэн байгаа бөгөөд оролт гаралтын төхөөрөмжүүд нь телефоны болон бусад төхөөрөмжүүдээр дамжуулан хоорондоо холбогдох боломжийг бүрдүүлсэн. Түүнчлэн дэлгэц нь телевизорын дэлгэцтэй адил болж, дуу хөгжмийг гаргах болж, түүнчлэн гаднаас тодорхой бага хэмжээний дуу оруулах боломжтой болж иржээ. Хадгалах багтаамжийн тухайд олон сая тэмдэгтийг хадгалах чадвар нэмэгдсэн. Процессорын хурд секундээр хэмжигдэж, программын хэд хэдэн инструкциудыг  зэрэг гүйцэтгэх болжээ. Проаграммистууд нь өндөр түвшний хэлүүд дээр объект хандалттай программчлал дээр программчлах болов.
 4 дэх үе (1970-?)
Мэдээж энэ үед мөн л компьютерийн бүрэлдэхүүн хэсгүүдийг илүү хүчирхэгжүүлэх болсон. Энэ үед гарсан томоохон дэвшил бол бие даасан хадгалах төхөөрөмжийг гаргасан бөгөөд энэ нь сисликоноор бүрэгдсэн байдаг. Мөн лазер санах ойг Үндэсний Сансар Судлалын Газраас зохион бүтээсэн байна. (Зур-B15, B16) Ингэснээр лазер ой нь 50 миллиард гаруй тэмдэгтийг хадгалах чадвартай болжээ. 1970-аад оны эхээр Buroughsдараа нь IBM-ийнхэн өөрсдийн 5000 болон 370 төрлийн компьютерүүддээ виртуал хадгалах зарчмыг танилцуулжээ. Өмнө нь дотоод хадгалах багтаамж ойролцоогоор нэг сая тэмдэгт байсан бол виртуал хадгалах төхөөрөмж нь хэдэн миллиард, триллион тэмдэгтүүдийг хадгалах боломжийг бүрдүүлсэн. Энэ үед compact disk (CD) and CDROM гарсан бөгөөд энэ нв он офф битүүдээр кодлогдох бөгөөд 4800-600 сая битүүдийг хадгалах чадвартай байв. Өөрөөр хэлбэл энэ нь 1000 хуудас текстийг багтаах хэмжээ байв. Техникийн хувьд гарсан энэхүү дэвшил нь компьютерийн программ хангамжийг хөгжүүлэхэд онцгой хувь нэмэр оруулсан юм.
5 дахь үе (?)
Энэ үеийн компьютерүүд гэхээс илүү ярьдаг машин гэж нэрлэсэн нь дээрбизээ. Техникүүд улам бүр овор хэмжээ багасч, илүү хүчин чадалтай,хурдан  болох бол программууд илүү хямд төсөр болно. Мөн ажил мэргэжилдзориулсан төрөл бүрийн тусгай программуд ихээхэн хэрэглэгдэх болно.
Компьютерийн үүсэл хөгжил

         Электрон тооцоолон бодох машиныг  бүтээх анхны оролдлогууд удаан жилийн түүхтэй ч орчин үеийн комьютерийн анхны дизайныг дайны дараахан 1946 онд АНУ-ын эрдэмтэн зохион бүтээгчид гурван жилийн уйгагүй хөдөлмөрийн үр дүнд бүтээжээ. Хамгийн том овор хэмжээтэй гээд байгаа ширээний компьютерийг ч болов өнөөдөр ганц хүн аваад явчихна. Тэгвэл энэ бүхний эхлэл хамгийн анхны компьютер ямар байсан юм бол оо. Эргэн харъя л даа.  Дэлхийн хамгийн анхны компьютерийг 1946 онд АНУ-д бүтээсэн байна. Жон Макли, Дж. Преспер Эккерт нарын бүтээсэн Electronic Numerical Integrator And Computer буюу “ENIAC” нь 150 кВт эрчим хүчээр ажилладаг 85 хавтгай дөрвөлжин метр талбай бүхий байранд нийтдээ 18 мянган электрон ламптай 30 метр урт, 28 тонн жинтэй төхөөрөмж байсан байна. Энэ компьютер үндсэндээ өнөөгийн электрон тооцооны машины /калькулятор/  үүрэг гүйцэтгэж байсан гэнэ.
          Энэ нь тухайн үед секундэд 5000 үйлдэл хийж чадаж байсан нь хүний ой ухааны чадавхитай зүйрлэхийн аргагүй дэвшилттэй байлаа.
Гэвч овор хэмжээ нь том, үнэ өртөг нь дааж давшгүй өндөр байсан учир олноор үйлдвэрлэх ямар ч боломжгүй байжээ.  Сансар судлал, батлан хамгаалах гээд засгийн газрын байгууллагуудад л тусгай зориулалтаар ашиглаж эхэлсэн байна.

Үүнээс хойш 5 жилийн дараа анхны сайжруулсан 50 загварыг хийж тус бүрийг нэг сая доллараар худалдаанд гаргасныг тэр үеийн томхон компаний тэргүүн баячууд л хэтэвчээ хоослон байж авцгаасан гэдэг. Үүнээс хойш таван жилийн дараа компьютерийн үнэ 10 дахин буурч 120 мянган доллар болж байжээ.
Компьютерийн технологи баруунд ийнхүү хурдацтай хөгжсөөр 1983 онд "Compaq" маркийн компьютер худалдаанд гарч эхэлсэн нь энэ төрлийн бизнесийг тэргүүлж жилд 111 сая ам.долларын орлого оруулан дэлхийн персональ (хувийн, ганцаарчилсан ) компьютерийн үйлдвэрлэлд толгой цохиж байв.

Wednesday, March 25, 2015

 6. Програм хангамж буюу энгийнээр Програм хангамж гэдэг нь компьютер  зааварчилгаа өгөх програм, холбогдох өгөгдлийн цогц юм. Програм хангамж гэсэн ойлголтыг анх 1960-аад онд компьютерийн тогтмол хэсэг болох техник хангамжаас ялгахын тулд хэрэглэсэн. Компакт диск (CD) болон интернэтийн татцаас өмнө хэрэглээний програм болон үйлдлийн систем нь соронзон диск болон соронзон тууз гэсэн уян орчин дээр бичигддэг байжээ. Одоо програм хангамж нь нийгмийн салшгүй нэг хэсэг болсон байна. Үндсэндээ програм хангамжийг техник хангамждаа хэзээ, ямар даалгавар гүйцэтгэхийг нь хэлж өгдөг.
Компьютерийн програм хангамж нь дотроо компьютерийг програмууд , архивууд болонтэдгээрийг дэмждэг бичиг баримтуудыг өөртөө багтаадаг. Програм хангамж гэх энэхүү үг нь заримдаа  өгөгдлийн програм хангамж гэсэн илүү нарийн утга санааг илэрхийлдэг. Програм хагамж нь компьтерийн санах ой  буюу биет бус зүйлд хадгалагддаг.
Програм хангамж нь компьютерийн хэл дээр бичигддэг. Програм хангамж нь ихэнхдээ дээд түвшиний програмын хэл дээр бичигдэх ба ингэснээр компьютерийн хэл дээр бичсэнээс илүү хялбар бас бүтээмжтэй болдог байна. Өндөр түвшиний програмын хэлийг эмхтэгэл тайлбар эсвэл энэ хоёрыг хослуулж хэрэглэн орчуулж болдог. Хэрвээ компьютерийн хэл нь хүмүүний хэлний үсгүүдийг ашиглаж байгаа тохиолдол доод түвшиний иж бүрдэл хэл дээр бичигдэж болдог. Иж бүрдэл хэл нь эвлүүлэгч  ашиглан компьютерийн хэл рүү хөрвүүлэгддэг.
Програм хангамжийн давуу тал нь өөрчлөгдөх чадвартаа байх ба хөгжүүлэгчид бизнес, корпорациуд болон ер нь дэлхий дээрх хүн болгонд тус болох төрөл бүрийн програмууд бичиж байна. Одоо үед програмууд янз бүрийн үйлдлийг секундыг хэд хуваасантай тэнцүү хугацаанд гүйцэтгэдэг.

Tuesday, March 24, 2015

1. Техник хангамжийн үндсэн бүрэлдэхүүн

Сүлжээний зангилаануудыг хооронд нь холбохын зориулалттай үндсэн техник хангамж бүх сүлжээнд байдаг. Үүнд, Сүлжээний интерфэйсийн карт буюу Сүлжээний карт (network interface card, NIC), Бриж буюу Гүүр, Хаб, Свич, Рүүтэр буюу Замчлагч орно. Үүний зэрэгцээ тус үндсэн техник хангамжийг хооронд нь холбох арга хэрэгтэй (энэ нь ихэнх үед Категори 5 UTP кабель байна). Cat5-аас гадна микродолгионон холболт (IEEE 802.12), шилэн кабель хэрэглэж болно.

Сүлжээний интерфэйсийн карт

Сүлжээний карт (өөрөөр сүлжээний адаптэр, сүлжээний интерфэйсийн карт ч гэдэг) нь компьютерийн сүлжээгээр компьютерүүд хоорондоо харилцах боломжийг олгодог техник хангамж юм. Энэ нь сүлжээний орчин руух физик хандалтыг олгодог ба MAC хаягыг хэрэглэн доод түвшний хаяглах системийг бүрдүүлнэ.

Рипийтэр/Давтагч

Рипийтэр нь дохиог хүлээн аваад хэрэггүй шуугианыг арилгаж, дахин генерацлаж, илүү өндөр чадлын түвшинд буюу саадын нөгөө тал руу дахин дамжуулдаг (ийнхүү дохио нь сулралгүйгээр илүү урт зайг туулах боломжтой болно) электроникийн төхөөрөмж юм. Мушгиа кабелиар хийгдсэн Этернэт сүлжээний хувьд 100 метрээс хэтрэх кабельд рипийтэрийг ашиглах шаардлагатай. Рипийтэр нь OSI загварын физик түвшинд ажилладаг.

Хаб

Сүлжээний хаб нь олон порттой, ирсэн пакетийг бүх порт руугаа шууд цацдаг төхөөрөмж. Ингэх үед фрэймийн зорьсон хаяг нь broadcast хаяг руу солигдохгүй. Хаб нь OSI загварын физик түвшинд ажиллана.

Бриж/Гүүр

Сүлжээний бриж нь OSI загварын өгөгдөл холболтын түвшинд (2-р түвшин) сүлжээний сегментүүдийг холбодог. Бриж нь ирсэн портоос бусад бүх порт руу өгөгдлийг цацна. Гэхдээ хабаас ялгаатай нь MAC хаягуудыг аль портод байгааг тогтоож авдаг. Иймд нэгэнт порт, хаягийг нийцүүлсэний дараа тэрхүү хаяг руу явуулсан өгөгдлийг зөвхөн тохирох портод дамжуулна.
Портууд дээр ирсэн фрэймүүдийн эх үүсвэр хаягийг ажигласны үр дүнд брижүүд нь порт, хаягуудыг нийцүүлдэг. Портод фрэйм ирсний дараа эх үүсвэр хаяг нь хадгалагдан, бриж нь тус MAC хаягийг ирсэн порттой холбоотой гэж үзнэ. Мэдэгдэхгүй байсан зорьсон хаягтай фрэйм ирэхэд бриж нь ирсэн портоос бусад бүх порт руу фрэймийг цацдаг.
Брижүүд гурван үндсэн төрөлд хуваагдана:
  • Local bridge: LAN-гуудыг шууд холбоно.
  • Remote bridge: LAN-гууд хооронд WAN-г бүтээхэд хэрэглэгддэг. Ийм төрлийн брижэд холболт нь эцсийн сүлжээнээс уда.

Свич

Свич нь OSI загварын хоёрдугаар түвшний фрэймүүдийг MAC хаягаар нь портууд хооронд урагш дамжуулж, шүүдэг төхөөрөмж юм.
Свичийн хабаас ялгаатай нь холбоо явагдах ёстой портууд хооронд л фрэймүүдийг дамжуулдаг. Свич нь мөргөлдөөний талбарыг задалдаг ч өөрийгөө цацалтын талбар гэдэг. Тус төхөөрөмж нь фрэймүүдийг MAC хаягаар нь дамжуулдаг. Свичэд ихэвчлэн маш олон тооны порт байх бөгөөд төхөөрөмжүүдэд одон топологийг байгуулах ба нэмэлт свичүүдийг холбох боломжтой болгоно.
Зарим свичүүд нь 3-р түвшний хаяглалт, эсвэл өөр логик түвшнүүдийн хувьд рүүтинг хийх чадвартай бөгөөд эдгээрийг олон түвшинт свич (multi-layer switch) гэнэ. Худалдаанд свич гэсэн үгийг хаяг, ачаалал, агуулгаар нь өгөгдлийг ангилж дамжуулдаг рүүтэр, бриж, URL заагч гэх мэт төхөөрөмжүүдийг илэрхийлэхэд ашиглах тохиолдол бий.

Рүүтэр/Замчлагч/Чиглүүлэгч

Рүүтэр буюу Замчлагч, Чиглүүлэгч нь OSI загварын 3-р түвшний мэдээллийг боловсруулж ашиглан пакетуудыг сүлжээ хооронд дамжуулдаг төхөөрөмж юм. Олон тохиолдолд энэхүү мэдээлэл нь рүүтинг (чиглүүлэх) хүснэгттэй (routing table, мөн forwarding table) хамтаар боловсрогддог. Рүүтэрүүд нь тус хүснэгтийг ашиглан пакетийг цааш дамжуулах интерфэйсээ сонгодо

2.Програм, програмчлал, програмчлалын хэл гэж юу вэ?

Бодит ертөнцийн бодит компьютерууд мэдээллийг бидний өгсөн зааврын дагуу боловсруулдаг. Ийм заавруудын цогцыг компьютерын програм (computer programm) гэнэ. Програм зохиох процессыг програмчлал (computer programming) гэнэ. Програмчлал үйлдэхдээ ашигладаг логик “хэрэгсэл” бол програмчлалын хэл (programming language) юм. Програмчлал үйлдэхдээ ашигладаг физик “хэрэгсэл” бол компьютер юм.       
Програмчлалын мөн чанаруудыг дурдъя.
·         Програмчлал бол удирдан жолоодох процесс: (Програмистын юу хий гэж заасныг компьютер ёсчлон биелүүлнэ.)
·          Програмчлал бол зааж, сургах процесс: (Зөвхөн програмист л компьютерт шинэ юмыг зааж, сургана.)
·         Програмчлал бол асуудал шийдвэрлэх процесс: (Компьютерээр үргэлж ямар нэг ашигтай зүйлийг хийлгэнэ. Ж.нь хамгийн тохиромжит аяллын маршрутыг олох г.м.)
·         Програмчлал бол бүтээлч үйл ажиллагаа: (Олон боломжуудаас хамгийн сайныг олж тогтоох.)
·          Програмчлал бол загварчлал: (Шийдвэрлэх гэж буй асуудлыг дүрслэнэ, ө.х. түүний загварыг (model) байгуулна.)
·         Програмчлал бол хийсвэрлэл (abstraction): (Асуудлын загварыг байгуулахдаа хийсвэрлэнэ, ө.х. асуудлын мөн чанарыг алдагдуулахгүйгээр чухал бус хэсгүүдийг нь хаяна.)
·         Програмчлал бол оновчтой бөгөөд ойлгомжтой байдал: (Даалгаврыг хэрхэн гүйцэтгэх вэ гэдгийг оновчтой бөгөөд ойлгомжтойгоор илэрхийлнэ.)
 Програм
   Дээрх олон талт үйл ажиллагааны дүнд үүсч буй бүтээгдэхүүн бол програм юм.
Програм ч гэсэн өөрөө олон мөн чанартай. Тухайлбал:
·         Програм бол загвар.
·         Програм бол програмистын бичсэн заавруудын цогц дараалал (sequence of instructions).
·         Компьютер програмыг заавар заавраар нь цувуулж биелүүлнэ.
·         Зааврууд нь компьютерт ойлгомжтойгоор илэрхийлэгдсэн байна.
г.м.

Машины хэл

   Орчин үеийн компьютерын мэдээлэл боловсруулах үйл ажиллагаа дотор талын логик элементүүдэд (схемүүдэд) өгөгдсөн хүчдэлээр зохицуулагддаг. Логик элемент нь “асаалттай”/ “унтраалттай” (эсвэл “үнэн”/“худал” буюу “хүчдэл байна”/“хүчдэл байхгүй”) гэсэн хоёр тогтвортой логик төлвийн аль нэгд оршдог. Ө.х. компьютер хоёр ялгаатай төлвийг л мэдэрдэг байна. Тиймээс компьютерт орж буй аливаа мэдээлэл нь ийм хоёр ялгаатай төлвүүдийн комбинациар, ө.х. логик элементүүдийн дарааллаар дүрслэгдэх ёстой болно. Эс тэгвээс компьютер тухайн мэдээллийг ойлгохгүй. Энэ бол компьютерын “төрөлх хэл” юм. Үүнийг машины хэл (machine language) гэдэг. Харин хүн логик элементүүдийн төлвийг тоогоор дүрсэлж ойлгоно. Тухайлбал “асаалттай” төлвийг 1, “унтраалттай” төлвийг 0-ээр кодлоно. Ө.х. хүний хувьд машины хэл гэдэг нь ...0101011010... гэсэн тоон дараалал байдаг бол компьютерын хувьд
гэсэн цахилгаан дохионуудын дараалал байна.
Машины хэл нь урьдчилан тодорхойлогдсон бүлэг командуудаас тогтдог. Эдгээр командуудыг машины командууд (machine commands) гэнэ. Урьдчилан тодорхойлогдсон гэдэг нь, команд бүр өөрийн гэсэн тоон кодтой гэсэн үг. Энэ кодоороо санах ойд хадгалагдаж байдаг. Өөр өөр төрлийн компьютерын машины командууд, ө.х. машины хэлүүд нь өөр өөр байна. Тэгэхээр програм гэдэг бол үнэн хэрэгтээ машины хэлээр илэрхийлэгдсэн заавруудын (машины командуудын) дараалал болж таарч байна. Машины хэлээр програм бичих үед санах ой, регистр, процессорын командууд гээд компьютерын бүх нөөц, бололцоог хэрэглэгч бүрэн хянах боломжтой. Мэдээж шууд “төрөлх хэлээр” нь бичигдсэн байх тул програм компьютерт туйлын ойлгомжтой, нийцтэй байна. Гэтэл ийм програмыг хүн уншиж ойлгох, бас бичихэд маш төвөгтэй болно. Тухайн нэг машины команд ямар кодтой байдгийг сайн мэдэх хэрэгтэй болно. Энэ нь машины хэлээр томоохон програм бичих боломжийг үгүй болгодог.

Програмчлалын хэл

   Үүний улмаас, компьютерт зориулж програм бичих үйл ажиллагааг хөнгөвчлөхийн тулд програмчлалын хэл (programming language) хэмээх “логик хэрэгсэл“ 1950-иад оноос бий болсон байна. Програмчлалын хэлийг, програм зохиож буй хүндээ хэр ойлгомжтой байна вэ, эсрэгээр, бүтцийн хувьд машины хэлээс хэр ялгаатай байна вэ гэдгээр нь:
·         Доод төвшний програмчлалын хэл (Low-level programming language)
·          Дээд төвшний програмчлалын хэл (High-level programming language)
гэж ангилдаг.

Доод төвшний хэл

Доод төвшний програмчлалын хэлний жишээ бол 1950-иад оноос боловсруулагдан ашиглагдаж ирсэн ассемблерын хэл (assembler language) юм. Ассемблер хэлийн онцлог нь машины командуудыг богино англи маягийн үгээр төлөөлүүлэн сольсон явдал юм. Ингэснээр, машины хэлээр бол учиргүй тоон дараалал болох байсан програм уншиж ойлгоход дөхөмтэй, тодорхой үгнүүдээс тогтсон текст болж хувирдаг. Ө.х. ассемблерын програмын мөр болгон цаанаа машины нэг командад харгалзах боломжтой. Гэхдээ ассемблерын хэлээр бичсэн програмыг машины хэл рүү хөрвүүлээгүй цагт компьютерт ойлгомжгүй хэвээр байх болно. Хөрвүүлэхийн тулд ассемблер (assemblers) хэмээх тусгай хөрвүүлэгч програмыг ашиглана. Ассемблерын хэл бол нэг ёсондоо машины хэлний “үгчилсэн” хувилбар юм. Тиймээс хэрэв процессорууд хоорондоо ялгаатай бол тэдгээрийн хувьд ассемблерын хэлээр бичигдсэн програм мөн өөр өөр байдаг. Доорхи жишээнд, a=5 ба b=3 байхад c=a+b үйлдлийг хийж, үр дүнг дэлгэцэнд хэвлэх програм машины болон ассемблерын хэл дээр хэрхэн бичигдсэнийг харуулжээ. Ассемблерын текст хүн харахад арай ойлгомжтой байгаа нь илт. Энд үзүүлсэн жишээ IBM PC төрлийн компьютерт тохирно.

Дээд төвшний хэл

            Компьютерын техник хөгжихийн хэрээр түүнийг хэрэглэх хүрээ улам л өргөжиж, олон ажил мэргэжлийн хүмүүс програм бичих хэрэгтэй болсон. Гэтэл эдгээр хүмүүс ассемблерын хэлээр програм бичихийн тулд компьютерын архитектур, ажиллах зарчимыг маш сайн мэдэх шаардлагатай болно. Ийм “дарамтаас” програмистыг чөлөөлөхийн тулд дээд төвшний програмчлалын хэлүүд бий болсон. Эдгээр хэлүүд нь хүний хэл ярианд (ихэвчлэн англи хэлд) илүү ойр, уншиж ойлгоход хялбар, математикийн стандарт тэмдэглэгээнүүдийг өргөн ашигладаг г.м. шалтгаанаар хүн хэрэглэхэд илүү тохиромжтой тул их биш хугацаанд нүсэр хөдөлмөр зарцуулахгүйгээр програм бичихэд тохиромжтой юм. Мөн сурахад хамаагүй хялбар ажээ. Ийм хэлээр бичсэн програм жирийн л текст байдаг. Тиймээс компьютерийн төрлөөс үл хамааран нэгээс нөгөө рүү амархан зөөгддөг юм. Текстийг мөр мөрөөр (lines) бичигдсэн бүтэцтэй гэж ойлгох хэрэгтэй. Нэг ийм мөрийг илэрхийлэл (expression) эсвэл оператор (statement) хэмээн нэрийднэ. Ямар нэг утга илэрхийлсэн мөрийг илэрхийлэл гэнэ. Ямар нэг үйлдлийг илэрхийлсэн мөрийг оператор гэнэ. Операторыг биелэх (executable), үл биелэх (non-executable) гэж ангилдаг. Биелэх оператор нь ямар нэг машины командыг төлөөлнө.

Хөрвүүлэлт

   Програмчлалын хэлээр бичсэн текстийг машины хэл рүү хөрвүүлээгүй цагт компьютерт ойлгомжгүй хэвээрээ байх болно. Хөрвүүлэлтийн үр дүнд биелэх файл (execution file) үүснэ. Энэ нь програмчлалын эцсийн бүттээгдэхүүн бөгөөд 100% машины хэлээр дүрслэгдсэн, жинхэнэ процессорын биелүүлэх ёстой заавруудыг агуулсан тэр хэлбэр юм. Биелэх файлыг ачаалснаар програм биелэгдэж эхлэнэ. Хөрвүүлэлтийн (translation) хоёр хэлбэр бий:
·         Компиляци (compilation)
·         Интерпретаци (interpretation)
Компиляци бол текстийг бүхлээр нь нэг удаа хөрвүүлэх хэлбэр юм. Бүрэн хөрвүүлэгдсэнийхээ дараа програм биелж эхлэнэ.
Интерпретаци бол текстийг бүхлээр нь нэг удаа биш харин мөр мөрөөр хөрвүүлэх хэлбэр юм. Хөрвүүлэгдсэн мөр тэр дороо биелэнэ. Ө.х. хөрвүүлэлт, биелэлт хоёр зэрэгцэн явагдана.
Компиляцийг компилятор (compiler) хэмээх хөрвүүлэгч програмаар гүйцэтгэнэ.
Интерпретацийг интерпретатор (interpreter) хэмээх хөрвүүлэгч програмаар гүйцэтгэнэ.
Хэл болгон өөрийн гэсэн хөрвүүлэгчтэй байна. Хэл ба хөрвүүлэгч нь салшгүй ойлголтууд юм. Өнөө үед олон төрлийн компьютер, мөн тэдгээрт суух олон янзын үйлдлийн системүүд (платформууд) байгаагаас шалтгаалан нэг програмчлалын хэлний хэд хэдэн ялгаатай хөрвүүлэгч байх жишээтэй. Ж.нь UNIX/Linux-т зориулсан хөрвүүлэгч, MS-DOS үйлдлийн системд зориулсан хөрвүүлэгч, Windows-т зориулсан хөрвүүлэгч г.м. Хөрвүүлэгдээгүй байгаа текстийг эх код (source code), түүнийг бүхлээр нь хөрвүүлэхэд үүсэх машины кодыг объект код (object code) гэж нэрлэдэг. Програм бичихдээ бид эдгээр нэр томъёог байнга ашиглах болно. Зургийг харахад, эх код бол нэг платформаас нөгөө рүү хялбар зөөгдөх боломжтой байна. Гэтэл объект кодууд ингэх боломжгүй. Учир нь өөр өөр хөрвүүлэгчээр үүсгэгдсэн байна. Дээд төвшний хэл болгон өөрийн гэсэн “зөв бичих” (Syntax) дүрэмтэй. Хэрэв хөрвүүлж буй эх кодонд дүрэм зөрчсөн алдаанууд байвал хөрвүүлэгч “энд ийм ийм алдаа байна” гэсэн мэдээлэл гаргаад, хөрвүүлэлт тасалдана. Эдгээр алдааг арилгасан тохиолдолд л хөрвүүлэлт амжилттай болдог.

Програмчлалын технологиуд

   Нэгэнт дээд төвшний програмчлалын хэлүүд нь хүний хэл ярианд ойр бүтэцтэй учраас эсрэгээр машины хэлээс хол ялгаатай болж ирэх нь зүй. Ийм нөхцөлд, түүнийг машины хэлэнд хөрвүүлэх процесс удааширч ирдэг. Үүнээс болоод програмын биелэгдэх хурд доод төвшний хэл дээр үүсгэсэн програмыг бодвол харьцангуй удаан, санах ойд эзлэх зай их болно. Гэхдээ үүнийг үл тооцон, өнөөдөр буй ихэнх хэрэглээний програмыг өндөр төвшний хэлүүдээр зохиодог. Дээд төвшний хэл дээр програм бичихдээ тодорхой хэв маягийг (стиль) баримтлах ёстой. Үүнийг програмчлалын технологи эсвэл програмчлах техник (programming technique) гэнэ.
Програмчлалын үндсэн технологиуд:
·         Процедурт програмчлал (Procedural programming)
·          Модульт програмчлал (Modular programming)
·          Объект хандлагат програмчлал (Object-Oriented Programming)
г.м.

Процедурт програмчлал

    Процедурт програмчлал (Procedure-Oriented programming - POP) гэдэг нь, аливаа програмыг өөр хоорондоо холбоотой хэд хэдэн бие даасан жижиг хэсгүүд - дэд програмуудаас тогтсон, нарийн эмх журамтай цогц мэтээр авч үздэг технологи.
Дэд програм гэдэг нь тодорхой нэрээр нэрлэгдсэн хэсэг бүлэг үйлдэл юм. Ингэснээр аливаа том бодлого түүний зөвхөн тодорхой жижиг хэсгийг бодох үүрэгтэй олон дэд бодлогод хуваагддаг. Ө.х. ямар ч бодлогыг олон дэд бодлогод хувааж, тэдгээрийг алхам алхамаар шийдэх замаар зорилгодоо хүрэх зарчмыг хэрэгжүүлдэг ажээ. Дэд програмыг дахиад дэд програмуудад хуваах боломжтой. Нэгэнт програм нь ингэж олон дэд програмд хуваагддаг бол тухайн програм биелж эхлэхийн тулд дэд програмуудын аль нэг нь бусдаасаа түрүүлж биелж эхлэх ёстой. Ө.х. аль нэг дэд програм бусдаасаа давуу эрхтэй байх ёстой. Энэхүү давуу эрхтэй дэд програм хамгийн түрүүнд ажиллаж эхлээд, дараа нь бусад дэд програмуудаа дуудан ажиллуулах ёстой. Түүнийг үндсэн дэд програм буюу үндсэн програм (main program) хэмээн нэрийддэг. Тиймээс:
Процедурт програм = Үндсэн програм + Дэд програмууд гэж томъёолж болно.
Дараах зураг дээр, үндсэн програм (ҮП) нэг дэд програмыг (ДП) тодорхой интервалтайгаар хоёр удаа дуудаж буй процессыг схемчлэн үзүүлжээ.
ҮП нь A хүртэл биелээд ДП-ыг дуудаж байна. ДП нь B-ээс C хүртэл биелж дуусаад ҮП-д удирдлагаа шилжүүлнэ. ҮП удирдлага хүлээж авсан газраасаа D хүртэл биелээд дахиад ДП-ыг дуудаж байна. ДП биелж дуусаад удирдлагаа дахиад ҮП-д шилжүүлж байна. ҮП цааш үргэжлэн биелэнэ.
Дэд програм нь:
·         процедур (procedure)
·         функц (function) гэсэн хэлбэрүүдтэй байна.
Функц, процедур болгон өөрийн гэсэн оролт/гаралт буюу эхлэл/төгсгөлтэй байна. Тэдгээр нь үндсэн програм болон өөр хоорондоо оролт/гаралтанд илгээгдсэн өгөгдлүүдээр холбогдоно. Функц хэлбэрийн дэд програм нь утгатай (хариутай) байна. Процедур төрлийн дэд програмд ийм утга гэж байхгүй.
Дэд програмыг гарал үүслийн хувьд:
·         стандарт (standard)
·         хэрэглэгчийн (user-defined) гэж ангилдаг.
Програмчлалын хэлэнд урьдаас тодорхойлогдож, түүний хөрвүүлэгчийн бүрдэлд орсон байдаг дэд програмыг стандарт дэд програм гэнэ. Байнга хийгдэж байдаг үйлдлүүдийг ингэж стандарт дэд програм болгодог. Ө.х. хэрэглэгч нь стандарт дэд програмыг бэлнээр нь шууд ашиглана. Олон тооны стандарт дэд програмууд нийлээд тухайн хэлний стандарт санг (standard library) бүрдүүлнэ.

Процедурт програмчлалын хэлүүд

   Процедурт програмчлалын хэлийг заримдаа алгоритмын хэл (algorithmic languages) гэдэг. Учир нь алгоритмыг ихэвчлэн ийм хэлээр програмчилдаг. Хамгийн түгээмэл тархсан ямар алгоритмын хэлүүд байдаг вэ? Цөөн хэдийг дурдъя.
FORTRAN - FORmula TRANslator
   Хамгийн анхны бүрэн хэмжээний алгоритмын хэл. 1954-1957 онд IBM (International Business Machines, АНУ) компанид, гарамгай эрдэмтэн Жон Бэкусын (John Backus) удирдсан ЭШ-ний баг физик, математик, инженерийн шинжлэх ухааны тооцоо хийх зориулалтаар бүтээсэн. Ассемблерын хэлтэй ширүүн өрсөлдөөн хийж, ялагч болон гарсан энэ хэл эрдэмтэд төдийгүй аж үйлдвэрийнхэн, цэргийнхний талархлыг зүй ёсоор хүлээжээ. Ялангуяа 20-р зууны хоёрдогч хагасаас эхэлсэн сансрын судалгааг компьютерын техникээр “зэвсэглэхэд” үнэлж баршгүй хувь нэмэр оруулсан байна. Хэдийгээр хагас зуун жилийн настай боловч эрдэм шинжилгээний давхаргад одоо ч өргөн хэрэглэгдэж байгаа. Жишээ болгож, a=5 ба b=3 байхад c=a+b гэсэн үйлдлийг гүйцэтгээд үр дүнг дэлгэцэнд хэвлэх фортран-програмын эх кодыг үзүүлэв.

BASIC - Beginner’s All Purpose Symbolic Instruction Code

   “Эхлэн суралцагчид зориулсан универсал тэмдэгтүүд” хэмээн энэ програмын хэлний нэрийг орчуулж болно. 1965 онд Дартмудын коллежийн (Dartmouth College, АНУ) математикчид Жон Кемени (John Kemeny), Томас Курц (Thomas Kurtz) нар зохиосон. Уг хэл нь сурахад хялбар, компьютерын бус мэргэжилтэй хүн ч ажиллах боломжтой байдлаараа олны анхаарлыг татаж, өргөн хэрэглэгдэх болсон байна. Интерпретатор төрлийн хөрвүүлэгчтэй. Тиймээс програм анхлан сурч буй хүмүүст их тохиромжтой байдаг. Орчин үед BASIC гэхийн оронд ихэвчлэн Basic гэж бичих болсон. Энэ нь англи хэлний basic (үндсэн, анхдагч) гэсэн үгийг илэрхийлж буй юм. Жишээ болгож, a=5 ба b=3 байхад c=a+b гэсэн үйлдлийг гүйцэтгээд үр дүнг дэлгэцэнд хэвлэх бейсик-програмын эх кодыг үзүүллээ.


Pascal

    Францын математикч Паскалийн нэрээр нэрлэгдсэн энэ хэлийг Цюрихын технологийн дээд сургуулийн (Щвейцар) эрдэмтэн Никлаус Вирт (Nicklaus Wirth) 1970-аад онд оюутнуудыг програмчлалд сургах зориулалтаар бүтээсэн. Эхлээд Вирт, ФОРТРАН болон тухайн үед өргөн тархсан байсан Алгол (Algol) хэлийг оюутнуудад заадаг байжээ. Энэ хоёр хэл хоёулаа оюутныг програмчлалд сургахад тохиромжгүй мэт түүнд санагддаг байсан тул тэрээр шинэ хэл зохиож, 17-р зууны францын алдарт эрдэмтэн Блез Паскалийн нэрээр нэрлэсэн байна. Учир нь 1640 онд Паскаль хамгийн анхны тооцоолох машин-арифмометрыг зохион бүтээсэн гэж үздэг. Програмчлалын Паскаль хэл маш амжилттай зохиогдсон учраас сургалтын хүрээнээс халин гарч, түгээмэл хэрэглэгдэгч алгоритмын хэл болсон. Одоо ч гэсэн сургалтанд өргөн хэрэглэгддэг.

C

    1970-аад онд AT&T компанийн Беллийн лабораторийн (Bell Laboratories, АНУ) э.ш.а. Деннис Ритчи (Dennis Ritchie) Unix үйлдлийн системд програмчлах зорилгоор бүтээсэн байна. Си хэл нь, доод төвшний програмчлал болон дээд төвшний програмчлалын давуу талуудыг жигд агуулсан учраас заримдаа дунд төвшний програмчлалын хэл гэдэг. Алгоритмын хэлүүд дундаас хамгийн өргөн тархсан, хүчирхэг хэл. Програмчлалд эхлэн суралцаж буй хүн судлахад жаал төвөгтэй гэж ярьдаг боловч бид энэ хэлийг үзэх болно. Жишээ болгож, a=5 ба b=3 байхад c=a+b гэсэн үйлдлийг гүйцэтгээд үр дүнг дэлгэцэнд хэвлэх си-програмын эх кодыг үзүүллээ.

Модульт програмчлал

    Програмд хийгдэх үйлдлүүдийг хэд хэдээр нь бүлэглээд дэд програмуудад хувааж болдог (процедурт програмчлал) бол дараагийн алхамд тэдгээр дэд програмуудыг ямар нэг нийтлэг байдлаар хэд хэдэн бүлэгт хувааж болно. Ийм хэсэг бүлэг дэд програмыг модуль (module) гэнэ. Програмыг модулиудад хуваах технологийг модульт програмчлал гэнэ. Модулиуд харьцангуй бие даасан шинжтэй байх бөгөөд үндсэн програм дотор бүхэлд нь эргэлдэж байх өгөгдлүүдээс (data) гадна өөрсдийн гэсэн дотоод өгөгдлүүдтэй (data1, data2) байж болно.

Объект хандлагат програмчлал

    Бид материаллаг ертөнцөд амьдардаг. Материаллаг ертөнц объектуудаас тогтоно. Объект болгон ямар нэг мэдээллийн эх үүсвэр байдаг. Объектын тухай мэдээлэл нь үндсэндээ хоёр янз:
·         Properties: объектын шинж чанарын тухай өгөгдлүүд (эзэлхүүн, масс, өнгө, талбай, хэлбэр дүрс, шатах температур г.м. - дандаа нэр үгнүүд!)
·          Methods: объектын шинж чанарыг өөрчлөх аргууд (шахах/тэлэх, ихэсгэх/багасгах, будах, хуваах, шатаах г.м – дандаа үйл үгнүүд!).
Эндээс дараах дүгнэлтийг хийж болно. Том жижиг ямар ч програм зохиолоо гэсэн түүндээ ашиглаж буй өгөгдлийг ямар нэг объектын шинж чанарын тухай өгөгдөл мэтээр төсөөлж болно. Ж.нь 2 тоог хооронд нь нэмдэг програм бичлээ гэхэд тэр хоёр тоог ямар нэг биеийн (бие бол объект) массыг илэрхийлнэ гэж төсөөлж болно. Хэрэглэгчтэй хялбар диалог үүсгэдэг програм бичлээ гэхэд тэр програмыг өөр нэг хүн (хүн бол объект ☺) байна гэж төсөөлж болно.
Эндээс дараагийн дүгнэлтийг хийж болно. Програмд ашиглагдаж буй өгөгдлийг ямар нэг объектын шинж чанарын өгөгдөл гэж үзэх аваас тэр өгөгдөлтэй ажиллана гэдэг нь тухайн шинж чанарыг өөрчлөх аргыг хэрэгжүүлж байна гэсэн үг болно. Энэ арга ч гэсэн бас объектынх. Тиймээс ерөөсөө объектыг өөрийг нь програм дотор дүрслэвэл бүр тохиромжтой юм биш үү? Ингэсэн тохиолдолд програм нь өөртөө ямар нэг объектын дүрслэлийг агуулсан, тэгээд түүнтэйгээ ажилладаг байна гэсэн үг. Объектын дүрслэл гэдэг бол объектын загвар. Ө.х. програм бол объектын загварыг агуулсан, тэгээд тэр загвартай ажилладаг байна гэсэн үг. Нэг програм нэгээс олон объекттын загвартай ажилладаг байж болно. Сэтгэлгээний ийм арга барил нь илүү нарийн, илүү том програм, тухайлбал бодит ертөнцийн юмс үзэгдлийг загварчилсан програм бичихэд их тохиромжтой байдаг ажээ. Ийм сэтгэлгээг Объект Хандлагат зарчим (Object Oriented principle) гэдэг. Энэ зарчимд тулгуурласан програмчлалын технологийг Объект Хандлагат Програмчлал (Object Oriented Programming -OOP) гэдэг. ОХ технологийг хэрэгжүүлэх хэрэгслүүдийг өөртөө агуулсан програмчлалын хэлийг ОХ хэл (OO language) гэнэ. ОХ зарчим нь бүр 1960-аад оны сүүлээр Simula-67, Smalltalk г.м. програмчлалын хэлэнд тусгалаа олсон байжээ. Гэхдээ тодорхой шалтгаанаар эдгээр хэлүүд өргөн дэлгэрч чадаагүй. Харин 80-аад онд зохиогдсон C++ хэлэнд ОХ зарчмууд ямар нэг зөрчилгүйгээр үр дүнтэй нэвтэрч чадсан байна. Энэ нь:
·         C++ хэлийг өргөнөөр хэрэглэгдэгч програмчлалын хэл болоход,
·         ОХ технологийг өнөө үеийн давамгайлагч програмчлалын технологи болоход түлхэц
болсон байна.
Эдүгээ ОХП-д C++ хэлээс гадна Java хэмээх хэл түгээмэл хэрэглэгдэж байгаа. Эдгээр нь дээд төвшний програмчлалын хэлүүд юм.
 Програмчлалын орчнууд
    Тодорхой нэг програмчлалын хэл дээр програм бичих ажлыг хөнгөвчлөх зорилгоор програм хангамж үйлдвэрлэгч фирмүүд, мэргэжилтнүүдийн бүтээсэн тусгай програмыг програмчлалын орчин буюу програмчлалын систем (programming system) хэмээн нэрийднэ. Тиймээс програмчлалын хэл болон програмчлалын орчин гэдэг нь ялгаатай ойлголтууд юм.              Програмчлалын орчин нь:
·         Хэрэглэгчтэй харьцах “тохилог” интерфейс (user-friendly interface)
·          Хөрвүүлэгч (компилятор юм уу интерпретатор, эсвэл хоёулаа) програм
·         Debugger буюу “Бөөс түүгч” програм (заримдаа Зүгшрүүлэгч гэнэ)
·         Програмын текст бичих талбар буюу ажлын талбар (Source editor)
·         Олон цонхны горим (Multiple Document Interface - MDI)
·         Ассемблерын хэл дээр програм бичих боломж (Built-in assembler)
·         Тусламжийн буюу Лавлах систем (Help)
·         Бусад туслах чанарын програмууд
г.м.ийг өөртөө нэгтгэсэн байдаг.
    Програм зохиогч хүн ажлын талбарт ажиллан програмын эх кодоо програмчлалын хэл дээр бичээд, хөрвүүлэгч програмаар хөрвүүлнэ. Хэрэв програм бичих явцад хэл болон системийн талаарх ямар нэг мэдээлэл хэрэгтэй болвол түүнийг Лавлах системээс авч болно. Түүнчлэн нэг зэрэг хэд хэдэн ажлын талбарыг нээгээд, тус бүрд нь өөр өөр програмын текстийг бичих боломжтой. Тухайн агшинд чухам аль талбар идэвхтэй байна, түүнд агуулагдах текстийг хөрвүүлэгч хөрвүүлнэ. Ийм ажлын горимыг Олон цонхны горим хэмээн нэрийддэг. Заримдаа хэрэглэгчийн зохиосон програмын текстэнд дүрмийн хувьд (хөрвүүлэгчийн “нүдээр харахад”) алдаагүй боловч логикийн хувьд (програмыг биелүүлэхэд илэрдэг) алдаатай хэсгүүд агуулагдсан байж болно. Ж.нь тоог 0-д хуваах, сөрөг тооноос квадрат язгуур авах г.м. үйлдлүүдийг хөрвүүлэгч “олж харалгүй” хөрвүүлж болно. Тэгвэл хөрвүүлээд гарсан програмыг компьютер биелүүлэх явцдаа дээрх үйлдлүүдийг хийх заавартай тулгармагц алдаа үүсгэн зогсдог. Ийм логикийн алдаануудыг “Bug” буюу “Бөөс” хэмээн нэрийдэх ба тэдгээрийг илрүүлэн арилгах үндсэн үүрэгтэй туслах програмыг Debugger буюу махчилан орчуулваас “Бөөс түүгч” гэдэг. Орчин үеийн програмчлалын системүүд бүгд ийм Debugger-тай байна. Манайд өргөн хэрэглэгдэж ирсэн системүүд гэвэл Microsoft Quick Basic, Turbo/Borland Pascal, Borland Turbo C++, Microsoft Fortran PowerStation зэрэг DOS орчны програмчлалын системүүд болно.  
    90-ээд оны дунд үеэс хойш, Windows үйлдлийн систем эрчимтэй хөгжиж хэрэглэгчдийг өөртөө татах болсон, ОХП хүчтэй нэвтэрч эхэлсэн зэрэг шалтгаанаар Windows орчны програмчлалын системүүд буюу Windows-ийн орчинд ажиллах зориулалттай програм бүтээх хэрэгслүүд өргөн тархсан байна. Ж.нь Borland International-ийн Delphi, C++ Builder, Microsoft-ийн Visual C++, Visual Basic, Compaq-ийн Visual Fortran г.м. Сүүлийн үед Java хэлний програмчлалын системүүд бас хэрэглээнд түгээмэл нэвтэрч байна. Ж.нь NetBeans, Eclipse, VisualCafe г.м.

3. Массив

Массив гэж юу вэ?
Одоог хүртэл бид дандаа энгийн өгөгдлүүдтэй ажиллаж ирсэн билээ. Энгийн өгөгдөл гэдэг нь нэр бүхий ганц өгөгдөл юм. Ө.х. нэг нэрэнд нэг л өгөгдөл харгалзана гэсэн үг.
Энгийн өгөгдөл нь өгөгдлийн үндсэн төрлүүдийн (char, unsigned char, short, unsigned short, int, unsigned int, long int, unsigned long, float, double, long double г.м.)  аль нэгт хамаарна.
Тэгвэл Си хэлэнд, энгийн өгөгдлүүдээр нийлмэл өгөгдлийг бүтээж болно. Нийлмэл өгөгдлүүд гэдэгт массив, бүтэц, нэгдэл, файл гэх мэтийг хамааруулдаг. Эдгээрээс массивыг авч үзье.
Массив (array) гэдэг нь нэгэн ижил төрлийн, олон тооны энгийн өгөгдлийн нэгдэл юм. Массив нь нэртэй (name of array) байна. Ө.х. массивын хувьд, нэг нэрэнд нэгээс олон адил төрлийн энгийн өгөгдөл харгалздаг ажээ. Энэ утгаараа нийлмэл өгөгдөл болно.
Массивын бүрдэлд орогч тухайн нэг өгөгдлийг массивын элемент гэнэ. Элементүүд бүгд дугаарлагдсан байна. Элементийн дугаарыг индекс (index) гэнэ. Индекс нь 0-ээс эхлэн тоологдоно.
Массив нь ямар ач холбогдолтой вэ? Их хэмжээний мэдээлэл, төрөл бүрийн статистик өгөгдлийг боловсруулах програмд массив ашиглах нь тун тохиромжтой байдаг.
Массив нь математикийн нэгэн чухал ойлголт болох матрицыг програмчлалын хэлэнд илэрхийлдгээрээ онцгой ач холбогдолтой юм.

Массивын төрлүүд, хэлбэрүүд

Массив нь нэгэнт өгөгдөл учраас аль нэг үндсэн өгөгдлийн төрөлд хамаарах ёстой. Энэ нь түүний элементийн төрлөөр тодорхойлогдоно. Тиймээс:
·          бүхэл төрлийн массив (элементийн төрөл нь char, unsigned char, short, unsigned short, int, unsigned int, long int, unsigned long г.м.-ийн аль нэг)
·          бодит төрлийн массив (элементийн төрөл нь float, double, long double г.м.-ийн аль нэг)
гэсэн төрлүүд байх нь ээ.
Массив нь нэгэнт өгөгдөл учраас тогтмол ба хувьсагч гэж бас хуваагдана. Тогтмол массивт нэг удаа утга оноосон бол програмын явцад дахиж утгыг нь өөрчлөх боломжгүй. Харин хувьсагч массивт хэдэн ч удаа утга оноож болно.

Массивын урт ба хэмжээс

Массивын элементүүдийн тоог массивын урт (length) гэдэг. Компьютерын санах ойн багтаамжаас хамаараад хэрэглэгч ямар ч урттай массив зарлаж болно. Жишээлбэл бүхэл int төрлийн 5 гэсэн урттай массив зарлалаа гэвэл түүний санах ойд эзлэх зай нь 10 байт болно. Учир нь int төрлийн нэг энгийн элемент 2 байт болдог, тиймээс 5*2=10 болж байгаа юм. Үүнтэй адил зарчмаар, хэрэв бодит float төрлийн 20 гэсэн урттай массив зарлавал, нэг энгийн float төрлийн элемент 4 байт авах учраас 20*4=80 байт зай эзлэх ажээ.
Массивын хэмжээс гэдэг нь арай өөр ойлголт. Логикийн хувьд массив нь шулуун, эсвэл “тэгш өнцөгт”, эсвэл “параллелипипед” гэх мэт геометрийн ямар төсөөллийг бүрдүүлж буйгаас нь хамааруулаад нэг хэмжээст (1D - one dimensional), хоёр хэмжээст (2D - two dimensional), гурван хэмжээст (3D - three dimensional) массив гэх мэтээр нэрлэдэг. Гурваас олон хэмжээстэй (multidimensional) ч байж болно. Хоёр хэмжээст массивыг массивын массив (array of array), гурван хэмжээстийг массивын массивын массив (array of array of array) гэх мэтчилэн үгээр илэрхийлж болно.

Массивыг зарлах

Массивыг ашиглахын тулд эхлээд түүнийг зарлах ёстой.

Хувьсагч массив

Нэг хэмжээст (1D) хувьсагч массивыг дараах загварын дагуу зарлана:
өгөгдлийн_төрөл массивын_нэр [урт];
Энд:
·          өгөгдлийн_төрөл – массивын төрлийг заасан албаны үг
·          массивын_нэр – массивыг нэрлэхийн тулд програм зохиогчийн сонгож авсан чөлөөт идентификатор
·          урт – массивын элементийн тоо.
Ж.нь:
int mas [25];
Энд бид бүхэл int төрлийн 25 элементтэй 1D mas гэсэн хувьсагч массив зарлаж байна. Хамгийн эхний элемент 0 гэсэн индекстэй (дугаартай), хамгийн сүүлийн элемент 24 гэсэн индекстэй байна.
float my [10];
Энд бодит float төрлийн 10 элементтэй 1D my гэсэн хувьсагч массив зарлагдав.
char titles [9];
Энд тэмдэгт төрлийн 9 элементтэй 1D titles хэмээх массив зарлалаа.
Хоёр хэмжээст (2D) хувьсагч массивыг зарлахдаа:
 өгөгдлийн_төрөл массивын_нэр [урт_1] [урт_2];
гэсэн загварыг баримтлана. Энд:
·          урт_1 – массивын эхний хэмжээсийн урт (элементийн тоо)
·          урт_2 - массивын хоёр дахь хэмжээсийн урт (элементийн тоо)
Практикт, 2D массивын эхний хэмжээсийг мөр (row), хоёр дахь хэмжээсийг багана (column) хэмээн нэрийддэг. Ж.нь:
int matrix [5] [10];
Энд бүхэл int төрлийн matrix гэсэн 5 мөр, 10 баганатай 2 хэмжээст массивыг зарлаж байна.
Массивын массив гэдэг томъёололтой энэ нь яг тохирч байгаа юм. Учир нь 5 элементтэй matrix массивын нэг элемент нь мөн 10 элементтэй бүхэл төрлийн массив байна гэсэн үг.
Matrix массивын нийт элементийн тоо нь 5*10=50 байна.
Зарим нэг жишээ.
double table [20] [20];
Энд 20 мөр, 20 баганатай бодит double төрлийн table гэсэн квадрат массив зарлагдав. Элементийн тоо нь 400 болно.
unsigned char sheet [6] [5];
Энд 6 мөр, 5 багана бүхий sheet гэсэн бүхэл unsigned char төрлийн массив зарлаж байна. Элементийн тоо нь 30 болно.
Гурван хэмжээст (3D) хувьсагч массив зарлах нь:
өгөгдлийн_төрөл массивын_нэр [урт_1] [урт_2] [урт_3];
гэж бичигдэнэ. Энэ тохиолдолд мөр, багана дээр нэмэгдээд гурав дахь хэмжээс (өндөр ?) гарч ирнэ. Хэрэв гурван хэмжээсийн уртууд нь адил бол куб массив гэнэ.
Г.м.-ээр олон хэмжээст массивыг зарлаж болно. Онолын хувьд, массивын хэмжээст хязгаар тавьсан юм байхгүй.

Массивыг идэвхжүүлэх

Массивыг зарлахдаа шууд анхны утга оноох, ө.х. идэвхжүүлэх боломжтой. Гэхдээ массив нь олон элементээс тогтсон нийлмэл өгөгдөл учраас түүнтэй бүхэлд нь харьцаж, нэг утга оноох боломжгүй. Харин түүний элементүүдийн авах утгыг тоочин бичнэ.
Тухайлбал 1D массивыг идэвхжүүлэхдээ:
өгөгдлийн_төрөл массивын_нэр [урт] = { утга0, утга1, утга2, ..., утга­урт-1} ;
гэж бичнэ. Энд:
·          утга0, утга1, утга2, ..., утга­урт-1 – массивын элемент бүрийн авах анхны утга.
Ж.нь:
int numbers [5] = {12, 345, -41, 1361, 3};
numbers массивын эхний элемент 12, хоёр дахь элемент 345, гурав дахь элемент -41, дөрөв дэх элемент 1361, тав дахь элемент 3 байна.
float v [3] = {0.1564. 9.23, -1.0};
v массивын гурван элемент харгалзан 0.1564, 9.23, -1.0 гэсэн анхны утгуудыг авна.
unsigned char symbols [6] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’};
symbols массивын элементүүд харгалзан ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ гэсэн тэмдэгт утгуудыг авна.
Бичигдсэн анхны утгын тоо массивын уртаас хэтрэхгүй байх ёстой. Эс тэгвээс хөрвүүлэгч алдаа заана. Харин массивын уртаас цөөн тоотой анхны утга бичигдсэн байвал массивын элементүүд эхнээсээ тэдгээр утгыг авч, үлдсэн элементүүд идэвхжихгүйгээр үлдэнэ. Ж.нь:
int M [8] = { 8, 4, 2};
Энд, M массивын зөвхөн эхний гурван элемент идэвхжээд үлдсэн элементүүд идэвхжихгүй.
Массивын уртыг ил зааж өгөлгүйгээр идэвхжүүлж бас болдог:
өгөгдлийн_төрөл массивын_нэр [ ] = { утга0, утга1, утга2, ... } ;
Ийм тохиолдолд хөрвүүлэгч өөрөө, { } дотор бичигдсэн анхны утгуудын тоогоор массивын уртыг тодорхойлдог. Ж.нь:
double d [ ] = {1.0. 2.0, 3.0, 4.0, 5.0};
2D массив идэвхжүүлэхдээ, ийм массивын мөр бүр нь өөрөө дахиад хэд хэдэн баганад хуваагдана гэдгийг тооцож, анхны утгуудыг мөр мөрөөр бүлэглэн { } дотор бичдэг. Ж.нь:
double A [3] [2] = { {10, 20}, {30, 40}, {50, 60} };
3 мөртэй 2 баганатай A массивын элементүүдийг мөрөөр нь бүлэглэн идэвхжүүлж байна. Тиймээс эхний мөрийн элементүүд харгалзан 10 ба 20, хоёр дахь мөрийн элементүүд харгалзан 30 ба 40, гурав дахь мөрийн элементүүд харгалзан 50 ба 60 гэсэн утгыг авна.
Дээрх бичиглэл нь.
double A [3] [2] = {  10, 20, 30, 40, 50, 60 };
гэсэн бичиглэлтэй эквивалент юм. Ө.х. мөр мөрөөр бүлэглэхгүйгээр идэвхжүүлэх бас боломжтой. Гэхдээ ингэх нь, 2D массивын шинж чанарыг бүрхэгдүүлэх тул учир дутагдалтай.
3D массив идэвхжүүлэхдээ, ийм массивын мөр бүр нь хэд хэдэн баганад, харин багана бүр нь хэд хэдэн “өндөрт” хуваагдана гэдгийг тооцож, мөр мөрөөр бүлэглэн { } бичиж, тус бүрийн дотор нь дахиад багана баганаар бүлэглэн { } дотор анхны утгуудыг бичдэг. Ж.нь:
int mmm [4] [3] [2] = {  {  {1, 2}, {11, 22}, {111, 222}  },
                                        {  {3, 4}, {33, 44}, {333, 444}  },
                                        {  {5, 6}, {55, 66}, {555, 666}  },
                                        {  {7, 8}, {77, 88}, {777, 888}  }  }
Г.м.-ээр олон хэмжээст массивыг идэвхжүүлж болно.
Мэдээж, бичигдсэн анхны утгын тоо олон хэмжээст массивын нийт элементийн тоогоос хэтрэхгүй байх ёстой. Эс тэгвээс хөрвүүлэгч алдаа заана. Харин элементийн тооноос цөөн анхны утга бичигдсэн, ө.х. массивыг бүхэлд нь идэвхжүүлээгүй байж болно.
Ж.нь дараах тохиолдлыг авч үзье. Энд 4 мөр, 6 баганатай 2D массивын зөвхөн 1-р баганын дагуух элементүүдийг идэвхжүүлж байгаа юм:
double z [4] [6] = { {1}, {2}, {3}, {4} };
Зургаар дүрсэлвэл:
1*****
2*****
3*****
4*****
Харин энэ жишээ 5 мөр, 4 баганатай “тэгш өнцөгт” массиваас “гурвалжин” массив үүсгэж байна:
int x [5] [4] = { {1}, {2, 3}, {4, 5, 6}, {7, 8, 9, 10} };
Зургаар дүрсэлвэл:
1***
23**
456*
78910
****

Тогтмол массив

Тогтмол массив зарлах нь үндсэндээ хувьсагч массивыг идэвхжүүлэхтэй адилхан. Гэхдээ хамгийн урд нь const гэсэн нөөц үгийг бичих ёстой.
Тухайлбал 1D тогтмол массивыг зарлах:
const өгөгдлийн_төрөл массивын_нэр [урт] = { утга0, утга1, утга2, ..., утга­урт-1} ;
Ж.нь:
const unsigned char a [5] = { 23, 45, 8, 128, 2 };
const float values [6] = { 0.5, 2.1, 9.81, 4.5, 560.4, 7.0 };
const char letters [7] = {‘p’, ‘h’, ‘y’, ‘s’, ‘i’, ‘c’, ‘s’ };
2D тогтмол массив зарлаж буй жишээ:
const unsigned char z [3] [5] = { { 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 }, {31, 32, 33, 34, 35 } };

Массивын элементэд хандах. Массивын санах ой дахь дүрслэл

Өмнөх хэсэгт бид массивыг хэрхэн идэвхжүүлэх талаар үзсэн. Харин одоо, нэгэнт зарлагдсан хувьсагч массив дээр утга оноох г.м. биелэгдэх операторуудыг хэрхэн гүйцэтгэх талаар ярилцъя.
Нэгэнт массив нь олон элементээс тогтсон нийлмэл өгөгдөл учраас түүнтэй бүхэлд нь харьцаж, нэг утга оноох боломжгүй гэдгийг дурдсан билээ. Ө.х.:
массивын_нэр = утга;
гэсэн үйлдэл байж болохгүй юм. Ж.нь ийм програм байвал хөрвүүлэгч алдаа заах нь ээ:
/* жишээ програм №1 – алдаатай програм */
void main ( )
{
       unsigned char d [3]; /* бүхэл unsigned char төрлийн 3 элементтэй d массив */
       int buhel [10];             /* бүхэл төрлийн 10 элементтэй buhel массив */
       d=12;                           /* энэ бол алдаа! */
       buhel=0;                      /* энэ ч гэсэн алдаа! */
}
Зөвхөн массивын элементүүдэд хандалт хийж утга онооно. Элементэд хандалт хийхдээ:
массивын_нэр [элементийн_индекс]
гэсэн бичлэгийн загварыг баримтлана. Түүнд утга оноохын тулд:
массивын_нэр [элементийн_индекс] = утга;
гэж бичих хэрэгтэй. Элементийн индекс 0-ээс эхэлдгийг санах хэрэгтэй. Ө.х. хэрэв N элементтэй массив байна гэвэл элементийн индекс нь 0-ээс N-1 хооронд утга авна.
Ж.нь дараах програмыг харцгаая.
/* жишээ програм №2 */
void main ( )
{
       unsigned char a [5] ; /* unsigned char төрлийн 5 элементтэй a массив */
       float myarr [9] ;           /* бодит float төрлийн 9 элементтэй myarr массив */
       char ch [6] ;                /* бүхэл char төрлийн 6 элементтэй ch массив */
       a[0] = 12;                    /* a массивын 0-р элементэд 12 гэсэн утга оноох */
myarr[1] = -23.14;       /* myarr массивын 1-р элементэд -23.14 гэсэн утга оноох */
ch[2] = ’R’;                 /* ch массивын 2-р элемент нь ‘R’ гэсэн утга авна */
ch[3] = ’?’;                  /* ch массивын 3-р элемент нь ‘?’ гэсэн утга авна */
ch[4] = 154;                 /* ch массивын 4-р элемент нь 154 гэсэн утга авна */
}
Дээрх жишээнд буй массивууд анх зарлагдахдаа санах ойд ямар байдалтай байрлахыг зургаар дүрслэн харуулъя. Тухайлбал a массив:
гэж дүрслэгдэнэ. Харин a[0]=12; үйлдэл хийгдсэний дараагаар:
болно. Энэ массивын элемент бүр нь unsigned char төрлийнх учраас санах ойн нэг нүдийг эзлэх тул массив өөрөө элементийнхээ тоотой тэнцүү тооны нүднүүдийг эзэлж байна.
Харин ch массив:
байна. ch[2]=’R’; ch[3]=’?’; ch[4]=154; гэсэн үйлдлүүдийн дараа:
болно. Энэ массивын элемент бүр char төрлийнх учраас мөн л санах ойн нэг нүдийг эзлэх ба массив өөрөө элементийнхээ тоотой тэнцүү тооны нүдийг эзэлж байна.
myarr массивын хувьд:
болно. Түүний нэг элемент нь бодит float төрлийнх учраас санах ойд 4 нүд эзлэх юм. Тиймээс массив өөрөө 4*3=12 нүд (байт) эзэлж байгаа.
Дээрх жишээ програмд, массивын элементийн индексийг дандаа тогтмол утгаар илэрхийлсэн байгаа. Тэгвэл элементийн индексийг хувьсагчаар илэрхийлж болно. Тухайлбал дараах дараах жишээг авч үзье.
/* жишээ програм №3 */
#include <stdio.h>
#include <conio.h>

void main ( )
{
       unsigned char mas [8];                      /* unsigned char төрлийн 8 элементтэй mas массив */
       int i;                                                     /* массивын элементийн индексийг илэрхийлэх хувьсагч */
       for (i=0; i<=7; i++)
{
mas[i]=1;                                 /* mas массивын i-р элементэд 1 гэсэн утга оноох */
                   printf("\nmas[%d]=%u", i, mas[i]); /* i-р элементийн утгыг дэлгэцэнд гаргах */
}
getch ( );
}
Энэ програм ажиллаж дуусахад mas массивын бүх элемент бүгд 1 гэсэн утгыг авсан байна. Учир нь массивын элементийн индексийг i-ээр тэмдэглэж, элементэд 1 гэсэн утга оноосон, тэгээд утга оноох энэ үйлдэл for операторын давталтын бие болсон, гэтэл i нь өөрөө давталтын параметр учраас утга нь 0-ээс 7 хүртэл гүйнэ. Тиймээс элементийн индекс мөн 0-ээс 7 хүртэл гүйж, a[0]:=1, a[1]:=1, a[2]:=1, …, a[7]:=1 болж байгаа юм. Энэ жишээнд, for давталт ашиглан массивуудын бүх элементэд утга оноож байна. Тэгвэл while, do-while операторуудыг ашиглан мөн ингэж болох нь мэдээж.
2D массивын элементэд хандалт хийж, утга оноох нь:
массивын_нэр [элементийн_индекс1>][элементийн_индекс2] = утга;
гэж бичигдэнэ.
Ж.нь:
/* жишээ програм №4 */
void main ( )
{
       unsigned char d2[4][3];         /* unsigned char төрлийн 4 мөр, 3 баганатай 2D массив */
       d2[2][1] = 91;                         /* d2 массивын 2-р мөр 1-р баганын элемент 91 гэсэн утга авна */
       d2[0][2] = 123;                        /* d2 массивын 0-р мөр 2-р баганын элемент 123 гэсэн утга авна */
}
2D массивын эхний индекс мөр, дараагийнх нь багана байдаг гэсэн. Яг энэ дарааллаар санах ойд байрлана:
Эхлээд 0-р мөрийн 3 баганын элементүүд, дараа нь 1-р мөрийн 3 баганын элементүүд г.м.-ээр дараалжээ. Хэдийгээр 2D массив матрицтай адил боловч санах ойд бол шугаман хэлбэртэй цуварч байрладаг байна.
1D массивын адилаар 2D массивын индексүүдийг мөн хувьсагчаар тэмдэглэж болно. Дараах жишээнд, 5x5 гэсэн квадрат массивыг 0-16 хүртэлх бүхэл тоогоор “бөглөж” байна.
/* жишээ програм №5 */
#include <stdio.h>
#include <conio.h>

void main ( )
{
       unsigned char sq[5][5];
       unsigned char i, j;
       for (i=0; i<=4; i++)
                   for (j=0; j<=4; j++)
                   {
                               sq[i][j]=i*j;      /* sq массивын (i, j)-р элемент i*j гэсэн утга авна */
                               printf("\nsq[%u][%u]=%u", i, j, sq[i][j]); /* (i, j)-р элементийн утгыг хэвлэх */
}
getch ( );
}
Энд давхар давталт хийгдсэнийг анхаарч байна уу. Гадна талын for давталтын параметр i-ийн нэг утганд дотоод for давталтын параметр j 0-ээс 4 хүртэл гүйсэн утга авна. i-ийн утга өөрөө мөн 0-ээс 4 хүртэл гүйнэ. Тиймээс sq[i] [j]=i*j; үйлдэл 5*5=25 удаа хийгдэх юм.
2D массивын элементэд утга оноодгийн адилаар 3 болон түүнээс олон хэмжээст массивт хандаж болно. Энэ тохиолдолд нэмэлт индексүүд орж ирнэ. 3D массивын элемент 3 индексээр, 4D массивын элемент 4 индексээр тодорхойлогдоно г.м. Ж.нь:
/* жишээ програм №6 */
void main ( )
{
       int d3[4][2][5];                                    /* 3D d3 массив: 4 мөр, 2 багана, 5 өндөр? */
       unsigned char d4[2][3][4][3];            /* 4D d4 массив: 2 мөр, 3 багана, 4 өндөр, 3 ? */

       d3[1][0][3] = 2005;     /* d3 массивын 1-р мөр 0-р баганын 3-р элементэд 2005 */
       d4[0][2][0][2] = 64;     /* d4 массивын 0-р мөр 2-р баганын 0-ийн 2-р элементэд 64 */
}
Олон хэмжээст массивын индексүүдийг хувьсагчаар тэмдэглэх тохиолдолд дор хаяж хэмжээсийн тоотой тэнцүү ширхэг хувьсагч ашиглагдаж болно.
Олон хэмжээст массив нь санах ойд мөн л шугаман хэлбэртэйгээр цуварч байрлана.
Тогтмол массив санах ойд байрлах хэлбэр нь адил төрлийн хувьсагч массив байрлахтай адил байна. Гол ялгаа нь, тийм массив зарлагдахад бүх элемент (бүх нүд) утгаар бөглөгдсөн байх болно.

Массивтай ажиллах

Одоо массив төрлийн өгөгдөлтэй хэрхэн ажиллах тухай ерөнхий ойлголт, дадлыг өгөх зорилгоор зарим жишээ авч үзье. Эдгээр нь, массивтай ажиллах үйл ажиллагаанд олонтаа таардаг, хамгийн хялбар тохиолдлууд юм.
·          Жишээ 1. 1D массивын элементүүдийн утгыг гаднаас оруулах:


·          Жишээ 2. 2D массивын элементүүдийн утгыг гаднаас оруулах:
  4.Мэдрэгч дэлгэц
Touchscreen нь электрон визуаль дэлгэц (electronic visual display) ба дэлгэцийн аль нэг хэсэгт хүрэхэд байрлалыг нь мэдэрч илрүүлэх чадвартай байдаг. Уг дэлгэц нь ерөнхийдөө хураа (finger) болон гараар (hand) хүрэхэд зориулагдсан. Touchscreen нь мөн бусад зүйлсийг хүрэхэд мэдэрдэг жишээ нь Stylus (computing)|stylus буюу зориулалтын үзэг. Touchscreen нь ихэнх төхөөрөмжид байдаг ба жишээ нь тоглоомын самбар (game consoles), компьютер (all-in-one computer), таблет(tablet computer), ухаалаг гар утаснууд (smartphone) зэрэг юм.
Touchscreen дэлгэц 2 үндсэн үүрэгтэй. Нэгдүгээрт дэлгэцэнд гарч байгаа зүйлтэй хэрэглэгч шууд харицах боломжтой болдог, энэ нь хулгана (mouse (computing)|mouse) эсвэл touchpad-аар удирдсанаас хялбар байдаг. Хоёрт touchscreen нь ямар нэгэн заагч нэмэлт төхөөрөмж ашиглахгүй зөвхөн гараараа удирдах боломжтой байдаг. Зарим touchscreen дэлгэцүүд нь комптьютерт суурилсан байдаг мөн сүлжээнд терминал байдлаар байдаг. Touchscreen дэлгэцийг багтаасан дижитал төхөөрөмжүүд нь бусад төрлийн төхөөрөмжүүдийг бодвол хэрэглээ нь илүү голлох үүрэгтэй байдаг. Жишээ нь Хэрэглэгчид туслах самбар (personal digital assistant|personal digital assistant (PDA)) хиймэл дагуулийн (satellite navigation) байршил олох төхөөрөмж, гар утаснуудmobile phone, видео тоглоомууд video game зэрэг юм.
Ухаалаг гар утаснууд (smartphone), таблет компьютерүүд(tablet computer), мэдээллийн төхөөрөмжүүдийн (information appliance) хэрэглээний тоо нь touchscreen дэлгэцний зөөврийн болон функционал электрон төхөөрөмжид суурилах эрэлт хэрэгцээг ихээр нэмэгдүүлж байна. Энэ нь цэвэр өөгүй гадаргатай байх ба, ямар нэгэн нэмэлт техник хангамжгүйгээр (computer keyboard|keyboard эсвэл mouse (computing)|mouse) хэрэглэгч болон төхөөрөмж хооронд харьцах боломжийг олгодог мөн ашиглах үед цөөн тооны хэрэгсэл шаардагддаг. Touchscreen дэлгэц нь эрүүл мэндийн салбар, хүнд үйлдвэрлэлийн (heavy industry), салбар, музейн өрөөний (room automation) системийн автоматчлал зэрэг гарkeyboard (computing)|keyboard хулгана mouse (computing)|mouse ашиглахад хүндрэлтэй газруудад маш ихээр хэрэглэдэг.
Түүхийн хувьд touchscreen мэдрэгч болон түүний удирдлагад суурилсан техникийн програм нь дэлгэц, чип, эх хавтан үйлдвэрлэгчдийн (system integrator) зах зээлийн дараагийн өргөн зах зээлийг хамарсан. Тиймээс интеграл схем болон дэлгэц үйлдвэрлэгчид touchscreen-ы эрэлт хэрэгцээг хүлээн зөвшөөрч өөрсдийн бүтээгдэхүүнд touchscreen дэлгэцийг суулган үйлдвэрлэж эхэлсэн.

Түүх


Анхны загвар x-y Нийт эзлэхүүний эсэргүүцлийн мэдрэгч дэлгэц (зүүн) CERN байгууллагын Bent Stumpe (Данийн электроникийн инженер) анх хөгжүүлсэн.
1881 онд Apple компани нь нээсэн.E.A. Johnson 1965 онд гарсан жижиг өгүүлэлд өөрийн ажлын талаар ярихдаа touchscreen дэлгэцийн талаар дурьдсан байна. Үүний дараа фото зураг болон судалгаа туршилтын хамт 1967 онд гаргасан. 1968 онд агаарын тээврийн удирдлагын touchscreen технологийн талаар гаргасан. 1970 онд Bent Stumple болон Frank Beck нар нь CERN-д ажилладаг инженерүүд, 1970 оны эхээр touchscreen-ыг хөгжүүлж, 1973 онд ашиглаж эхлэсэн. Энэ нь touchscreen нь Bent Stumple-ийн ажил дээр суурилсан ба телевизийн үйлдвэр ашиглаж эхэлсэн. Эсэргүүцэлтэй touchscreen нь Америкийн зохион бүтээгч Ж Самуэль Хурстээр хөгжүүлсэн ба 1982 онд анхны хувилбар нь гарсан.
1979–1985 онд, Fairlight CMI (болон Fairlight CMI IIx) нар нь тэргүүлэх хөгжмийн түүвэрлэлт болон воркстейшний дахин синтезлэх үйл ажиллагааг (light pen) технологийг ашиглан үйлдлийн систем дотор тусгай үзэг ашиглан өгөгдөлийг синтезлэх болон өөр цэс рүү хандаж ажилладаг байв. Fairlight-ийн сүүлийн хувилбар болох IIT моделууд нь (light pen)-ийг ашиглан график таблет дээр ажилладаг байв. 1983 оны HP-150 нь дэлхийн хамгийн анхны дэлгэцийн мэдрэгчтэй худалдаанд гарсан компьютерүүдийн нэг юм.PLATO IV системтэй адилхан мэдрэх технологи нь infrared transmitter болон түүний 9" Sony Cathode Ray Tube (CRT) дэлгэцийн ирмэгүүдэд суурилсан хүлээн авагчуудтай ба дэлгэцэнд хүрсэн ямар ч opacity (optics)|non-transparent төрлийн объектийн дэлгэцэн дэх байршилыг мэдэрдэг байсан.

General Motors|General Motors' ECC-ын (Электрон удирдлагын төв) 6-н зураг. automobile гэсэн стандарт хэрэгсэлд анхны мэдрэгчтэй дэлгэцийг 1985 онд суулгасан. CRT-д суурилсан ECC нь анх 1986 онд Buick Riviera суудлын машинд агаарчуулагч болон стерео системийг хянаж удирдах зориулалттай мэдрэгч дэлгэцийг суулгасан.
1980-д оны эхээр General Motors компани Delco Electronics гэх салбараа автомашины онц шаардлагатай бус функцуудийг ( хурдны тохируулга, дамжуулгууд, тоормс гэх мэтээм бусад) механик эсвэл электрон механик системээс solid state (electronics)|solid state буюу биет төлөвөөр солихыг зорилгоо болгож байсан.
Уг төхөөрөмжүүд нь ECC-г нэр хүндэд гаргасан. Дижитал компьютер (digital computer) болон программын (software) удирдлагын систем нь төрөл бүрийн нэмэлт мэдрэгч (sensors), servos, solenoids, радио антенна (Antenna (radio)|antenna) болон monochrome буюу нэг өнгий CRT мэдрэгч дэлгцэцүүдтэй нягт холбож өгсөн нь дэлгэцийн гаралт болон оролтийн аргыг функцэлж өгсөн. ECC нь уламжлалт мехраник хөгжмийн систем (Vehicle audio|stereo), сэнс, халаагч болон автомашины агааржуулагчын (automobile air conditioning|air conditioner) удирдлага болон дэлгэццийг сольсон. ECC нь 1985-1989 оны Buick_Riviera#Seventh_generation|Buick Riviera гэх стандарт хэрэгсэл байсан, мөн 1988-89 оны Buick Reatta гэсэн хувилбар гаргасан. Харамсалтай нь Buick Reatta нь зарим Buick-ын уламжлалт хэрэглэгчдээс шалтгаалан тийм ч их дэлгэрээгүй мөн өөр нэг шалтгаан нь ECC-ын техникийн асуудлаас үүдсэн засвар өртөг өндөртэй байсан.
1986 онд 16-н битийн Atari 520ST өнгөт компьютер нь анхны графиктай програм байсан. Давуу тал нь өнгөт мэдрэгч дэлгэцтэй виджет байлаа. Giselle Bisson-ны ViewTouch нь Лас Вегасын Fall Comdex-д зохион бүтээгч Gene Mosher нь анх танилцуулсан. Энэ нь анхны худалдаанд гарсан график горимын мэдрэгч дэлгэцтэй POS систем байсан.
Дан болон давхар мэдрэгчийн (multi-touch), цаг хугацаанд хамаарсан хүн компьютерийн харьцааны (human–computer interaction), хөдөлгөөн мэдэрч дэлгэц эргүүлэх, дэлгэцэн дээгүүр зурж солилцоо хийх, мөн мэдрэгч дэлгэцийн гар(компьютерийн гартай дүйцэхүүц хурдан бичих боломжтой буюу 25 үг минутанд бичих боломжтой) гэх мэтийг судлаж эхэлсэн.
Sega компаний Game Gear-ын гаргасан мэдрэгч дэлгэцтэй тоглоомын удирдлага (game controller|controls) үүний нэгэн хэсэг байсан. Гэвч энэ нь маш өндөр өртөгтэй мэдрэгчтэй дэлгэцээс шалтгаалан 1990 онд худалдаанд гарч чадаагүй. 2004 онд Nintendo DS-г худалдаанд гарах хүртэл видео тоглоомонд мэдрэгчтэй дэлгэц нь ашиглагдаагүй юм. Ихэнх мэдрэгчтэй дэлгэц нь зөвхөн нэг цэг дээр тухайн үедээ мэдрэх чадвартай байсан ба цөөхөн нь хэд нь мэдрэхдээ хэр чанга дарж байгааг мэдэрч ялгах чадвартай байсан. Энэ нь multi-touch буюу давхар мэдрэгчийн технологийн эхлэл байсан юм.
5.Компьютерийн  хэрэглээ
 Сүлжээ, интернэт
Интернэт дэх зам нь хэсгийн дүрслэл.
Компьютер 1950-аад оноос хойш олон газарт хооронд мэдээлэл зохицуулахад хэрэглэгддэг байна. АНУ-ын цэрэг армийн мэргэн систем Sabre зэрэг тусгай зориулалтын арилжааны систем нь хэд хэдэн хүргэсэн ийм систем, анхны томоохон жишээ юм. [32]
1970-аад онд АНУ-ын даяар эрдэм шинжилгээний байгууллага нь компьютерийн инженер харилцаа холбооны технологийг ашиглан хамтдаа компьютер холбож эхэлсэн байна. Энэ хүчин чармайлт ARPA-гаас явуулсан (одоо DARPA) санхүүжүүлж байсан, мөн энэ нь үйлдвэрлэсэн компьютерийн сүлжээ ARPANET гэж нэрлэдэг байсан. ARPANET боломжтой тархалтыг хийж, хөгжсөөр [33] технологи.
Цаг хугацаа өнгөрөх, сүлжээний эрдэм шинжилгээний болон цэргийн байгууллагын хүрээнээс хальж,, интернэт гэж нэрлэгдэх болсон юм. Сүлжээний гарч ирснээр компьютерийн шинж чанар, хил хязгаар нь дахин тодорхойлох оролцсон. Компьютерийн үйлдлийн систем, програмууд нь бие даасан компьютерийн нөөцийг өргөтгөл байдлаар тодорхойлох, тухайлбал захын төхөөрөмж, хадгалсан мэдээлэл, гэх мэт гэх мэт сүлжээний бусад компьютерүүд, нөөцийг олж авах чадвартай байх зэрэг өөрчлөгдсөн. Эхний ээлжинд эдгээр байгууламж нь үндсэндээ өндөр технологийн орчинд ажиллаж байгаа хүмүүст байдаг байсан боловч 1990-ээд оны Ethernet болон ADSL шиг хямд, хурдан сүлжээний технологийг хөгжүүлэх хослуулан и-мэйл болон World Wide Web зэрэг програмуудыг тархалт, компьютерийн сүлжээ харсан бараг л хаа сайгүй болж байна. Ер нь сүлжээнд байгаа компьютерийн тоо нь гайхмаар өсөж байна. Хувийн компьютер нь маш том хувь нь тогтмол харилцах, мэдээлэл авах Интернэтэд холбогддог. Ихэвчлэн гар утасны сүлжээ ашиглан "Wireless" сүлжээ, үг юм сүлжээний тэр ч байтугай гар утасны тооцоолох орчинд улам бүр хаа сайгүй болж байна.