www.emust.edu.mn
Сэдэв: C програмчлалын үндэс
www.emust.edu.mn
Хичээлийн зорилго
Техник хангамж
/Tехник тоног төхөөрөмж,
компьютертэй холбогдсон
гадаад байгууламжууд/
Тухайлбал: Процессор, дэлгэц, гараас эхлээд хулгана, принтер,
скайнер, хатуу болон уян диск, тэдгээрийн төхөөрөмжүүд,
сүлжээний болон дууны, дэлгэцийн картууд
Тодорхой удирдлагын доор дэс дараалан биелэх бүлэг үйлдэл
болон мэдээллийг боловсруулах боломжоор хангаж өгсөн
өгөгдлийн бүтэц
Программ хангамж программчлалын хэл
www.emust.edu.mn
Программчлалын хэлийг ашиглан программ бичихэд доорх
алхмуудыг гүйцэтгэх ёстой. Үүнд:
1.Алгоритм зохиох ( Designing )
2.Алгоримтын дагуу программын кодыг бичих ( Coding )
3.Хөрвүүлэлт хийх ( Compilnig )
4.Программыг шалгах ( Testing )
5.Сайжруулах ( Developing )
Програмчлал гэж юу вэ?
www.emust.edu.mn
Идентификатор
Программд ашиглагдаж байгаа нэр томъёонуудыг ерөнхийд
нь идентификатор гэж нэрлэдэг
Идентификатор, түүнийг ашиглах тухай
Идентификатор
нөөц үг хэрэглэгчийн тодорхойлсон
Нөөц үг гэдэг нь уг
программчлалын хэлэнд
стандартаар ашиглагддаг,
хэрэглэгч өөрийн хүссэнээр
өөрчилж болохгүй нэр томъёонууд
юм.
Хэрэглэгч программдаа
ашиглагдах хувьсагч, тогтмол,
функц, макро зэрэгт өгсөн
нэрүүдийг хэрэглэгчийн
тодорхойлсон идентификатор
гэдэг.
www.emust.edu.mn
asm auto break case
catch char class const
continue default delete do
double else enum extern
float for friend goto
if inline int long
new operator private protected
public register return short
signed sizeof static struct
switch template this throw
try typedef union unsigned
virtual void volatile while
Идентификатор нь 1 болон хэд хэдэн тэмдэгтээс тогтоно.
Тоо болон латин үсэг аль аль нь орж болох боловч заавал үсгээр эхэлсэн байх ёстой.
Зөвхөн доогуур зураас ашиглана. Ө.х. +, -, *, /, ?, !, `, ~, ”, ’, ;, :, @, #, $, %, ^, &, (, ), =, , {, }, [, ], <, >
тэмдэгүүд болон цэг, таслал оруулж болохгүй.
Нөөц үгтэй ижилхэн байж болохгүй.
Кирилл үсэг оруулж болохгүй.
Идентификаторт орж байгаа том, жижиг үсгүүд хоорондоо ялгаатай гэдгийг бүү март. Өөрөөр
хэлбэл, Fvar ба fvar гэсэн идентификаторууд зэрэг тодорхойлогдож болох бөгөөд эдгээр нь
хоорондоо ялгаатай байна.
C++-д доорх
нөөц үгүүд
Хэрэглэгчийн тодорхойлсон
идентификаторт доорх
шаардлагууд тавигдана. Үүнд:
www.emust.edu.mn
#define <тогтмолын нэр> <тогтмол утга>
Тогтмол утга тодорхойлж байгаа хэдэн жишээ үзье.
#define month 12 // эерэг бүхэл тогтмол
#define degree –30 // сөрөг бүхэл тогтмол
#define pi 3.1412 // бутархай тогтмол
#define name “П.Амарбат” // тэмдэгт мөр тогтмол
#define question “Sure?” // тэмдэгт мөр тогтмол
Тогтмолыг ашиглах нь
Тодорхойлолт: Тогтмол гэдэг нь программын явцад огт өрчлөгдөхгүй утгуудыг
хэлнэ
Программ дотор тогтмол утга тодорхойлохдоо DEFINE гэсэн нөөц үгийг ашиглана.
Мөр бүрийн төгсгөлд ‘//’ тэмдгээр
эхэлсэн кирилл текстийг оруулсан
байна. Эдгээр текст программын
үйл ажиллагаанд зөв буруу ямар
нэгэн нөлөө үзүүлэхгүй. Учир нь
компилятор ийм тэмдгээс хойш уг
мөрөнд байгаа текстийг ердийн
тайлбар гэж ойлгодог юм.
www.emust.edu.mn
Тогтмолыг ашиглах нь
Тогтмол тодорхойлохын гол шалтгаан.
Бидний программд нэгэн тогтмол тоо буюу 23 гэсэн тоо маш олон дахин, тодруулбал 100 дахин ашиглагддаг гэж үзье.
Бид тэгвэл программдаа 100 удаа 23 гэж бичиж өгөх болно. Нэг удаа бичээд өнгөрөхөд төвөгтэй үйлдэл биш байж
болох юм. Гэтэл тэрхүү тоо 25 болж өөрчлөгдөх шаардлага гарчээ. Тэгвэл энэ удаад би программдаа байгаа бүх 23
гэсэн тоог 25 болгож өөрчлөх шаардлагатай болж байна. Энэ тохиолдолд хийх ажил тийм ч хялбар биш болж ирэх нь
ойлгомжтой. Харин бид 23 гэсэн тоог программдаа тогтмол болгон тодорхойлсон бол үүнийг өөрчлөх тун ч амархан.
Өөрөөр хэлбэл,
#define num 23
гэж бичээд, уг тоотой ажиллах бүх газар num гэсэн тогтмолоо ашиглах хэрэгтэй юм. Тэгвэл дээрх шаардлага гарахад
зөвхөн энэ мөрийг л
#define num 25
болгон өөрчилөхөд л хангалттай юм. Ингэвэл программ дахь 23 гэсэн тоон дээр хийж байсан бүх үйлдлүүд 25 гэсэн
тоон дээр хийгдэх болно.
‘#’ тэмдгээр эхэлсэн нөөц үгийг компиляторын директив гэж нэрлэх бөгөөд #define нь ч гэсэн директив болно
www.emust.edu.mn
• Хувьсагч нь ганц тогтмол утга биш, харин утгуудын тодорхой
мужаас аль нэгийг нь авах боломж
• Хувсагчийн төрөл гэдэг нь түүний авч болох утгуудын мужийг
хэлж байгаа юм
Хувьсагчийг ашиглах нь
Программын явцад харгалзах утгууд нь өөрчлөгдөж байдаг идентификаторыг хувьсагч гэнэ
Төрөл Утгын муж
char ‘0’..’9’,’A’..’Z’,’a’..’z’,*/+-¡@#$%^&*(){}[];;.,’”?`~
short -128..127
unsigned short 0..255
int -32768..32767
unsigned int 0..65535
long -2147483648.. 2147483647
unsigned long 0..4294967295
float 1.17549435e-38..3.40282347e+38
double 2.2250738585072014e-308 ..
1.7976931348623157e+308
С++-д дараах стандарт төрлүүд байдаг.
www.emust.edu.mn
Хувьсагчийг ашиглах нь
Хэрэглэгч өөрийн хэрэгцээнд таарсан шинэ төрлийн үүсгэж болно
<хувьсагчийн төрөл> <хувьсагчийн нэр><=анхны утга>
Int ivar1; //бүхэл утга авах хувьсагч
Int ivar2=-10; //Анхны утга
float fvar1=2.57; //Бутархай хувьсагч
unsigned int ivar3=500; //Эерэг бүхэл хувьсагч
char ch1,ch2=’*’,ch3; //Тэмдэгт хувьсагчууд
Хувьсагчийн тухайд доорх хэдэн санамжийг мартаж болохгүй.
Бид программын дурын хэсэгт хувьсагчийн утгыг өөрчилж болох боловч
хувьсагчид өгч байгаа утга нь уг хувьсагчийн төрлийнх байх ёстой.
Нэг программ дотор ижил нэртэй 2 хувьсагч байж болохгүй.
Хувьсагчийн утгатай холбоотой гарч болох алдааг үргэлж тооцож,
боловсруулж байх нь зүйтэй.
Шаардлагагүй тохиолдолд их том хэмжээний утгын мужтай хувьсагч
тодорхойлох нь программыг их нүсэр, болхи болгодог.
www.emust.edu.mn
Санах ой, түүний хаяг
Программ ажиллахын тулд уг программын бүх биелэх коммандууд
болон программд шаардлагатай өгөгдлүүдийг бүгдийг нь
компьютерийн дотоод санах ойд байрлуулдаг. Санах ой нь нэг удаад
нэг тэмдэгт болон тоог санах боломжтой нүднүүдээс тогтоно. Нэг
нүдэнд нэг байт өгөгдөл хадгалагдана. Ө.х. нэг тэмдэг буюу тоо нь
санах ойд нэг байтыг эзэлдэг гэсэн үг юм. Санах ойн багтаамж гэдэг
нь энэхүү нүднүүдийн тоог хэлж байгаа юм. Тухайлбал, 640000
байтын багтаамжтай санах ой гэвэл түүнд 640000 нүд байгаа бөгөөд
нийтдээ 640000 тэмдгээс тогтсон өгөгдлийг уг санах ойд хадгалах
боломжтой гэж ойлгож болно. Санах ойн нүд бүр өөрийн хаягтай
байдаг. Ө.х 640000 байтын санах ойн эхний нүдний хаяг 0, сүүлийн
нүдний хаяг нь 639999 байна.
www.emust.edu.mn
Санах ой, түүний хаяг
Төрөл Санах ойд эзлэх байт
char 1
short 1
unsigned short 1
signed int 2
unsigned int 2
long 4
unsigned long 4
Санах ойд хадгалагдаж байгаа программын кодуудыг төв процессор нэг бүрчлэн уншиж уг коммандуудыг
дэс дараалан биелүүлдэг юм. Гэхдээ санах ойд байгаа өгөгдлийг программын код, хувьсагч, тогтмол аль нь
болохыг процессор огт мэдэхгүй бөгөөд хэрэв программыг оновчгүй зохион байгуулвал процессор буруу
комманд биелүүлэн, системийг гацахад хүргэж болзошгүй.
Программ дотор хувьсагч тодорхойлно гэдэг нь санах ойн нэг болон хэд хэдэн
нүдийг уг хувьсагчид зориулан нөөцлөн авч, тэр нүднийхээ хаягийг хувьсагчид
сануулж өгдөг байна. Уг хувьсагчтай ажиллана гэдэг нь тэрхүү нөөцөлсөн нүдэнд
байгаа өгөгдөлтэй ажиллана гэсэн үг юм. Харин уг хувьсагчид хэдэн нүдийг нөөцлөх
вэ гэдэг нь тэрхүү хувьсагчийн төрлөөс хамаардаг
www.emust.edu.mn
CONST нөөц үг
Бичлэгийн хувьд үндсэндээ #define директивтэй ижил гэж үзэж болно
#define <төрөл> <нэр>=<тогтмол утга>
Жишээ нь:
const int month=12
const int degree=–30
const double pi=3.1412
const char name[]=“П.Амарбат”
const char question[]=“Sure?”
Зөвхөн тогтмолын нэр ба утгын хооронд тэнцүүгийн тэмдэг тавьдагаараа өмнөх
директивээс ялгарах юм. Бичлэгийн хувьд ижил боловч компиляторын хувьд энэ хоёр нь
маш их ялгаатай тодорхойлолтууд юм.
Тогтмолыг тодорхойлохын тулд мөн const гэсэн нөөц үгийг ашиглана
Учир нь const нөөц үгийг ашиглан тодорхойлсон тогтмол нь программын явцад огт
өөрчлөгдөхгүй боловч хувьсагч шиг программын туршид санах ойд нэг болон хэд хэдэн
байтыг эзлэн оршсоор байдаг.
Хэрэв pi тогтмолыг const нөөц үгээр тодорхойлсон бол
компилятор pi - г яг л хувьсагч шиг хөрвүүлнэ. Өөрөөр хэлбэл,
энэ комманд биелэхийн тулд уг тогтмолд зориулсан санах
ойгоос очиж өгөгдлийг унших болно.
www.emust.edu.mn
Толгой файлыг ашиглах нь
С++ -ийг ашиглан программ бичиж байгаа тохиолдолд өөр
файлд тодорхойлогдсон байгаа функц, тогтмол, макро
зэргийг ашиглах бүрэн боломжтой
Том хэмжээний программ бичиж байгаа тохиолдолд маш их
хэмжээний тогтмол болон функцүүдийг нэг файлдаа
тодорхойлох нь файлын хэмжээ болон программын
бүтцийн хувьд тун эмх замбараагүй болох бөлгөө.
Тогтмол болон макронуудаа нэг файлд ялгаж тодорхойлоод
түүнийгээ өөрийн файлдаа холбож өгвөл программын бүтэц
энгийн болоод ойлгомжтой болох юм. Ийм файлыг толгой
файл гэх бөгөөд толгой файл нь ‘ *.h ’ өргөтгөлтэй байна.
//defs.h
void fun1()
{
}
//my.cpp
#include “defs.h”
void main()
{
. . . . .
fun1();
. . . . .
}
www.emust.edu.mn
Толгой файлыг ашиглах нь
Толгой файлыг зааж өгөхдөө #include нөөц үгийг ашиглах
бөгөөд түүний ард файлын нэрийг (“ “) тэмдгээр хашиж бичнэ
• Заавал мөрийн эхлэлээс бичих ёстой
• С++ өөрийн гэсэн стандарт толгой файлуудтай
Borland C++-ийн library гэсэн дэд каталогид байрлах ёстой. Ийм
стандарт толгой файлуудыг тодорхойлох тохиолдолд #include
директивийн бичлэгт ялимгүй өөрчлөлт орно. Нөөц үгийн ард
файлын нэрийг бичихдээ (“ “) биш, (< >) хаалт хэрэглэх ёстой.
Жишээ нь, математик болон логикийн функц, тогтмол, макронууд нь
math.h гэсэн толгой файлд агуулагдаж байдаг. Хэрэв та
программынхаа эхэнд
#include <math.h>
гэж зааж өгсөн бол программдаа математикийн функцүүдийг
ашиглах боломжтой боллоо гэсэн үг юм.
//defs.h
void fun1()
{
}
//my.cpp
#include “defs.h”
void main()
{
. . . . .
fun1();
. . . . .
}
www.emust.edu.mn
C++ ПРОГРАММЫН ЕРӨНХИЙ БҮТЭЦ
үндсэн
программаас
БЭЛТГЭЛ ДЭД
ПРОГРАММ
Программын бэлтгэл хэсэгт уг программын бүхий л хүрээнд
ашиглагдаж болох глобаль хувьсагч, тогтмолууд болон уг
программд ашиглагдах стандарт функцүүдийн байрлаж буй
толгой файлуудыг тодорхойлж өгдөг юм
//hello.cpp
#include <iostream.h>
#define greeting = ”Сайн байна уу?”;
void main()
{
cout << greeting;
}
iostream.h //толгой файлд байгаа ямар нэгэн өгөгдлийг
ашиглана гэдгээ хэлж
//greeting гэсэн нэртэй тэмдэгт мөр тогтмол тодорхойлсон
void main()// программын биелэх кодууд
C++-д нэгэн бүлэг үйлдлүүдийг гоё хаалтаар ( {} )
cout //комманд дээр тодорхойлсон iostream.h гэсэн толгой
файлд байрладаг
www.emust.edu.mn
Харьцуулах
үйлдэл нь
хоёр утгыг
хооронд нь
жишдэг
Утгууд нь C++
ийн стандарт
төрлүүд,
хэрэглэгчийн
тодорхойлсон
хувьсагч
-Харьцуулах үйлдлүүд
Ихэнх программ ямар нэгэн нөхцлөөс хамааруулан хийх үйлдлээ сонгоход (яг л хүн шиг) хүрдэг. Ө.х. программ доторх
нөхцлөөс хамааран үйлдлийн удирдлага программын нэг хэсгээс нөгөө хэсэг рүү үргэлж “ үсэрч “ байдаг. Программ дотор
ийм үсрэлт хийлгэдэг командуудыг удирдлагын коммандууд гэнэ. Удирдлагын комманд нь давталтын бол нөхцөл
шалгалтын гэсэн 2 янз байдаг.
char, int, float г.м
Жишилт нь тэнцүү, их
тэнцүү, бага тэнцүү
г.м
//relat.cpp
#include <iostream.h>
void main()
{
int numb;
cout << “Тоогоо оруулна уу : ”;
cin >> numb;
cout << “numb<10 нь “ << (numb<10)
<< endl;
cout << “numb>10 нь “ << (numb>10)
<< endl;
cout << “numb==10 нь “ <<
(numb==10) << endl;
}
Тоогоо
оруулна уу: 20
numb<10 нь 0
numb>10 нь 1
numb=10 нь 0
бүхэл тоон хувьсагчийн
утгыг тогтмол тоотой
тэнцэж байгаа эсэхийг
шалгаж үр дүнг харуулах
www.emust.edu.mn
Оператор Утга
> Эрс их
< Эрс бага
== Тэнцүү
!= Тэнцүү биш
>= Их тэнцүү
<= Бага тэнцүү
C++-ийн харьцуулах үйлдлүүдийг жагсаавал:
Jane=44 Утга оноож байна
Harry=12 Утга оноож байна
(jane=harry) Худал
(harry<=12) Үнэн
(jane>harry) Үнэн
(Jane>=44) Үнэн
(harry!=12) Худал
(7<harry) Үнэн
(0) Худал
(44) Үнэн
Харьцуулах үйлдлүүдийг ашиглах жишээ
Тэнцүүг шалгахдаа 2 ширхэг (=) тэмдэг тавина. Нэг (=) бол утга оноох үйлдэл юм. Утга оноох үйлдлийг
харьцуулах үйлдлийн оронд хэрэглэх нь C++ анхан суралцагчдын хувьд нийтлэг гаргадаг алдаа юм. Энэ
тохиолдолд компилятор ямар ч алдаа өгөхгүй бөгөөд харин программ буруу ажиллах болно.
www.emust.edu.mn
Харьцуулах үйлдэл
Үйлдэл Тайлбар Жишээ
== Тэнцүү 5 == 3 буцаах утга 0
> Эрс их 5 > 3 буцаах утга 1
< Эрс бага 5 < 3 буцаах утга 0
!= Тэнцүү биш 5 != 3 буцаах утга 1
>= Их буюу тэнцүү 5 >= 3 буцаах утга 1
<= Бага буюу тэнцүү 5 <= 3 буцаах утга 0
Логик үйлдлүүд
Үйлдэл Тайлбар Жишээ
&&
Логик AND. Операндууд бүгд
үнэн үед үнэн байна. Бусад үед
худал байна.
(c == 5) && (d > 5)
Үр дүн: 0
||
Логик OR. Операндуудын аль
нэг нь үнэн үед үнэн бусад үед
худал байна.
(c == 5) || (d>5)
Үр дүн: 1.
!
Логик NOT. Операнд үнэн бол
худал, худал бол үнэн утгатай
байна.
! (c == 5)
Үр дүн: 0
www.emust.edu.mn
#include <stdio.h>
int main()
{ int a = 5, b = 5, c = 10;
printf("%d == %d = %d n", a, b, a == b); // true
printf("%d == %d = %d n", a, c, a == c); // false
printf("%d > %d = %d n", a, b, a > b); //false
printf("%d > %d = %d n", a, c, a > c); //false
printf("%d < %d = %d n", a, b, a < b); //false
printf("%d < %d = %d n", a, c, a < c); //true
printf("%d != %d = %d n", a, b, a != b); //false
printf("%d != %d = %d n", a, c, a != c); //true
printf("%d >= %d = %d n", a, b, a >= b); //true
printf("%d >= %d = %d n", a, c, a >= c); //false
printf("%d <= %d = %d n", a, b, a <= b); //true
printf("%d <= %d = %d n", a, c, a <= c); //true
}
www.emust.edu.mn
#include <stdio.h>
int main()
{ int a = 5, b = 5, c = 10, result;
result = (a == b) && (c > b);
printf("(a == b) && (c > b) equals to %d n", result);
result = (a == b) && (c < b);
printf("(a == b) && (c < b) equals to %d n", result);
result = (a == b) || (c < b);
printf("(a == b) || (c < b) equals to %d n", result);
result = (a != b) || (c < b);
printf("(a != b) || (c < b) equals to %d n", result);
result = !(a != b); printf("!(a == b) equals to %d n", result);
result = !(a == b); printf("!(a == b) equals to %d n", result);
}
www.emust.edu.mn
Арифметик үйлдлүүд
Үйлдл
үүд
Тайлбар
+
Нэмэх ба унар нэмэх
үйлдэл
-
Хасах ба унар хасах
үйлдэл
* Muүржих үйлдэл
/ Хуваах
% Үлдэгдлийг олох үйлдэл
#include <stdio.h>
int main()
{ float a = 9,b = 4, c;
c = a+b; printf("a+b = %d n",c);
c = a-b; printf("a-b = %d n",c);
c = a*b; printf("a*b = %d n",c);
c=a/b; printf("a/b = %d n",c);
c=a%b; printf(“ Remainder b = %d n",c);
}
www.emust.edu.mn
• Си хэлэнд маш өргөн хэрэглэгддэг үйлдлүүд нь нэмэгдүүлэх (++), хорогдуулах (--) үйлдлүүд юм.
• i++ гэсэн илэрхийлэл нь i=i+1 гэсэн илэрхийлэлтэй ижил чанартай юм.
• i-- гэсэн илэрхийлэл нь i=i-1 гэсэн илэрхийлэлтэй ижил чанартай юм.
• Нэмэгдүүлэх, хорогдуулах үйлдэл нь операнд/хувьсагч эсвэл тогтмол/-ын утгыг 1-ээр нэмэгдүүлж,
хорогдуулдаг.
Нэмэгдүүлэх ба хорогдуулах үйлдэл
Нэмэгдүүлэх, хорогдуулах үйлдэл нь операндын аль талд
бичигдсэнээс хамаарч ялгаатай байдлаар бодогдоно.
1. Prefix хэлбэр ++i
2. Postfix хэлбэр i++
• b=c + i++; <=> b=c + i; i=i+1;
• b=c + ++i; <=> i=i+1; b=c + i;
#include <stdio.h>
int main()
{ int var=5;
printf("%dn",var++); // 5 –ийг дэлгэцэнд
хэвлээд дараа нь var хувьсагчийн утга нэгээр
нэмэгдэж 6 болно.
printf("%d",++var); // var = 6. var хувьсагчийн
утгыг нэгээр нэмж 7 болгоод дараа нь
дэлгэцэнд үр дүнг гаргана.
}
www.emust.edu.mn
Утга олго үйлдэл
Үйлдэл Жишээ Дэлгэрэнгүй
= a = b a = b
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b
#include <stdio.h>
int main()
{ int a = 5, b = 5, c = 10, result;
result = (a == b) && (c > b);
printf("(a == b) && (c > b) equals to %d n", result);
result = (a == b) && (c < b);
printf("(a == b) && (c < b) equals to %d n", result);
result = (a == b) || (c < b);
printf("(a == b) || (c < b) equals to %d n", result);
result = (a != b) || (c < b);
printf("(a != b) || (c < b) equals to %d n", result);
result = !(a != b); printf("!(a == b) equals to %d n",
result);
result = !(a == b); printf("!(a == b) equals to %d n",
result);
}
www.emust.edu.mn
Thank You

Лекц №5

  • 1.
  • 2.
    www.emust.edu.mn Хичээлийн зорилго Техник хангамж /Tехниктоног төхөөрөмж, компьютертэй холбогдсон гадаад байгууламжууд/ Тухайлбал: Процессор, дэлгэц, гараас эхлээд хулгана, принтер, скайнер, хатуу болон уян диск, тэдгээрийн төхөөрөмжүүд, сүлжээний болон дууны, дэлгэцийн картууд Тодорхой удирдлагын доор дэс дараалан биелэх бүлэг үйлдэл болон мэдээллийг боловсруулах боломжоор хангаж өгсөн өгөгдлийн бүтэц Программ хангамж программчлалын хэл
  • 3.
    www.emust.edu.mn Программчлалын хэлийг ашигланпрограмм бичихэд доорх алхмуудыг гүйцэтгэх ёстой. Үүнд: 1.Алгоритм зохиох ( Designing ) 2.Алгоримтын дагуу программын кодыг бичих ( Coding ) 3.Хөрвүүлэлт хийх ( Compilnig ) 4.Программыг шалгах ( Testing ) 5.Сайжруулах ( Developing ) Програмчлал гэж юу вэ?
  • 4.
    www.emust.edu.mn Идентификатор Программд ашиглагдаж байгаанэр томъёонуудыг ерөнхийд нь идентификатор гэж нэрлэдэг Идентификатор, түүнийг ашиглах тухай Идентификатор нөөц үг хэрэглэгчийн тодорхойлсон Нөөц үг гэдэг нь уг программчлалын хэлэнд стандартаар ашиглагддаг, хэрэглэгч өөрийн хүссэнээр өөрчилж болохгүй нэр томъёонууд юм. Хэрэглэгч программдаа ашиглагдах хувьсагч, тогтмол, функц, макро зэрэгт өгсөн нэрүүдийг хэрэглэгчийн тодорхойлсон идентификатор гэдэг.
  • 5.
    www.emust.edu.mn asm auto breakcase catch char class const continue default delete do double else enum extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch template this throw try typedef union unsigned virtual void volatile while Идентификатор нь 1 болон хэд хэдэн тэмдэгтээс тогтоно. Тоо болон латин үсэг аль аль нь орж болох боловч заавал үсгээр эхэлсэн байх ёстой. Зөвхөн доогуур зураас ашиглана. Ө.х. +, -, *, /, ?, !, `, ~, ”, ’, ;, :, @, #, $, %, ^, &, (, ), =, , {, }, [, ], <, > тэмдэгүүд болон цэг, таслал оруулж болохгүй. Нөөц үгтэй ижилхэн байж болохгүй. Кирилл үсэг оруулж болохгүй. Идентификаторт орж байгаа том, жижиг үсгүүд хоорондоо ялгаатай гэдгийг бүү март. Өөрөөр хэлбэл, Fvar ба fvar гэсэн идентификаторууд зэрэг тодорхойлогдож болох бөгөөд эдгээр нь хоорондоо ялгаатай байна. C++-д доорх нөөц үгүүд Хэрэглэгчийн тодорхойлсон идентификаторт доорх шаардлагууд тавигдана. Үүнд:
  • 6.
    www.emust.edu.mn #define <тогтмолын нэр><тогтмол утга> Тогтмол утга тодорхойлж байгаа хэдэн жишээ үзье. #define month 12 // эерэг бүхэл тогтмол #define degree –30 // сөрөг бүхэл тогтмол #define pi 3.1412 // бутархай тогтмол #define name “П.Амарбат” // тэмдэгт мөр тогтмол #define question “Sure?” // тэмдэгт мөр тогтмол Тогтмолыг ашиглах нь Тодорхойлолт: Тогтмол гэдэг нь программын явцад огт өрчлөгдөхгүй утгуудыг хэлнэ Программ дотор тогтмол утга тодорхойлохдоо DEFINE гэсэн нөөц үгийг ашиглана. Мөр бүрийн төгсгөлд ‘//’ тэмдгээр эхэлсэн кирилл текстийг оруулсан байна. Эдгээр текст программын үйл ажиллагаанд зөв буруу ямар нэгэн нөлөө үзүүлэхгүй. Учир нь компилятор ийм тэмдгээс хойш уг мөрөнд байгаа текстийг ердийн тайлбар гэж ойлгодог юм.
  • 7.
    www.emust.edu.mn Тогтмолыг ашиглах нь Тогтмолтодорхойлохын гол шалтгаан. Бидний программд нэгэн тогтмол тоо буюу 23 гэсэн тоо маш олон дахин, тодруулбал 100 дахин ашиглагддаг гэж үзье. Бид тэгвэл программдаа 100 удаа 23 гэж бичиж өгөх болно. Нэг удаа бичээд өнгөрөхөд төвөгтэй үйлдэл биш байж болох юм. Гэтэл тэрхүү тоо 25 болж өөрчлөгдөх шаардлага гарчээ. Тэгвэл энэ удаад би программдаа байгаа бүх 23 гэсэн тоог 25 болгож өөрчлөх шаардлагатай болж байна. Энэ тохиолдолд хийх ажил тийм ч хялбар биш болж ирэх нь ойлгомжтой. Харин бид 23 гэсэн тоог программдаа тогтмол болгон тодорхойлсон бол үүнийг өөрчлөх тун ч амархан. Өөрөөр хэлбэл, #define num 23 гэж бичээд, уг тоотой ажиллах бүх газар num гэсэн тогтмолоо ашиглах хэрэгтэй юм. Тэгвэл дээрх шаардлага гарахад зөвхөн энэ мөрийг л #define num 25 болгон өөрчилөхөд л хангалттай юм. Ингэвэл программ дахь 23 гэсэн тоон дээр хийж байсан бүх үйлдлүүд 25 гэсэн тоон дээр хийгдэх болно. ‘#’ тэмдгээр эхэлсэн нөөц үгийг компиляторын директив гэж нэрлэх бөгөөд #define нь ч гэсэн директив болно
  • 8.
    www.emust.edu.mn • Хувьсагч ньганц тогтмол утга биш, харин утгуудын тодорхой мужаас аль нэгийг нь авах боломж • Хувсагчийн төрөл гэдэг нь түүний авч болох утгуудын мужийг хэлж байгаа юм Хувьсагчийг ашиглах нь Программын явцад харгалзах утгууд нь өөрчлөгдөж байдаг идентификаторыг хувьсагч гэнэ Төрөл Утгын муж char ‘0’..’9’,’A’..’Z’,’a’..’z’,*/+-¡@#$%^&*(){}[];;.,’”?`~ short -128..127 unsigned short 0..255 int -32768..32767 unsigned int 0..65535 long -2147483648.. 2147483647 unsigned long 0..4294967295 float 1.17549435e-38..3.40282347e+38 double 2.2250738585072014e-308 .. 1.7976931348623157e+308 С++-д дараах стандарт төрлүүд байдаг.
  • 9.
    www.emust.edu.mn Хувьсагчийг ашиглах нь Хэрэглэгчөөрийн хэрэгцээнд таарсан шинэ төрлийн үүсгэж болно <хувьсагчийн төрөл> <хувьсагчийн нэр><=анхны утга> Int ivar1; //бүхэл утга авах хувьсагч Int ivar2=-10; //Анхны утга float fvar1=2.57; //Бутархай хувьсагч unsigned int ivar3=500; //Эерэг бүхэл хувьсагч char ch1,ch2=’*’,ch3; //Тэмдэгт хувьсагчууд Хувьсагчийн тухайд доорх хэдэн санамжийг мартаж болохгүй. Бид программын дурын хэсэгт хувьсагчийн утгыг өөрчилж болох боловч хувьсагчид өгч байгаа утга нь уг хувьсагчийн төрлийнх байх ёстой. Нэг программ дотор ижил нэртэй 2 хувьсагч байж болохгүй. Хувьсагчийн утгатай холбоотой гарч болох алдааг үргэлж тооцож, боловсруулж байх нь зүйтэй. Шаардлагагүй тохиолдолд их том хэмжээний утгын мужтай хувьсагч тодорхойлох нь программыг их нүсэр, болхи болгодог.
  • 10.
    www.emust.edu.mn Санах ой, түүнийхаяг Программ ажиллахын тулд уг программын бүх биелэх коммандууд болон программд шаардлагатай өгөгдлүүдийг бүгдийг нь компьютерийн дотоод санах ойд байрлуулдаг. Санах ой нь нэг удаад нэг тэмдэгт болон тоог санах боломжтой нүднүүдээс тогтоно. Нэг нүдэнд нэг байт өгөгдөл хадгалагдана. Ө.х. нэг тэмдэг буюу тоо нь санах ойд нэг байтыг эзэлдэг гэсэн үг юм. Санах ойн багтаамж гэдэг нь энэхүү нүднүүдийн тоог хэлж байгаа юм. Тухайлбал, 640000 байтын багтаамжтай санах ой гэвэл түүнд 640000 нүд байгаа бөгөөд нийтдээ 640000 тэмдгээс тогтсон өгөгдлийг уг санах ойд хадгалах боломжтой гэж ойлгож болно. Санах ойн нүд бүр өөрийн хаягтай байдаг. Ө.х 640000 байтын санах ойн эхний нүдний хаяг 0, сүүлийн нүдний хаяг нь 639999 байна.
  • 11.
    www.emust.edu.mn Санах ой, түүнийхаяг Төрөл Санах ойд эзлэх байт char 1 short 1 unsigned short 1 signed int 2 unsigned int 2 long 4 unsigned long 4 Санах ойд хадгалагдаж байгаа программын кодуудыг төв процессор нэг бүрчлэн уншиж уг коммандуудыг дэс дараалан биелүүлдэг юм. Гэхдээ санах ойд байгаа өгөгдлийг программын код, хувьсагч, тогтмол аль нь болохыг процессор огт мэдэхгүй бөгөөд хэрэв программыг оновчгүй зохион байгуулвал процессор буруу комманд биелүүлэн, системийг гацахад хүргэж болзошгүй. Программ дотор хувьсагч тодорхойлно гэдэг нь санах ойн нэг болон хэд хэдэн нүдийг уг хувьсагчид зориулан нөөцлөн авч, тэр нүднийхээ хаягийг хувьсагчид сануулж өгдөг байна. Уг хувьсагчтай ажиллана гэдэг нь тэрхүү нөөцөлсөн нүдэнд байгаа өгөгдөлтэй ажиллана гэсэн үг юм. Харин уг хувьсагчид хэдэн нүдийг нөөцлөх вэ гэдэг нь тэрхүү хувьсагчийн төрлөөс хамаардаг
  • 12.
    www.emust.edu.mn CONST нөөц үг Бичлэгийнхувьд үндсэндээ #define директивтэй ижил гэж үзэж болно #define <төрөл> <нэр>=<тогтмол утга> Жишээ нь: const int month=12 const int degree=–30 const double pi=3.1412 const char name[]=“П.Амарбат” const char question[]=“Sure?” Зөвхөн тогтмолын нэр ба утгын хооронд тэнцүүгийн тэмдэг тавьдагаараа өмнөх директивээс ялгарах юм. Бичлэгийн хувьд ижил боловч компиляторын хувьд энэ хоёр нь маш их ялгаатай тодорхойлолтууд юм. Тогтмолыг тодорхойлохын тулд мөн const гэсэн нөөц үгийг ашиглана Учир нь const нөөц үгийг ашиглан тодорхойлсон тогтмол нь программын явцад огт өөрчлөгдөхгүй боловч хувьсагч шиг программын туршид санах ойд нэг болон хэд хэдэн байтыг эзлэн оршсоор байдаг. Хэрэв pi тогтмолыг const нөөц үгээр тодорхойлсон бол компилятор pi - г яг л хувьсагч шиг хөрвүүлнэ. Өөрөөр хэлбэл, энэ комманд биелэхийн тулд уг тогтмолд зориулсан санах ойгоос очиж өгөгдлийг унших болно.
  • 13.
    www.emust.edu.mn Толгой файлыг ашиглахнь С++ -ийг ашиглан программ бичиж байгаа тохиолдолд өөр файлд тодорхойлогдсон байгаа функц, тогтмол, макро зэргийг ашиглах бүрэн боломжтой Том хэмжээний программ бичиж байгаа тохиолдолд маш их хэмжээний тогтмол болон функцүүдийг нэг файлдаа тодорхойлох нь файлын хэмжээ болон программын бүтцийн хувьд тун эмх замбараагүй болох бөлгөө. Тогтмол болон макронуудаа нэг файлд ялгаж тодорхойлоод түүнийгээ өөрийн файлдаа холбож өгвөл программын бүтэц энгийн болоод ойлгомжтой болох юм. Ийм файлыг толгой файл гэх бөгөөд толгой файл нь ‘ *.h ’ өргөтгөлтэй байна. //defs.h void fun1() { } //my.cpp #include “defs.h” void main() { . . . . . fun1(); . . . . . }
  • 14.
    www.emust.edu.mn Толгой файлыг ашиглахнь Толгой файлыг зааж өгөхдөө #include нөөц үгийг ашиглах бөгөөд түүний ард файлын нэрийг (“ “) тэмдгээр хашиж бичнэ • Заавал мөрийн эхлэлээс бичих ёстой • С++ өөрийн гэсэн стандарт толгой файлуудтай Borland C++-ийн library гэсэн дэд каталогид байрлах ёстой. Ийм стандарт толгой файлуудыг тодорхойлох тохиолдолд #include директивийн бичлэгт ялимгүй өөрчлөлт орно. Нөөц үгийн ард файлын нэрийг бичихдээ (“ “) биш, (< >) хаалт хэрэглэх ёстой. Жишээ нь, математик болон логикийн функц, тогтмол, макронууд нь math.h гэсэн толгой файлд агуулагдаж байдаг. Хэрэв та программынхаа эхэнд #include <math.h> гэж зааж өгсөн бол программдаа математикийн функцүүдийг ашиглах боломжтой боллоо гэсэн үг юм. //defs.h void fun1() { } //my.cpp #include “defs.h” void main() { . . . . . fun1(); . . . . . }
  • 15.
    www.emust.edu.mn C++ ПРОГРАММЫН ЕРӨНХИЙБҮТЭЦ үндсэн программаас БЭЛТГЭЛ ДЭД ПРОГРАММ Программын бэлтгэл хэсэгт уг программын бүхий л хүрээнд ашиглагдаж болох глобаль хувьсагч, тогтмолууд болон уг программд ашиглагдах стандарт функцүүдийн байрлаж буй толгой файлуудыг тодорхойлж өгдөг юм //hello.cpp #include <iostream.h> #define greeting = ”Сайн байна уу?”; void main() { cout << greeting; } iostream.h //толгой файлд байгаа ямар нэгэн өгөгдлийг ашиглана гэдгээ хэлж //greeting гэсэн нэртэй тэмдэгт мөр тогтмол тодорхойлсон void main()// программын биелэх кодууд C++-д нэгэн бүлэг үйлдлүүдийг гоё хаалтаар ( {} ) cout //комманд дээр тодорхойлсон iostream.h гэсэн толгой файлд байрладаг
  • 16.
    www.emust.edu.mn Харьцуулах үйлдэл нь хоёр утгыг хооронднь жишдэг Утгууд нь C++ ийн стандарт төрлүүд, хэрэглэгчийн тодорхойлсон хувьсагч -Харьцуулах үйлдлүүд Ихэнх программ ямар нэгэн нөхцлөөс хамааруулан хийх үйлдлээ сонгоход (яг л хүн шиг) хүрдэг. Ө.х. программ доторх нөхцлөөс хамааран үйлдлийн удирдлага программын нэг хэсгээс нөгөө хэсэг рүү үргэлж “ үсэрч “ байдаг. Программ дотор ийм үсрэлт хийлгэдэг командуудыг удирдлагын коммандууд гэнэ. Удирдлагын комманд нь давталтын бол нөхцөл шалгалтын гэсэн 2 янз байдаг. char, int, float г.м Жишилт нь тэнцүү, их тэнцүү, бага тэнцүү г.м //relat.cpp #include <iostream.h> void main() { int numb; cout << “Тоогоо оруулна уу : ”; cin >> numb; cout << “numb<10 нь “ << (numb<10) << endl; cout << “numb>10 нь “ << (numb>10) << endl; cout << “numb==10 нь “ << (numb==10) << endl; } Тоогоо оруулна уу: 20 numb<10 нь 0 numb>10 нь 1 numb=10 нь 0 бүхэл тоон хувьсагчийн утгыг тогтмол тоотой тэнцэж байгаа эсэхийг шалгаж үр дүнг харуулах
  • 17.
    www.emust.edu.mn Оператор Утга > Эрсих < Эрс бага == Тэнцүү != Тэнцүү биш >= Их тэнцүү <= Бага тэнцүү C++-ийн харьцуулах үйлдлүүдийг жагсаавал: Jane=44 Утга оноож байна Harry=12 Утга оноож байна (jane=harry) Худал (harry<=12) Үнэн (jane>harry) Үнэн (Jane>=44) Үнэн (harry!=12) Худал (7<harry) Үнэн (0) Худал (44) Үнэн Харьцуулах үйлдлүүдийг ашиглах жишээ Тэнцүүг шалгахдаа 2 ширхэг (=) тэмдэг тавина. Нэг (=) бол утга оноох үйлдэл юм. Утга оноох үйлдлийг харьцуулах үйлдлийн оронд хэрэглэх нь C++ анхан суралцагчдын хувьд нийтлэг гаргадаг алдаа юм. Энэ тохиолдолд компилятор ямар ч алдаа өгөхгүй бөгөөд харин программ буруу ажиллах болно.
  • 18.
    www.emust.edu.mn Харьцуулах үйлдэл Үйлдэл ТайлбарЖишээ == Тэнцүү 5 == 3 буцаах утга 0 > Эрс их 5 > 3 буцаах утга 1 < Эрс бага 5 < 3 буцаах утга 0 != Тэнцүү биш 5 != 3 буцаах утга 1 >= Их буюу тэнцүү 5 >= 3 буцаах утга 1 <= Бага буюу тэнцүү 5 <= 3 буцаах утга 0 Логик үйлдлүүд Үйлдэл Тайлбар Жишээ && Логик AND. Операндууд бүгд үнэн үед үнэн байна. Бусад үед худал байна. (c == 5) && (d > 5) Үр дүн: 0 || Логик OR. Операндуудын аль нэг нь үнэн үед үнэн бусад үед худал байна. (c == 5) || (d>5) Үр дүн: 1. ! Логик NOT. Операнд үнэн бол худал, худал бол үнэн утгатай байна. ! (c == 5) Үр дүн: 0
  • 19.
    www.emust.edu.mn #include <stdio.h> int main() {int a = 5, b = 5, c = 10; printf("%d == %d = %d n", a, b, a == b); // true printf("%d == %d = %d n", a, c, a == c); // false printf("%d > %d = %d n", a, b, a > b); //false printf("%d > %d = %d n", a, c, a > c); //false printf("%d < %d = %d n", a, b, a < b); //false printf("%d < %d = %d n", a, c, a < c); //true printf("%d != %d = %d n", a, b, a != b); //false printf("%d != %d = %d n", a, c, a != c); //true printf("%d >= %d = %d n", a, b, a >= b); //true printf("%d >= %d = %d n", a, c, a >= c); //false printf("%d <= %d = %d n", a, b, a <= b); //true printf("%d <= %d = %d n", a, c, a <= c); //true }
  • 20.
    www.emust.edu.mn #include <stdio.h> int main() {int a = 5, b = 5, c = 10, result; result = (a == b) && (c > b); printf("(a == b) && (c > b) equals to %d n", result); result = (a == b) && (c < b); printf("(a == b) && (c < b) equals to %d n", result); result = (a == b) || (c < b); printf("(a == b) || (c < b) equals to %d n", result); result = (a != b) || (c < b); printf("(a != b) || (c < b) equals to %d n", result); result = !(a != b); printf("!(a == b) equals to %d n", result); result = !(a == b); printf("!(a == b) equals to %d n", result); }
  • 21.
    www.emust.edu.mn Арифметик үйлдлүүд Үйлдл үүд Тайлбар + Нэмэх баунар нэмэх үйлдэл - Хасах ба унар хасах үйлдэл * Muүржих үйлдэл / Хуваах % Үлдэгдлийг олох үйлдэл #include <stdio.h> int main() { float a = 9,b = 4, c; c = a+b; printf("a+b = %d n",c); c = a-b; printf("a-b = %d n",c); c = a*b; printf("a*b = %d n",c); c=a/b; printf("a/b = %d n",c); c=a%b; printf(“ Remainder b = %d n",c); }
  • 22.
    www.emust.edu.mn • Си хэлэндмаш өргөн хэрэглэгддэг үйлдлүүд нь нэмэгдүүлэх (++), хорогдуулах (--) үйлдлүүд юм. • i++ гэсэн илэрхийлэл нь i=i+1 гэсэн илэрхийлэлтэй ижил чанартай юм. • i-- гэсэн илэрхийлэл нь i=i-1 гэсэн илэрхийлэлтэй ижил чанартай юм. • Нэмэгдүүлэх, хорогдуулах үйлдэл нь операнд/хувьсагч эсвэл тогтмол/-ын утгыг 1-ээр нэмэгдүүлж, хорогдуулдаг. Нэмэгдүүлэх ба хорогдуулах үйлдэл Нэмэгдүүлэх, хорогдуулах үйлдэл нь операндын аль талд бичигдсэнээс хамаарч ялгаатай байдлаар бодогдоно. 1. Prefix хэлбэр ++i 2. Postfix хэлбэр i++ • b=c + i++; <=> b=c + i; i=i+1; • b=c + ++i; <=> i=i+1; b=c + i; #include <stdio.h> int main() { int var=5; printf("%dn",var++); // 5 –ийг дэлгэцэнд хэвлээд дараа нь var хувьсагчийн утга нэгээр нэмэгдэж 6 болно. printf("%d",++var); // var = 6. var хувьсагчийн утгыг нэгээр нэмж 7 болгоод дараа нь дэлгэцэнд үр дүнг гаргана. }
  • 23.
    www.emust.edu.mn Утга олго үйлдэл ҮйлдэлЖишээ Дэлгэрэнгүй = a = b a = b += a += b a = a+b -= a -= b a = a-b *= a *= b a = a*b /= a /= b a = a/b %= a %= b a = a%b #include <stdio.h> int main() { int a = 5, b = 5, c = 10, result; result = (a == b) && (c > b); printf("(a == b) && (c > b) equals to %d n", result); result = (a == b) && (c < b); printf("(a == b) && (c < b) equals to %d n", result); result = (a == b) || (c < b); printf("(a == b) || (c < b) equals to %d n", result); result = (a != b) || (c < b); printf("(a != b) || (c < b) equals to %d n", result); result = !(a != b); printf("!(a == b) equals to %d n", result); result = !(a == b); printf("!(a == b) equals to %d n", result); }
  • 24.