งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Computer Programming การเขียนโปรแกรมคอมพิวเตอร์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Computer Programming การเขียนโปรแกรมคอมพิวเตอร์"— ใบสำเนางานนำเสนอ:

1 Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
สัปดาห์ที่ 10 ตัวแปรโครงสร้างข้อมูล(Structure)

2 objectives เพื่อให้นิสิตรู้จักและเข้าใจตัวแปรโครงสร้างข้อมูลในภาษาซี
สามารถเขียนโปรแกรมภาษาซีโดยใช้ตัวแปรโครงสร้างข้อมูลได้ สามารถนำความรู้เรื่องตัวแปรโครงสร้างข้อมูลไปประยุกต์เพื่อแก้ไขโจทย์ปัญหาในชีวิตประจำวันได้ได้อย่างถูกต้องเหมาะสม

3 Outline 1 Structure 2 Array of Structure 3 Typedef (Type definition) 4
Structure & Pointer 5 Assignment #10

4 C Programming Structure
พรีโปรเซสเซอร์ไดเร็คทีฟ #include<file.h> type function_name(type); type variable; int main() { statement-1; ... statement-n; return 0; } type function_name(type variable) return(var); ฟังก์ชันโพรโทรไทพ์ ส่วนหัวโปรแกรม ตัวแปรชนิดโกบอล ตัวแปรชนิดโลคอล ฟังก์ชันหลัก คำสั่ง ส่วนตัวโปรแกรม ฟังก์ชันย่อย

5 Why structure variable is essential?
การเก็บข้อมูลเราอาจจำเป็นต้องใช้ข้อมูลที่หลากหลายรูปแบบแต่เป็นกลุ่มข้อมูลที่มีส่วนร่วมกัน รายละเอียดของนักศึกษาอาจจะมีข้อมูลรหัส ชื่อ สกุล อายุ เกรดเฉลี่ย ของนักศึกษา ซึ่งเราจะต้องสร้างตัวแปรขึ้นมาใช้ในการเก็บข้อมูลของนักศึกษา 5 ตัวแปรด้วยกัน ทั้งที่จริงแล้ว ข้อมูลทั้งหมดมีส่วนเกี่ยวข้อง คือเป็นของนักศึกษาคนเดียวกัน หากมีจำนวนนักศึกษามากๆ การสร้างตัวแปรและใช้งานตัวแปร อาจจะเกิดความสับสนขึ้นได้ ดังนั้นเราจึงควรนำโครงสร้างข้อมูลมาช่วยในการจัดการกับข้อมูลเหล่านี้

6 Structure Variable โครงสร้างข้อมูล (Structure) เป็นการกำหนดชนิดข้อมูลใหม่ขึ้นมาใช้งาน โดยชนิดข้อมูลนี้เกิดจากการรวมกันของชนิดข้อมูลพื้นฐานที่อาจจะเป็นชนิดเดียวกันหรือต่างชนิดกันก็ได้ ตัวอย่าง : โครงสร้างข้อมูลนักศึกษาให้ชื่อว่า “Student” ประกอบด้วย ชื่อเป็นชนิด char นามสกุลเป็นชนิด char อายุเป็นชนิด int เพศเป็น char เกรดเฉลี่ยเป็น float

7 Structure Variable Declaration
struct structure_name { type variable_1; type variable_2; type variable_3; ……… } struct คือ บ่งบอกว่าเป็นตัวแปรชนิดโครงสร้าง(Structure) struct_name คือ ชื่อของตัวแปรชนิดโครงสร้าง type variable_1-n คือ ตัวแปรที่เกี่ยวข้องกับตัวแปรโครงสร้างที่ ต้องการเก็บ

8 Structure VS. Array เก็บข้อมูลจำนวนมากๆ ได้
เข้าถึงข้อมูลแต่ละตัวได้โดยง่าย ข้อจำกัด : ข้อมูลเหล่านั้นต้องเป็นชนิดเดียวกันเท่านั้น โครงสร้างข้อมูล (Structure) ข้อมูลแต่ละตัวในกลุ่มสามารถมีชนิดต่างกันก็ได้ เช่น ข้อมูลผลการเรียนของนักศึกษาแต่ละคน เทียบเท่ากับ Record ในภาษาอื่น int point[5] struct student { char stdName[20]; char stdLastName[20]; int age; float grade; }

9 Example of Information
student นายวีกิจ นางสาวนิน วีกิจ มุนินทร์ char name[20]; รักเป็นไทย จงสวัสดิ์ char surname[30]; 16 17 int age; ชาย หญิง char sex[7]; 2.95 3.25 float grade;

10 Example of Variable Declaration
struct student { char name[20]; char surname[30]; int age; char sex[7]; float grade; }; struct date { int day, month, year; }; struct sdate { char day[3], month[3]; char year[5]; };

11 สมาชิกข้อมูลภายในมี 4 ฟิลด์ (4 fields)
struct address { char name[30]; char detail[50]; int age; char telephone[10]; }; struct student { char name[30]; char surname[50]; int Id; }; ชื่อของ Structure สมาชิกข้อมูลภายในมี 4 ฟิลด์ (4 fields)

12 Memory Usage struct book { char code[6]; float price; int year; } code
7 bytes 4 bytes 2 bytes

13 structure_name.member;
Member Declaration การอ้างถึงสมาชิกในตัวแปรชนิดโครงสร้าง ทำได้โดยบอกชื่อตัวแปรโครงสร้างตามด้วยจุด และต่อด้วยชื่อสมาชิกของโครงสร้างนั้นๆ มีรูปแบบดังนี้ structure_name.member; student1.name อ้างถึงข้อมูลชื่อของตัวแปร student1 student1.surname อ้างถึงข้อมูลสกุลของตัวแปร student1 birthday.day อ้างถึงข้อมูลวันของตัวแปร birthday birthday.month อ้างถึงข้อมูลเดือนของตัวแปร birthday

14 Declaration & Assignment Value
#include <stdio.h> struct income { float salary, bonus; int age; }; void main(void) { struct income somsri; somsri.salary = ; somsri.bonus = ; somsri.age = 23; }

15 Example 1 #include <stdio.h> #include <string.h>
struct database { int id_number; int age; float salary; }; int main() { database employee; //There is now an employee variable that has modifiable // variables inside it. employee.age = 22; employee.id_number = 1; employee.salary = ; return 0; }

16 Declaration & Assignment Value (cont.)
สามารถกำหนดค่าทั้งหมดในตัวแปรได้ โดยใช้เครื่องหมาย { } คร่อมค่าเริ่มต้นทั้งหมด และใช้เครื่องหมาย , คั่นระหว่างค่าของสมาชิกแต่ละตัว ตัวอย่างเช่น struct date { int day; int month; int year; } ; struct date d1 = {10,5,1992}; day 10 month 5 d1 year 1992

17 String Assignment ถ้าสมาชิกของโครงสร้างเป็นข้อความ เราจะกำหนดตรงๆ เหมือนสมาชิกที่เป็นชนิดอื่นไม่ได้ วิธีการกำหนดข้อมูลชนิดข้อความ ให้ทำการกำหนดผ่านคำสั่ง strcpy หรือรับค่าจากคีย์บอร์ดด้วยคำสั่ง gets หรือ scanf ก็ได้

18 #include <stdio.h>
#include <string.h> struct letter { char name[20]; char address[30]; char message[40]; }; void main(void) { struct letter first; printf("Enter name :"); gets(first.name); printf("Enter address :"); scanf("%s",first.address); strcpy(first.message, "How r u?"); printf("\nNAME is %s",first.name); printf("\nAddress is %s",first.address); printf("\nMessage : %s",first.message); }

19 Example 2 #include <stdio.h> #include <conio.h>
struct student { int id; char *name; float percentage; } student1, student2, student3; int main() { struct student st; student1.id=1; student2.name = "Angelina"; student3.percentage = 90.5; printf(" Id is: %d \n", student1.id); printf(" Name is: %s \n", student2.name); printf(" Percentage is: %f \n", student3.percentage); getch(); return 0; }

20 Initial Value to Member
การกำหนดค่าเริ่มต้นให้ตัวแปรข้อความ struct subject { char name[20]; int credit; char grade; } s1 = {"Physics I”, 3, 'A'}; หรือ }; struct subject s1 = {"Physics I”, 3, 'A'}; name Physics I credit 3 s1 grade A

21 Copy Value in Same Structure
struct date { int day,month,year; } d1, d2; แทนที่จะกำหนดค่าสมาชิกทีละตัว d2.day = d1.day; d2.month = d1.month; d2.year = d1.year; สามารถกำหนดค่าเป็นตัวแปรโครงสร้างได้เลยเช่น d2 = d1;

22 Comparison of Structure
ในการเปรียบเทียบค่าของตัวแปรโครงสร้างนั้น ให้เปรียบเทียบค่าของสมาชิกแต่ละตัว นำตัวแปรโครงสร้างมาเปรียบเทียบกันโดยตรงไม่ได้ เช่น หากมีการตัวแปรชนิด struct date ชื่อว่า d1 และ d2 struct date { int day,month,year } d1,d2; จะนำ d1 และ d2 มาเปรียบเทียบกันโดยตรงไม่ได้ if(d1 == d2) printf(“d1 is the same date as d2”);

23 Outline 1 Structure 2 Array of Structure 3 Typedef (Type definition) 4
Structure & Pointer 5 Assignment #10

24 Array of Structure ปกติเราจะใช้ข้อมูลชนิดโครงสร้างมากกว่าหนึ่งข้อมูล เช่นโครงสร้างนักเรียนประกอบด้วย รหัส, ชื่อ, เพศ, และอายุ โดยส่วนมากเราจะมีข้อมูลของนักเรียนหลายคน ดังนั้นเราสามารถสร้างตัวแปรของนักเรียนให้เป็นอาเรย์ของตัวแปรโครงสร้าง เพื่อทำการเก็บข้อมูลแบบโครงสร้างไว้เป็นกลุ่มข้อมูลที่เกี่ยวข้องกัน เช่น โครงสร้างนักเรียน ซึ่งโรงเรียนหนึ่งจะต้องมีนักเรียนหลายคน จะต้องเก็บข้อมูลของนักเรียนเหล่านี้เพื่อนำมาประมวลผลต่อไป

25 Array of Structure (cont.)
ข้อมูลโครงสร้าง 1 ตัว ก็คือข้อมูล 1 รายการ (1 record) เช่น ประกาศข้อมูลโครงสร้างชนิด student struct student { char code[9]; char name[41]; float mid, lab, fin; char grade; } stu1; stu1 เป็นตัวแปรโครงสร้าง สามารถเก็บข้อมูลนักศึกษาได้ 1 คน ต้องการเก็บข้อมูลนักศึกษาหลายๆ คนนั้น ไม่ต้องประกาศตัวแปรโครงสร้างหลายๆ ตัว โดยสามารถสร้างอาเรย์ของโครงสร้าง (Arrays of structures) ได้

26 Array of Structure (cont.)
การประกาศอาเรย์ของข้อมูลชนิดโครงสร้างมีรูปแบบดังนี้ เช่น ได้ตัวแปรอาเรย์ที่มีสมาชิก 3 ตัว (เพื่อเก็บข้อมูล น.ศ 3 คน) สมาชิกแต่ละตัวในอาเรย์ คือตัวแปรโครงสร้าง (structure) ชนิด student struct structure_name member [size]; struct student { char code[9]; char name[41]; float mid, lab, fin; char grade; }; struct student stu[3];

27 Memory Usage age name 20 bytes 2 1 grade student[0] student[1]
#include <stdio.h> main() { struct profile { char name[19]; int age; char grade; }; struct profile student[3]; } age name 20 bytes 2 1 grade student[0] student[1] student[2]

28 Assignment Value to Array of Structure
ตัวอย่างเช่น struct structure_name member [size] = { { value_list 1}, { value_list 2}, ... { value_list n} }; struct student stu[100] ={ {“ ”, “Somchai”, 20, 15, 30, ‘C’} , {“ ”, “Decha”, 25, 18, 40, ‘A’} , {“ ”, “Tanee”, 12, 15, 25, ‘D’} };

29 Example 3 #include <stdio.h> #include <string.h> main() {
struct profile { char name[20]; int age; char grade; }student[10]; //Assignment value to each field of member strcpy(student[0].name, “Manee”); student[2].age = 12; student[4].grade = ‘A’; //show some field of each member printf(“%s\n”,student[0].name); printf(“%d\n”,student[2].age); printf(“%c\n”,student[4].grade); }

30 Example 4 #include <stdio.h> #include <conio.h>
void main() { struct char id[10]; char name[30]; int age; } std[4]; int i; * printf("Please <Enter> for Input 5 record: \n"); for(i=0;i<4;i++) printf(" \n"); printf("RECORD # %d \n",i+1); printf("\tCODE : "); scanf("%s",std[i].id);

31 Example 4 (cont.) printf("\tNAME : "); scanf("%s",std[i].name);
printf("\tAGE:"); scanf("%d",&std[i].age); } //show the output to user printf("\n OUT PUT \n"); printf(" CODE NAME AGE\n"); //For-loop for show information of each user for(i=0; i<4; i++) { printf("%s %s %d \n",std[i].id ,std[i].name,std[i].age);

32 Result

33 #include <stdio.h> #include <string.h> struct {
/* The mechanism of a structure */ /* Define a type "person" to include firstname,surname, age and child count */ #include <stdio.h> #include <string.h> struct { char firstname[20]; char surname[20]; float age; int childcount; } person; int main () { /* Create two persons */ person jimmy, flossie; float avage; /* Fill up each of the persons with information */ strcpy(jimmy.firstname,"James"); strcpy(jimmy.surname,"Conway"); jimmy.age = 32.0;

34 strcpy(flossie.firstname,"Florence");
jimmy.childcount = 2; strcpy(flossie.firstname,"Florence"); strcpy(flossie.surname,"Conway"); flossie.age = 21.0; flossie.childcount = 2; /* Calculate the average age of the persons */ avage = (flossie.age + jimmy.age) / 2.0; /* Print out the persons names and the average age */ printf ("About %s and %s ...n",flossie.firstname,jimmy.forename); printf ("Their average age is %.2fn",avage); return 0; }

35 Structure of Structure
struct date { int day; int month; int year; }; struct person char name[30]; struct date birthday; struct person p1; trcpy(p1.name,"Somchai"); p1.birthday.day = 10; p1.birthday.month = 3; p1.birthday.year = 1992;

36 Outline 1 Structure 2 Array of Structure 3 Typedef (Type definition) 4
Structure & Pointer 5 Assignment #10

37 Type definition ในภาษาซี สามารถกำหนดชนิดตัวแปรขึ้นมาใหม่ได้ โดยใช้คำสั่ง typedef (type definition) รูปแบบ: typedef ชนิดตัวแปรที่มีอยู่แล้ว ชนิดตัวแปรใหม่; เช่น typedef int my_int; รูปแบบการใช้ typedef ร่วมกับการนิยาม structure: typedef struct{ type variable 1; type variable 2; ... type variable n; } new_definition_variable;

38 Type definition (cont.)
ตัวอย่าง typedef struct { int day,month,year; } date; ในการประกาศตัวแปรก็สามารถใช้ชนิดตัวแปรใหม่ได้เลย เช่น date d1,d2; ข้อสังเกต เมื่อกำหนดตัวแปรหลังจากการกำหนดด้วย typedef แล้ว ไม่ต้องมีคำว่า struct นำหน้าชนิดข้อมูลอีก

39 How to use structure variable?
struct info { char firstName[20]; char lastName[20]; int age; }; struct info i1, i2; info j; typedef struct { char firstName[20]; char lastName[20]; int age; } info; info j; struct info k;

40 Typedef of Typedef typedef struct { char firstName[20];
char lastName[20]; int age; } InfoT; InfoT info; double salary; } EmployeeT; EmployeeT e1; e1.info.age = 21;

41 Example 5 (Regular Form)
#include<stdio.h> typedef struct telephone { char *name; int number; }TELEPHONE; int main() TELEPHONE index; index.name = "Jane Doe"; index.number = 12345; printf("Name: %s\n", index.name); printf("Telephone number: %d\n", index.number); return 0; }

42 Example 6 (Pointer Form)
#include<stdio.h> typedef struct telephone { char *name; int number; }TELEPHONE; int main() TELEPHONE index; TELEPHONE *ptr_myindex; ptr_myindex = &index; ptr_myindex->name = "Jane Doe"; ptr_myindex->number = 12345; printf("Name: %s\n", ptr_myindex->name); printf("Telephone number: %d\n", ptr_myindex->number); return 0; }

43 Outline 1 Structure 2 Array of Structure 3 Typedef (Type definition) 4
Structure & Pointer 5 Assignment #10

44 Structure & Pointer s sPtr
struct student{ char name[40]; int age ; }; struct student s; struct student *sPtr; strcpy(s.name,“Somsak”); s.age = 19; sPtr = &s; s sPtr s.name s.age Somsak\0 19 xxxx xxxx หากต้องการพิมพ์ว่าชื่อนักศึกษา สามารถทำได้สองวิธีคือ printf("%s", s.name); printf("%s", sPtr->name);

45 Structure & Pointer (cont.)
struct card { char *face; char *suit; }; struct card a; struct card *aPtr; Queen\0 mmmm a.face = “Queen”; a.suit = “heart”; heart\0 aPtr = &a; nnnn aPtr a a.face a.suit mmmm nnnn xxxx xxxx หากต้องการพิมพ์ว่าไพ่ใบนี้อยู่ในชุดไหน สามารถทำได้สองวิธีคือ printf("%s", a.suit); printf("%s", aPtr->suit);

46 Example 3 aPtr a int main(){ struct card {
char *face; // 2,3,..,9,J,Q,K,A char *suit; // space, heart, diamond, club }; struct card a; struct card *aPtr; a.face = “Ace"; a.suit = “spade"; aPtr = &a; printf( "%s%s%s\n%s%s%s\n%s%s%s\n", a.face , " of " ,a.suit, aPtr->face , " of " , aPtr->suit, (*aPtr).face, " of " , (*aPtr).suit ); return 0; } aPtr yyyy xxxx mmmm nnnn Ace\0 space\0 Ace of spade a a.face a.suit mmmm nnnn yyyy xxxx

47 Example 7 #include <stdio.h> #include <conio.h>
int main() { struct st { int id; char *name; char *address; }; struct st employee, *stptr; stptr = &employee; stptr->id = 1; stptr->name = "Angelina"; stptr->address ="Rohini,Delhi"; printf("Employee Information: id=%d\n%s\n%s\n", stptr->id, stptr->name, stptr->address); getch(); return 0; }

48 Example 8 จงเขียนโปรแกรมเก็บข้อมูลนักศึกษาจำนวน 10 คน โดยมีรายละเอียดดังนี้ ข้อมูลประกอบด้วย ชื่อกับ อายุ รับข้อมูลนักศึกษาจากคีย์บอร์ด โปรแกรมจะต้องใช้ตัวชี้ที่ชี้ไปยังข้อมูลประเภทโครงสร้าง เมื่อป้อนข้อมูลเสร็จ โปรแกรมจะค้นหานักเรียนที่อายุมากกว่า 20 ปี แสดงชื่อ ออกจอภาพ

49 Output Student[6] Student[0] name:tu name:joy age:25 age:12 Student[7]
name:tee age:34 Student[8] name:bat age:44 Student[9] name:phon age:33 jo,23 pat,21 tu,25 tee,34 bat,44 phon,33 Student[0] name:joy age:12 Student[1] name:boy age:20 Student[2] name:jo age:23 Student[3] name:pat age:21 Student[4] name:ple age:13 Student[5] name:tom age:11

50 Example 8 (cont.) #include<stdio.h> #include<conio.h>
int main() { struct profile{ char name[20]; int age; } s[10]; int i; struct profile *sPtr; sPtr = s;

51 Example 8 (cont.) for (i=0; i<10; i++) {
printf("Student # %d\n\tName :", i+1 ); scanf("%s",sPtr->name); printf("\tAge:"); scanf("%d",&(sPtr->age)); sPtr++; } sPtr -= 10; if ((sPtr->age) > 20) printf("\n%s, %d",sPtr->name,sPtr->age); return 0;

52 Outline 1 Structure 2 Array of Structure 3 Typedef (Type definition) 4
Structure & Pointer 5 Assignment #10

53 Assignment จงสร้างอาร์เรย์ A เป็นอาร์เรย์ขนาด 3x3 เก็บข้อมูลตัวเลข 1-9 แล้วแสดงผลลัพธ์ตัวเลขในอาร์เรย์โดยใช้การอ้างอิงค่าตัวเลขโดยใช้ Pointer เท่านั้น x และ y เป็นตัวแปรแบบทศนิยม จงเขียนโปรแกรม ทำการสลับค่า x และ y โดยใช้ pointer เท่านั้น ให้ S เป็น Structure ที่เก็บข้อมูลตัวเลข 3 ตัว จงเขียนโปรแกรมให้เก็บข้อมูลตัวเลขตัวที่ 1 และ 2 ลงใน Structure แล้วหาผลรวมลงในตัวเลขตัวที่ 3 โดยใช้การอ้างอิงข้อมูลโดย Pointer เท่านั้น


ดาวน์โหลด ppt Computer Programming การเขียนโปรแกรมคอมพิวเตอร์

งานนำเสนอที่คล้ายกัน


Ads by Google