ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
(Array, Pointer, Structure)
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 14 ตัวแปรชั้นสูง (Array, Pointer, Structure)
2
Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments
3
Objectives เพื่อให้นิสิตรู้และเข้าใจตัวแปรชั้นสูงและการทำงานของตัวแปรชั้นสูง Array Pointer Structure เพื่อเตรียมความพร้อมให้นิสิตสามารถวิเคราะห์และแก้ปัญหาโจทย์การทำงานแบบวนซ้ำร่วมกับตัวแปรชั้นสูงสำหรับแก้ปัญหาด้วยภาษาคอมพิวเตอร์ได้
4
Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments
5
Why an array is essential?
ถ้าต้องการเก็บค่าคะแนนสอบ (score) ของนักเรียน จำนวน 20,000 คน เราต้องใช้ตัวแปร 20,000 ตัว เพื่อใช้เก็บค่าคะแนนของนักเรียนทั้งหมด float score1, score2, score3, ..., score20000; จากข้อจำกัดของชนิดข้อมูลพื้นฐานที่มีอยู่ (char, int, float, double) เราต้องใช้ตัวแปรจำนวนมาก เพื่อเก็บข้อมูลหลายค่า ภาษาซีจึงได้กำหนดชนิดข้อมูลแบบโครงสร้างที่รวมข้อมูลพื้นฐานดังกล่าวไว้เป็นลำดับหรือเป็นกลุ่ม
6
The Advantage of Array อาเรย์ (array) เป็นโครงสร้างข้อมูลประกอบด้วยกลุ่มของข้อมูลชนิดเดียวกันที่เรียงกันเป็นลำดับ โดยใช้ตัวแปรเพียงตัวเดียวอ้างถึงเช่น ตัวแปร score เป็นชนิดข้อมูลแบบอาเรย์ ใช้เก็บคะแนนจำนวน 20,000 ค่าพร้อมกันได้ เช่น ดัชนีที่ใช้จะเป็นเลขจำนวนเต็ม เริ่มจาก 0 ตามลำดับ (0, 1, 2, ...) คะแนนสอบ 75.5 82.0 96.5 93.0 ... 85.0 79.5 ดัชนี 1 2 3 19,998 19,999
7
Example # 1 in Regular Format
Example 1 : จงเขียนโปรแกรมเพื่อรับรหัสนักศึกษา และคะแนนสอบกลางภาควิชา Computers and Programming ของนักศึกษาห้อง 1 – 10 #include <stdio.h> #include<conio.h> int main () { char id0001[9],id0002[9],id0003[9],...,id1158[9],id1159[9]; float point0001,point0002,point0003,...,pint158,point1159; scanf ("%s",id0001); scanf ("%f",&point0001); ... scanf ("%s",id1159); scanf ("%f",&point1159); return 0; }
8
Example # 1 in Array Format
#include<stdio.h> #include<conio.h> int main() { char id [1159] [9]; float point [1159]; int i; for (i=0;i<1159;i++) scanf ("%s", id [ i ]); scanf ("%f", &point [ i ]); } return 0;
9
Type of Array One-dimensional Array Multi-dimensional Array 1 num[9]
[0] 9 [1] -1 [2] -23 [3] 44 [4] 2 [5] 6 [6] -9 [7] -22 [8] One-dimensional Array Column Column [0] [1] [2] [0] [1] [2] [3] Row [0] Row [1] [0] Row [2] Row [1] [3] [2] Row [3] [1] [2] Depth [0] Multi-dimensional Array
10
One-dimensional Array Variable Declaration
type array_name[size]; ตัวแปรแถวลำดับ อะเรย์ หรือ อาเรย์ : “An array is a series of elements of the same type placed in contiguous memory locations that can be individually referenced by adding an index to a unique identifier.” type ชนิดของตัวแปร array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม size ขนาดของตัวแปรแถวลำดับที่จะใช้ (จะใช้เท่าไรให้จองเผื่อไว้ 1 ช่องสำหรับ \0 (null string))
11
Declaration & Assignment Examples (Memory)
char student_name [5]; student_name [0] = ‘A’; student_name [2] = ‘B’; int bill [5]; int billy [5] = { 16, 2, 77, 40, }; float Point [20]; Point [19] = 3.57; double x_data [100]; x_data [99] = ; 8 bits, 2 complement 32 bits, 2 complement
12
Declaration & Assignment Examples (Value)
char student_name [5]; student_name [0] = ‘A’; student_name [2] = ‘B’; int bill [5]; int billy [5] = { 16, 2, 77, 40, }; float Point [20]; Point [19] = 3.57; double x_data [100]; x_data [99] = ; Column [0] [1] [2] [3] [4] Row [0] A B student_name Column [0] [1] [2] [3] [4] Row [0] 16 2 77 40 127 billy Column [16] [17] [18] [19] [20] Row [0] 3.57 Point Column [96] [97] [98] [99] [100] Row [0] x_data
13
Declaration & Assignment to Array
type array-name[n]={value-1,value-2,…,value-n}; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม value-1,value-2,…,value-n เป็นข้อมูลที่จะทำการกำหนดให้กับตัวแปรแถวลำดับ โดยจะต้องเป็นข้อมูลชนิดเดียวกับ type ที่กำหนด
14
Declaration & Assignment Examples (cont.)
#include<stdio.h> #include<conio.h> int main() { int number[3] = {23, -186, 43}; float value_2[5]={0.98,43.213,-3.47,52.08,-0.987}; char vowel[5] = {'a','e','i','o','u'}; char name[9] = {'E','n','g','i','n','e','e','r','\0'}; return 0; }
15
References Data in Array
#include<stdio.h> int main() { int year[5] = {2552,2553,2554,2555,2556}; printf ("%d\n",year[0]); printf ("%d\n",year[1]); printf ("%d\n",year[2]); printf ("%d\n",year[3]); printf ("%d\n",year[4]); return 0; }
16
Example 2 : จงเขียนผังงานและโปรแกรมเพื่อเก็บอายุของผู้ใช้งานจำนวน 20 คนโดยเก็บข้อมูลอายุในตัวแปรชนิดอาร์เรย์ Output Analysis ไม่มี Input Analysis อายุของผู้ใช้งานทั้ง 20 คนที่ป้อนเข้ามา Process Analysis สร้างตัวแปรแถวลำดับขนาด 20 เพื่อเก็บค่าอายุ โปรแกรมวนรอบเพื่อรอรับค่าจากผู้ใช้งาน Variable Define age[20] เป็นตัวแปรแถวลำดับชนิดจำนวนเต็มขนาด 20 เพื่อใช้เก็บค่าอายุ count เป็นตัวแปรชนิดจำนวนเต็มเพื่อใช้นับจำนวนรอบของ for-loop
17
Process & Pseudo-code Process เริ่มต้นทำงาน
ทำการวนรอบเพื่อรับอายุของผู้ใช้งานทั้ง 20 คนที่ป้อนเข้ามาแล้วเก็บไว้ในตัวแปรแถวลำดับ จบการทำงาน Pseudo-code Begin For ( i = 1 && i < = 20 ) { Keep the age of users } End
18
True START END age[20],count count = 0 age[count] count++ count<20 False
19
#include<stdio.h>
#include<conio.h> int main() { int age[20],count; for (count=0; count<20; count++) printf ("Enter age[%d] : ",count); scanf ("%d",&age[count]); } printf ("Finish\n"); return 0;
20
แล้วคำนวณส่วนสูงเฉลี่ย แล้วแสดงผลส่วนสูงของนักศึกษาทั้งหมด
Example # 2 Example 2 : จงเขียนผังงานและโปรแกรม เพื่อรับจำนวนนักศึกษาในห้อง หลังจากนั้น ให้โปรแกรมรอรับส่วนสูงของคน n คน แล้ววิเคราะห์ว่ามีนักศึกษาในห้องมีส่วนสูงช่วงต่างๆ จำนวนกี่คน แล้วคำนวณส่วนสูงเฉลี่ย แล้วแสดงผลส่วนสูงของนักศึกษาทั้งหมด 0 – 160 161 – 170 171 – 180
21
Problem Analysis Output Analysis จำนวนนักศึกษาที่สูงแต่ละช่วง
ส่วนสูงของนักศึกษาเฉลี่ยในห้อง ส่วนสูงของนักศึกษาทั้งหมด Input Analysis จำนวนนักศึกษาทั้งหมด และส่วนสูงของแต่ละคน Process Analysis โปรแกรมรับจำนวนนักศึกษา วนรอบเพื่อรับส่วนสูงเท่ากับจำนวนนักศึกษา วนรอบเพื่อตรวจสอบช่วงส่วนสูงของนักศึกษาและหาผลรวมส่วนสูงของนักศึกษาทุกคน คำนวณหาค่าเฉลี่ย
22
Problem Analysis (cont.)
Variable Define num เป็นจำนวนเต็มเพื่อเก็บจำนวนนักศึกษา a เป็นจำนวนเต็มเพื่อตรวจตำแหน่งตัวแปร และนับรอบ range1=0, range2=0, range3=0, range4=0 เป็นจำนวนเต็มสำหรับเก็บค่าจำนวนนักศึกษาแต่ละช่วง high[300] เป็นตัวแปรแถวลำดับชนิดทศนิยมเพื่อเก็บส่วนสูง avg = 0 เป็นจำนวนทศนิยมเพื่อเก็บค่าผลรวมและค่าเฉลี่ย
23
Process Description เริ่มต้นทำงาน ทำการรับจำนวนนักศึกษา
วนรอบเท่ากับจำนวนนักศึกษาที่ป้อนเข้ามาเพื่อรับส่วนสูงของนักศึกษาแต่ละคน วนรอบเพื่อตรวจสอบจำนวนของนักศึกษาที่มีความสูงตรงกับแต่ละช่วงความสูงและหาค่าผลรวมความสูงของนักศึกษาทั้งหมด หาค่าเฉลี่ยความสูง จบการทำงาน
24
Pseudo Code Begin Read amount of students Repeat {
Read each height of student Check and increase amount of each range Calculate the summation of height } Calculate the average height End
25
True num,a range1=0,range2=0 range3=0,range4=0 high[300],avg=0 high[a] a=0 START num a<num a++ False (2)
26
(2) a=0 False a<num True <=160 T range1++ F <=170 T range2++ avg=avg/num F <=180 T range3++ (3) F range4++ avg=avg+high[a] a++
27
END (3) True a<num a++ a=0 high[a] range1 range2 range3 range4 avg False
28
String & Array variable
char subject[11] = {"C language"}; or char subject[11] = {'C', ' ', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'}; C subject [0] [1] l [2] [3] [4] [5] a n g [6] [7] [8] [9] [10] u e \0 char name[9] = {"Engineer"}; [0] [1] [2] [3] [4] [5] [6] [7] [8] E n g i n e e r \0 name
29
Example #3 #include<stdio.h> #include<conio.h> int main ()
{ char sentence[22]="Welcome to my country"; char word[9]={'T','h','a','i','l','a','n','d','\0'}; char not_word[4]={'l','o','v','e'}; printf ("Message1 = %s\n",sentence); printf ("Message2 = %s\n",word); printf ("Message3 = %s\n",not_word); return 0; }
30
Multi-dimensional Array Variable Declaration
type array_name[size_1][size_2]; type array_name[m][n]; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม size_1 or m ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 1 (ปกติจะจองไว้สำหรับดัชนีของแถว (row)) size_2 or n ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 2 (ปกติจะจองไว้สำหรับดัชนีของสดมภ์ (column))
31
Assignment Value to Multi-dimensional Array
type array-name[m][n]={value-1-1,value-1-2,…,value-1-m, value-2-1,value-2-2,…,value-2-m, …, value-n-1,value-n-2,…,value-n-m}; type ชนิดของตัวแปร เช่น int, float, char array_name ชื่อของตัวแปรแถวลำดับที่ประกาศหรือตั้งโดยผู้เขียนโปรแกรม m ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 1 (ปกติจะจองไว้สำหรับดัชนีของแถว (row)) n ขนาดของตัวแปรแถวลำดับที่จะใช้มิติที่ 2 (ปกติจะจองไว้สำหรับดัชนีของสดมภ์ (column)) value-1-1, value-1-2, …, value-1-n, …, …, value-n-m เป็นข้อมูลที่จะทำการกำหนดให้กับตัวแปรแถวลำดับ โดยจะต้องเป็นข้อมูลชนิดเดียวกับ type ที่กำหนด
32
Declaration & Assignment Examples
int matrix [2][2]; matrix [0][0] = ‘2’; matrix [0][1] = ‘7’; matrix [1][0] = ‘9’; matrix [1][1] = ‘5’ double data_array [2][2]; data_array[2][2] = {1.0,2.0,3.0,4.0}; or data_array[2][2] = {{1.0,2.0},{3.0,4.0}}; or data_array[ ][2] = {{1.0,2.0},{3.0,4.0}}; Column [0] [1] Row [0] 2 7 9 5 Row [1] Column [0] [1] 1.0 2.0 3.0 4.0 [0] [1]
33
Declaration & Assignment Examples (cont.)
double data_array [2][2]; data_array[0][0] = 1.0; data_array[0][1] = 2.0; data_array[1][0] = 3.0; data_array[1][1] = 4.0; Column [0] [1] Row [0] 1.0 2.0 3.0 4.0 Row [1]
34
Declaration & Assignment Examples (cont.)
int num[3][4] = { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34 }; int num[3][4] = { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34 }; 31 32 33 34 21 22 23 24 11 12 13 14 31 32 21 22 11 12 num[0][0] num[1][0] num[2][0] num[0][1] num[1][1] num[2][1] 34 24 14 num[0][3] num[1][3] num[2][3] 33 23 13 num[0][2] num[1][2] num[2][2]
35
Declaration & Assignment Examples (cont.)
float matrix[2][4] = { 0.19, -0.01, -0.23, 4.44, -4.44, 0.26, -0.09, }; float matrix[2][4] = { 0.19, -0.01, -0.23, 4.44, -4.44, 0.26, -0.09, }; matrix[0][0] matrix[0][1] matrix[0][2] matrix[0][3] 0.19 -0.01 -0.23 4.44 matrix[1][0] matrix[1][1] matrix[1][2] matrix[1][3] -4.44 0.26 -0.09 -0.22
36
Declaration & Assignment Examples (cont.)
char letter[2][4] = { 'G', 'o', 'o', 'D', 'T', 'i', 'm', 'E'}; char letter[2][4] = {'G', 'o', 'o', 'D', 'T', 'i', 'm', 'E'}; letter[0][0] letter[0][1] letter[0][2] letter[0][3] G o o D T i m E letter[1][0] letter[1][1] letter[1][2] letter[1][3]
37
Declaration & Assignment Examples (cont.)
char str[2][10] = {"Computer", "Engineer" }; char str[2][10] = {"Computer", "Engineer" }; [0][8] C o m p u t e r \0 str[0] E n g i n e e r \0 str[1] [1][8]
38
Multi-dimensional Example
#include <stdio.h> #define WIDTH 5 #define HEIGHT 3 int square [HEIGHT][WIDTH]; int n,m; int main () { for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) square[n][m]=(n+1)*(m+1); printf("square [%d][%d] = %d\n", n, m,square[n][m] ); } return 0;
39
Example #4 Example 4 : จงเขียนผังงานและโปรแกรม เพื่อรับข้อความเข้ามาแล้วตรวจสอบว่ามีทั้งหมดกี่ประโยค วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด
40
message[c]==POINT || message[c]==QU
START count count=0, c=0, message[100] message END message[c]!=\0 False True message[c]==POINT || message[c]==QU True count++ False c++
41
Example #5 Example 5 : จงเขียนโปรแกรมเพื่อรับจำนวน 10 จำนวน เพื่อหาค่ามากที่สุดในจำนวนที่รับ โดยการย้ายค่ามากที่สุดไปไว้ Array ที่ตำแหน่งสุดท้าย วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด
42
19 1 23 99 15 10 -26 -9 num[10] num[0] num[1] num[2] num[3] num[4] num[5] num[6] num[7] num[8] num[9] 19 1 23 99 15 10 -26 -9 num[10] temp = num[1]; num[1]=num[2]; num[2] = temp; 1 19 23 99 15 10 -26 -9 num[10] temp = num[4]; num[4]=num[5]; num[5] = temp; 1 19 23 15 99 10 -26 -9 num[10] 1 19 23 15 10 -26 -9 99 num[10]
43
#include<stdio.h>
#include<conio.h> #define SIZE 10 int main() { int num[SIZE],temp,n; for (n=0; n<SIZE; n++) printf ("Enter num[%d] : ",n+1); scanf ("%d",&num[n]); } for (n=0; n<SIZE-1; n++) if (num[n]>num[n+1]) temp = num[n+1]; num[n+1] = num[n]; num[n] = temp; printf ("The maximum number = %d",num[SIZE-1]); return 0;
44
Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments
45
เมื่อมีการประกาศตัวแปรใดๆ เช่น int number;
Variable Declaration เมื่อมีการประกาศตัวแปรใดๆ เช่น int number; char letter; คอมไพเลอร์จะทำการจองพื้นที่ในหน่วยความจำสำหรับเก็บค่าตัวแปร number และค่าตัวแปร letter สมมุติว่าเป็นตำแหน่งหน่วยความจำที่ และ เมื่อมีการกำหนดจะทำการจองหน่วยความจำดังนี้ number = 5; letter = ‘A’; ที่อยู่ ข้อมูล 10000 10001 10002 10003 10004 10005 10006 10007 5 ‘A’ number letter
46
Variable Declaration (cont.)
ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 0000 15 int count 2 bytes 0001 0002 3.1415 0003 float pi 4 bytes 0004 0005 0006 'A' char ch 1 bytes … … XXXX … …
47
Size of Variable ชนิดของตัวแปร ขนาด ค่าต่ำสุด ค่าสูงสุด unsigned char
8 bit 255 char -128 127 unsigned int 16 bit 32 bit 65,535 4,294,967,295 short int -32,768 32,767 int -2,147,483,648 2,147,483,647 unsigned long long float 3.410-38 3.4 1038 double 64 bit 1.7 1.710308 long double 80 bit 3.4 3.4104932
48
Size of Variable (cont.)
10 80 long double 8 64 double 4 32 float 1 unsigned char char unsigned long long 2 16 unsigned int int Bytes Bits Type
49
Basic Knowledge of Pointer
พอยน์เตอร์ หมายถึง ตัวแปรใดๆ ที่ใช้เก็บค่าของตำแหน่งที่อยู่ (Address) ของตัวแปรหรือข้อมูล เมื่อเข้าถึงที่อยู่โดยพอยน์เตอร์ได้ก็จะสามารถกระทำกับข้อมูลได้ไม่ว่าจะเป็นการนำออกมาแสดงผลหรือกระทำกับตัวแปรอื่นๆ ตัวแปรชนิดพอยน์เตอร์มีความเร็วในการทำงานสูง ตัวแปรชนิดพอยน์เตอร์จะเก็บค่าที่อยู่ของหน่วยความจำหลัก ซึ่งต่างกับตัวแปรปกติที่เก็บค่าที่แท้จริงของข้อมูล นั่นคือการใช้ตัวแปรชนิดพอยน์เตอร์จะเป็นการเข้าถึงข้อมูลหรือเป็นการอ้างถึงตำแหน่งที่เก็บข้อมูล
50
* คือ เครื่องหมายแสดงว่าเป็นตัวแปรประเภทตัวชี้
Pointer Declaration type *pointer_name type คือ ชนิดของตัวแปรประเภทตัวชี้ (pointer) * คือ เครื่องหมายแสดงว่าเป็นตัวแปรประเภทตัวชี้ pointer_name คือ ชื่อของตัวแปรประเภทตัวชี้ ตัวอย่างการใช้ตัวชี้ int * ptr_int; /* pointer to integer */ float * ptr_float;// pointer to float char * ptr_char; /* pointer to char */
51
Pointer Declaration (cont.)
ตัวแปรพอยน์เตอร์ทำหน้าที่เก็บตำแหน่งที่อยู่ของตัวแปรที่ชี้ นั่นคือทำหน้าที่ชี้ไปยังตัวแปรตัวอื่น ดังนั้นการประกาศตัวแปรพอยน์เตอร์ ต้องสอดคล้องกับชนิดของตัวแปรตัวอื่น ที่ต้องการให้ตัวแปรพอยน์เตอร์นั้นจะชี้ไป เช่น char *prt; int *ip , *temp; double *dp; ประกาศตัวแปร prt ให้เป็นตัวแปรพอยน์เตอร์ที่ชี้ไปยัง ตัวแปรชนิด char ประกาศตัวแปร ip และ ตัวแปร temp เป็นตัวแปรพอยน์- เตอร์ที่ชี้ไปยังตัวแปรชนิด int ประกาศตัวแปร dp เป็นตัวแปรพอยน์เตอร์ที่ชี้ไป ยังตัวแปรชนิด double
52
Referencing Operator “&”
ตัวดำเนินการ & ส่งกลับเลขที่อยู่ (Address) ของวัตถุ XXXX int count; 15 int *ptr; XXXX ptr = &count; /* ptr มีค่าเป็น XXXX */
53
How the pointer work? ตัวดำเนินการอ้างถึงที่อยู่ (Reference/Address operator) จะใช้เครื่องหมาย & นำหน้าตัวแปร ซึ่งหมายถึงตำแหน่งที่อยู่ของตัวแปรนั้นในหน่วยความจำ #include <stdio.h> void main(void){ int z = 10; int *ZPtr; ZPtr = &z;/*ตัวแปรชนิดตัวชี้เก็บเลขที่อยู่ของตัวแปร z*/ }
54
Referencing Operator “&” (cont.)
ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 0000 15 int count 2 bytes 0001 0002 3.1415 0003 float pi 4 bytes 0004 0005 0006 'A' char ch 1 bytes … ptr = &count ตัวชี้ ptr ชี้ไปที่อยู่ของ ตัวแปรชื่อ count XXXX 0000 …
55
Referencing Operator “&” (cont.)
ที่อยู่ของข้อมูล (Address) ข้อมูล ประเภท ชื่อตัวแปร ขนาด 15 int count 2 bytes 0000 3.1415 float pi 4 bytes 0002 'A' 0006 char ch 1 bytes 0006 char *ptr_char = &ch; 0002 float *ptr_float = π 0000 int *ptr_int = &count;
56
Dereference Operator “*”
เป็น ตัวดำเนินการเชิงอ้อม (Indirection) หรือ กลับการอ้างอิง (Dereferencing) ตำแหน่งที่ XXXX 15 int count; XXXX int * ptr; int count = 15, y, z[10]; int *ptr; /* ptr เป็นตัวชี้ int */ ptr = &count; /* ptr ชี้ไปที่ count */ y = *ptr; /* y มีค่า 15 */ *ptr = 0; /* count มีค่า 0 */ ptr = &z[0]; /* ptr ชี้ไปที่ z[0] */
57
Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments
58
Why structure variable is essential?
การเก็บข้อมูลเราอาจจำเป็นต้องใช้ข้อมูลที่หลากหลายรูปแบบแต่เป็นกลุ่มข้อมูลที่มีส่วนร่วมกัน รายละเอียดของนักศึกษาอาจจะมีข้อมูลรหัส ชื่อ สกุล อายุ เกรดเฉลี่ย ของนักศึกษา ซึ่งเราจะต้องสร้างตัวแปรขึ้นมาใช้ในการเก็บข้อมูลของนักศึกษา 5 ตัวแปรด้วยกัน ทั้งที่จริงแล้ว ข้อมูลทั้งหมดมีส่วนเกี่ยวข้อง คือเป็นของนักศึกษาคนเดียวกัน หากมีจำนวนนักศึกษามากๆ การสร้างตัวแปรและใช้งานตัวแปร อาจจะเกิดความสับสนขึ้นได้ ดังนั้นเราจึงควรนำโครงสร้างข้อมูลมาช่วยในการจัดการกับข้อมูลเหล่านี้
59
Structure Variable โครงสร้างข้อมูล (Structure) เป็นการกำหนดชนิดข้อมูลใหม่ขึ้นมาใช้งาน โดยชนิดข้อมูลนี้เกิดจากการรวมกันของชนิดข้อมูลพื้นฐานที่อาจจะเป็นชนิดเดียวกันหรือต่างชนิดกันก็ได้ ตัวอย่าง : โครงสร้างข้อมูลนักศึกษาให้ชื่อว่า “Student” ประกอบด้วย ชื่อเป็นชนิด char นามสกุลเป็นชนิด char อายุเป็นชนิด int เพศเป็น char เกรดเฉลี่ยเป็น float
60
Structure Variable Declaration
struct structure_name { type variable_1; type variable_2; type variable_3; ……… } struct คือ บ่งบอกว่าเป็นตัวแปรชนิดโครงสร้าง(Structure) struct_name คือ ชื่อของตัวแปรชนิดโครงสร้าง type variable_1-n คือ ตัวแปรที่เกี่ยวข้องกับตัวแปรโครงสร้างที่ ต้องการเก็บ
61
Structure VS. Array เก็บข้อมูลจำนวนมากๆ ได้
เข้าถึงข้อมูลแต่ละตัวได้โดยง่าย ข้อจำกัด : ข้อมูลเหล่านั้นต้องเป็นชนิดเดียวกันเท่านั้น โครงสร้างข้อมูล (Structure) ข้อมูลแต่ละตัวในกลุ่มสามารถมีชนิดต่างกันก็ได้ เช่น ข้อมูลผลการเรียนของนักศึกษาแต่ละคน เทียบเท่ากับ Record ในภาษาอื่น int point[5] struct student { char stdName[20]; char stdLastName[20]; int age; float grade; }
62
Example of Information
student นายวีกิจ นางสาวนิน วีกิจ มุนินทร์ char name[20]; รักเป็นไทย จงสวัสดิ์ char surname[30]; 16 17 int age; ชาย หญิง char sex[7]; 2.95 3.25 float grade;
63
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]; };
64
สมาชิกข้อมูลภายในมี 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)
65
Memory Usage struct book { char code[6]; float price; int year; } code
7 bytes 4 bytes 2 bytes
66
structure_name.member;
Member Declaration การอ้างถึงสมาชิกในตัวแปรชนิดโครงสร้าง ทำได้โดยบอกชื่อตัวแปรโครงสร้างตามด้วยจุด และต่อด้วยชื่อสมาชิกของโครงสร้างนั้นๆ มีรูปแบบดังนี้ structure_name.member; student1.name อ้างถึงข้อมูลชื่อของตัวแปร student1 student1.surname อ้างถึงข้อมูลสกุลของตัวแปร student1 birthday.day อ้างถึงข้อมูลวันของตัวแปร birthday birthday.month อ้างถึงข้อมูลเดือนของตัวแปร birthday
67
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; }
68
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
69
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
70
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;
71
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”);
72
Array of Structure ปกติเราจะใช้ข้อมูลชนิดโครงสร้างมากกว่าหนึ่งข้อมูล เช่นโครงสร้างนักเรียนประกอบด้วย รหัส, ชื่อ, เพศ, และอายุ โดยส่วนมากเราจะมีข้อมูลของนักเรียนหลายคน ดังนั้นเราสามารถสร้างตัวแปรของนักเรียนให้เป็นอาเรย์ของตัวแปรโครงสร้าง เพื่อทำการเก็บข้อมูลแบบโครงสร้างไว้เป็นกลุ่มข้อมูลที่เกี่ยวข้องกัน เช่น โครงสร้างนักเรียน ซึ่งโรงเรียนหนึ่งจะต้องมีนักเรียนหลายคน จะต้องเก็บข้อมูลของนักเรียนเหล่านี้เพื่อนำมาประมวลผลต่อไป
73
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) ได้
74
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];
75
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]
76
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’} };
77
Outline 1 Objectives 2 p Array 3 Pointer 4 Structure 5 Assignments
78
Assignments # 1 จงเขียนโปรแกรมเก็บข้อมูลนักศึกษาจำนวน 10 คน โดยมีรายละเอียดดังนี้ ข้อมูลประกอบด้วย ชื่อกับ อายุ รับข้อมูลนักศึกษาจากคีย์บอร์ด โปรแกรมจะต้องใช้ตัวชี้ที่ชี้ไปยังข้อมูลประเภทโครงสร้าง เมื่อป้อนข้อมูลเสร็จ โปรแกรมจะค้นหานักเรียนที่อายุมากกว่า 20 ปี แสดงชื่อ ออกจอภาพ
79
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
80
Assignments # 2 จงสร้างอาร์เรย์ A เป็นอาร์เรย์ขนาด 3x3 เก็บข้อมูลตัวเลข 1-9 แล้วแสดงผลลัพธ์ตัวเลขในอาร์เรย์โดยใช้การอ้างอิงค่าตัวเลขโดยใช้ Pointer เท่านั้น กำหนดให้ x และ y เป็นตัวแปรแบบทศนิยม จงเขียนโปรแกรม ทำการสลับค่า x และ y โดยใช้ pointer เท่านั้น
81
Example #4 Example 4 : จงเขียนผังงานและโปรแกรม เพื่อรับข้อความเข้ามาแล้วตรวจสอบว่ามีทั้งหมดกี่ประโยค วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด
82
Example #5 Example 5 : จงเขียนโปรแกรมเพื่อรับจำนวน 10 จำนวน เพื่อหาค่ามากที่สุดในจำนวนที่รับ โดยการย้ายค่ามากที่สุดไปไว้ Array ที่ตำแหน่งสุดท้าย วิเคราะห์โจทย์ เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนแผนภาพการไหลของข้อมูล เขียนโค้ด
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.