Dsi lec4
- 2. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
Багш: Т.Гантөр
- 3. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Багш: Т.Гантөр
- 4. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Багш: Т.Гантөр
- 5. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Багш: Т.Гантөр
- 6. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Багш: Т.Гантөр
- 7. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Багш: Т.Гантөр
- 8. Шугаман хайлтын арга– Linear Search
Хайх утга:
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 50 66 6 74 89 10 23 24 73 2
23
Элемэнт олдлоо
Буцаах утга:
6
Багш: Т.Гантөр
- 9. Хоёртын хайлтын арга– Binary Search
Шугаман хайлттай харьцуулбал илүү үр дүнтэй
аргын нэг бол хоѐртын хайлт буюу таллан
хуваах арга юм.
Энэ арга нь өгөгдлийг хоѐр хэсэгт хуваан хайх
элемэнт аль хэсэгт байгааг тодорхойлдог.
Энэ аргыг ашиглахад өгөгдөл эрэмбэлэгдэн байх
ѐстой.
Багш: Т.Гантөр
- 10. Хоёртын хайлтын арга– Binary Search
Аргын үндсэн санаа:
1. Хайх элемэнт буюу Х тоо массивын дундаж
элемэнт мөн үү гэдгийг шалгах явдал юм.
Хэрэв энэ нь үнэн бол бодлогын шийд олдлоо
гэсэн үг.
2. Тийм биш бол 2 тохиолдол байна.
Багш: Т.Гантөр
- 11. Хоёртын хайлтын арга– Binary Search
a. Х нь дундаж элемэнт буюу голын элемэнтээс
бага бол уг массив эрэмбэлэгдсэн гэдгийг
тооцоод голын элемэнтээс баруун тийш
байрлах бүх элемэнтүүдийг хяналтаас хасах
ба энэ аргыг массивын голын элемэнтээс
зүүн гар талд орших хэсэгт хэрэглэх
b. Х нь дундаж элемэнт буюу голын элемэнтээс
их бол уг массив эрэмбэлэгдсэн гэдгийг
тооцоод голын элемэнтээс зүүн тийш
байрлах бүх элемэнтүүдийг хяналтаас хасах
ба энэ аргыг массивын голын элемэнтээс
баруун гар талд орших хэсэгт хэрэглэх
Багш: Т.Гантөр
- 12. Хоёртын хайлтын арга
BinarySearch функц:
int BinarySearch(int a[],int n,int x){
int mid, low=0, high=n;
while(low<=high){
mid=(low+high)/2;
if(x==a[mid]) return mid;
if(x>a[mid]) low=mid+1;
else high=mid-1;
}
return -1;
}
Багш: Т.Гантөр
- 13. Хоёртын хайлтын арга– Binary Search
Хайх утга:
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 2 6 10 23 24 50 66 73 74 89
Багш: Т.Гантөр
- 14. Хоёртын хайлтын арга– Binary Search
Хайх утга:
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 2 6 10 23 24 50 66 73 74 89
Багш: Т.Гантөр
- 15. Хоёртын хайлтын арга– Binary Search
Хайх утга:
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 2 6 10 23 24 50 66 73 74 89
Багш: Т.Гантөр
- 16. Хоёртын хайлтын арга– Binary Search
Хайх утга:
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга 2 6 10 23 24 50 66 73 74 89
Элемэнт олдлоо
Буцаах утга:
3
Багш: Т.Гантөр
- 19. Санах ой гэж юу вэ?
Санах ой гэдэг нь хувьсагч, өгөгдөл, код
зэргийг хадгалах газар юм.
Компьютер өгөгдлийг санах ойн аль нэг
хэсэгт хадгалдаг.
Компьютерийн санах ой нь байтуудын дэс
дараалсан үүрүүдээс тогтдог ба үүр бүр нь
хаягтай байна.
Багш: В.Нямсүрэн
- 20. Санах ойн зохион байгуулалт
Text – код,тогтмол өгөгдөл
Data – анхны утга олгогдсон
локаль ба глобаль хувьсагчид
BSS - анхны утга олгогдоогүй
локаль ба глобаль хувьсагчид
Stack – локаль хувьсагчид
Heap – динамик санах ой
Багш: В.Нямсүрэн
- 21. Заагч хувьсагч
Õóâüñàãч áîëîí îáúåêòûí ñàíàõ îéä áàéðëàæ
áàéãàà õàÿãèéã õàäãàëäàã ñàíàõ îéí heap
ìóæèä îðøèõ íýðëýãäñýí áëîêûã
çààãч(pointer) ãýíý.
Програмын ажиллах горимын үед хувьсагч
болон объектуудыг байршуулахад
зориулсан сул санах ойг heap (хийп) муж
гэнэ.
Багш: В.Нямсүрэн
- 22. Заагч хувьсагч
Заагч нь санах ойн хаягийг агуулах хувьсагч юм.
Заагч хувьсагчийн утга нь санах ойн хаяг байна.
Иймээс хаягаар дамжуулан уг хаягт харгалзах
үүрний өгөгдөлтэй ажиллах боломжтой.
Заагч төрлийн хувьсагчийн хаяг нь санах ойн
стект байрлана, жинхэнэ утга нь хийп санах ойд
байрладаг.
Багш: В.Нямсүрэн
- 23. Заагч хувьсагчийг зарлах
Бичигдэх хэлбэр
<заагчийн төрөл> *<заагчийн нэр>;
• Заагчийн төрөл- нь стандарт болон
хэрэглэгчийн тодорхойлсон дурын төрөл байж
болох бөгөөд ямар төрөлтэй хувьсагчийн
санах ойд байрлах хаягийг зааж чадахыг
тодорхойлно.
• *(од) нь заагч хувьсагчийг бусад энгийн
хувьсагчаас ялгаж өгдөг.
• Заагчийн нэр – заагчийн нэр нь
идентификаторт тавигдах шаардлагыг
хангасан нэр байна.
Багш: В.Нямсүрэн
- 25. Заагч дээрх үйлдлүүд
Заагч дээр ихэнх стандарт үйлдлүүдийг хийхийг
зөвшөөрдөг. Үүнд:
= (утга олгох)
+ (нэмэх)
- (хасах)
++ (нэмэгдүүлэх)
-- (хоргодуулах)
>, <, <=, >=, ==, != (харьцуулах)
Багш: В.Нямсүрэн
- 26. Заагч дээрх үйлдлүүд – Утга олгох
1. Заагчид утга олгохдоо тухайн заагч
хувьсагчийн төрөлтэй тохирох өгөгдлийн
төрөлтэй хувьсагчийн хаягийг буюу өгөгдлийн
санах ой дахь тодорхой байрлалын хаягийг
олгоно.
Өгөгдөл буюу хувьсагчийн хаягийг авахдаа
хаяг авах & операторыг ашиглана.
Багш: В.Нямсүрэн
- 27. Заагч дээрх үйлдлүүд – Утга олгох
Жишээ:
int alpha;
int *intPointer;
intPointer = α;
Багш: В.Нямсүрэн
- 28. Заагч дээрх үйлдлүүд – Утга олгох
Заагч хувьсагчийн:
*intPointer бичлэг нь заагчийн санах ойн
байрлал дахь утгыг илтгэнэ.
intPointer бичлэг нь заагчийн заах санах ойн
хаягийг илтгэнэ.
Багш: В.Нямсүрэн
- 30. Заагч дээрх үйлдлүүд – Утга олгох
2. Тухайн заагчид ижил төрөлтэй заагчийг олгох.
Энэ үйлдэл нь нэг заагч хувьсагчид өөр нэг
заагч хувьсагчийн зааж байгаа хаягийн оноож
байгаа хэлбэр юм.
Багш: В.Нямсүрэн
- 31. Заагч дээрх үйлдлүүд – Утга олгох
Жишээ:
int *intPointer1;
intPointer1=intPointer
1
Багш: В.Нямсүрэн
- 32. Заагч дээрх үйлдлүүд
Заагчийг нэмэгдүүлэх, хорогдуулах үед заагч нь
объектын хэмжээгээр нэмэгдэж, хорогддог.
Ө.х бүхэл тоон төрөл(int)-ийн заагч бол 2B-аар,
бутархай тоон төрөл(float)-ийн заагч бол 4В-аар
тус тус нэмэгдэж хорогддог.
Жиших үйлдэл нь заагчуудын зааж байгаа
санах ойн эхлэх хаягийг жишдэг. Тиймээс
заагчууд заавал ижил төрөлтэй байхыг
шаарддаггүй.
Багш: В.Нямсүрэн
- 33. Заагч дээрх үйлдлүүд
Заагчид дараах үйлдлүүдийг хийхийг
зөвшөөрдөггүй!!!
Хоѐр заагчийг нэмэх
Ялгаатай объект дээрх хоѐр заагчийг хасах
Бодит тоон утгатай заагчийг нэмэх
Заагчийг үржүүлэх
Заагчийг хуваах
Заагчийг шилжүүлэх үйлдэл
Багш: В.Нямсүрэн
- 34. Заагчийн төрлүүд
Заагч хувьсагч нь програм зохиогчид маш өргөн
боломжийг олгодог.
Энэ нь заагч маш олон төрөлтэй байдагтай
холбоотой
Багш: В.Нямсүрэн
- 35. Заагчийн төрлүүд – тэг заагч
Санах ойн ямар ч утгыг хаяглахгүй бөгөөд утга
нь 0 буюу хоосон байх заагчийг тэг заагч гэнэ.
Жишээ:
double *dp;
dp=NULL;
Багш: В.Нямсүрэн
- 36. Заагчийн төрлүүд – төрөлт заагч
Стандарт өгөгдлийн төрлүүд болон
хэрэглэгчийн тодорхойлсон төрлүүдээр
зарлагдсан заагчийг төрөлт заагч гэнэ.
Жишээ:
int *iPointer;
float *fPointer;
char *cPointer;
struct student{
char id[6];
char name[20];
int age;
} *sPointer;
Багш: В.Нямсүрэн
- 37. Заагчийн төрлүүд – төрөлт заагч
Ямар нэг стандарт өгөгдлийн төрөл болон
хэрэглэгчийн төрөл авч тодорхойлогдоогүй
заагчийг төрөлгүй заагч гэнэ. Ө.х төрөл нь
тодорхойгүй байна.
Төрөлгүй заагчийг void түлхүүр үгийн
тусламжтайгаар тодорхойлно.
Жишээ:
void *vPointer;
Төрөлгүй заагч нь стандарт болон хэрэглэгчийн
төрөлтэй утгын санах ойд байрлах байрлалыг
зааж чадна.
Багш: В.Нямсүрэн
- 38. Заагчийн төрлүүд – тогтмол заагч
Утгыг өөрчилж болохгүй буюу зааж байгаа
санах ойн үүрний хаягийг өөрчилж, өөр санах
ойн үүрний хаяг олгож болохгүй бөгөөд түүний
зааж байгаа санах ойн үүр дэх утгыг өөрчилж
болох заагчийг тогтмол заагч гэнэ.
Тогтмол заагчийг зарлахдаа const түлхүүр
үгийг ашиглана.
Тогтмол заагчийг зарлахдаа заавал анхны утга
олгосон байх шаардлагатай
Жишээ:
int i=13, p=33;
int *const cptr=&i;
*cptr++; *cptr=5;
Багш: В.Нямсүрэн
- 39. Заагчийн төрлүүд – тогтмолын заагч
Утгыг өөрчилж болох буюу зааж байгаа санах
ойн үүрний хаягийг өөрчилж, өөр санах ойн
үүрний хаяг оноож болох бөгөөд түүний зааж
байгаа санах ойн үүр дэх утгыг өөрчилж
болохгүй заагчийг тогтмолын заагч гэнэ.
Жишээ:
float p=3.14, f=2.7;
const float *cp;
cp=&f;
cp=&p;
Багш: В.Нямсүрэн
- 40. Заагчийн төрлүүд – заагчийн заагч
Заагчийн хаягийг заах хувьсагчийг заагчийн
заагч гэнэ. Мөн давхар заагч гэж нэрлэдэг.
Давхар заагч буюу заагчийн заагчийг дараах
хэлбэртэй зарлана.
int **iPointer;
float **fPointer;
**fptr äàâõàð çààãч íü çààãчèéí õàÿãèéã
õàäãàëíà.
Багш: В.Нямсүрэн
- 41. Заалт хувьсагч
Хувьсагчийн нэрийн өмнө & тэмдэг тавьснаар
түүний санах ойд байрлах хаягийг тодорхойлох
ба үүнийг хувьсагчийн төлөөлсөн нэр буюу
заалт(reference) гэнэ.
Хувьсагчийн санах ойн хаягт хандахад заагчаас
илүү тохиромжтой хэлбэр нь заалт юм.
Багш: В.Нямсүрэн
- 42. Заалт хувьсагч
Заалт хувьсагчийг зарлахдаа заавал ямар нэгэн
хаяг заалгаж зарлана.
Жишээ:
int i=150;
int &t=i;
Заалт хувьсагчийг зарлахдаа ямар нэгэн
хаяг заалгахгүйгээр зарлаж болохгүй
Жишээ:
float &f;
Багш: В.Нямсүрэн
- 43. Заалт хувьсагч
Анхны утга нь тоо биш хувьсагч байна. Заалт
хэзээ ч тогтмол утгыг зааж чадахгүй.
Жишээ:
int &t=32767;
Тогтмол заалтыг ашиглаж болох ба энэ үед
тогтмол заалтын утгыг өөрчилж болохгүй.
Жишээ:
double d=3.14;
const int &dref=d;
Багш: В.Нямсүрэн
- 44. Заалт хувьсагч
Заалт хувьсагчийн заагчаас ялгарах нэг онцлог
нь хэзээ ч NULL утгатай байж болохгүй бөгөөд
ямагт тухайн төрлийнхөө объектыг зааж байдаг.
Заалт дээр хийгдэх үйлдлүүд гэж байдаггүй.
Заалт дээр хийгдэх үйлдлүүд нь түүний зааж
байгаа объект дээр хийгдэнэ.
Багш: В.Нямсүрэн