More Related Content
Similar to u.cs101 "Алгоритм ба програмчлал" Лекц №4
Similar to u.cs101 "Алгоритм ба програмчлал" Лекц №4 (20)
More from Khuder Altangerel
More from Khuder Altangerel (17)
u.cs101 "Алгоритм ба програмчлал" Лекц №4
- 2. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
212/16/2015Vanderbilt university
- 3. Функцууд
◦ Си-гийн модуль
◦ Програмд хэрэглэгчийн зохиосон болон сангийн
функцууд байна.
Си-гийн стандарт санд төрөл бүрийн функцууд байдаг
Функцийн дуудалтууд
◦ Функц дуудах
Функцийн нэр болон аргументуудыг (өгөгдөл) зааж өгнө
Функц үйлдлүүдээ гүйцэтгэнэ
Функц үр дүнгээ буцаана
◦ Функц дуудалттай төстэй зүйл
Дарга нь ажилтандаа даалгавар өгөх
Ажилтан мэдээллийг авч, даалгаврыг биелүүлээд, үр дүнг
авчирна
Мэдээллийн далдлалт: дарга деталиудыг нь мэдэхгүй
312/16/2015Vanderbilt university
- 5. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
512/16/2015Vanderbilt university
- 6. Math сангийн функцууд
◦ Математикийн энгийн тооцооллыг гүйцэтгэнэ
◦ #include <math.h>
Функцийг дуудах хэлбэр
◦ ФункцийнНэр(аргумент);
Хэрэв олон аргументтай бол таслалаар тусгаарлан
жагсаана
◦ printf( "%.2f", sqrt( 900.0 ) );
Аргументынхаа квадрат язгуурыг буцаах sqrt функцийг
дуудна.
Математикийн бүх функцууд double өгөгдлийн төрлийн
утга буцаана
◦ Аргумент нь тогтмол, хувьсагч эсвэл илэрхийлэл байж
болно
612/16/2015Vanderbilt university
- 8. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
812/16/2015Vanderbilt university
- 9. Функцууд
◦ Програмыг модульчлана
◦ Функц дотор зарласан хувьсагчид нь локал хувьсагчид байна
Зөвхөн функц дотор харагдана
◦ Параметрууд
Функцуудын хооронд мэдээлэл солилцох
Локал хувьсагчид
Функцийн давуу талууд
◦ Хуваагаад нэгтгэх
Програм хөгжүүлэхэд ашиглах арга
◦ Програмын дахин ашиглагдах чанар
Шинэ програм бичихэд байгаа функцуудийг блок болгон ашиглах
Хийсвэрлэл – дотоод деталиудыг далдлах (сангийн функцууд)
◦ Код давтахаас зайлсхийх
912/16/2015Vanderbilt university
- 10. Олон функцтэй програмын хувьд main
функц нь програмын ихэнх ажлуудыг
гүйцэтгэх функцуудыг дуудсан дуудалт
байдлаар бичигдэнэ
Функц бүр сайтар тодорхойлогдсон ганц
даалгавартай байх ѐстой ба функцийн нэр
нь уг үүргээ зөв илэрхийлсэн байх хэрэгтэй
1012/16/2015Vanderbilt university
- 11. Функцийг тодорхойлох хэлбэр
буцаах-утгын-төрөл функцийн-нэр(параметрууд)
{
Зарлалт ба үйлдлүүд
}
Функцийн-нэр: дурын зөв идентификатор
Буцаах-утгын-төрөл: үр дүнгийн өгөгдлийн төрөл (хэвшмэл нь int)
void – функц юу ч буцаахгүйг заана
Параметрууд – параметруудыг зарлах таслалаар тусгаарлагдсан жагсаалт
int төрөлтэй биш параметр бүрийн хувьд төрлийг нь нэг бүрчлэн бичиж өгнө
Зарлалт ба үйлдлүүд: функцийн бие (блок)
Хувьсагчийг блок дотор зарлаж болно (багтсан блок байж болно)
Функцийг өөр функцийн бие дотор тодорхойлж болохгүй
Удирдлага шилжүүлэх
Хэрэв юу ч буцаахгүй бол
return;
эсвэл хаах их хаалт хүртэл
Ямар нэг зүйл буцааж байгаа бол
return илэрхийлэл;
1112/16/2015Vanderbilt university
- 12. Функцийн загвар нь уг
функц програмд удахгүй
гарч ирэхийг заана
square функцийн дуудалт
Функцийн
тодорхойлолт
1212/16/2015Vanderbilt university
- 13. Функцийн загвар
◦ Функцийн нэр
◦ Параметрууд – функц юу хүлээж авах
◦ Буцаах төрөл – функцийн буцаах өгөгдлийн төрөл
(хэвшмэл нь int)
◦ Функцийг шалгахад хэрэглэгдэнэ
◦ Хэрэв функцийн тодорхойлолт нь хэрэглэх мөрнөөсөө
хойш байхад загварыг хэрэглэнэ
◦ Жишээ
int maximum( int x, int y, int z );
Гурван бүхэл тоо авна
Нэг бүхэл тоо буцаана
Төрөл хувиргах дүрэм
◦ Доод төрөл рүү хувиргах нь алдаанд хүргэж болно
1312/16/2015Vanderbilt university
- 17. Функцийн загвар нь хөрвүүлэгчид дараах зүйлсийг зааж өгнө:
◦ функцийн буцааж байгаа өгөгдлийн төрөл
◦ функцийн хүлээж авах параметрүүдийн тоо
◦ параметруудын төрөл болон,
◦ эдгээр параметруудын дараалал
◦ Функцийн тодорхойлолт нь хэрэглэсэн мөрнөөсөө хойш байгаа тохиолдолд л
загварыг хэрэглэнэ
Зааж өгөөгүй тохиолдолд хөрвүүлэгч функцийг int утга буцаадаг,
параметргүй гэж үзнэ.
Хэрэв функцийн загварт уг функц int-ээс ялгаатай утга буцаана гэсэн
байгаа бол функцийн тодорхойлолт дээр буцаах-утгын-төрлийг
орхивол синтакс алдаа үүснэ.
Ямар нэг утга буцаах ѐстой функцэд утга буцаахаа мартвал
тодорхойгүй алдаанд хүргэж болно. Си-гийн стандартад ингэж
мартсан тохиолдолд юу болох нь тодорхойгүй гэсэн байдаг.
Буцаах төрөл нь void байх функц ямар нэг утга буцаавал синтакс
алдаа гарна.
◦ Функцийн загвар, функцийн толгой болон функцийн дуудалт нь параметрийн
болон аргументын тоо, төрөл болон дарааллаараа мөн буцаах утгын төрлөөрөө
таарч байх ѐстой.
1712/16/2015Vanderbilt university
- 18. Толгой файлууд
◦ Сангийн функцуудын загварыг агуулна
◦ <stdio.h>, <math.h> гэх мэт
◦ #include <файлын нэр> гэж ачаална
#include <math.h>
Үүсгэсэн толгой файлууд
◦ Функцуудтэй файл үүсгэнэ
◦ файлынНэр.h гэж хадгална
◦ Өөр файлаас #include <файлынНэр.h> гэж
ачаална.
◦ Функцийн дахин ашиглалт
1812/16/2015Vanderbilt university
- 20. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
2012/16/2015Vanderbilt university
- 21. Утгаар дуудах
◦ Аргументын хуулбарыг функцэд дамжуулна
◦ Функц дотор утгыг нь өөрчлөхөд хувьсагчид
нөлөөлөхгүй
◦ Функц аргументын утгыг өөрчлөх шаардлагагүй үед
хэрэглэнэ
Санамсаргүй өөрчлөлтөөс зайлсхийнэ
Хаягаар дуудах
◦ Аргументыг өөрийг нь дамжуулна
◦ Функц дотор өөрчлөлт хийхэд хувьсагчид нөлөөлнө
◦ Зөвхөн зөв гэдэгт итгэлтэй байгаа үед хэрэглэнэ
Утгаар дуудахыг авч үзье
2112/16/2015Vanderbilt university
- 22. rand функц
◦ <stdlib.h>-г ачаална
◦ 0-ээс RAND_MAX (доод тал нь 32767) завсраас
санамсаргүй тоо буцаана
i = rand();
◦ Хуурамч санамсаргүй тоо
Урьдчилан тодорхойлсон “санамсаргүй” тоонуудын дараалал
Функцийг дуудах бүрд ижил дараалал үүснэ
Масштаб
◦ 1-ээс n завсар дахь санамсаргүй тоо үүсгэхийн тулд
1 + ( rand() % n )
rand() % n нь 0-ээс n-1 завсрын санамсаргүй тоо үүсгэнэ
1-ээс n завсрын тоо болгохын тулд 1-ийг нэмнэ
1 + ( rand() % 6)
1-ээс 6 завсар дахь санамсаргүй тоо
2212/16/2015Vanderbilt university
- 27. srand функц
◦ <stdlib.h>
◦ Бүхэл тоо авч, өөрийн “санамсаргүй” тоон
дарааллын тодорхой байрлал руу үсэрнэ
srand(seed);
◦ srand( time(NULL) ); /*load <time.h> */
time(NULL);
time() функц нь 1970 оны 1 сарын 1-ний 0 цаг 0 минут
0 секундээс хойш өнгөрсөн хугацааг секундээр буцаана
Үүсгүүрийг “санамсаргүй” болгоно
2712/16/2015Vanderbilt university
- 30. Хадгалалтын ангийн тэмдэглэгээнүүд
◦ Хадгалалтын хугацаа – объект санах ойд хэр удаан
байх
◦ Муж – объект програмын аль хэсэгт харагдах
◦ Холболт – идентификаторын ашиглагдах файлуудыг
заана (дараа дэлгэрэнгүй үзнэ)
Автомат хадгалалт
◦ Объект өөрийн блокт үүсч тэндээ устгагдана
◦ auto: локал хувьсагчдын хувьд хэвшмэл
auto double x, y;
◦ register: хувьсагчийг өндөр хурдтай регистрт хийхийг
хичээнэ
Зөвхөн автомат хувьсагчдын хувьд хэрэглэнэ
register int counter = 1;
3012/16/2015Vanderbilt university
- 31. Static хадгалалт
◦ Хувьсагч нь програмын биелэлтийн турш оршин
байна
◦ Хэвшмэл утга нь тэгтэй тэнцүү
◦ static: функцийн локал хувьсагчид
Функцийг ажиллаж дууссаны дараа утгаа хадгална
Зөвхөн өөрийн функц дотроо харагдана
◦ extern: глобал хувьсагчид болон функцуудын
хувьд хэвшмэл
ямар ч функцээс харагдана
3112/16/2015Vanderbilt university
- 32. 4 төрлийн муж байна
Файлын муж
◦ Функцийн гадна зарлагдсан идентификатор бүх
функцээс харагдана
◦ Глобал хувьсагч, функцийн тодорхойлолт,
функцийн загварт хэрэглэгдэнэ
Функцийн муж
◦ Зөвхөн функцийн бие дотроос хандаж болно
◦ Зөвхөн тэмдэглэгээнүүдэд хэрэглэгдэнэ (start:
case: гэх мэт)
3212/16/2015Vanderbilt university
- 33. Блок муж
◦ Блок дотор зарлагдсан идентификатор
Блок муж их хаалт нээхээр эхэлж, хаахаар дуусна
◦ Хувьсагч, функцийн параметрүүдэд (функцийн
дотоод хувьсагчид) хэрэглэгдэнэ
◦ Дотоод блокт ижил нэртэй хувьсагч байвал
гадаад блокт байгаа хувьсагч “харагдахгүй”
Функцийн загварын муж
◦ Параметрын жагсаалтанд байгаа
идентификаторуудад хэрэглэгдэнэ
3312/16/2015Vanderbilt university
- 38. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
3812/16/2015Vanderbilt university
- 39. Рекурсив функц
◦ Өөрийгөө дууддаг функц
◦ Үндсэн тохиолдлыг л шийднэ
◦ Бодлогыг дараах хэсгүүдэд хуваана
Юуг хийж чадах
Юуг хийж чадахгүй
Хийж чадах зүйл нь анхны бодлого байна
Функц нь хийж чадахгүй байгаа зүйлээ шийдэхийн тулд
өөрийнхөө шинэ хуулбарыг үүсгэнэ
Эцэст нь үндсэн тохиолдлыг шийднэ
Рекурс дууссаны дараа бодлогыг бүхэлдээ шийдэгдсэн
байна
3912/16/2015Vanderbilt university
- 40. Жишээ: факториал
◦ 5! = 5 * 4 * 3 * 2 * 1
◦ Дараах тэнцэтгэлүүд үнэн:
5! = 5 * 4!
4! = 4 * 3! ...
◦ Факториалыг рекурсээр тооцоолж болно
◦ Үндсэн тохиолдлыг шийдээд (1! = 0! = 1) цааш
үргэлжлүүлнэ
2! = 2 * 1! = 2 * 1 = 2;
3! = 3 * 2! = 3 * 2 = 6;
4012/16/2015Vanderbilt university
- 44. Фибоначчийн цуваа: 0, 1, 1, 2, 3, 5, 8, ...
◦ Тоо бүр нь өмнөх хоѐр тооныхоо нийлбэр
◦ Рекурсээр тооцоолж болно:
fib( n ) = fib( n - 1 ) + fib( n – 2 )
◦ fibonacci функцийн код
long fibonacci( long n )
{
if (n == 0 || n == 1) /* base case */
return n;
else
return fibonacci(n-1)+fibonacci(n–2);
}
4412/16/2015Vanderbilt university
- 50. Давталт
◦ алхам: илэрхий давталт
◦ рекурс: давтагдсан функцийн дуудалтууд
Төгсгөл
◦ алхам: давталтын нөхцөл худал болно
◦ рекурс: үндсэн тохиолдолд хүрнэ
Хоѐулаа төгсгөлгүй байж болно
Баланс
◦ Гүйцэтгэл (давталт) болон сайн програм
хангамжийн инженерчлэлийн (рекурс) хоорондын
сонголт
5012/16/2015Vanderbilt university
- 51. Програмыг функц гэж нэрлэгдэх жижиг
хэсгүүдээр бүтээх
Си-гийн стандарт сан дахь математикийн
энгийн функцууд
Шинэ функц зохиох
Функцуудын хооронд мэдээлэл дамжуулах
механизм
Өөрийгөө дууддаг буюу рекурсив функцийг
хэрхэн зохиож хэрэглэх
Дүгнэлт
5112/16/2015Vanderbilt university
- 52. Функц бол Си програмын үндсэн модуль юм
Math сангийн функцууд
Функцийн тодорхойлолт
Функцийн загвар
Толгой файл
Функцийн дуудалт: утгаар дуудах ба хаягаар
дуудах
Санамсаргүй тоо үүсгэх
Хадгалалтын ангиуд
Мужийн дүрмүүд
Рекурс
5212/16/2015Vanderbilt university