Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

u.cs101 "Алгоритм ба програмчлал" Лекц №4

2,389 views

Published on

Си хэлний функц

Published in: Software
  • Be the first to comment

u.cs101 "Алгоритм ба програмчлал" Лекц №4

  1. 1. Лекц № 4 Си-гийн функцууд А. Хүдэр
  2. 2.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 212/16/2015Vanderbilt university
  3. 3.  Функцууд ◦ Си-гийн модуль ◦ Програмд хэрэглэгчийн зохиосон болон сангийн функцууд байна.  Си-гийн стандарт санд төрөл бүрийн функцууд байдаг  Функцийн дуудалтууд ◦ Функц дуудах  Функцийн нэр болон аргументуудыг (өгөгдөл) зааж өгнө  Функц үйлдлүүдээ гүйцэтгэнэ  Функц үр дүнгээ буцаана ◦ Функц дуудалттай төстэй зүйл  Дарга нь ажилтандаа даалгавар өгөх  Ажилтан мэдээллийг авч, даалгаврыг биелүүлээд, үр дүнг авчирна  Мэдээллийн далдлалт: дарга деталиудыг нь мэдэхгүй 312/16/2015Vanderbilt university
  4. 4. 412/16/2015Vanderbilt university
  5. 5.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 512/16/2015Vanderbilt university
  6. 6.  Math сангийн функцууд ◦ Математикийн энгийн тооцооллыг гүйцэтгэнэ ◦ #include <math.h>  Функцийг дуудах хэлбэр ◦ ФункцийнНэр(аргумент);  Хэрэв олон аргументтай бол таслалаар тусгаарлан жагсаана ◦ printf( "%.2f", sqrt( 900.0 ) );  Аргументынхаа квадрат язгуурыг буцаах sqrt функцийг дуудна.  Математикийн бүх функцууд double өгөгдлийн төрлийн утга буцаана ◦ Аргумент нь тогтмол, хувьсагч эсвэл илэрхийлэл байж болно 612/16/2015Vanderbilt university
  7. 7. 712/16/2015Vanderbilt university
  8. 8.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 812/16/2015Vanderbilt university
  9. 9.  Функцууд ◦ Програмыг модульчлана ◦ Функц дотор зарласан хувьсагчид нь локал хувьсагчид байна  Зөвхөн функц дотор харагдана ◦ Параметрууд  Функцуудын хооронд мэдээлэл солилцох  Локал хувьсагчид  Функцийн давуу талууд ◦ Хуваагаад нэгтгэх  Програм хөгжүүлэхэд ашиглах арга ◦ Програмын дахин ашиглагдах чанар  Шинэ програм бичихэд байгаа функцуудийг блок болгон ашиглах  Хийсвэрлэл – дотоод деталиудыг далдлах (сангийн функцууд) ◦ Код давтахаас зайлсхийх 912/16/2015Vanderbilt university
  10. 10.  Олон функцтэй програмын хувьд main функц нь програмын ихэнх ажлуудыг гүйцэтгэх функцуудыг дуудсан дуудалт байдлаар бичигдэнэ  Функц бүр сайтар тодорхойлогдсон ганц даалгавартай байх ѐстой ба функцийн нэр нь уг үүргээ зөв илэрхийлсэн байх хэрэгтэй 1012/16/2015Vanderbilt university
  11. 11.  Функцийг тодорхойлох хэлбэр буцаах-утгын-төрөл функцийн-нэр(параметрууд) { Зарлалт ба үйлдлүүд }  Функцийн-нэр: дурын зөв идентификатор  Буцаах-утгын-төрөл: үр дүнгийн өгөгдлийн төрөл (хэвшмэл нь int)  void – функц юу ч буцаахгүйг заана  Параметрууд – параметруудыг зарлах таслалаар тусгаарлагдсан жагсаалт  int төрөлтэй биш параметр бүрийн хувьд төрлийг нь нэг бүрчлэн бичиж өгнө  Зарлалт ба үйлдлүүд: функцийн бие (блок)  Хувьсагчийг блок дотор зарлаж болно (багтсан блок байж болно)  Функцийг өөр функцийн бие дотор тодорхойлж болохгүй  Удирдлага шилжүүлэх  Хэрэв юу ч буцаахгүй бол  return;  эсвэл хаах их хаалт хүртэл  Ямар нэг зүйл буцааж байгаа бол  return илэрхийлэл; 1112/16/2015Vanderbilt university
  12. 12. Функцийн загвар нь уг функц програмд удахгүй гарч ирэхийг заана square функцийн дуудалт Функцийн тодорхойлолт 1212/16/2015Vanderbilt university
  13. 13.  Функцийн загвар ◦ Функцийн нэр ◦ Параметрууд – функц юу хүлээж авах ◦ Буцаах төрөл – функцийн буцаах өгөгдлийн төрөл (хэвшмэл нь int) ◦ Функцийг шалгахад хэрэглэгдэнэ ◦ Хэрэв функцийн тодорхойлолт нь хэрэглэх мөрнөөсөө хойш байхад загварыг хэрэглэнэ ◦ Жишээ int maximum( int x, int y, int z );  Гурван бүхэл тоо авна  Нэг бүхэл тоо буцаана  Төрөл хувиргах дүрэм ◦ Доод төрөл рүү хувиргах нь алдаанд хүргэж болно 1312/16/2015Vanderbilt university
  14. 14. Дээд Доод 1412/16/2015Vanderbilt university
  15. 15. 1512/16/2015Vanderbilt university
  16. 16. 1612/16/2015Vanderbilt university
  17. 17.  Функцийн загвар нь хөрвүүлэгчид дараах зүйлсийг зааж өгнө: ◦ функцийн буцааж байгаа өгөгдлийн төрөл ◦ функцийн хүлээж авах параметрүүдийн тоо ◦ параметруудын төрөл болон, ◦ эдгээр параметруудын дараалал ◦ Функцийн тодорхойлолт нь хэрэглэсэн мөрнөөсөө хойш байгаа тохиолдолд л загварыг хэрэглэнэ  Зааж өгөөгүй тохиолдолд хөрвүүлэгч функцийг int утга буцаадаг, параметргүй гэж үзнэ.  Хэрэв функцийн загварт уг функц int-ээс ялгаатай утга буцаана гэсэн байгаа бол функцийн тодорхойлолт дээр буцаах-утгын-төрлийг орхивол синтакс алдаа үүснэ.  Ямар нэг утга буцаах ѐстой функцэд утга буцаахаа мартвал тодорхойгүй алдаанд хүргэж болно. Си-гийн стандартад ингэж мартсан тохиолдолд юу болох нь тодорхойгүй гэсэн байдаг.  Буцаах төрөл нь void байх функц ямар нэг утга буцаавал синтакс алдаа гарна. ◦ Функцийн загвар, функцийн толгой болон функцийн дуудалт нь параметрийн болон аргументын тоо, төрөл болон дарааллаараа мөн буцаах утгын төрлөөрөө таарч байх ѐстой. 1712/16/2015Vanderbilt university
  18. 18.  Толгой файлууд ◦ Сангийн функцуудын загварыг агуулна ◦ <stdio.h>, <math.h> гэх мэт ◦ #include <файлын нэр> гэж ачаална #include <math.h>  Үүсгэсэн толгой файлууд ◦ Функцуудтэй файл үүсгэнэ ◦ файлынНэр.h гэж хадгална ◦ Өөр файлаас #include <файлынНэр.h> гэж ачаална. ◦ Функцийн дахин ашиглалт 1812/16/2015Vanderbilt university
  19. 19. 1912/16/2015Vanderbilt university
  20. 20.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 2012/16/2015Vanderbilt university
  21. 21.  Утгаар дуудах ◦ Аргументын хуулбарыг функцэд дамжуулна ◦ Функц дотор утгыг нь өөрчлөхөд хувьсагчид нөлөөлөхгүй ◦ Функц аргументын утгыг өөрчлөх шаардлагагүй үед хэрэглэнэ  Санамсаргүй өөрчлөлтөөс зайлсхийнэ  Хаягаар дуудах ◦ Аргументыг өөрийг нь дамжуулна ◦ Функц дотор өөрчлөлт хийхэд хувьсагчид нөлөөлнө ◦ Зөвхөн зөв гэдэгт итгэлтэй байгаа үед хэрэглэнэ  Утгаар дуудахыг авч үзье 2112/16/2015Vanderbilt university
  22. 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
  23. 23. 2312/16/2015Vanderbilt university
  24. 24. 2412/16/2015Vanderbilt university
  25. 25. 2512/16/2015Vanderbilt university
  26. 26. 2612/16/2015Vanderbilt university
  27. 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
  28. 28. 2812/16/2015Vanderbilt university
  29. 29. 2912/16/2015Vanderbilt university
  30. 30.  Хадгалалтын ангийн тэмдэглэгээнүүд ◦ Хадгалалтын хугацаа – объект санах ойд хэр удаан байх ◦ Муж – объект програмын аль хэсэгт харагдах ◦ Холболт – идентификаторын ашиглагдах файлуудыг заана (дараа дэлгэрэнгүй үзнэ)  Автомат хадгалалт ◦ Объект өөрийн блокт үүсч тэндээ устгагдана ◦ auto: локал хувьсагчдын хувьд хэвшмэл auto double x, y; ◦ register: хувьсагчийг өндөр хурдтай регистрт хийхийг хичээнэ  Зөвхөн автомат хувьсагчдын хувьд хэрэглэнэ register int counter = 1; 3012/16/2015Vanderbilt university
  31. 31.  Static хадгалалт ◦ Хувьсагч нь програмын биелэлтийн турш оршин байна ◦ Хэвшмэл утга нь тэгтэй тэнцүү ◦ static: функцийн локал хувьсагчид  Функцийг ажиллаж дууссаны дараа утгаа хадгална  Зөвхөн өөрийн функц дотроо харагдана ◦ extern: глобал хувьсагчид болон функцуудын хувьд хэвшмэл  ямар ч функцээс харагдана 3112/16/2015Vanderbilt university
  32. 32.  4 төрлийн муж байна  Файлын муж ◦ Функцийн гадна зарлагдсан идентификатор бүх функцээс харагдана ◦ Глобал хувьсагч, функцийн тодорхойлолт, функцийн загварт хэрэглэгдэнэ  Функцийн муж ◦ Зөвхөн функцийн бие дотроос хандаж болно ◦ Зөвхөн тэмдэглэгээнүүдэд хэрэглэгдэнэ (start: case: гэх мэт) 3212/16/2015Vanderbilt university
  33. 33.  Блок муж ◦ Блок дотор зарлагдсан идентификатор  Блок муж их хаалт нээхээр эхэлж, хаахаар дуусна ◦ Хувьсагч, функцийн параметрүүдэд (функцийн дотоод хувьсагчид) хэрэглэгдэнэ ◦ Дотоод блокт ижил нэртэй хувьсагч байвал гадаад блокт байгаа хувьсагч “харагдахгүй”  Функцийн загварын муж ◦ Параметрын жагсаалтанд байгаа идентификаторуудад хэрэглэгдэнэ 3312/16/2015Vanderbilt university
  34. 34. 3412/16/2015Vanderbilt university
  35. 35. 3512/16/2015Vanderbilt university
  36. 36. 3612/16/2015Vanderbilt university
  37. 37. 3712/16/2015Vanderbilt university
  38. 38.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 3812/16/2015Vanderbilt university
  39. 39.  Рекурсив функц ◦ Өөрийгөө дууддаг функц ◦ Үндсэн тохиолдлыг л шийднэ ◦ Бодлогыг дараах хэсгүүдэд хуваана  Юуг хийж чадах  Юуг хийж чадахгүй  Хийж чадах зүйл нь анхны бодлого байна  Функц нь хийж чадахгүй байгаа зүйлээ шийдэхийн тулд өөрийнхөө шинэ хуулбарыг үүсгэнэ  Эцэст нь үндсэн тохиолдлыг шийднэ  Рекурс дууссаны дараа бодлогыг бүхэлдээ шийдэгдсэн байна 3912/16/2015Vanderbilt university
  40. 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
  41. 41. 4112/16/2015Vanderbilt university
  42. 42. 4212/16/2015Vanderbilt university
  43. 43. 4312/16/2015Vanderbilt university
  44. 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
  45. 45. 4512/16/2015Vanderbilt university
  46. 46. 4612/16/2015Vanderbilt university
  47. 47. 4712/16/2015Vanderbilt university
  48. 48. 4812/16/2015Vanderbilt university
  49. 49. 4912/16/2015Vanderbilt university
  50. 50.  Давталт ◦ алхам: илэрхий давталт ◦ рекурс: давтагдсан функцийн дуудалтууд  Төгсгөл ◦ алхам: давталтын нөхцөл худал болно ◦ рекурс: үндсэн тохиолдолд хүрнэ  Хоѐулаа төгсгөлгүй байж болно  Баланс ◦ Гүйцэтгэл (давталт) болон сайн програм хангамжийн инженерчлэлийн (рекурс) хоорондын сонголт 5012/16/2015Vanderbilt university
  51. 51.  Програмыг функц гэж нэрлэгдэх жижиг хэсгүүдээр бүтээх  Си-гийн стандарт сан дахь математикийн энгийн функцууд  Шинэ функц зохиох  Функцуудын хооронд мэдээлэл дамжуулах механизм  Өөрийгөө дууддаг буюу рекурсив функцийг хэрхэн зохиож хэрэглэх  Дүгнэлт 5112/16/2015Vanderbilt university
  52. 52.  Функц бол Си програмын үндсэн модуль юм  Math сангийн функцууд  Функцийн тодорхойлолт  Функцийн загвар  Толгой файл  Функцийн дуудалт: утгаар дуудах ба хаягаар дуудах  Санамсаргүй тоо үүсгэх  Хадгалалтын ангиуд  Мужийн дүрмүүд  Рекурс 5212/16/2015Vanderbilt university

×