Thursday, March 15, 2007

Ogvvlberees vg tooloh algoritm




#include<conio.h>


#include<stdio.h>


#include<string.h>


void main()


int word=0,sLength,m=1;


char *sentence;


char buffer[256];


sentence=buffer;


puts("Please insert any sentence:");


gets(sentence);


strcat(sentence," ");


sLength=strlen(sentence);


while (m<sLength)


if(sentence[m]==' ')


if(sentence[m-1]!=' ')


word=word+1;


m++;


printf("There are %d words in this sentence.\n",word);


getch();

Tuesday, March 13, 2007

Анхдагч тоо мөн эсэхийг олдог алгоритм. ( C хэл дээр )

Tailbar programminhaa code-dotor tailbar bichihdee
" // tailbar" , "/* tailbar */" ashiglaj bichdeg. Ehniih ni neg mor tailbart , 2 dahi ni olon mor tailbar bichihed ashiglana.

*************************************************************
#include

int main(void)
{
int num, i, is_prime;

printf("Enter a number: ");
//delgetsend "enter number" gesen text heblej bna.

scanf("%d", &num);
// d - gedeg ni garaas integer torliin utgiig avah bogood num
//gesen huvisagchid hadgalna.



is_prime = 1;

for(i = 2; i <= num / 2; i = i + 1)
// dabtalt ni 2-oos num/2 buyu nu/2 iin bvhel heseg hvrtel 1 eer nemegdej dabtana.
//i=i+1 gesen negeer nemegdene gej oilgooroi.

if((num%i)==0)
// "%" temdeg ni toonii vldegdeliig oldog vildliin temdeg.
//Jishee 15%2=1 baina gesen vg.


is_prime =
0;

if(is_prime==1)
// nohtsol shalgah vildel hiij bna. tentsvv esehiig shalgahdaa == gej shalgana

printf(" is prime.");
/*ankhdagch too mon gedgiig heblej bna.
Hereb vnen nohtsoliin door 1-ees olon vildel baih um bol {} haaltand hiij gvitsetgeh heregtei. */

else
printf("not prime.");

return 0;
}



Wednesday, March 7, 2007

7 азийн тоо мөн үү?

Монголчууд 7-ийн тоог дордохын 7 хэмээн дургүй тоондоо оруулдаг. Гэвч 7 гэдэг тоо маань азийн тоо юм байна.

  • There is on a Scottish Mason's apron seven tassels on each side and when the apron was placed around me for the very first time these same seven tassels intrigued me so much that it led me to the field of research of our Great Order.

  • Ихэнх эртний систэмд 7-ийн тоо их давтагдаж орсон байдаг байна.

  • Pythagorean-chuud 7-ийн тоог төгс тоо хэмээн үздэг байна. Учир нь 7=4+3 -ын нийлбэр болдог бөгөөд энэ нь төгс хэлбэртэй тэгш өнтцөгт , гурвалжинг илэрхийлдэг гэж үздэг байна.

  • Долоон эртний гариг байсан. Нар нь хамгийн гайхалтай нь бөгөөд түүний дараа нь сар ордог байна. 7 дох өдөр бур гялалзсан сайхан байдлаа өөрчилдөг байна.


  • In Persian mysteries there were seven spacious caverns through which the aspirants had to pass.

  • The Goths had seven deities, as did the Romans, from whose names are derived our days of the week.

  • In Scriptural history there is a frequent recurrence to this number. E.g. in Revelation 1:16 -- "and He had in His right hand seven stars, " alluding to the seven churches of Asia. (The seven stars are depicted on a RWM's apron in the Scottish Constitution).

  • For us as Masons, King Solomon was seven years building the Temple. It was dedicated to the glory of God in the seventh month and the festival lasted seven days.

  • There are, as you stated, Brother Chris, our seven liberal arts and sciences.

  • We require seven Brethren to make a Lodge perfect and we have our seven steps on the winding staircase.

  • Reverting back to the Masonic apron, in the course of time aprons became embellished with much ornamentation until the present form of apron was instituted. There was no deliberation on the part of our ancient Brethren to place seven tassels on each side of the apron because the number seven has and probably always will be a sacred number in Masonic symbolism.

  • ***********************************************************
    Азын тоо олдог алгоритм ( PL/I хэл дээр бичлээ.)

    LuckyNumber:
    proc options(main);
    dcl i fixed dec(5);
    dcl stVar3 fixed dec(5);
    dcl stVar2 fixed dec(5);
    dcl limit fixed dec(5);

    stVar3=1;
    stVar2=1;
    get list(limit);

    do i=1 to limit;

    if(mod(i,2)=1) then
    if(stVar3!=3) then
    do;
    if(stVar2!=7) then
    do;
    put skip list("Lucky number",i);
    stVar3=stVar3+1;
    stVar2=stVar2+1;
    end;
    else stVar2=1;
    end;
    else do;
    stVar3=1;
    end;
    else;


    i=i+1;
    end;
    end;
    ***********************************************************

    The result is : 1 3 7 9 13 15 21 23 27 29 33 35 41 43 47 49 ... etc.



    Ene hayagnaas ta bvhen http://www.cplusplus.com/ C bolon C++ helnii function library-iin tuhai unshij bolno.

    "666" гэсэн энэ тоо ямар учиртай тоо вэ?

    Рокууд, сатанистууд, ид шидийг шүтэгчид тэр ч бүү хэл поп хамтлаг хүртэл "666" гэсэн тоогоор чамирхана, бас сүрдүүлнэ. Библийн хамгийн сүүлчийн ном болох Илчлэлт номонд дэлхийн сүйрэл, түүнээс өмнө болон тэр үед юу болох тухай билэгдлийн олон дүрс, үг, тоогоор илэрхийлсэн байдаг. Ийм төрөл жанраар бичсэн бичлэгийн хэлбэрийг "Апокалиптик" гэдэг. Эрт цагт Иудейчууд Апокалиптик бичлэгийн жанраар дэлхийн эцсийн тухай тэнгэрийн нууцуудыг бичдэг байв. Энэ жанрын онцлог нь үзсэн үзэгдэл, зүүд, тэнгэр элчийн учрал, билэгдлийн амьтад, тоо, дүрсээр нууцыг илэрхийлдэгт байгаа юм. Ийнхүү бичих нь сүнслэг нууцыг цөвүүн цагт итгэгчдэд дамжуулан хэлж өгөх, тэднийг итгэлээр нь баттай зогсоход нь зоригжуулах үүрэгтэй байжээ.
    Тэгвэл энэхүү билэгдлийн "666" гэгч энэ тоо ямар учиртайг Библийн эх сурвалжаас болон түүхэн тайлбаруудаас харцгаая. Библид:
    Илчлэлт 13:18
    Энд мэргэн ухаан байна. Ухаантай нэгэн нь араатны тоог бодогтун. Учир нь энэ нь хүний тоо бөгөөд түүний тоо бол зургаан зуун жаран зургаа юм.
    Эндээс харвал хэн нэгнийг 666 гэсэн тоогоор илэрхийлжээ. Энэ нь тийм ч шинэ зүйл биш юм. Аливаа хүнийг одоо ч тоогоор илэрхийлдэг. Хүн бүр өөрийн гэсэн тоон дугаартай байдаг шүү дээ. Тухайлбал, регистрийн дугаар, пастортын дугаар гэх мэт. Тэр дугаараар тухайн хүнийг хэн болохыг мэдээллийн баазаас олж тогтооно. Үүний адил Манай Эзэний 1-р зууны сүүлчээр бичигдсэн элч Иоханы "Илчлэлт" хэмээх номд өгүүлсэн "666" хэмээх тооны талаар олон зууны туршид янз бүрээр тайлбарлаж иржээ. Үүнээс хамтдаа суралцъя:
    Тоо болон үсгээр, аль алинаар нь нэг юмыг илэрхийлж болдог. Тухайлбал, өнөөгийн Иудейн рабби (Иудейн шашны багш нар) нарын судрууд араб тоогоор бус Еврей үсгээр бүлэг болон ишлэлээ дугаарласан байдаг. Еврейчүүдийн хувьд үсэг нь тоо, тоо нь үсэг болдог гэсэн үг. Үүнээс үүдэн зарим рабби гематрийн ухааныг ашиглан судрыг тоогоор кодлох дуртай болж. Тэр ч бүү хэл Матай нэгдүгээр бүлэгт буй удам судрын бичигт арван дөрвөн үеийг гурвантаа бичсэнийг Давидын нэр хэмээнэ. Еврей бичиг нь эгшиггүй, дан гийгүүлэгчээр бичдэг тул Давид гэдгийг ДВД гэж бичнэ. Мэдээж уншихдаа "Давид" гэнэ л дээ. Ямар эгшиг хаана нь яаж дуугарахыг тэмдэглэсэн "эгшгийн тэмдэглэгээ" ч бас бий. Тэгээд ДВД гэсэн нэр нь Еврей цагаан толгойн дарааллаар бол 4 + 6 + 4 буюу 14 болдог байна. Үүнчлэн эрт цагт Грекүүд Есүсийн нэрийн үсгийг тоо болгон хувиргаад "888" гэсэн тоог ч гаргасан байдаг. Гэвч араб тоо хэрэглэсэн цагаас хойш нэрийг ийнхүү кодлох хэвшил алга болжээ.
    Тэгэхээр "666" гэсэн тоо ямар учиртай байж болох вэ? Энэ тооны цаана ер бусын нэр нуугдаж байна уу? Зарим хүмүүс үүнийг Ромын Цезарь Неро гэж тооцдог. Учир нь Неро Христэд итгэгчдийг ихэд хавчин гадуурхан алсан бөгөөд дараа нь тэр өөрийн амийг егүүтгэснээс Илчлэлт номын энэхүү тоогоор түүнийг хэлсэн гэж тайлбарлах нэг хэсэг байдаг аж. Мөн зарим нь Ромын өөр нэгэн Цезарь болох Домитианыг "666"-д яг таардаг гэж хэлнэ. Домитиан бол өөрийгөө "бурхан" гэж өргөмжилж, бүх шүтээнүүдийн толгойг цавчин өөрийн толгойг тавьсан бурхан бол жүжиглэсэн хүн байв. Тэр ч гэсэн Христийн эсрэг олон бузар үйл хийсэн нүгэлтэн. Гэвч энэхүү тооны онолоор бол Илчлэлт номыг бичигч Иохан уншигчдаараа тоо бодуулах гэсэн нь юу л бол. Тэгээд ч, Домитианы нэр яагаад ч "666" болж чаддаггүй нь энэхүү тайлбарыг сулруулдаг. Тэр ч бүү хэл үүнээс ч илүү геометрийн бодлого шиг тайлбар хүртэл бий1.
    Гэвч үүнээс арай дээр тайлбар бол "666" бол зургаа гэсэн тоог гурвантаа давтан хэлсэн "6" гэсэн тооны бичлэг гэх тайлбар юм. Билэгдлийн тоонуудын тайлбараас харвал "7" хэмээх тоо нь "төгс" тоо буюу үүнийг Бурханы тоо гэж хэлдэг байна. Харин 6 гэсэн тоог хүний тоо гэж үздэг байна. Өөрөөр хэлбэл, "6" гэдэг нь долоод дөхөх авч дутаж буй төгс бус тоо. Библид "666" гэдгээр анти-Христ хүнийг илэрхийлдэг болохоор дээрх тайлбарт Неро, Домитиан орсон хэрэг л дээ. Харин Анти-Христ бүхий л талаараа төгс "бурхан" болох гэж хичээнэ гэдэг нь яахын аргагүй үнэн. Христийг дууриах, түүнтэй адил гайхамшигуудыг хийх, хүмүүст нөлөөлөх гэж оролдох авч анти-Христийн чадал дутна. Тэрээр яасан ч төгс болж чадахгүй гэдгийг Библи өөрөө гэрчилдэг.
    Харин анти-Христ засаглах үедээ "666" хэмээн энэхүү тоог дэлхийд байгч хүмүүсийн дух болон гарт тэмдэг болгон тавина гэснийг анхаарах хэрэгтэй. Дух болон гарт яг бодит тамга дарна гэхээсээ илүү хүмүүсийн хүсэл, бодол тэдний үйл хөдлөлд мөрөө үлдээнэ гэсэн тайлбар илүү дөхөх болов уу. Библид, анти-Христ аль хэдийнээ идэвхтэй ажиллаж байгаа (1 Иохан 2:18) гэж хэлсэн байдаг. Тэгэхээр, Христэд итгэгч бид амьдарч байгаа цаг үедээ мэдрэмжтэй хандаж, бодол санаагаа улам бүр цэгцлэн явах ёстой бус уу. Бодол сэтгэлээ Бурханы үгээр шинэчлэн сэргээх нь зүй бус уу. Бурханы мэргэн ухаан тантай байх болтугай2.
    Зүүвэр:
    [1]1Kaiser, W. C. 1997, c1996. Hard sayings of the Bible . InterVarsity: Downers Grove, Il
    2Pat Robertson, Answers to 200 of Life's Most Probing Questions, Thomas Nelson, 1984.


    Та дээрх өгүүлэмжийг уншсан биздээ. Тэгэхээр 7 болон 6 аль нь тогс тоо болж байна вэ? 7 төгс тоо болж чадах уу !

    Гэрийн даалгавар No1

    1. Анхны тоо мөн эсэхийг шалгах алгоритм болон С хэл дээр код бичих / анхны тоо өөртөө болон 1т хуваагддаг тоо/
    2. Төгс тоо мөн эсэхийг шалгах алгоритм болон С хэл дээр код бичих / төгс тоо нь өөрөөсөө ялгаатай хуваагчуудынхаа нийлбэртэй тэнтцүү тоо /
    3.Өгөгдсөн өгүүлбэрээс үгийн тоо олох алгоритм болон С хэл дээр код бичих

    Тавигдах шаардлага
    Ямар ямар хувьсагч ашигласан , ашиглах болсон шалтгаан болон алгоритмын тухай тайлбар оруулах

    С хэлний хичээл No 03

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

    Хөрвүүлэгчдийг тус тусад нь авч үзэхээс өмнө энэ хичээлийн турш таныг ямар хөрвүүлэгч ашиглавал зохистой вэ гэдэг талаар санал хэлье. Хэрэв та Линуксын хэрэглэгч бол GNU C++, Виндоусын хэрэглэгч бол Bloodshed Dev-C++ эсвэл Microsoft Visual C++ Toolkit 2003, Digital Mars C++, Borland C++ 5.5 коммандын мөрний хөрвүүлэгчдийн аль нэгийг (бүгд үнэгүй бөгөөд дискэн дээр 30-60М зай эзэлдэг) хэрэглэхийг зөвлөж байна. Нөгөө талаас Cygwin нь Виндоус систем дээр Линукстэй төстэй орчинг бүрдүүлдэг тул Линукс руу аажмаар шилжих гүүр болж чадна. Танд Borland C++ Builder эсвэл Microsoft Visual C++ бүтээгдэхүүн байгаа бол их сайн. Гэвч шинэ програм суулгаж түүнийгээ тогтвортой ашиглах боломжтой хэрэглэгчдийн хувьд Bloodshed Dev-C++ нь Си++ хэлийг эхлэн суралцахад илүү тохиромжтой гэж бодож байна.

    Виндоус системийн хувьсагчдыг тохируулах. Бидний авч үзэх хөрвүүлэгчдийн ихэнх нь Виндоус системийн коммандын мөрөнд (Command Prompt) ажилладаг хөрвүүлэгчид бөгөөд тэдгээрийг хэрэглэж эхлэхийн өмнө системийн зарим хувьсагчдын утгыг өөрчлөх шаардлагатай. Бид энд жишээ болгож системийн PATH хувьсагчид c:\cpp\djgpp\bin утгыг нэмэх, DJGPP нэртэй шинэ хувьсагч үүсгэж c:\cpp\djgpp\djgpp.env утгыг олгох үйлдлийг яаж гүйцэтгэж болохыг тайлбарлая.

    DOS, Windows 3.X ба Windows 95 системүүдийн хувьд:

    - Системийн дискний үндсэн каталог (ихэвчлэн C:) дахь AUTOEXEC.BAT файлыг (EDIT, NotePad гэх мэт) текст редакторын тусламжтай нээж дараах мөрүүдийг нэм.

    set DJGPP=c:\cpp\djgpp\djgpp.env
    set PATH=c:\cpp\djgpp\bin;%PATH%

    Windows 98 системийн хувьд:

    - START цэснээс Programs->Accessories->System Tools->System Information коммандыг сонго;
    - Tools цэсний "System Configuration" коммандыг сонго;
    - AUTOEXEC.BAT файлд дараах мөрүүдийг нэм.

    set DJGPP=c:\cpp\djgpp\djgpp.env
    set PATH=c:\cpp\djgpp\bin;%PATH%


    Windows ME системийн хувьд:

    - START цэснээс Run коммандыг сонгож, msconfig.exe гэж бичээд OK товчийг дар;
    - "Environment" хавтанг сонго;
    - PATH системийн хувьсагчийг “Edit” хийж c:\cpp\djgpp\bin утгыг нэм;
    (нэмэх гэдгийг өмнө нь байсан утгын ард (эсвэл өмнө) цэгтэй таслалаар тусгаарлан өгөгдсөн утгыг бичиж өгөх гэж ойлгоно)
    - DJGPP шинэ хувьсагч үүсгэж c:\cpp\djgpp\djgpp.env утгыг олго.

    Windows NT системийн хувьд:

    - "My Computer" дүрсэн дээр хулганын баруун товчийг дарж, "Properties" коммандыг сонго;
    - "Environment" хавтанг сонго;
    - PATH системийн хувьсагчийг “Edit” хийж c:\cpp\djgpp\bin утгыг нэм;
    (нэмэх гэдгийг өмнө нь байсан утгын ард (эсвэл өмнө) цэгтэй таслалаар тусгаарлан өгөгдсөн утгыг бичиж өгөх гэж ойлгоно;
    хэрэв та системийн администратор биш бол хэрэглэгчийн хувьсагчдийг ашиглаж болно,
    эсвэл PATH нэртэй шинэ хувьсагч үүсгэж утга олговол уг утга өмнөх утган дээр нэмэгдэнэ);
    - DJGPP шинэ хувьсагч үүсгэж c:\cpp\djgpp\djgpp.env утгыг олго.

    Windows 2000 ба Windows XP системүүдийн хувьд:

    - "My Computer" дүрсэн дээр хулганын баруун товчийг дарж, "Properties" коммандыг сонго;
    - "Advanced" хавтанг сонгож, "Environment Variables" товчийг дар;
    - PATH системийн хувьсагчийг “Edit” хийж c:\cpp\djgpp\bin утгыг нэм;
    (нэмэх гэдгийг өмнө нь байсан утгын ард (эсвэл өмнө) цэгтэй таслалаар тусгаарлан өгөгдсөн утгыг бичиж өгөх гэж ойлгоно;
    хэрэв та системийн администратор биш бол хэрэглэгчийн хувьсагчдийг ашиглаж болно,
    эсвэл PATH нэртэй шинэ хувьсагч үүсгэж утга олговол уг утга өмнөх утган дээр нэмэгдэнэ);
    - DJGPP шинэ хувьсагч үүсгэж c:\cpp\djgpp\djgpp.env утгыг олго.

    Програмын эх текстийг бэлтгэх. Зарим хөрвүүлэгчийг эх текст бэлдэх редактор, хөрвүүлэх болон зүгшрүүлэх үйлдлийг цэсний коммандуудаар шууд гүйцэтгэж үр дүнг нь тохиромжтой байдлаар хүлээн авах боломжтой Програм Боловсруулах Интегралчлагдсан Орчин (ПБИО, IDE – Intrgrated Development Environment) дагалдаж ирдэг. Харин коммандын мөрний хөрвүүлэгч хэрэглэж буй үед, эсвэл хөрвүүлэгчийн өөрийнх нь редактор танд таалагдахгүй бол програмын эх текстийг ямар нэг гадны (XEmacs, Nedit, Notepad, WordPad, Word гэх мэт) текст редактор ашиглан бэлтгэх болно. Notepad дээр эх текст бэлдэж буй үед файлыг хадгалахдаа (.txt биш) тусгай өргөтгөлтэй хадгалахаа мартаж болохгүй. Үүний тулд Notepad-ын Save цонхны “File Name” талбарт файлын нэрийг кавычкатай (“test.cpp” гэх мэт) оруулах, эсвэл “Save as type” талбарт “All Files” сонголтыг сонгож файлын нэрийг кавычкагүй оруулах аргыг хэрэглэнэ. WordPad, Word гэх мэт форматтай редакторуудын хувьд эх файлыг хадгалахдаа “Text Only” (“Plain text”, “Text Document”) форматаар хадгалах хэрэгтэй. Мөн интернет дээр програмын эх текст бэлдэхэд зориулсан олон сайн авсаархан програм үнэгүй тараагддагийн нэг нь Ф.Балмерийн зохиосон Виндоус орчны Notepad2 редактор бөгөөд үүнийг дараах хаягаар орж татаж авч болно.

    http://www.flos-freeware.ch

    Коммандын мөрний зарим коммандууд. Коммандын мөрний хөрвүүлэгчийг хэрэглэхийн тулд та юуны түрүүнд коммандын мөрний интерфейсийг ажиллуулж сурах хэрэгтэй. Виндоус орчинд бол START цэсний RUN коммандыг сонгож, command гэж бичээд OK товчийг дарж коммандын мөрний цонхыг нээх ба exit коммандаар түүнийг хаана. Харин Линукс орчинд ихэвчлэн “New Terminal” коммандыг ашиглаж шинэ терминал цонх нээдэг. Бид коммандын мөрөнд програмыг яаж хөрвүүлэх вэ гэдгээс гадна файл, каталогтой ажилладаг зарим коммандыг мэдэж байх нь чухал. Хамгийн түрүүнд cd (change directory) коммандыг дурдаж болно. Коммандын мөрний (эсвэл терминал) цонх болгоныг идэвхтэй каталог гэж нэрлэгдэх нэг каталог “дотор” ажиллаж байна гэж төсөөлж болох ба cd комманд нь энэ идэвхтэй каталогийг солих үүрэгтэй. Жишээ нь, Виндоус орчинд

    cd \cpp\projects

    коммандаар \cpp\projects каталог идэвхтэй каталог болж хувирна. Линукс орчны

    cd /cpp/projects

    комманд дээрхтэй ижил үйлчлэлийг үзүүлнэ. Идэвхтэй каталогийн нэр Виндоус орчны коммандын мөрөнд бэлэн харагдаж байдаг бол Линукс орчинд pwd (print working directory) коммандыг дуудах хэрэгтэй. Идэвхтэй каталог дахь файлуудын жагсаалтыг Виндоус орчинд dir (directory), Линукс орчинд ls (list) коммандуудаар хардаг. Виндоус ба Линукс орчинд харгалзан файл хуулах copy ба cp, файл зөөх move ба mv, шинэ каталог үүсгэх md ба mkdir, файл устгах del ба rm коммандууд байдаг боловч эхлэн суралцагсдын хувьд эдгээр үйлдлүүдийг график интерфейс ашиглан гүйцэтгэх боломж бий гэдгийг санахад илүүдэхгүй. Нөгөө талаас тодорхой төрлийн хэрэглээнүүдэд коммандын мөртэй ажиллах нь график интерфейсээс дутахааргүй хурдан бөгөөд зарим үед илүү тохиромжтой байдаг.

    GNU C++ (ГНУ Си++). Зөвөөр суулгагдсан Линукс систем бүхэнд энэ хөрвүүлэгч агуулагдах ёстой. Тэгэхээр та Линукс системийн хэрэглэгч бол Си++ хэлний хөрвүүлэгчтэй болохын тулд юу ч хийх шаардлагагүй гэсэн үг. Энэ хөрвүүлэгч нь Си++ хэлний стандартыг хамгийн сайн хангасан бөгөөд хамгийн хурдан ажилладаг програм боловсруулдаг хөрвүүлэгчдийн тоонд орно. g++ хэмээх програм Си++ хэлний хөрвүүлэгч ба холбогчийн үүргийг зэрэг гүйцэтгэдэг бөгөөд бид ийм програмыг цаашид илүү өргөтгөсөн утгаар мөн “хөрвүүлэгч” гэж ярьж байх болно. Тухайлбал, hello.cpp нэртэй эх текст файлыг хөрвүүлж hello нэртэй биелэх файл болгохын тулд

    g++ -o hello hello.cpp

    коммандыг ашиглана. Хэрэв гаралтын биелэх файлын нэрийг -o гэж зааж өгөөгүй бол a.out нэртэй биелэх файл гаргадаг. Энэ хөрвүүлэгчтэй хамтаар ГНУ зүгшрүүлэгч gdb болон gprof профайлерийг ихэвчлэн ашигладаг. Бусад нэмэлт програмуудыг дараах холбоосоор орж татаж авч болно.

    http://gcc.gnu.org/

    Cygwin C++. Энэ багц програм нь ГНУ хөрвүүлэгчид, зүгшрүүлэгчид болон хэд хэдэн текст редактор програмуудыг агуулдаг бөгөөд Виндоус систем дээр Линукстэй төстэй орчинг бүрдүүлдэг. Ингэснээр Линукс орчинд зориулсан олон програмыг Виндоус дээр хөрвүүлж ашиглах боломжтой. Дискэн дээр дор хаяж 400М зай эзэлдэг. Cygwin системийг суулгахын тулд эхлээд setup.exe инсталл програмыг дараах холбоосоор орж татаж авна.

    http://www.cygwin.com/

    Энэ инсталл програм нь Cygwin системийг интернетээс шууд татаж суулгах үүрэгтэй. Бүрэн хувилбарыг татахад маш их хугацаа зарцуулж мэдэх бөгөөд эхлэн суралцагчид devel хэсгийн binutils, gcc, gdb, ба make програмууд, Doc хэсгийн man болон newlib-man лавлах системүүд, Editors хэсгээс vim, эсвэл xemacs редакторыг сонгон авч суулгахад хангалттай. Cygwin системийг, жишээ нь, c:\cpp\cygwin каталогт суулгасан бол одоо PATH системийн хувьсагчид c:\cpp\cygwin\bin утгыг нэмж өгөх хэрэгтэй. Линуксийн ГНУ системтэй адилаар Си++ хэлний хөрвүүлэгч нь g++ програм.

    DJGPP C++. ДОС-ын хамгаалагдсан горимд (DOS Protected Mode) ажиллах програм боловсруулахад зориулж ДиЖей Делорийн ГНУ хөрвүүлэгч дээр суурилан зохиосон цогц програм. Дискэн дээр хамгийн багадаа 200М орчим зай эзэлдэг. Үүнийг суулгахын тулд эхлээд дараах холбоосоор орж зохих файлуудыг татаж авах хэрэгтэй.

    http://www.delorie.com/djgpp/zip-picker.html

    Файлуудыг татаж авсны дараа, жишээ нь, c:\cpp\djgpp нэртэй каталог (хавтас) үүсгэж үүн дотроо эдгээр файлуудаа задлана. Ингээд PATH системийн хувьсагчид c:\cpp\djgpp\bin утгыг нэмж, DJGPP нэртэй шинэ системийн хувьсагч үүсгэж c:\cpp\djgpp\djgpp.env утгыг олгоно. Си++ эх файл хөрвүүлэхэд gpp эсвэл gxx програмыг ашиглана.

    MinGW C++. ГНУ Си/Си++ хөрвүүлэгчид дээр суурилсан Виндоусын биелэх файл үүсгэдэг өөр нэг систем. Cygwin системийг бодвол Виндоус орчны програмыг илүү хурдан болгодог. Дараах хаягаар орж татаж авч болно.

    http://www.mingw.org/

    Bloodshed Dev-C++ (IDE). MinGW хөрвүүлэгч, зүгшрүүлэгч болон профайлерыг ашигладаг Виндоус орчны ПБИО. Си++ хэлийг эхлэн суралцагсдад маш тохиромжтой. Дискэн дээр нийтдээ 50М орчим зай эзэлдэг. Дараах хаягаар орж татаж авна уу.

    http://www.bloodshed.net/devcpp.html

    Коммандын мөрний хөрвүүлэгчдээс давуутай тал нь програмын эх текст бэлтгэх, програмыг хөрвүүлэх, ажиллуулах болон зүгшрүүлэх үйлдлүүдийг нэг интегралчлагдсан орчинд гүйцэтгэх боломжтой. Нэг програмын эх код хэд хэдэн текст файлаас бүрдэж болдог гэдгийг дээр дурдсан. Эдгээр текст файлууд болон програмд шаардлагатай бусад (жишээ нь, зураг болон өгөгдлийн) файлуудын нэгдлийг төсөл (эсвэл проект) гэж нэрлэдэг. Dev-C++ дээр .dev өргөтгөлтэй файл бүр нэг төслийг төлөөлөх ба уг файлд тухайн төслийн бүрэлдэхүүн, төслийг хөрвүүлэх үед хэрэглэгдэх тохируулгууд гэх мэт мэдээллийг агуулна. Dev-C++ орчинд шинэ төсөл нээхийн тулд

    - File->New->Project коммандыг сонгоно;
    - Гарч ирэх диалог цонхонд Empty Project ба C++ Project сонголтуудын хийнэ;
    - Name талбарт төслийн нэрийг оруулна;
    - Дараагийн диалог цонхонд төслийн .dev файлыг хадгалах каталогоо сонгоно;

    Одоогоор таны төсөлд нэг ч файл байхгүй байгаа. Төсөлд шинэ файл нэмэхийн тулд

    - File->New->Source File (эсвэл Ctrl+N) коммандыг сонгоно;
    - Асуусан асуултанд Yes гэж хариулна;
    - File->Save (эсвэл Ctrl+S) коммандыг сонгоно;
    - Гарч ирэх диалог цонхонд файлын нэр, өргөтгөл (.cpp) болон хадгалах каталогийг оруулна;

    Ингээд та (хоосон хэдий ч) нэг эх файл бүхий төсөлтэй боллоо. Эх файлыг хөрвүүлэхэд Execute->Compile (Shift+Ctrl+F9), төслийг бүхэлд нь хөрвүүлэхэд Execute->Compile (Ctrl+F9), хөрвүүлсэн програмыг ажиллуулахад Execute->Run (Ctrl+F10), энэ хоёр үйлдлийг дараалуулж гүйцэтгэхэд F9 (Compile & Run) коммандуудыг ашиглана.

    Digital Mars C++. Алдарт Symantec C++ хөрвүүлэгч одоо ийм нэрээр үнэгүй тараагдаж байна. ГНУ Си++ хөрвүүлэгчийн дараагаар Си++ хэлний стандартыг хамгийн сайн хангадаг бөгөөд хамгийн хурдан ажилладаг програм боловсруулдаг хөрвүүлэгчдийн тоонд орно. Гаргаж буй биелэх файлын хэмжээ бусад хөрвүүлэгчдийг бодвол их авсаархан болдог. Хөрвүүлэгч өөрөө дагалдах програмуудынхаа хамт дискэн дээр 40М орчим зай эзэлдэг. Энэ хөрвүүлэгчийг суулгахын тулд эхлээд дараах хаягаар орж хөрвүүлэгчийн үндсэн файлуудыг STLPort багцтай хамт татаж авах хэрэгтэй.

    http://www.digitalmars.com/

    Файлуудыг татаж авсны дараа, жишээ нь, c:\cpp нэртэй каталог (хавтас) дотор эдгээр файлуудаа задлана (энэ нь dm нэртэй каталогийг автоматаар үүсгэнэ). Ингээд PATH системийн хувьсагчид c:\cpp\dm\bin утгыг нэмж, c:\cpp\dm\bin каталогийн sc.ini файлд дараах өөрчлөлтийг хийнэ.

    PATH="c:\prog\dm\bin;"%PATH%
    BIN="c:\prog\dm\bin"
    INCLUDE="c:\prog\dm\stlport\stlport";"c:\prog\dm\include";%INCLUDE%
    LIB="c:\prog\dm\lib";%LIB%

    Си++ хөрвүүлэгчийнх нь нэр dmc.exe бөгөөд, жишээ нь, hello.cpp эх файлыг хөрвүүлэхийн тулд коммандын мөрөнд

    dmc hello

    коммандыг өгөхөд хангалттай.

    OpenWatcom C++. Хуучны Watcom C++ хөрвүүлэгч одоо ийм нэрээр үнэгүй тараагдаж байгаа. Харьцангуй хурдан ажилладаг, хэмжээгээр авсаархан програм гаргадаг боловч Си++ хэлний стандартад нийцтэй байдлаараа нилээд доогуур байранд ордог. Мөн хуучирсан дизайнтай хэдий ч өөрийн ПБИО нь дагалдаж ирдэг. Дискэн дээр бүхэлдээ 130М орчим зай эзэлдэг. Веб хаяг нь

    http://www.openwatcom.org/

    бөгөөд хөрвүүлэгчийг c:\cpp\watcom каталогт суулгасан гэж үзвэл системийн хувьсагчдыг дараах байдлаар өөрчлөх хэрэгтэй.

    WATCOM = c:\cpp\watcom
    PATH = %WATCOM%\binnt;%WATCOM%\binw; (утгыг нэмэх)
    EDPATH = %WATCOM%\eddat
    INCLUDE = %WATCOM%\h;%WATCOM%\h\nt


    Си++ хөрвүүлэгчийнх нь нэр wcc.exe болно.

    Borland C++ 5.5 коммандын мөрний хөрвүүлэгч. Борланд фирмийн Си++ хөрвүүлэгч нь хамгийн өргөн тархсан хөрвүүлэгчдийн нэг бөгөөд Си++ хэлний стандартад нийцтэй байдлаараа ГНУ ба Digital Mars хөрвүүлэгчдийн дараагаар 3-р байрыг эзэлнэ. Хамгийн хурдан ажилладаг програм боловсруулдаг хөрвүүлэгчдийн тоонд ордог. Гаргаж буй биелэх файлын хэмжээ харьцангуйгаар авсаархан болдог. Борланд фирм Си++ хөрвүүлэгчийнхээ коммандын мөрний хувилбарыг үнэгүй тарааж байгаа бөгөөд энэ багц зүгшрүүлэгчтэйгээ хамтаар дискэн дээр 50М орчим зай эзэлдэг. Дараах хаягаар орж FreeCommandLineTools.exe нэртэй инсталл файлыг татаж авч болно. (Борландын зүгшрүүлэгчийн инсталл TurboDebugger.exe мөн тэнд бий.)

    http://www.borland.com/products/downloads/download_cbuilder.html

    Ингээд уг файлыг ажиллуулж хөрвүүлэгчийг, жишээ нь, c:\cpp\bcc каталогт суулгана. Үүний дараагаар PATH системийн хувьсагчид c:\cpp\bcc\bin утгыг нэмнэ. Одоо bcc32.cfg нэртэй тохируулгын файлыг c:\cpp\bcc\bin каталогт үүсгэж дараах мөрүүдийг бичиж хадгалах хэрэгтэй.

    -I”c:\cpp\bcc\include”
    -L”c:\cpp\bcc\lib”

    Үүнтэй төстэйгөөр ilink32.cfg нэртэй нэртэй тохируулгын файлыг мөн каталогт үүсгэж дараах мөрүүдийг бичиж хадгална.

    -L”c:\cpp\bcc\lib”

    Си++ хөрвүүлэгчийнх нь нэр bcc32.exe бөгөөд, жишээ нь, коммандын мөрөнд

    bcc32 hello.cpp

    коммандыг өгснөөр hello.cpp эх файлыг хөрвүүлж hello.exe биелэх файл гаргаж авна.

    Borland C++ Builder (IDE). Том хэмжээний програм хангамжийг маш хурдан хугацаанд боловсруулах боломжтой Си++ програмчлалын хүчирхэг орчин. Виндоус, өгөгдлийн бааз, сүлжээ болон Интернеттэй ажиллах өргөн боломжоор хангагдсан. C++ Builder орчинд шинэ төсөл нээхийн тулд

    - File->Close All коммандаар нээлттэй байгаа бүх файлуудыг хаана;
    - Project->Add New Project коммандыг сонгоно;
    - “Console Wizard” сонголтыг хийж OK товчийг дарна;
    - Гарч ирэх диалог цонхонд “Source Type” талбарыг C++ гэж сонгоно;
    - Баруун гар тал дахь талбарт зөвхөн “Console Application” гэдгийг сонгож OK товчийг дарна;
    - File->Save Project As коммандыг сонгоно;
    - Эх (.cpp) файлын нэр ба хадгалах каталогийг оруулж Save товчийг дарна;
    - Төслийн (.bpr) файлын нэр ба ба хадгалах каталогийг оруулж Save товчийг дарна;

    Ингээд та нэг эх файл (C++ Builder-ын нэр томъёогоор бол Unit) бүхий төсөлтэй боллоо. Үүнд онцын шаардлагагүй боловч зарим код автоматаар үүссэнийг бас харж болно. Эх файлыг хөрвүүлэхэд Project->Compile Unit (Alt+F9), төслийг бүхэлд нь хөрвүүлэхэд Project->Make (Ctrl+F9), хөрвүүлсэн програмыг ажиллуулахад Run->Run (F9) коммандуудыг ашиглана.

    Microsoft Visual C++ Toolkit 2003 коммандын мөрний хөрвүүлэгч. Микрософтын хөрвүүлэгчид бол хамгийн хурдан бөгөөд жижигхэн програм гаргадаг, хамгийн өргөн тархсан хөрвүүлэгчдийн тоонд орно. Сүүлийн үеийн (ялангуяа 6.0 хувилбараас хойших) хувилбарууд нь Си++ хэлний стандартад маш нийцтэй болж байгаа. Микрософт фирм Visual Studio .NET Professional 2003 бүтээгдэхүүний бүрэлдэхүүнд ордог оптималчлагч Си++ хөрвүүлэгчийнхээ (дискэн дээр 30М орчим зай эзэлдэг) коммандын мөрний хувилбарыг үнэгүй тарааж байна.

    http://msdn.microsoft.com/visualc/vctoolkit2003/

    Уг хөрвүүлэгчийг суулгаснаар START цэсэнд “Visual C++ Toolkit 2003 Command Prompt” нэртэй нүд бий болох ба хөрвүүлэгчийг ашиглахын тулд энэ нүдийг товшиж коммандын мөрний зохих цонхыг нээх хэрэгтэй. Си++ хөрвүүлэгчийнх нь нэр cl.exe бөгөөд, жишээ нь, коммандын мөрөнд

    cl /GX hello.cpp

    коммандыг өгснөөр hello.cpp эх файлыг хөрвүүлж hello.exe биелэх файл гаргаж авна. Энэ хөрвүүлэгчийг ашиглаж Windows орчны програм боловсруулахын тулд Microsoft Platform SDK багцыг дараах хуудаснаас үнэгүй татаж авч болно.

    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

    Microsoft Visual C++ (IDE). Виндоус эсвэл Интернетэд зориулан маш хурдан ажилладаг програм хангамж боловсруулахад хамгийн тохиромжтой. Веб браузеруудаас эхлээд цэргийн болон эмнэлгийн зориулалтын критик тооцоо хийдэг програм хүртэл дэлхийн төвшний ихэнх програм хангамж энэ системийг ашиглан бүтээгдсэн.

    Visual C++ орчинд хэд хэдэн төслүүдийг нэгтгэн ажлын талбар (workspace) эсвэл шийд (solution) гэж нэрлэдэг. Энэ нь олон төсөлтэй ажиллах үед маш тохиромжтой. Жишээлбэл, төслүүдийг зорилгоор нь ангилж өөр өөр ажлын талбарт байрлуулж болно. Visual C++ орчинд шинэ ажлын талбар нээхийн тулд

    - File->New коммандыг сонго;
    - “Workspaces” хавтанг сонго;
    - Ажлын талбарын нэр ба каталогийг оруулж OK товчийг дарна;

    Одоогоор энэ ажлын талбарт нэг ч төсөл байхгүй байгаа. Шинэ төсөл үүсгэхийн тулд

    - File->New коммандыг сонго;
    - “Projects” хавтанг идэвхжүүл;
    - “Win32 Console Application” гэдгийг сонго;
    - “Project name” талбарт төслийн нэрийг, “Location” талбарт каталогийг оруулна;
    - “Add to current workspace” товчийг идэвхжүүл; “Dependency of” сонголт идэвхгүй байх ёстойг анхаар;
    - OK товчийг дарна;
    - Дараагийн цонхонд “An empty project” сонголттойгоор OK товчийг дарна;

    Шинэ эх файл үүсгэхийн тулд

    - Projects->Set Active Project коммандаар хүссэн төслөө идэвхжүүлнэ;
    - File->New коммандыг сонго;
    - “Files” хавтанг идэвхжүүл;
    - “C++ Source File” гэдгийг сонго;
    - “File name” талбарт файлын нэрийг (өргөтгөлгүйгээр) оруулна;
    - “Add to project” товчийг идэвхжүүлж төслийн нэр зөв эсэхийг шалга;
    - OK товчийг дарна;

    Ингээд та (хоосон хэдий ч) нэг эх файл бүхий төсөлтэй боллоо. Эх файлыг хөрвүүлэхэд Build->Compile (Ctrl+F7), төслийг бүхэлд нь хөрвүүлэхэд Build->Build (F7), хөрвүүлсэн програмыг ажиллуулахад Build->Execute (Ctrl+F5) коммандуудыг ашиглана.

    Бусад. MinGW хөрвүүлэгч, зүгшрүүлэгч болон профайлерыг ашигладаг Виндоус орчны Quincy хэмээх ПБИО байдаг. Энэ систем нь хэрэглэгчийн график интерфейстэй ажилладаг FLTK объектуудын сан, Борландын хуучин BGI график програмчлалын интерфейсийг Виндоуст зориулж өргөтгөсөн WinBGIm сан, хоёр хэмжээст график зурахад ашиглаж болох koolplot сангуудыг агуулдаг. Энэ багц дискэн дээр 80М орчим зай эзэлдэг. Веб хаяг нь:

    http://www.codecutter.net/tools/quincy/

    Интел (Intel) фирмийн сайн хөрвүүлэгчид байдгийн Линукст зориулсан хувилбар үнэгүй тараагдаж байна:

    http://www.intel.com/software/products/compilers/clin/noncom.htm

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

    http://developer.apple.com/tools/mpw-tools/

    Мөн эдгээрээс гадна IBM VisualAge, Metrowerks CodeWarrior гэх мэт олон хөрвүүлэгчид байдаг бөгөөд нилээд олон үнэгүй хөрвүүлэгчдийн жагсаалтыг агуулсан дараах хуудсыг сонирхож болно.

    http://www.thefreecountry.com/compilers/cpp.shtml

    Эцэст нь програм боловсруулах талын маш их мэдээлэл агуулсан дараах хоёр хуудсыг таны анхааралд хүргэж байна.

    http://www.thefreecountry.com/
    http://www.freeprogrammingresources.com/


    Tankhimiin Ts.Gantomor-iin niitlelelees

    С хэлний хичээл No 02

    Cи++ хичээл2.
    Си++ хэлэнд програмын эх код нь жирийн текст байдаг гэдгийг дээр дурдсан. Хөрвүүлэгч нь үндсэндээ ийм текстийг машины хэл рүү хөрвүүлж компьютер дээр шууд ажиллахаар хэлбэрт оруулах үүрэгтэй. Энэ процесс нь үнэндээ нилээд нийлмэл процесс бөгөөд үүнийг бид энд нарийвчлан авч үзэх гэж байна.

    Юуны түрүүнд програмын эх код нь хэд хэдэн текст файлаас бүрдэж болдог. Хөрвүүлэгчээр нэг удаа оруулж болохуйц хэд хэдэн ийм эх файлын нэгдлийг модуль (эсвэл хөрвүүлэлтийн буюу компиляцын нэгж) гэж нэрлэнэ. Нэг програм хэд хэдэн модультай байж болно. Модуль болгонд үндсэн файл гэж нэрлэгдэх цор ганц файл байх ёстой бөгөөд энэ файл дотор түүнтэй хөрвүүлэлтийн үед нэгтгэх бусад файлуудыг зааж өгдөг. Энэ нэгтгэгдэж байгаа файлуудыг толгой файлууд гэж нэрлэдэг. Үндсэн файлаас хэдэн ч толгой файлыг дуудан нэгтгэж болно. Үндсэн файл нь ихэвчлэн “.cpp”, “.cc”, эсвэл “.C” өргөлгөлтэй, толгой файл нь ихэвчлэн “.h”, “.hpp”, эсвэл “.H” өргөтгөлтэй, стандарт сангийн толгой файл бол өргөтгөлгүй байдаг. Жишээ болгож Зураг 1-д нэгэн хөрвүүлэлтийн процессыг дүрсэлжээ. Үүнд test.cpp нэртэй үндсэн файлд test.h ба iostream нэртэй хоёр толгой файлыг нэгтгэхийг шаардсан комманд бичигдсэн байгаа. Ингээд test.cpp файлыг (модулийг) хөрвүүлэх үед хамгийн түрүүнд уг файл препроцессороор боловсруулагдана. Препроцессор нь test.cpp файлын эхэнд test.h ба iostream хоёр файлыг залган нэгтгэж нэг урт текст болгож хувиргахаас гадна энэ текстэд бичигдсэн препроцессорын директивүүд гэж нэрлэгдэх тусгай коммандуудыг гүйцэтгэж програмын эх кодыг өөрчлөх ажиллагаа явуулна. Толгой файлуудыг холбох комманд нь препроцессорын директивийн нэг жишээ болно. Препроцессорын ажиллагааны үр дүнд програм маань Си++ хэл дээрх текст хэвээрээ үлдэнэ гэдгийг анхаараарай. Үүний дараагаар програм нь Си++ хэлний хөрвүүлэгчээр ассемблер хэл рүү хөрвүүлэгдэх ба эцэст нь ассемблерийн хөрвүүлэгчээр орж машины кодыг агуулсан объект модуль (буюу объект файл) гэгдэх тусгай форматад хувирна. (Энд объект гэдэг үг объект хандалтат програмчлалтай ямар ч холбоогүй гэдгийг анхаар.) Объект файлууд нь ихэвчлэн “.obj” эсвэл “.o” өргөтгөлгэй байдаг. Үнэндээ орчин үеийн хөрвүүлэгчид эдгээр бүх алхмуудыг нэгтгэсэн мэтээр ажиллаж шууд объект файлыг гаргадаг бөгөөд завсрын үр дүнгүүдийг, жишээ нь препроцессороос юу гарч байгааг харахын тулд тусдаа препроцессор ашиглах эсвэл хөрвүүлэгчийн тохируулгыг өөрчлөх хэрэгтэй юм.

    Объект файлыг шууд “ажиллуулж” болохгүй бөгөөд биелэх файл гаргаж авахад дахиад нэг алхам хэрэгтэй. Нэгдүгээрт, хэрэв програм маань Си++ хэлний стандарт сангаас ямар нэг функц (Си++ хэлэнд дэд програмыг функц гэнэ) дуудаж ашигладаг бол энэ функцын код нь манай объект модульд байхгүй. Хоёрдугаарт, хэрэв програм олон модультай бол модуль дамнасан функц дуудах процесс эрт орой хэзээ нэгэн цагт явагдах ба нэг объект файл зөвхөн нэг л модульд харгалзах функцүүдыг агуулдаг. Гуравдугаарт, биелэх файлууд үйлдлийн системээсээ хамааран түүнийг ажилладаг програм гэдгийг нь илтгэх тусгай “толгойн хэсэгтэй” байх ёстой бөгөөд объект модуль нь ийм толгойн хэсэггүй. Дөрөвдүгээрт, Си++ хэл дээр бичигдсэн програм ажиллаж эхлэхийн өмнө зарим хувьсагчдыг байрлуулж утга олгох, стек санах ойг бэлдэх, програмд ирсэн параметрүүдийг цуглуулах, програмыг ажиллуулахад системийн нөөц хүрэлцэхгүй тохиолдолд програмаас гарах гэх мэт үүрэг гүйцэтгэдэг эхлүүлэх модуль ажиллах шаардлагатай байдаг. Объект модуль нь эхлүүлэх модультай нэгэн адил биелэх програмыг бүрдүүлэгч нэгж бөгөөд тэдгээр нь аль нэгийгээ агуулдаггүй. Нэг модуль - нэг объект модулийг (объект файлыг) үүсгэхэд зориулагддаг болохыг уншигч ажигласан байх. Тэгэхээр хэрэв програм олон модультай бол модуль болгонд харгалзах объект файлуудыг үүсгэх хэрэгтэй. Үүний дараагаар тухайн програмд харгалзах бүх объект файлуудыг холбогч (linker, компоновщик) хэмээгдэх програмын оролтонд өгөх ёстой. Холбогч програм нь объект модулиуд дахь, гадны функцэд хандсан коммандуудын “ээдрээг” бусад объект модулиуд ба стандарт сангуудаас тохирох функцүүдийг хайж олох замаар “тайлж”, стандарт сангуудаас ашиглагдаж буй функцүүдийг объект модулиудын идэвхтэй хэсгүүд ба эхлүүлэх модультай нэгтгэн нэг биелэх файл болгох үүрэгтэй. Стандарт сан гэдэг нь үнэндээ мөн урьдчилан хөрвүүлэгдсэн объект модулиудын нэгдэл бөгөөд дотроос нь ямар нэг функц дуудагдсан объект модуль бүрийг биелэх файлтай холбодог. Зөвхөн дуудагдсан функцүүд биш, мөн бүхэл сан тэр чигээрээ биш, хэрэгтэй дэд програмыг агуулсан объект модулиуд холбогдож буйг анхаараарай. Програм зохиогч сүүлд ашиглах зорилгоор санч (librarian, библиотекарь) хэмээх програмыг ашиглаж объект файлуудыг нэгтгэн өөрийн гэсэн дэд програмуудын санг байгуулж болно. Ингэхдээ нэг объект файлд аль болох цөөн функцүүд байрлуулбал биелэх файлын хэмжээ бага байна гэсэн үг.

    Объект файлд програмын идэвхтэй кодоос гадна түүнд агуулагдаж буй өөр модулиас дуудагдах боломжтой (функцүүд, хувьсагчид гэх мэт) объектуудын хаяг ба нэрсийг агуулсан глобаль тэмдэгтүүдийн хүснэгт, мөн тухайн модуль дотроос дуудагдсан өөр модульд орших объектуудын нэрс ба дуудсан коммандуудын хаягийг агуулсан гадагш хандалтын хүснэгт хадгалагддаг. Эдгээр хүснэгтүүд дэх мэдээллийг ашиглаж холбогч програм харгалзах объектын хаягийг уг объектыг дуудаж буй газар орлуулан тавьснаар модулиудын хооронд байнгын логик холбоосыг бий болгодог. Ерөнхий тохиолдолд програмаас функцийг дуудахад түүний ажиллагаанд шаардлагатай аргументуудыг дамжуулж, функцийн ажиллагааны үр дүн болсон буцсан утгыг хүлээж авдаг. Холбогч нь зөвхөн функцийн нэрийг ашигладаг тул холбогчийн түвшинд функцийг тохирох төрлийн аргументуудтай дуудаж тохирох төрлийн хувьсагчид утгыг буцааж авч байна уу гэдгийг шалгах арга байхгүй. Паскаль гэх мэт хэлнүүдэд тусгай форматтай (жишээ нь, Дельфи-гийн хувьд “.dcu” өргөтгөлтэй) “объект” файлд эдгээр мэдээллүүдийг хадгалдаг бол Си++ хэл нь универсаль хэл болох үүднээс ийм стандарт бус объект файлын форматыг ашигладаггүй. Дуудагдаж буй функцийн аргументууд ба буцсан утгын төрлийн зөв эсэхийг зөвхөн хөрвүүлэгчийн түвшинд шалгадаг. Үүний тулд функцийн прото-төрөл буюу зарлалт хэмээх ойлголтыг хэрэглэнэ. Зарлалт нь тухайн функцийг ямар төрлийн аргументууд авч ямар төрлийн утга буцаахыг зааж өгсөн (өөр ямар ч мэдээлэл агуулаагүй) бүтэц бөгөөд модуль тус бүрийн хувьд гадагш нь “экспорт” хийж буй функцүүдийн зарлалтыг нэг толгой файлд байрлуулаад уг функцэд ханддаг бүх модульд нэгтгэж хөрвүүлдэг. Мөн сангийн функцийн зарлалтыг толгой файлд байрлуулах ба уг функцэд ханддаг бүх модульд нэгтгэж хөрвүүлдэг. Ингэснээр функц зөв аргументтай дуудагдаж буй эсэхийг хөрвүүлэгч уг толгой файл дахь зарлалттай жишиж тодорхойлох боломжтой болох юм.

    Олон модультай програмыг хөрвүүлэх ерөнхий схемийг Зураг 2-т жишээгээр үзүүлжээ. Энэ жишээнд програм нь харгалзан test.cpp ба aux.cpp үндсэн файлуудыг агуулсан хоёр модулиас тогтоно. test.cpp файлаас дуудагдаж буй aux.cpp файл дахь бүх функцүүдийг aux.h толгой файлд, aux.cpp файлаас дуудагдаж буй test.cpp файл дахь бүх функцүүдийг test.h толгой файлд зарласан байх ёстой. Тэгэхээр жишээ нь, aux.h файл test.cpp файлд залгагдаж хамт хөрвүүлэгдэх тул энэ модулийг хөрвүүлэх агшинд сүүлд холбогдох (aux.obj объект файлд агуулагдах) функцүүдийг яаж зөв дуудахыг хөрвүүлэгч мэдэж байна гэсэн үг. Үүнтэй төстэйгөөр стандарт болон бусад сангуудын функцүүдийг ашиглахын тулд харгалзах (энэ жишээнд iostream) толгой файлуудыг үндсэн файлд залгаж хөрвүүлэх хэрэгтэй. Эцэст нь test.obj ба aux.obj объект файлуудыг сангийн объект модулиуд болон эхлүүлэх модультай холбож test.exe биелэх файлыг гаргаж авна.

    Тэмдэглэл. Холбогч стандарт болон бусад сангуудаас өмнө объект файлуудаас эхэлж функцийг эрэх ажиллагаа явуулдаг. Иймд ямар нэг сангийн функцтэй адил нэр (прото-төрөл) бүхий “шинэ” функцийг модуль экспортлож буй нөхцөлд уг сангийн функц “дарагдаж” оронд нь “шинэ” функц үргэлж дуудагдах болно. Энэ нь зарим тохиолдолд олоход хэцүү алдаанд хүргэж мэдэх бөгөөд Си++ хэлний нэрийн огторгуйг ашигласнаар энэ хүндрэлээс гарч болно. Нэрийн огторгуй нь функцийн нэрийг объект файлд бичихдээ автоматаар өөрчилдөг Си++ хэлний нэр чимэх (name decoration, mangling) хэмээх механизмын нэг илрэл юм.