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 "Алгоритм ба програмчлал" Лекц №5

2,192 views

Published on

Хүснэгт (массив)

Published in: Software
  • Be the first to comment

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

  1. 1. Лекц №5 Хүснэгт А. Хүдэр
  2. 2.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 212/16/2015Vanderbilt university
  3. 3.  Хүснэгт ◦ Санах ой дахь дараалсан байрлалууд ◦ Ижил нэр ба төрөл  Элементэд нь хандахын тулд ◦ Хүснэгтийн нэр ◦ Байрлалын дугаар  Хэлбэр: ХүснэгтийнНэр[байрлалын дугаар] ◦ Эхний элемент 0 байрлал дээр байна ◦ c гэсэн нэртэй n ширхэг элементтэй хүснэгт  c[0], c[1], ... c[n-1] 312/16/2015Vanderbilt university
  4. 4.  Хүснэгтийн элементүүд нь энгийн хувьсагчидтай адилхан байна c[0] = 3; printf( "%d", c[0] ); ◦ Индекс дээр үйлдэл хийж болно. Хэрэв х нь 3-тай тэнцүү бол  c[5-2],c[3],c[x] бүгд ижил юм  Анхаарах зүйл: ◦ “хүснэгтийн долоо дахь элемент”  хүснэгтийн 6 индекстэй элемент ◦ “хүснэгтийн долоо дугаартай элемент”  хүснэгтийн 7 индекстэй элемент буюу өөрөөр хэлбэл хүснэгт дэх 8- р элемент 412/16/2015Vanderbilt university
  5. 5. 512/16/2015Vanderbilt university
  6. 6.  Хүснэгтийг зарлахдаа дараах зүйлсийг зааж өгнө ◦ Нэр ◦ Хүснэгтийн төрөл ◦ Элементийн тоо arrayType arrayName[ numberOfElements ]; ◦ Жишээ: int c[10]; float myArray[3284];  Ижил төрлийн хэд хэдэн хүснэгт зарлах ◦ Хэлбэр нь энгийн хувьсагчид зарлахтай ижил ◦ Жишээ: int b[100], x[27]; 612/16/2015Vanderbilt university
  7. 7.  Анхны утга олголт int n[5] = { 1, 2, 3, 4, 5 }; ◦ Хэрэв анхны утгууд хангалтгүй бол баруун талд үлдсэн элементүүд тэг утгатай болно int n[5] = { 1 }  Эхний элемент нь нэг, бусад нь тэг болно ◦ Хэт олон анхны утга байвал синтакс алдаа гарна ◦ Си-гийн хүснэгтийн хилийг шалгадаггүй  Хэрэв хэмжээг заагаагүй бол анхны утгуудаар хэмжээг олно ◦ int n[ ] = { 1, 2, 3, 4, 5 }; ◦ 5 ширхэг анхны утга байгаа тул 5 элементтэй хүснэгт болно 712/16/2015Vanderbilt university
  8. 8. 812/16/2015Vanderbilt university
  9. 9. 912/16/2015Vanderbilt university
  10. 10. 1012/16/2015Vanderbilt university
  11. 11. 1112/16/2015Vanderbilt university
  12. 12.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 1212/16/2015Vanderbilt university
  13. 13. 1312/16/2015Vanderbilt university
  14. 14. 1412/16/2015Vanderbilt university
  15. 15. 1512/16/2015Vanderbilt university
  16. 16. 1612/16/2015Vanderbilt university
  17. 17. 1712/16/2015Vanderbilt university
  18. 18. 1812/16/2015Vanderbilt university
  19. 19. 1912/16/2015Vanderbilt university
  20. 20. for давталт шооны нүдний тоо хэдэн удаа буусныг хадгалахад 6 хувьсагч, switch операторын оронд нэг хүснэгт хэрэглэж байна 2012/16/2015Vanderbilt university
  21. 21. 2112/16/2015Vanderbilt university
  22. 22.  Тэмдэгт төрлийн хүснэгт ◦ “first” тэмдэгт мөр нь тэмдэгтүүдийн статик хүснэгт юм ◦ Тэмдэгтэн хүснэгтийг тэмдэгт мөр төрлийн утга хэрэглэн анхны утгыг нь олгож болно char string1[] = "first";  „0‟ гэсэн хоосон тэмдэгт тэмдэгт мөрийн төгсгөлийг заана  string1 нь яг үнэндээ 6 элементтэй  түүнийг доорх байдлаар бичиж болно char string1[] = { 'f', 'i', 'r', 's', 't', '0' }; ◦ Элементүүдэд нь хандаж болно  string1[3] нь „s‟ тэмдэгттэй тэнцүү ◦ Хүснэгтийн нэр нь хүснэгтийн хаяг болох тул scanf функцэд & хэрэглэлгүй бичнэ scanf( "%s", string2 );  Харагдахгүй тэмдэгт гарч ирэх хүртэл тэмдэгтүүдийг уншина  Хүснэгтийн хэмжээнээс хэтэртэл бичиж чадах тул болгоомжтой байх хэрэгтэй 2212/16/2015Vanderbilt university
  23. 23. string2 хүснэгт тэмдэгт бүрийн хувьд нэг элемент буюу 14, дээр нь хоосон тэмдэгт 0-г агуулна for давталт нь string1-ийн тэмдэгтүүдийг хооронд нь зайгаар тусгаарлан хэвлэнэ 2312/16/2015Vanderbilt university
  24. 24. 2412/16/2015Vanderbilt university
  25. 25.  Автомат хүснэгт агуулах функц байн байн дуудагдаж байвал хүснэгтийг дахин дахин үүсгэхгүйн тулд статик байдлаар зарлах хэрэгтэй. 2512/16/2015Vanderbilt university
  26. 26. 2612/16/2015Vanderbilt university
  27. 27. static хүснэгт нь staticArrayInit функцийг анх дуудахад ганц удаа л үүсгэгдэнэ 2712/16/2015Vanderbilt university
  28. 28. Автомат хүснэгт нь automaticArrayInit функц дуудах бүрд дахин үүснэ 2812/16/2015Vanderbilt university
  29. 29. 2912/16/2015Vanderbilt university
  30. 30.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 3012/16/2015Vanderbilt university
  31. 31.  Хүснэгтийг дамжуулах ◦ Хүснэгтэн аргументийг функцэд дамжуулахын тулд хүснэгтийн нэрийг ямар ч хаалтгүйгээр бичнэ int myArray[ 24 ]; myFunction( myArray, 24 );  Ихэвчлэн хүснэгтийн хэмжээг хамт дамжуулдаг ◦ Хүснэгтийг хаягаар дамжуулдаг ◦ Хүснэгтийн нэр бол эхний элементийн хаяг юм ◦ Функц хүснэгтийг хаана хадгалсныг мэднэ  Санах ой дахь байрлал дээр нь өөрчилнө  Хүснэгтийн элементийг дамжуулах ◦ Утгаар дамжуулах арга хэрэглэнэ ◦ Индекстэй нэрийг (жишээ нь myArray[3]) функцэд дамжуулна 3112/16/2015Vanderbilt university
  32. 32.  Функцийн загвар void modifyArray( int b[], int arraySize ); ◦ Загварт параметрийн нэрийг заавал бичих хэрэггүй  int b[]-г int [] гэж бичиж болно  int arraySize-г int гэж бичиж болно 3212/16/2015Vanderbilt university
  33. 33.  Тайлбар: %p хувиргах тусгай тэмдэгт нь хаягийг 16-тын тоо хэлбэрээр гаргана 3312/16/2015Vanderbilt university
  34. 34. Функцийн загвар нь функц хүснэгт хүлээж авахыг заана a хүснэгтийг modifyArray функц рүү зөвхөн нэрийг нь өгөх замаар дамжуулна 3412/16/2015Vanderbilt university
  35. 35. Хүснэгтийн элементийг modifyElement функц руу a[3] – ыг өгч дамжуулна 3512/16/2015Vanderbilt university
  36. 36. 3612/16/2015Vanderbilt university
  37. 37. const үг нь хөрвүүлэгчид хүснэгт өөрчлөгдөхгүй гэдгийг заана Хүснэгтийг өөрчлөх оролдлого бүр хөрвүүлэлтийн алдаанд хүргэнэ 3712/16/2015Vanderbilt university
  38. 38. 3812/16/2015Vanderbilt university
  39. 39.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 3912/16/2015Vanderbilt university
  40. 40.  Өгөгдлийг эрэмбэлэх ◦ Тооцооллын чухал хэрэглээ ◦ Ямар ч байгууллага ямар нэг өгөгдөл эрэмбэлэх ѐстой болдог  Бөмбөлгийн арга (живүүлэх эрэмбэлэлт) ◦ Хүснэгтийг хэд хэдэн удаа уншина ◦ Дараалсан хоѐр элементийг харьцуулна  хэрэв өсөх эрэмбэтэй (эсвэл тэнцүү бол) юу ч хийхгүй  буурах эрэмбэтэй бол элементүүдийг солино ◦ Давтах  Жишээ ◦ анхны: 3 4 2 6 7 ◦ эхний уншилт: 3 2 4 6 7 ◦ хоѐр дахь уншилт: 2 3 4 6 7 ◦ Жижиг элементүүд дээш “бөмбөлөг болж” гарна 4012/16/2015Vanderbilt university
  41. 41. 4112/16/2015Vanderbilt university
  42. 42. Хэрэв ямар нэг хоѐр элемент буруу эрэмбэтэй байвал уг функц байрыг нь солино 4212/16/2015Vanderbilt university
  43. 43.  Хүснэгтээс түлхүүр утга хайх  Шугаман хайлт ◦ Энгийн ◦ Хүснэгтийн бүх элементийг түлхүүр утгатай харьцуулна ◦ Жижиг, эрэмбэлэгдээгүй хүснэгтэнд тохиромжтой  Хоѐртын хайлт ◦ Эрэмбэлэгдсэн хүснэгтэнд зориулагдсан ◦ Голын элементийг түлхүүртэй харьцуулна  Хэрэв тэнцүү бол олсон гэж үзнэ  Хэрэв түлхүүр < голынх бол хүснэгтийн эхний хагаст хайх  Хэрэв түлхүүр > голынх бол хүснэгтийн сүүлийн хагаст хайх  Давтах ◦ Маш хурдан; 2n > тооны элементтэй үед дээд тал нь n алхам хийнэ  30 элементтэй хүснэгтэд дээд тал нь 5 алхам хийнэ  25 > 30 учир дээд тал нь 5 алхам 4312/16/2015Vanderbilt university
  44. 44. 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. 5212/16/2015Vanderbilt university
  53. 53.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 5312/16/2015Vanderbilt university
  54. 54.  Олон индекстэй хүснэгт ◦ Мөр болон баганатай хүснэгт (m x n хүснэгт) ◦ Матрицтай адил: мөрийн дугаар дараа нь баганын дугаарыг заана  Анхны утга олгох int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; ◦ Нэг мөрөнд байх утгуудыг их хаалтанд бүлэглэнэ ◦ Хэрэв элементийн утга дутуу заавал тэр нь тэг утгатай болно int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };  Элементэд нь хандах ◦ Эхлээд мөр, дараа нь баганын дугаарыг заана printf( "%d", b[ 0 ][ 1 ] );  a[x, y] гэж бичихгүй, a[x][y] гэж бичнэ 5412/16/2015Vanderbilt university
  55. 55. 5512/16/2015Vanderbilt university
  56. 56. array1 хүснэгтийн хоѐр мөрийг бүтэн зарласан байна array2 болон array3-ын зөвхөн хэсгийнх нь анхны утгыг олгосон байна 5612/16/2015Vanderbilt university
  57. 57. 5712/16/2015Vanderbilt university
  58. 58. Хүснэгтийн мөр бүр нэг оюутны дүнгүүдийг хадгална 5812/16/2015Vanderbilt university
  59. 59. average функцэд хүснэгтийн мөрийг дамжуулж байна 5912/16/2015Vanderbilt university
  60. 60. 6012/16/2015Vanderbilt university
  61. 61. 6112/16/2015Vanderbilt university
  62. 62. 6212/16/2015Vanderbilt university
  63. 63. 6312/16/2015Vanderbilt university
  64. 64.  Хүснэгт зарлах, анхны утга олгох, хүснэгтийн элементүүдэд хандах  Тэмдэгт төрлийн тогтмол зарлах  Хүснэгтийг функцэд дамжуулах  Хүснэгтийг утгуудын жагсаалтыг хадгалах, эрэмбэлэх, хайхад ашиглах  Олон индекстэй хүснэгт зарлан ашиглах  Дүгнэлт 6412/16/2015Vanderbilt university
  65. 65.  Хүснэгт зарлах ◦ хүснэгтийнТөрөл хүснэгтийнНэр[элементийнТоо];  Тэмдэгт тогтмол ◦ #define SIZE 12 /*энд цэгтэй таслал тавихгүй*/  Хүснэгтийн хэмжээ  Хүснэгтийг функцэд дамжуулах: хаягаар болон утгаар  Хүснэгтийг эрэмбэлэх: бөмбөлөг эрэмбэлэлт (живүүлэх эрэмбэлэлт)  Хүснэгтээс хайх: шугаман ба хоѐртын хайлт  Олон индекстэй хүснэгт 6512/16/2015Vanderbilt university

×