21
Алгоритм програмчлал Багш: М.Цэцэнцэнгэл

Лекц 9(Заагч)

  • Upload
    -

  • View
    180

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Лекц 9(Заагч)

Алгоритм програмчлалБагш: М.Цэцэнцэнгэл

Page 2: Лекц 9(Заагч)

Си хэлийн заагч

Page 3: Лекц 9(Заагч)

Си хэлийн заагч

Page 4: Лекц 9(Заагч)

Заагч төрөл

Заагч (pointer) гэдэг нь компьютерын санах ойн нэгэн утгын заадаг объектыг хэлнэ.

Заагч хувьсагч нь санах ойн хаягийг хадгалдаг байна.

Page 5: Лекц 9(Заагч)

Си хэлийн заагч

Заагчийн зарлагаа нь энгийн хувьсагчийн зарлагаатай адил боловч хувьчсагчийн урд * тэмдэгтэй байдгаараа ялгаатай.

int a; // engiin huvisagchint *a; // zaagch huvisagch

Page 6: Лекц 9(Заагч)

Заагч

Заагч төрөл нь зөвхөн “unsigned int” утгыг л хадгалдаг. Тэрнээс биш урд нь тавьж байгаа өгөгдлийн төрөл өөр зориулалттай.

float *a; // adilint *b; // adil

Page 7: Лекц 9(Заагч)

Хаяг авдаг Си хэлийн оператор

& оператор нь Си хэлэнд тухайн хувьсагчийн санах ойд байрлаж байгаа хаягийг авдаг.Бид өмнө нь scanf() функцэд ашиглаж байсан.

scanf(“%d”, &a);

Page 8: Лекц 9(Заагч)

Заагчид утга олгоё!

int b;int *a;b = 17;a = &b; // b huvisagchiin hayg a zaagchid

// hadgalagdlaa

Page 9: Лекц 9(Заагч)

Энэ үед оюутнууд

Page 10: Лекц 9(Заагч)

Санах ойд юу болж байна?

Page 11: Лекц 9(Заагч)

Заагч дахь утгыг авахдаа

int b;int *a;b = 17;a = &b;printf(“%u”, a); // 1462 gej hevleneprintf(“%d”, *a); // 17 gej hevlene

Page 12: Лекц 9(Заагч)

Энэ үед оюутнууд

Page 13: Лекц 9(Заагч)

Цуваа ба заагч

int a[] = {10,20,30,40,50};int *p;p = &a;printf(“%d\n”, *p); // 10printf(“%d\n”, *(p+1)); // 20printf(“%d\n”, *(p+2)); // 30

Page 14: Лекц 9(Заагч)

Энэ үед санах ойд

Хаяг 2686712 2686716 2686720 2686724

Утга 10 20 30 40

a

printf(“%u”, a); // 2686712printf(“%u”, p); // 2686712

Цувааны хувьсагч нь цуваа эхэлж байгаа санах ойн хаягийг хадгалж байдаг.

p p+1 p+2 p+3

Page 15: Лекц 9(Заагч)

Бодлого

Хоёр хувьсагчийн утгыг хооронд нь соль.a = 5;b = 7; байсныг a = 7;b = 5; болго.

Page 16: Лекц 9(Заагч)

Солих бодлогын шийдэл 1

int a = 5;int b = 7;a = a + b; // b = 7, a = 5 + 7 = 12b = a - b; // a = 12, b = 12 - 7 = 5a = a - b; // b = 5, a = 12 - 5 = 7

Page 17: Лекц 9(Заагч)

Солих бодлогын шийдэл 2

int a = 5;int b = 7;int tmp;tmp = a;a = b;b = tmp;

Page 18: Лекц 9(Заагч)

Солих үйлдлийг функц болгоё

void swap(int a, int b) {int tmp;tmp = a;a = b;b = tmp;

}

Page 19: Лекц 9(Заагч)

swap функцээ дуудъя

void main(){

int a = 5;int b = 7;swap(a,b);printf(“a=%d b=%d”, a, b);

}

Page 20: Лекц 9(Заагч)

Асуудлыг шийдье

void swap(int *a, int *b){

int tmp;tmp = *a;*a = *b;*b = tmp;

}

Page 21: Лекц 9(Заагч)

swap функцээ дуудъя

void main(){

int a = 5;int b = 7;swap(&a, &b);printf(“a=%d b=%d”, a, b);

}