Saturday, November 7, 2009

Си болон Си++ ийн тухай жаахан

Cи хэл бол Cи++ ийн дэд олонлог гэж ойлгож болно. Эхлээд Си гэж процедур хандалтадат хэл гэж байж байгаад дараагаар нь түүнд объект хандалтад програмчлалын технологийг нэвтрүүлж өгсөнөөрөө Си++ болсон байнаа. Гэхдээ одоо ч аль альнийг нь ашигладаг бөгөөд тус тусын давуу талуудтай. Тэгэхээр энэ хоёр бол ялгаатай бие даасан хэл юмаа. Гэхдээ Си++ дотор Си хэлээр бичих боломжтой. Үүгээрээ жаахан ялгаа бий. Си++ хэлийг сурна гэдэг объект хандалтад технологитой Си хэлийг сурна гэж хараар ойлгож болноо. Эхлээд Си хэлийг сураад дараагаар нь объект хандалтад технологийг Си++ хэлээр сурах юмаа. Си/Си++ хэлний тухай нэлээн хэдэн монгол номнууд худалдаанд гарсан байдаг авч уншихыг зөвлөе. Програмчлана гэдэг тухайн програмчлалын хэлний ойлгогдох хэлээр хүн компьютерт заавар өгөн үйлдлүүдийг хөтөлбөржүүлж өөрийн хүссэн ажилаа хийлгүүлэх боломжтой болгохыг хэлж байгаа юмаа. Тэгэхээр Си хэлний ойлгодог хэлээр нь хүн эхлээд заавруудаа текст файлд хадгалах хэрэгтэй байдаг. Тэр хадгалсан файл нь *.c, *.c++, *.h, *.cc ... гэх мэт өргөтгөлтэй байнаа. Үүнийг ямар ч текст засварлагчаар нээсэн доторхи бичсэн Си хэл дэх үгүүд нь хүнд уншигдахаар ойлгомжтой байх болноо. Яагаад гэвэл эдгээр Си хэлний файлын өргөтгөлүүд нь текст файл хэлбэртэй болохоор тэр. Энэ файлуудыг компьтер ажиллуулъя гэвэл юу ч ажиллахгүй хулганаараа товшвол таны текст засварлагч л тэр файлыг онгойлгон нээх байх :) юу гэх гээд байна вэ гэвэл одоо бичсэн энэ текст файлаа компьютерийн ойлгодог хоёртын хэлрүү өөрөөр бинари лүү хөрвүүлэх хэрэгтэй. Виндөүсийн хувьд *.exe файлуудыг хулганаараа товшихоор ажилладаг биздээ. Энэ *.exe файлыг текст засварлагчаар нээвэл баахан л 0 1 1 0 0 1 1 01 0101 1 01 01101 1 101 0101 1 101 гэсэн юм л харагдах байхдаа кккккк. Учир нь эдгээр кодуудыг зөвхөн компьютер л өөрөө ойлгон биелүүлдэг. Хүн ойлгоход маш төвөгтэй байгаа биз. Хуучин хамгийн анх компьютер үүсч байхад инженэрүүд энэ кодуудыг нэг бүрчлэн өөрсдөө туузан төхөөрөмж дээр бичиж програмчилдаг байсан гэж бодохоор л хар дармаар. Тодорхой 1 0 1 1 0 бла бла бла гэсэн командан тус бүрт нэг англи үг харгалзуулснаар ассемблэр гэдэг нэртэй програмчлалын хэл үүссэн. Энэ бол тухайн үедээ маш том давуу тал нээлт болсон нь гарцаагүй. Учир нь програмчлагчид кодоо хүний ойлгогдох хэлээр бичдэг болсон шүү дээ. Гэтэл ассемблэр хэл бас л ойлгоход бэрх доод түвшнийх мөн алдаа их гаргах боломжтой том төслүүд дээр хэтэрхий их зардалтай гэх мэт сул тал гарсан тул Си гэх мэт арай л дээд түвшний хэлнүүд бий болжээ. Си хэл ассамблер шиг хангалттай доод түвшинд хандах боломжтой болохоор л өнөөдөр оршин тогтносоор буй. Дээд түвшний объект хандалтад Си++, Жава, Файтон ... гэх мэт хэлүүдэд цаанаа доод түвшинд яг юу болоод байгаа нь ойлгомжгүй. Харин Си хэл бол доод түвшин болоод дээд түвшний хоорондох блансыг хамгийн сайн барьж чадсан хэл юмаа. Ийм доод түвшинд хандах боломжтой болохоор л Си хэлийг гар утас жижиг төхөөрөмжүүдийн програмыг бичих үйлдлийн систем бичих гэх мэт нарийн ширийн зүйлд ашиглаж байнаа. За жаахан хадуурваа :)
Бичсэн текстэн файлаа тэгвэл хөрвүүлэгч(компилятор, compiler) програмын тусламжтайгаар машины хэлрүү хөрвүүлдэг байхнаа. Энэ хөрвүүлэгч програмууд нь дотроо маш олон янз. Жишээ нь микрософтын визуал студийн Си/Си++ хөрвүүлэгч програм, GNU gcc g++, Mars, mingw гэх мэт маш олон хөрвүүлэгчид байдаг байхнээ. Алийг нь ч ашиглаж Си болон Си++ програм бүтээх боломжтой. Гэхдээ нээлттэй эхийнхэн GNU gcc, g++ хөрвүүлэгчидийг ашигладаг энэ бол таны сонголт байх болно. Энэ хэлний түүхийн талаар википедиа эсвэл энд тэндэхийн номноос харах боломжтой би энд орчуулж тавьхаас залхуурав :) аа тийм мөн Си хэл нь олон зүйлд хэрэглэгддэгийн хувьд ISO, ANCII гэх мэт том том стандарчлалын байгууллагуудаар стандарчлагдсан байдаг.

За одоо олимпиад тэмцээнд орох эсвэл дээд сургуульд Си хэл ороход хэрэглээд байдаг цэнхэр дэлгэц бүхий BorlandC turboC энэ тэрийн талаар өөрийн бодлоо жаахан бичье. Эдгээрийг та зүгээр л жаахан боломж нэмсэн notepad эсвэл текст засварлагч мэтээр төсөөлөх хэрэгтэй. DOS цонх гаргаад програм бичихээр яахав бусад хүмүүст арай нэг мэргэжлийн юм хийгээд ч байгаа юм шиг гүү ч юм шиг харагддаг байхаа :) гэхдээ л энэ бол текст засварлагч. Си Си++ програм бичихэд заавал ийм цэнхэр дэлгэцэн дээр бичих шаардлагагүй ээ. Гэхдээ энэ бол таны л мэдэх хэрэг. Дээр би олон янзын хөрвүүлэгч байдаг талаар дурдсаан. Тэгвэл Borland-ийн Си хөрвүүлэгч програм бас байдаг байхнээ. Бид тэр цэнхэр дэлгэцэн дээр програмаа биччихээд CTRL+F9 дарахад цаанаа бол borland өөрийнхөө хөрвүүлэгчээр таны хадгалсан cpp эсвэл с файлыг exe рүү буюу машины ажилладаг файлруу хөрвүүлчихэж байгаа юм. Тэгээд л ажиллуулаад үр дүнгүүд хар дэлгэцэн дээр хэвлэгдэн харагддаг. Энэ хар дэлгэцийг консоль гэх бөгөөд printf cout функцүүдийн тусламжтайгаар үүн дээр үр дүнгүүдээ хэвлэн харж авах боломжтой. Үр дүнг ер нь бол файлруу хэвлэсэн ч болно шүү дээ :) гэхдээ ийм байдлаар хэвлэн харах нь илүү хурдан байх болно.

Ерөнхийдөө Си хэл дээр ажилладаг програм үүсгэхэд дараах дараалалтай байна:
- Си хэлний өгүүлбэрзүйгээр кодоо бичиж cpp, c, h гэх мэт өргөтгөлтэй текстэн файлуудаа үүсгэнэ.
- Compiler буюу хөрвүүлэгч програмаа дуудна.
- соорс файл тус бүрийг объект код гэдэг завсарын объектэн файлууд болгож үүсгэнэ
- linker буюу холбогч програмыг ажиллуулж эдгээр олон объект файлуудыг нэгтгэн тухайн үйлдлийн систем бүтэц дээр ажиллах боломжтой binary програм буюу хоёртын програмыг үүсгэнэ. Windows дээр бол exe файл үүсдэг линукс дээр бол өргөтгөл гол биш бусад үйлдлийн систем дээр яадгийг мэдэхгүй гэхдээ л өөрийн гэсэн формат үүсгэдэг л байх.
- Програмаа ажиллуулж шалгаж үзэх.

IDE гэдэг үгний товчлолийг та хаа нэгтээгээс харж л байсан байх. Integrated Development Environment гэсэн үгний товчлол бөгөөд монголоор нэгтгэсэн хөгжүүлэлтийн орчин гэсэн үг юм. Тэгэхээр Си хэлний өгүүлбэрзүйг гоё өнгөөр ялган харуулж хөрьвүүлж ажиллуулж шалгаж тайлагнах боломжтой мөн бусад олон боломж бүхий боломжтой текст засварлагчийг IDE гэдэг. Жава дээр бол Netbeans, Eclipse, Borland JBuilder гэх мэт IDE байдаг. Тэгэхээр энэ BorlandC гэдэг програм чинь маш олон янзын IDE-үүдийн л нэг байхнээ. Миний мэдэх Си IDE гэвэл Visual studio C++, Eclipse, netbeans, mingw, CodeBlock, CodeWarrior, BorlandC, TurboC гэх мэт олон янз байнаа.

6 comments:

Zoloogg said...

Yay! гоё блог байна.. идвэхитэй уншигч нь байна аа.. Тавьсан хичээлүүдийг нь данда уншаад.. даалгавар өгвөл хийгээд тавьж байх болноо.. гэж::

@gmunkhbaatarmn багш маань заах юм байшт.. :P

Гүнчин-Ишийн Шаравсамбуу said...

Сайн уу? Сэтгэгдэл үлдээсэнд баярлалаа. Энэ блогийг одоо гурван хүн бичдэг болсон. Удахгүй зөндөө зүйлс нэмэгдэх байхаа. Ямартаа ч энэ блогийг уншдаг хүн байдагт баярлаж байнаа. Хамтдаа хөгжицгөөе :)

etvgen said...

Хэхэ ойлгоход их бэрх юмаа ямар ч байсан дараа симстэр энэ хичээлийг сонгож үздэг юм билүү гэж боджоогоо тэгээд нэг дахин сонирхож үзэе кк :)) Уг нь их ойлгомжтой бичсэн боллотой даанч миний муу т1 толгоо кк

Гансүх said...

Үнэхээр ойлгомжтой гоё бичжээ :)

Batmunkh Ganbat said...

Yosdo goe blog bna..mash oilgomjtoi bichsen bna..oshoo olon medeelel , hicheel nemj hiigeree

админ said...

цоо шинэ будаг нь ханхалсан оюутан байна. түй ч мэдэхгүй. гэхдээ си хэл сурах хүсэл мааш их, эрмэлзэл өндөртэй байна. яах вэ? сайхан заагаад туслаад өгөөч. яадаж эхлүүлээд өгөөч. delgeree_8788@yahoo.com esvel delgeree@facebook.com хариу өгч, зааж зааварлаач эрхэм ИТ инженерүүд минь. блоггеруудаа.