Recommended
PDF
PDF
PDF
PDF
PPS
Давталттай алгоритмын бодлогууд
PDF
PPTX
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №1
PPTX
PDF
PPTX
C++ vndsen oilgolt хичээл 1
PDF
PPSX
PDF
PPTX
U.cs101 алгоритм программчлал-10
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
бие даалт № 1 borland c++
PPTX
PDF
PDF
PPTX
U.cs101 алгоритм программчлал-12
PPT
PPTX
өгөгдлийн сангийн системийн үндэс
PPTX
U.cs101 алгоритм программчлал-7
PPTX
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №4
More Related Content
PDF
PDF
PDF
PDF
PPS
Давталттай алгоритмын бодлогууд
PDF
PPTX
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №1
What's hot
PPTX
PDF
PPTX
C++ vndsen oilgolt хичээл 1
PDF
PPSX
PDF
PPTX
U.cs101 алгоритм программчлал-10
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
бие даалт № 1 borland c++
PPTX
PDF
PDF
PPTX
U.cs101 алгоритм программчлал-12
PPT
PPTX
өгөгдлийн сангийн системийн үндэс
PPTX
U.cs101 алгоритм программчлал-7
Similar to Лекц №13
PPTX
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №4
PPTX
Unshih hewleh uildel хичээл 3
PPTX
PPT
PPTX
C++ vndsen oilgolt хичээл 1
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №2
PPTX
DOCX
POTX
DOC
PDF
PDF
PDF
DOC
PPTX
PDF
PPTX
PPTX
PDF
More from Amarsaikhan Tuvshinbayar
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PPTX
PDF
PPTX
PDF
Recently uploaded
PDF
Дадлага ажил, төсөлт сургалтаар бүтээгдэхүүн үйлдвэрлэх, борлуулах, материалы...
PDF
УПК-ын Дипломын ажил бичих аргачлал 2025
PDF
Техникийн боловсролын сургалтын дипломын ажил хамгаалах, үнэлэх журам
PDF
УПК-ийн Мэдээллийн төв ашиглах журам 2025
PDF
Суралцагч, төгсөгчийн мэдлэг, ур чадвар, чадамжийг үнэлж, баталгаажуулах журам
PDF
Мэдээлэл технологийн аюулгүй байдал хангах журам
Лекц №13 1. 2. 3. Бүтэц
Бүтэц (Structure) гэдэг нь олон хувьсагчуудын цуглуулга юм.
Бүтцэд байгаа хувьсагчууд өөр өөр төрлийнх байж болно. Нэг нь
бүхэл тоо байхад нөгөө нь тэмдэгт мөр байх жишээтэй. Бүтэц дотор
байгаа эдгээр хувьсагчуудыг бүтцийн талбар гэж нэрлэнэ.
Бүтцийн элементүүд нь ижил эсвэл өөр хэлбэртэй байж болно.
Гэхдээ бүтэц дэх бүх элементүүд логик холбоотой байх ёстой.
Тайлбар
4. Бүтэц
Бүтцийг хэрхэн бий болгох вэ?
“struct” түлхүүр үгийг бүтцийг бий болгоход ашигладаг.
Бичигдэх хэлбэр:
struct бүтцийн_нэр
{
Төрлийн_нэр Гишүүд1
Төрлийн_нэр Гишүүд1
Төрлийн_нэр Гишүүд1
};
5. 6. Бүтэц
Бүтцийн хувьсагчдыг хэрхэн зарлах вэ?
struct Point
{
int x, y;
} p1; // p1 хувьсагч нь 'Point‘ хувьсагч юм
// Үндсэн өгөгдлийн төрлийг хувьсагч шиг зарлаж байна
struct Point
{
int x, y;
};
int main()
{
struct Point p1; // p1 хувьсагчийг энгийн хувьсагч шиг зарлаж байна
}
7. Бүтэц
Бүтцийн гишүүдийг хэрхэн эхлүүлэх вэ?
Бүтцийн гишүүдийг зарлаж байх явцад анхны утгыг шууд өгөх боломжгүй.
Жишээлбэл: Дараах C программын эх кодыг харуулав.
struct Point
{
int x = 0; //Хөрвүүлэгчийн алдаа: гишүүн анхны утга авч чадахгүй
int y = 0; //COMPILER ERROR: cannot initialize members here
};
Дээрх алдааны шалтгаан нь энгийн бөгөөд өгөгдлийн төрлийг зарлахад санах
ой хуваарилагдахгүй болно. Санах ойг зөвхөн хувьсагч үүсгэх үед хуваарилдаг.
8. Бүтэц
Бүтцийн гишүүдийг '{}' буржгар буюу гоё хаалт ашиглан эхлүүлэх
боломжтой. Жишээлбэл:
struct Point
{
int x, y;
};
int main()
{
// x хувьсагчид 0 утга, y хувьсагчид 1 утга олгож буй үйлдэл
struct Point p1 = {0, 1};
}
9. Бүтэц
Бүтцийн элементүүдэд хэрхэн хандах вэ?
Бүтцийн гишүүдэд цэг (.) Оператор ашиглан хандаж болно
Жишээ №1: Энгийн бүтэц
1. #include<stdio.h>
2. struct Point
3. {
4. int x, y;
5. };
6. int main() {
7. struct Point p1 = {0, 1};
8. // P1 заагч гишүүнд хандах
9. p1.x = 20;
10. printf ("x = %d, y = %d", p1.x, p1.y);
11. return 0; }
Үр дүн:
x = 20, y = 1
10. Бүтэц
Массив бүтэц гэж юу вэ?
Жишээ №2: Массивтай бүтэц
1. #include<stdio.h>
2. struct Point
3. {
4. int x, y;
5. };
6. int main() {
7. // Массив бүхий заагчийг зарлаж байна
8. struct Point arr[10];
9. // Массивд хандаж байна
10.arr[0].x = 10;
11.arr[0].y = 20;
12.printf("%d %d", arr[0].x, arr[0].y);
13.return 0; }
Үр дүн:
10 20
11. Бүтэц
Бүтцийн заагч гэж юу вэ?
Бүтцийн заагчийг хэрхэн яаж үүсгэхийг энд харуулав.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
Үүнд: struct заагч нь ptr
12. Бүтэц
Бүтцийн заагч гэж юу вэ?
Бүтцийн заагч нь гишүүд рүү сум (->) оператор ашиглан хандах боломжтой.
Жишээ №3: Заагчтай бүтэц
1. #include<stdio.h>
2. struct Point
3. {
4. int x, y;
5. };
6.
7. int main() {
8. struct Point p1 = {1, 2};
9. // p2 нь p1 бүтцийн заагч юм
10. struct Point *p2 = &p1;
11. // Бүтцийн заагчийг ашиглан бүтцийн гишүүдэд хандах
12. printf("%d %d", p2->x, p2->y);
13. return 0; }
Үр дүн:
1 2
13. Бүтэц
Жишээ №4: Хэрэглэгчийн нас өндрийг бүтэц бүхий заагчаар
дамжуулж хэвлэх
1. #include <stdio.h>
2. struct person {
3. int age;
4. float weight;
5. };
6. int main()
7. {
8. struct person *personPtr, person1;
9. personPtr = &person1;
10. printf("Enter age: ");
11. scanf("%d", &personPtr->age);
12. printf("Enter weight: ");
13. scanf("%f", &personPtr->weight);
14. printf("Displaying:n");
15. printf("Age: %dn", personPtr->age);
16. printf("weight: %f", personPtr->weight);
17. return 0;
18. }
Үр дүн:
Enter age: 25
Enter weight: 178
Displaying:
Age: 25
weight: 178.000000
14. Бүтэц
C бүтцийн хязгаарлалт
C хэл дээр бүтэц нь төрөл бүрийн өгөгдлүүдийг нэгтгэж ашиглах боломжтой.
Бүтэц бол логикын үйлдлүүд бүхий өгөгдлүүдийг зохицуулдаг туслах
хэрэгсэл юм. Гэхдээ С бүтэц нь зарим хязгаарлалттай байдаг. Үүнд:
• C бүтэц нь бүтцийн өгөгдлийн төрлийг суулгасан өгөгдлийн төрлүүд шиг
харьцахыг зөвшөөрдөггүй.
• Бүтцийн хувьсагч дээр +, - гэх мэт операторуудыг ашиглах боломжгүй.
Жишээлбэл, дараах кодыг анхаарч үзээрэй.
15. Бүтэц
struct number
{
float x;
};
int main(){
struct number n1,n2,n3;
n1.x=4;
n2.x=3;
n3=n1+n2;
return 0;}
Үр дүн:
prog.c: In function 'main':
prog.c:10:7: error:
invalid operands to binary + (have 'struct number' and 'struct number')
n3=n1+n2;
*/
16. Бүтэц
Жишээ №5:
1. #include <stdio.h>
2. struct StudentData
3. {
4. char *stu_name;
5. int stu_id; int stu_age;
6. };
7. int main() {
8. struct StudentData student;
9. student.stu_name = "Steve";
10.student.stu_id = 1234;
11.student.stu_age = 30;
12.printf("Student Name is: %s", student.stu_name);
13.printf("nStudent Id is: %d", student.stu_id);
14.printf("nStudent Age is: %d", student.stu_age);
15.return 0; }
Үр дүн:
Student Name is: Steve
Student Id is: 1234
Student Age is: 30
17. Бүтэц
Жишээ №6: Функцээс бүтцийг хэрхэн буцааж өгөхийг энд харуулав.
1. #include <stdio.h>
2. struct student
3. {
4. char name[50];
5. int age; };
6. // function prototype
7. struct student getInformation();
8. int main() {
9. struct student s;
10. s = getInformation();
11. printf("nDisplaying informationn");
12. printf("Name: %s", s.name);
13. printf("nRoll: %d", s.age);
14. return 0;
15.}
Үр дүн:
Enter name: Tumur
Enter age: 45
Displaying information
Name: Tumur
Roll: 45
16. struct student getInformation() {
17. struct student s1;
18. printf("Enter name: ");
19. scanf ("%[^n]%*c", s1.name);
20. printf("Enter age: "); scanf("%d", &s1.age);
21. return s1; }
18. Бүтэц
Typedefs
Typedefs нь өөр нэртэй төрлийг тодорхойлох боломжийг олгодог бөгөөд энэ
нь бүтэц, заагчтай харьцахад тохиромжтой байдаг. Энэ тохиолдолд цэг
ашиглахгүй байж болно. Жишээлбэл:
typedef struct
{
int x;
int y;
} point;
Хэрэв point бүтцэд p удамшуулах бол point p; бичнэ.
19. Бүтэц
Жишээлбэл: Тээврийн хэрэгслийн бүтцийг дараах байдлаар
тодорхойлж болно.
typedef struct
{
char * brand;
int model; }
brand нь char заагч тул тээврийн хэрэгслийн төрөл нь мөр агуулж болно (энэ
тохиолдолд тухайн тээврийн хэрэгслийн брэндийг заана).
vehicle mycar;
mycar.brand = "Ford";
mycar.model = 2007;
20. Бүтэц
Жишээ №7: feet болон inch өгөгдсөн хоёр цэгийн зайг олох
#include <stdio.h>
1. struct Distance {
2. int feet;
3. float inch;
4. } dist1, dist2, sum;
5. int main() {
6. printf("1st distancen");
7. printf("Enter feet: ");
8. scanf("%d", &dist1.feet);
9. printf("Enter inch: ");
10. scanf("%f", &dist1.inch);
11. printf("2nd distancen");
12. printf("Enter feet: ");
13. scanf("%d", &dist2.feet);
14. printf("Enter inch: ");
Үр дүн:
Student Name is: Steve
Student Id is: 1234
Student Age is: 30
21. Бүтэц
16. scanf("%f", &dist2.inch);
17. // adding feet
18. sum.feet = dist1.feet + dist2.feet;
19. // adding inches
20. sum.inch = dist1.inch + dist2.inch;
21. // changing to feet if inch is greater than 12
22. while (sum.inch >= 12)
23. {
24. +sum.feet;
25. sum.inch = sum.inch - 12;
26. }
27. printf("Sum of distances = %d'-%.1f"", sum.feet, sum.inch);
28. return 0;
29. }
Үр дүн:
1st distance Enter feet: 12
Enter inch: 7.9 2nd distance
Enter feet: 2 Enter inch: 9.8
Sum of distances = 15'-5.7"
22. Бүтэц
Жишээ №7-д үзүүлсэн кодыг доорх хэлбэрээр typedef түлхүүр үг
ашиглан бичих боломжтой.
struct Distance{
int feet; float inch;
};
int main()
{
struct Distance d1, d2;
}
typedef struct Distance{
int feet; float inch;
} distances;
int main()
{
distances d1, d2;
}
23. Бүтэц
Жишээ №8: Эхлэх цаг, дуусах цагыг гараас оруулж тооцоолох
1. #include <stdio.h>
2. struct TIME {
3. int seconds;
4. int minutes;
5. int hours; };
6. void differenceBetweenTimePeriod(struct TIME t1,
struct TIME t2, struct TIME *diff);
7. int main() {
8. struct TIME startTime, stopTime, diff;
9. printf("Enter the start time. n");
10. printf("Enter hours, minutes and seconds: ");
11. scanf("%d %d %d", &startTime.hours,
&startTime.minutes, &startTime.seconds);
12. printf("Enter the stop time. n");
13. printf("Enter hours, minutes and seconds: ");
14. scanf("%d %d %d", &stopTime.hours,
&stopTime.minutes, &stopTime.seconds);
24. Бүтэц
Жишээ №8: Эхлэх цаг, дуусах цагыг гараас оруулж тооцоолох
15. // Эхлэх ба зогсоох цаг хугацааны ялгаа
16. differenceBetweenTimePeriod(startTime, stopTime, &diff);
17. printf("nTime Difference: %d:%d:%d - ", startTime.hours,
startTime.minutes, startTime.seconds);
18. printf("%d:%d:%d ", stopTime.hours, stopTime.minutes, stopTime.seconds);
19. printf("= %d:%d:%dn", diff.hours, diff.minutes, diff.seconds);
20. return 0; }
21. // Эхлэх ба зогсоох цаг хугацааны зөрүүг тооцоолох
22. void differenceBetweenTimePeriod(struct TIME start,
struct TIME stop, struct TIME *diff) {
23. while (stop.seconds > start.seconds) {
24. --start.minutes; start.seconds += 60; }
25. diff->seconds = start.seconds - stop.seconds;
26. while (stop.minutes > start.minutes) {
27. --start.hours; start.minutes += 60; }
28. diff->minutes = start.minutes - stop.minutes;
29. diff->hours = start.hours - stop.hours;
30. }
25. Бүтэц
Үр дүн:
Enter the start time.
Enter hours, minutes and seconds: 13
34
55
Enter the stop time.
Enter hours, minutes and seconds: 8
12
15
Time Difference: 13:34:55 - 8:12:15 = 5:22:40
26. 27. 28. Нэгдэл
Нэгдлийг хэрхэн бий болгох вэ?
“union” түлхүүр үгийг ашиглан нэгдлийг бий болгодог.
Бичигдэх хэлбэр: Жишээлбэл:
union нэгдлийн_нэр
{
Төрлийн_нэр Гишүүд1
Төрлийн_нэр Гишүүд2
Төрлийн_нэр Гишүүд3
};
union car
{
char name[50];
int price;
};
29. Нэгдэл
Нэгдлийн хувьсагчуудыг бий болгох
Нэгдлийг тодорхойлсон тохиолдолд хэрэглэгчийн тодорхойлсон төрлийг
үүсгэдэг. Гэсэн хэдий ч санах ой хуваарилагдаагүй болно. Тухайн нэгдлийн
төрөлд санах ой хуваарилах, түүнтэй ажиллахын тулд хувьсагч үүсгэх
хэрэгтэй. Бид нэгдлийн хувьсагчуудыг хэрхэн яаж үүсгэдэгийг энд харуулав.
union car {
char name[50];
int price;
};
int main()
{
union car car1, car2, *car3;
return 0;
}
Нэгдлийн удамшуулж авсан хувьсагчдыг
бий болгох өөр нэг арга:
union car {
char name[50];
int price;
} car1, car2, *car3;
30. Нэгдэл
Жишээ №9: Бүтэц нэгдэл хоёрын ялгаа
1. #include <stdio.h>
2. union unionJob{
3. char name[32];
4. float salary;
5. int workerNo;
6. } uJob;
7. struct structJob {
8. char name[32];
9. float salary;
10. int workerNo;
11. } sJob;
12. int main() {
13. printf("size of union = %d bytes",
14. sizeof(uJob));
15. printf("nsize of structure = %d bytes", sizeof(sJob));
16. return 0; }
Үр дүн:
size of union = 32 bytes
size of structure = 40 bytes
Нэгдэл ба бүтцийн хувьсагчдын хэмжээ яагаад ийм
ялгаатай байна вэ?
sJob-ийн хэмжээ нь 40 байт байна
• name[32] хэмжээ 32 байт байна
• salary хэмжээ 4 байт
• workNo хэмжээ 4 байт
Гэхдээ uJob-ийн хэмжээ 32 байт байна. Энэ нь нэгдлийн
хувьсагчийн хэмжээ үргэлж түүний хамгийн том
элементийн хэмжээ байх болно. Энэхүү жишээнд түүний
хамгийн том элементийн хэмжээ (name[32]) 32 байт байна.
31. Нэгдэл
Жишээ №10: Нэгдлийн гишүүдэд хандах
1. #include <stdio.h>
2. union Job {
3. float salary;
4. int workerNo;
5. } j;
6. int main() {
7. j.salary = 12.3;
8. // j.workerNo-д утга өгөөгүй үед,
9. // j.salary цаашид 12.3-ыг утга авахаа болино
10.j.workerNo = 100;
11.printf("Salary = %.1fn", j.salary);
12.printf("Number of workers = %d", j.workerNo);
13.return 0; }
Үр дүн:
Salary = 0.0
Number of workers = 100
32. Нэгдэл
Жишээ №11: С програм дээр x ба y хоёулаа ижил байршилтай байдаг.
Хэрэв бид x-ийг өөрчилбөл y-д тусгагдсан өөрчлөлтүүдийг харж болно.
1. // Нэгдлийг зарлахдаа бүтэцтэй ижилхэн зарлана
2. union test {
3. int x, y;
4. };
5.
6. int main()
7. {
8. // Нэгдлийн хувьсагч t
9. union test t;
10. t.x = 2; // t.y мөн 2 утга олгож байна.
11. printf("After making x = 2:n x = %d, y = %dnn", t.x, t.y);
12. t.y = 10; // t.x утгыг 10 болгон өөрчилж байна.
13. printf("After making y = 10:n x = %d, y = %dnn", t.x, t.y);
14. return 0;
15.}
Үр дүн:
After making x = 2:
x = 2, y = 2
After making y = 10:
x = 10, y = 10
33. Нэгдэл
Нэгдлийн хэмжээг хөрвүүлэгч хэрхэн шийддэг вэ?
Нэгдлийн хэмжээг нэгдлийн хамгийн том гишүүний хэмжээгээр авна.
Жишээ №12: Нэгдлийн гишүүдийн хэмжээ
1. #include <stdio.h>
2. union test1 {
3. int x;
4. int y;
5. } Test1;
6. union test2 {
7. int x;
8. char y;
9. } Test2;
10.union test3 {
11. int arr[10];
12. char y;
13.} Test3;
Үр дүн:
sizeof(test1) = 4, sizeof(test2) = 4, sizeof(test3) = 40
14. int main()
15. {
16. printf("sizeof(test1) = %lu, sizeof(test2) = %lu, "
"sizeof(test3) = %lu",
sizeof(Test1), sizeof(Test2), sizeof(Test3));
17. return 0; }
34. Нэгдэл
Нэгдлийн заагч?
Бүтцийн нэгэн адил нэгдэл рүү чиглүүлэгч сум оператор (->) ашиглан
гишүүдэд хандах боломжтой.
Жишээ №13: Заагч бүхий нэгдэл
1. #include <stdio.h>
2. union test {
3. int x;
4. char y;
5. };
6. int main() {
7. union test p1;
8. p1.x = 65;
9. // р2 нь p1-ийг нэгдлийн заагч юм
10. union test* p2 = &p1;
11. // Заагч ашиглан нэгдлийн гишүүд рүү хандах
12. printf("%d %c", p2->x, p2->y);
13. return 0; }
Үр дүн:
65 A
35. 36. Тоочих төрөл
С програмчлалын хувьд тоочих төрөл (үүнийг enum гэж нэрлэдэг)
нь интеграл тогтмолуудаас бүрдэх өгөгдлийн төрөл юм.
Тоочих төрлийг хэрхэн бий болгох вэ?
“enum” түлхүүр үгийг ашиглан тоочих төрлийг бий болгодог.
Бичигдэх хэлбэр: Жишээлбэл:
enum flag {const1, const2, ..., constN};
enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3,
};
37. Тоочих төрөл
Тоочих төрлийг зарлах
Энд enum төрлийн хувьсагчийг хэрхэн үүсгэхийг харуулав.
enum boolean {false, true};
enum boolean check; // enum хувьсагчийг зарлах
Энд enum boolean төрлийн check хувьсагчийн үүсгэсэн болно.
Та мөн ийм байдлаар enum хувьсагчдыг зарлаж болно.
enum boolean {false, true} check;
Энд false утга 0, true утга 1-тэй тэнцүү байна.
38. Нэгдэл
Жишээ №14: Тоочих төрөл
1. #include <stdio.h>
2. enum week {Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday};
3. int main()
4. {
5. // үүсгэсэн today хувьсагч нь enum week нэг төрөл юм
6. enum week today;
7. today = Wednesday;
8. printf("Day %d",today+1);
9. return 0;
10.}
Үр дүн:
Day 4
39. Тоочих төрөл
Яагаад enums ашигладаг вэ?
Enum хувьсагч нь зөвхөн нэг утга авах боломжтой.
Жишээ №15: Тоочих төрөл
1. #include <stdio.h>
2. enum suit {
3. club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card;
4. int main() {
5. card = club;
6. printf("Size of enum variable = %d bytes", sizeof(card));
7. return 0;
8. }
Үр дүн:
Size of enum variable = 4 bytes
Int-ийн хэмжээ 4 байт тул 4-ийг авч байна.
Энэ нь enum-ийг flag ажиллахад тохиромжтой
сонголт болгодог.
40. Тоочих төрөл
Хэрхэн тоочих төрөлд flag ажиллах вэ?
Жишээлбэл:
enum designFlags {
ITALICS = 1,
BOLD = 2,
UNDERLINE = 4
} button;
Та Windows програмын товчлуурыг зохиож байгаа гэж бодъё. Тексттэй
ажиллахын тулд ITALICS, BOLD, UNDERLINE flag тохируулж болно.
Бүх салшгүй тогтмолууд нь дээр дурдсан псевдокод 2-ийн тооллоор
илэрхийлэх шалтгаан байдаг.
ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100
41. Тоочих төрөл
Enum-ийг эхлэлийн утгын тухай сонирхолтой баримтууд.
1. Enum-ийн хоёр нэр ижил утгатай байж болно. Жишээлбэл, дараах C
програм дээр ‘Failed’ ба ‘Freezed’ хоёулаа ижил 0 утгатай байна.
Жишээ №16: Ижил утгатай тоочих төрөл
1. #include <stdio.h>
2. enum State {Working = 1, Failed = 0, Freezed = 0};
3. int main()
4. {
5. printf("%d, %d, %d", Working, Failed, Freezed);
6. return 0;
7. }
Үр дүн:
1, 0, 0
42. Тоочих төрөл
2. Хэрэв бид тоочих төрлийн хувьсагчид утгыг тодорхой зааж өгөөгүй бол
хөрвүүлэгч нь анхнаасаа 0-ээс эхэлсэн утгыг өгдөг.
Жишээ №17: Ням гараг 0, Даваа гараг 1-г авна гэх мэт.
1. #include <stdio.h>
2. enum day {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
3. int main()
4. {
5. enum day d = thursday;
6. printf("The day number stored in d is %d", d);
7. return 0;
8. }
Үр дүн:
The day number stored in d is 4
43. Тоочих төрөл
3. Ямар ч дарааллаар ямар нэгэн нэрэнд утга өгч болно. Бүх
хуваарилагдаагүй нэрс нь өмнөх нэрний утгыг нэмж нэг утга авна.
Жишээ №18: Тогтсон дараалагүй утга олгох.
1. #include <stdio.h>
2. enum day {sunday = 1, monday, tuesday = 5,
wednesday, thursday = 10, friday, saturday};
3. int main()
4. {
5. printf("%d %d %d %d %d %d %d", sunday, monday, tuesday,
wednesday, thursday, friday, saturday);
6. return 0;
7. } Үр дүн:
1 2 5 6 10 11 12
44. Тоочих төрөл
4. Enum нэрүүдэд өгсөн утга нь бүхэл тогтмол байх ёстой, өөрөөр хэлбэл
утга нь хамгийн бага бүхэл тооноос хамгийн их бүхэл тоон утга хүртэлх
хязгаарт байх ёстой.
5. Бүх enum тогтмолууд хамрах хүрээгээрээ өвөрмөц байх ёстой.
Жишээ №19: Алдаатай программыг хөрвүүлэх.
1. #include <stdio.h>
2. enum state {working, failed};
3. enum result {failed, passed};
4. int main() { return 0; }
Compile Error: 'failed' has a previous declaration as 'state failed'
45. Тоочих төрөл
Жишээл №20: bitwise OR | оператор ашиглах
#include <stdio.h>
enum designFlags {
BOLD = 1,
ITALICS = 2,
UNDERLINE = 4 };
int main() {
int myDesign = BOLD | UNDERLINE;
// 00000001
// | 00000100
// ___________
// 00000101
printf("%d", myDesign);
return 0;
}
Үр дүн:
5
46. Тоочих төрөл
Жишээл №21: 7 хоногын өдөр хэвлэх
Зарлах
Утга олгох
Оператор
Түлхүүр
үг
enum
хувьсагч
төлөв=0 төлөв=1 төлөв=6
Тоочих төрлүүд
(Тогтмолуудыг таслалаар тусгаарлаж бичнэ)
days of week тоочих төрлийн
объектууд
wed=2 төлөв
47. Тоочих төрөл
Жишээл №21: 7 хоногын өдөр хэвлэх
1. #include<stdio.h>
2. enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
3. int main()
4. {
5. enum week day;
6. day = Wed;
7. printf("%d",day);
8. return 0;
9. }
Үр дүн:
2
48. Тоочих төрөл
Жишээл №22: Жилийн сарууд хэвлэх
1. #include<stdio.h>
2. enum year{Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
3. int main()
4. {
5. int i;
6. for (i=Jan; i<=Dec; i++)
7. printf("%d ", i);
8. return 0;
9. }
Энэ жишээнд for давталт нь i = 0-ээс i = 11 хүртэл ажиллана, учир нь эхлээд
i-ийн утга Jan бөгөөд 0, Dec-ийн утга 11 байна.
Үр дүн:
0 1 2 3 4 5 6 7 8 9 10 11
49. Тоочих төрөл
Жишээл №23: Тоочих төрлийн дэд функцыг тоочих төрөлтэй
харьцуулах
1. #include <stdio.h>
2. enum State {WORKING = 0, FAILED, FREEZED};
3. enum State currState = 2;
4. enum State FindState() {
5. return currState;
6. }
7. int main() {
8. (FindState() == WORKING)? printf("WORKING"): printf("NOT WORKING");
9. return 0;
10.}
Үр дүн:
NOT WORKING