710130 13 array

Page 1

อาร์เรย์ (Array) อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (tko@webmail.npru.ac.th)


เนื้อหาที่สนใจ • อาร์เรย์ • การประกาศใช้งานอาร์เรย์ (Declaring Arrays) • อาร์เรย์หลายมิติ (Multi-dimensional arrays) – อาร์เรย์ 2 มิติ (Two-dimensional Arrays)

• การส่งค่าอาร์เรย์ไปยังฟังก์ชัน – การรับค่าพารามิเตอร์ของฟังก์ชันด้วยตัวชี้ – กาหนดขนาดอาร์เรย์ของพารามิเตอร์ในฟังก์ชัน

• การคืนค่าอาร์เรย์จากฟังก์ชัน • การใช้ตัวชี้กับอาร์เรย์ (Pointer to an array) • ตัวอย่างการเขียนโปรแกรมโดยใช้อาร์เรย์

http://1.bp.blogspot.com/-tw1caa8lBus/Vphe8RV3rwI/AAAAAAAAAKM/wAhp-ds7iQM/s1600/8.png


อาร์เรย์ • อาร์เรย์ คือ โครงสร้างที่สามารถจัดเก็บข้อมูลแบบแถวเรียงประกอบด้วย ข้อมูลชนิดเดียวกัน โดยใช้อินเด็กซ์ (Index) สาหรับอ้างถึงข้อมูล

• ใช้ตัวแปรตัวเดียวจัดเก็บชุดข้อมูลในการประมวลผล • สามารถกาหนดขนาดของชุดและชนิดของข้อมูลได้


การประกาศใช้งานอาร์เรย์ (Declaring Arrays) • กาหนดชนิดของตัวแปรเหมือนปกติ • กาหนดขนาดของอาร์เรย์ x[5] • Index เริ่มที่ 0 #include <stdio.h> #include <conio.h> void main(){ int x[5] = {1, 2, 3, 4, 9}; for(int i=0;i<=4;i++){ printf("integer:[%d]\n",x[i]); } getch(); }


อาร์เรย์หลายมิติ (Multi-dimensional arrays) • อาร์เรย์หลายมิติ x[ ] x[ ][ ] x[ ][ ][ ] • เมทริก ขนาด 2x3 = x[2][3] หมายถึง 2 แถว 3 คอลัมน์ #include <stdio.h> #include <conio.h>

void main(){ int x[2][3] = {{1, 2,5},{3,4,9}};//2x3 //ใช้การวนซ้าเข้ามาช่วยในการแสดงผล for(int i=0;i<=1;i++){ printf("integer[%d,0]:[%d]\n",i,x[i][0]);//ทุกแถว คอลัมภ์แรก } //เข้าถึงโดยระบุ index printf("integer[%d,1]:[%d]\n",0,x[0][1]);//แถวแรก คอลัมภ์ที่ 2 printf("integer[%d,1]:[%d]\n",0,x[1][1]);//แถวที่ 2 คอลัมภ์ที่ 2 getch(); }

https://medium.swirrl.com/how-the-olympics-explains-multidimensional-data-8e58b127edb2


อาร์เรย์ 2 มิติ (Two-dimensional Arrays) • การใช้อาร์เรย์ในการจัดเก็บและแสดงผลตัวอักษรขนาด 2x10 • ผ่านตัวแปร name[2][10] - 2 ชื่อๆ ละ 10 ตัวอักษร #include <stdio.h> #include <conio.h> #include <string.h>

void main(){ char name[2][10];//ข้อความ 2 ข้อความ strcpy( name[0],"somkiat"); strcpy(name[1],"supavinee"); for(int i=0;i<=1;i++){ printf("string name[%d]: %s\n",i,name[i]); //แสดงทุกชื่อในอาร์เรย์ } getch(); }


การส่งค่าอาร์เรย์ไปยังฟังก์ชัน #include <stdio.h> #include <conio.h> #include <string.h> void showName(char name[2][10]){ for(int i=0;i<=1;i++){ //แสดงทุกชื่อในอาร์เรย์ printf("string name[%d]: %s\n",i,name[i]); } } void main(){ char name[2][10];//ข้อความ 2 ข้อความ strcpy( name[0],"somkiat"); strcpy(name[1],"supavinee"); showName(name); getch(); } https://en.wikipedia.org/wiki/List_of_Hail_Mary_passes_in_American_football


การรับค่าพารามิเตอร์ของฟังก์ชันด้วยตัวชี้ void showX(int *x){ for(int i=0;i<=1;i++){ printf("integer[%d]: %d\n",i,x[i]); } }

http://www.iconshock.com/icons/select_point-icon.html

#include <stdio.h> #include <conio.h> #include <string.h> void main(){ int x[2]={1,5}; showX(x); getch(); }


กาหนดขนาดอาร์เรย์ของพารามิเตอร์ในฟังก์ชัน void showX(int x[2]){ for(int i=0;i<=1;i++){ //แสดงทุกชื่อในอาร์เรย์ printf("integer[%d]: %d\n",i,x[i]); }

https://packagingblog.org/2011/10/28/box-size-how-to-measure/

#include <stdio.h> #include <conio.h> #include <string.h> void main(){ int x[2]={1,5}; showX(x); getch(); }


อาร์เรย์แบบไม่กาหนดขนาดของพารามิเตอร์ในฟังก์ชัน void showX(int x[]){ for(int i=0;i<=1;i++){ //แสดงทุกชื่อในอาร์เรย์ printf("integer[%d]: %d\n",i,x[i]); }

#include <stdio.h> #include <conio.h> #include <string.h> void main(){ int x[2]={1,5}; showX(x); getch(); }


การคืนค่าอาร์เรย์จากฟังก์ชัน #include <stdio.h> #include <conio.h> int *showX(int x[]){ x[0]=9; x[1]=7; return x; } void main(){ int x[2]={1,5}; int *y; y=showX(x); for(int i=0;i<=1;i++){ printf("integer[%d]: %d\n",i,*(y+i)); } getch(); }


การใช้ตัวชี้กับอาร์เรย์ (Pointer to an array) #include <stdio.h> #include <conio.h> void main () { float no[7] = {1000.0, 2.0, 5.4, 3.4, 15.0, 60.0, 97.5}; float *p; int i; int si=sizeof(no)/sizeof(float); //ขนาด p = no; printf( "Array values using pointer\n"); for ( i = 0; i < si; i++ ) { printf("*(p + %d) : %f\n", i, *(p + i) ); } printf( "Array values using no as address\n"); for ( i = 0; i < si; i++ ) { printf("*(no + %d) : %f\n", i, *(no + i) ); } getch(); }


การจัดเก็บตารางธาตุโดยใช้อาร์เรย์ #include <stdio.h> #include <conio.h> void main(){ char periodic[118][2];// 118x2 ตัวย่อธาตุ printf("periodic table \n"); for(int i=0;i<=118;i++){ printf("periodic table in[%d]name:",i+1); scanf("%s",&periodic[i]); } getch(); } https://th.wikipedia.org/wiki/ตารางธาตุ


การประมวลผลและจัดเก็บผลการเรียนในอาร์เรย์ #include <stdio.h> #include <conio.h> char chkGrade(float score); void main(){ char student[3][20];// นักศึกษา 3 คน float score[3]; char grade[3]; printf("Student Grade\n"); for(int i=0;i<=2;i++){ printf("Student name[%d]:",i+1); scanf("%s",&student[i]); printf("%s Score=",student[i]); scanf("%f",&score[i]); grade[i]=chkGrade(score[i]); printf("%s Grade:%c\n",student[i],grade[i]); } getch(); }

char chkGrade(float score){ char g; if(score>=80) g='A'; else if(score>=70) g='B'; else if(score>=60) g='C'; else if(score>=50) g='D'; else g='E'; return g; }


#include <stdio.h> #include <conio.h> #include <string.h>

การกาหนดค่าอาร์เรย์ 2 มิติของปฏิทิน

void main(){ int day[5][7]; char daySP[5][7][20]; int sd; char week[7][3]={"SUN","MON","TUE","WED","THU","FRI","SAT"}; int startM=2; int row=0,col; int row_in,col_in; for(int i=1;i<=28;i++){ row=i/7; col=(startM+i)%7; day[row][col]=i; if(col<6) printf("\nDay:"); printf("[%d][%d]=%d ",row,col,i); scanf("%d",&sd); else row_in=sd/7; printf("[%d][%d]=%d\n",row,col,i); col_in=(startM+sd)%7; } printf("\n===================================="); strcpy(daySP[1][6],"Makha Bucha Day"); printf("\nDay %s %d is strcpy(daySP[2][2],"Vanlentine Day"); %s",week[col_in],day[row_in][col_in],daySP[row_in][col_in]); printf("\n===================================="); getch(); }


ผังงานการสร้างปฏิทินและการระบุวันสาคัญ


การใช้อาร์เรย์กับโครงสร้างพนักงาน float chkBonus(float s){ float b=0.0f; if(s>=15000) b=s*0.1; else b=s*0.2; return b; }

struct employee { int emp_ID; char emp_name[20]; float salary; float bonus; };

#include <stdio.h> #include <conio.h> #include <string.h> float chkBonus(float s); void main(){ struct employee emp[3]; for(int i=0;i<=2;i++){ printf("\nemployee ID:"); scanf("%d",&emp[i].emp_ID); printf("employee name:"); scanf("%s",&emp[i].emp_name); printf("salary:"); scanf("%f",&emp[i].salary); emp[i].bonus =chkBonus(emp[i].salary); printf("Bonus:%.2f",emp[i].bonus); } getch(); }


สรุป • อาร์เรย์ คือ โครงสร้างที่สามารถจัดเก็บข้อมูลแบบแถวเรียงประกอบด้วย ข้อมูลชนิดเดียวกันใช้อินเด็กซ์ (Index) สาหรับอ้างถึงข้อมูล • สามารถจัดเก็บแบบอาร์เรย์ได้หลายมิติ เช่น 2 มิติประกอบด้วยแถวและ คอลัมน์ - จานวนข้อมูล=(แถวxคอลัมน์) • การใช้อาร์เรย์ในการรับส่งระหว่างฟังก์ชันผ่านตัวชี้ อาร์เรย์ทั้งกาหนด ขนาดหรือไม่กาหนดขนาด • การจัดเก็บและประมวลผลชนิดข้อมูลที่แตกต่างผ่านโครงสร้าง struct และใช้อาร์เรย์เข้าถึงชุดข้อมูล


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.