U.cs101 лаборатори 8

9
доктор (), дэд проф Ð.Òºðáàò Лабораторын ажил 8 Бүтэц ба заагч Энэ хэсэгт C++ хэлний бүтэц болон заагч хувьсагчийг бүтэцд хэрхэн тодорхойлох болон ашиглаж болох талаар танилцах болно. Бүтэц гэдэг нь янз бүрийн төрлийн хувьсагчийн бөөгнөрөл юм.Өөрөөр хэлбэл нэг обьект дэх янз бүрийн төрлийн утгуудын бөөгнөрөл болно. Та тайлбарийн хэсэг болон жишээ программуудтай сайтар танилцсаны дараа дасгал ажлуудыг хийх хэрэгтэй. C++ хэлэнд бүтэцийг struct үгээр зарлана. Бүтцийг хэд хэдэн хэлбэрээр зарлаж болно. 1. Struct { char f_name[10]; char l_name[10; int b_month; int b_day; int b_year; } newperson,oldperson; // энэ хэсэгт 5-н хувьсагч бүхий бүтцээс утга авах newperson,oldperson гэсэн 2 обьектийг тодорхойлсон байна. 2. Struct sub { int item; float cost; } part, // sub бүтцээс утга авах part гэсэн обьектийг тодорхойлсон байна. 3. struct C++ty { char c_name; char c_county; } // 2 элементээс бүрдэх C++ty бүтцийг тодорхойлсон байна. 4. struct school student; // school бүтцийн student обьектийг тодорхойлсон байна.

Transcript of U.cs101 лаборатори 8

Page 1: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

Лабораторын ажил 8

Бүтэц ба заагч

Энэ хэсэгт C++ хэлний бүтэц болон заагч хувьсагчийг бүтэцд хэрхэн тодорхойлох болон ашиглаж болох талаар танилцах болно. Бүтэц гэдэг нь янз бүрийн төрлийн хувьсагчийн бөөгнөрөл юм.Өөрөөр хэлбэл нэг обьект дэх янз бүрийн төрлийн утгуудын бөөгнөрөл болно.

Та тайлбарийн хэсэг болон жишээ программуудтай сайтар танилцсаны дараа дасгал ажлуудыг хийх хэрэгтэй.

C++ хэлэнд бүтэцийг struct үгээр зарлана. Бүтцийг хэд хэдэн хэлбэрээр зарлаж болно.

1. Struct { char f_name[10]; char l_name[10; int b_month; int b_day; int b_year;} newperson,oldperson; // энэ хэсэгт 5-н хувьсагч бүхий бүтцээс утга авах newperson,oldperson гэсэн 2 обьектийг тодорхойлсон байна.

2. Struct sub { int item; float cost;} part, // sub бүтцээс утга авах part гэсэн обьектийг тодорхойлсон байна.

3. struct C++ty { char c_name; char c_county;} // 2 элементээс бүрдэх C++ty бүтцийг тодорхойлсон байна.

4. struct school student; // school бүтцийн student обьектийг тодорхойлсон байна.Бүтцийн элемент рүү { . } буюу { - >} гэсэн байдлаар хандана.1-р жишээн дэх бүтэцд дараах байдлаар хандаж болно.

- newperson.f_name=”bat”2-р жишээн дэх бүтэцд дараах байдлаар хандаж болно.

- Part.item - Struct sub *ptr=∂ гэж тодорхойлсон тохиолдолд ptr->item =23; гэж

хандана. Энэ тохиолдолд *ptr гэсэн заагч элемент ашигласан байна.3-р жишээн дэх бүтэцд дараах байдлаар хандаж болно.

- struct C++ty new_C++ty; гэж тодорхойлсон тохиолдолд new_C++ty.c_name=”dallas”; гэж хандана.

Ж ишээ 1

Page 2: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

#include<stdio.h>#include<string.h>#include<math.h>#include<conio.h>struct Subscriber { char lastname[25]; char firstname[15]; char title[25]; char street[60]; char C++ty[30]; char state[2]; char zip[9]; float postage; int term; }; struct Subscriber mailing; void get_caption_info() { strcpy(mailing.lastname ," Straley "); strcpy(mailing.firstname," Stephan "); strcpy(mailing.title," Caption "); strcpy(mailing.street ," Barrow street "); strcpy(mailing.C++ty ," Dallas C++ty "); strcpy(mailing.state ," Usa "); strcpy(mailing.zip," 0xxxx"); mailing.postage=.24; mailing.term=1; } main(){ void get_caption_info();clrscr();

get_caption_info(); printf("Name ->: %s %s\n",mailing.firstname,mailing.lastname); printf("Title ->: %s\n",mailing.title); printf("Street ->: %s\n",mailing.street); printf("C++ty ->: %s\n",mailing.C++ty); printf("Cost to send = $%02.2f\n",mailing.postage); printf("Subcription term = $%d\n",mailing.term); getch(); }Программын тайлбар: Энэ жишээнд Subscriber гэсэн бүтэц, get_cartion_info() функцийг тодорхойлсон байна.Бүтцийн элемент рүү mailing обьектийн тусламжтайгаар mailing.title хэлбэрээр хандаж байна.

Программын үр дүнд : Name ->: Stephan Straley Title ->: Caption Street ->: Barrow street C++ty ->: Dallas C++ty Cost to send = $0.24 Subcription = $1 гэж гарна.

Page 3: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

Жишээ 2 #include<stdio.h>#include<string.h>#include<math.h>#include<conio.h>struct Subscriber { char lastname[25]; char firstname[15]; char title[25]; char street[60]; char C++ty[30]; char state[2]; char zip[9]; float postage; int term; }; struct Subscriber mailing; struct Subscriber *ptr=&mailing; void get_caption_info() { strcpy(ptr->lastname ," Straley "); strcpy(ptr->firstname," Stephan "); strcpy(ptr->title," Caption "); strcpy(ptr->street ," Barrow street "); strcpy(ptr->C++ty ," Dallas C++ty "); strcpy(ptr->state ," Usa "); strcpy(ptr->zip," 0xxxx"); ptr->postage=.24; ptr->term=1; } main(){ void get_caption_info();clrscr();

get_caption_info(); printf("Name ->: %s %s\n",ptr->firstname,ptr->lastname); printf("Title ->: %s\n",ptr->title); printf("Street ->: %s\n",ptr->street); printf("C++ty ->: %s\n",ptr->C++ty); printf("Cost to send = $%02.2f\n",ptr->postage); printf("Subcription term = $%d\n",ptr->term); getch(); }Программын тайлбар: Дээрхи жишээтэй ижил боловч бүтцийн элемент рүү mailing обьектийн *ptr заагч тусламжтайгаар ptr->firstname хэлбэрээр хандаж байна.

Программын үр дүнд : Name ->: Stephan Straley Title ->: Caption Street ->: Barrow street C++ty ->: Dallas C++ty

Page 4: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

Cost to send = $0.24 Subcription = $1 гэж гарна.

Жишээ 3 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<conio.h>#define SIZE 100struct Student { char aus_num[10]; char lastname[25]; char firstname[15]; char date[8]; char ch_exam[30]; int on_exam; } title[SIZE]; struct Student label; void get_info(int a){ printf("Бүртгэлийн дугаар : ");gets(title[a].aus_num); printf("Нэр : ");gets(title[a].lastname); printf("Oвог: ");gets(title[a].firstname); printf("Төрсөн он,сар,өдөр : ");gets(title[a].date); printf("Сoнгосон шалгалт : ");gets(title[a].ch_exam); printf("Шалгалт.оноо : ");scanf("%d",&title[a].on_exam); } void print_info(int a){ printf("Бүртгэлийн дугаар : ->: %s",title[a].aus_num); printf("Oвог,нэр ->: %s, %s\n",title[a].firstname,title[a].lastname); printf("Tөрсөн он,сар,өдөр ->: %s\n",title[a].date); printf("Сoнгосон шалгалт->: %s\n",title[a].ch_exam); printf("шалгалт.оноо ->: %d\n",title[a].on_exam); }void menu(){ puts(" 0. Программаас гарах..."); puts(" 1. Оюутаны бүртгэл оруулах ..."); puts(" 2. Оюутаны бүртгэл дэлгэцэнд хэвлэх ..."); puts(" та сонголт хийнэ үү "); } main(){ int option,i,n; void get_info(int); void print_info(int); void menu();clrscr(); for(;;){ menu(); scanf("%d",&option);

switch(option) {case 1:

Page 5: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

printf("Хэдэн оюутаны бүртгэл оруулах бэ : ");scanf("%d",&n);for(i=1;i<=n;i++){ get_info(i);}break;

case 2: printf("Хэдэн оюутаны бүртгэл хэвлэх бэ :");scanf("%d",&n);for(i=1;i<=n;i++){ print_info(i);}break;

case 0:puts("Taнд баярлалаа.");getch();exit(0); default:

puts(" invalid ");clrscr();

} }

}Программын тайлбар: Энэ жишээнд оюутаны бүртгэл оруулж түүнийг хэвлэх программ .

Оюутан бүр дараахь дасгал бодлогуудыг компьютер дээр шалгасны дараа дэвтэр дээрээ бичиж багшид хамгаалж тооцуул.

Дасгал бодлого 1 Дараах бодлогын үр дүнг гаргах.#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<alloc.h>struct _name { char last[15]; char first[15]; };struct _address { char street[25]; char C++ty[15]; char state[15]; long zip; };struct label { struct _name name; struct _address address; }; struct label *customer; struct label *new_customer,*current_customer;

getlabel(struct label *customer){ printf("Нэр оруул(овог,нэр): "); scanf("%s%s%*c",customer->name.first,customer->name.last); printf("Ор.су.гудамж : ");gets(customer->address.street); printf("Ор.су.хот,улс & код : "); scanf("%s%s%ld",customer->address.C++ty,

customer->address.state,

Page 6: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

&customer->address.zip); }

putlabel(struct label *customer){ printf("-------------------------"); printf("\n%s,%s\n%s\n%s,%s,%ld\n", customer->name.first, customer->name.last, customer->address.street, customer->address.C++ty, customer->address.state, customer->address.zip); }

add(struct label *customer){ struct label *new_customer,*current_customer;new_customer=customer; if(new_customer!=NULL){ new_customer=NULL; getlabel(customer); if(customer==NULL) customer=new_customer; else { current_customer=customer; while(current_customer!=NULL) current_customer=new_customer; }

} else printf("<< Out of memory >>\n"); }main(){ struct label *customer; struct label *new_customer,*current_customer; int choice;clrscr(); for(;;){ puts("Та сонголт хийнэ үү :"); puts(" 1. Бичлэг оруулах :"); puts(" 2. Бичлэг нэмэх :"); puts(" 3. Бичлэг хэвлэх :"); puts(" 0. Программаас гарах :"); scanf("%d",&choice); switch (choice) { case 1:getlabel(customer);break; case 2:add(customer);break; case 3:putlabel(customer);break; case 0:exit(0); default:

printf("Invalid"); } } }Дасгал бодлого 2 Дараах бодлогын үр дүнг гаргах.#include<stdio.h>#include<time.h>#include<conio.h>#define TRUE 1#define FALSE 0struct { int tm_sec; // seconds [0.59]

Page 7: U.cs101 лаборатори 8

доктор (), дэд проф Ð.Òºðáàò

int tm_min; // minutes [0.59] int tm_hour; // hours [0.23] int tm_mday; // days [1.31] int tm_mon; // months [0.11] int tm_year; // years since 1900 int tm_wday; // days since Sunday [0.6] int tm_yday; // days since January [0.365] int tm_isdst; // }tm;main(){ struct tm *ourtime; int afternoon=TRUE; long ticktock;clrscr(); time(&ticktock); // Тухайн өдөр сар цаг минут секунтийг авна ourtime=localtime(&ticktock); if(ourtime->tm_hour<12) afternoon=FALSE; else ourtime->tm_hour-=12; if(afternoon) printf("%.19s %s\n",asctime(ourtime),"PM"); else

printf("%.19s %s\n",asctime(ourtime),"AM"); }Дасгал бодлого 3 Номын сангийн бүртгэл үүсгэх.

- Номын код- Номын нэр- Номын зохиогч- Номыг хэвлэсэн он сар өдөр- Номын хуудасны дугаар

Дасгал бодлого 4 Ажилтны анкет бүрдүүлэх

- Овог нэр- Нас- Хүйс- Боловсрол- Оршин суугаа хаяг