210 likes | 360 Views
ทบทวน อาร์เรย์ (Array). วัตถุประสงค์. สามารถใช้งานตัวแปรประเภทอาร์เรย์ 1 มิติ และ 2 มิติได้ เข้าใจการส่งผ่านอาร์เรย์ไปยังฟังก์ชัน สามารถใช้งานข้อมูลชนิดโครงสร้าง (structure) ได้. Outline. นิยามอาร์เรย์ การประกาศตัวแปรอาร์เรย์ การเข้าถึงตัวแปรอาร์เรย์ การส่งผ่านอาร์เรย์ไปยังฟังก์ชัน
E N D
วัตถุประสงค์ • สามารถใช้งานตัวแปรประเภทอาร์เรย์ 1 มิติ และ 2 มิติได้ • เข้าใจการส่งผ่านอาร์เรย์ไปยังฟังก์ชัน • สามารถใช้งานข้อมูลชนิดโครงสร้าง (structure) ได้
Outline • นิยามอาร์เรย์ • การประกาศตัวแปรอาร์เรย์ • การเข้าถึงตัวแปรอาร์เรย์ • การส่งผ่านอาร์เรย์ไปยังฟังก์ชัน • ข้อมูลชนิดโครงสร้าง
นิยามของอาร์เรย์ • อาร์เรย์ เป็นรูปแบบข้อมูลแบบหนึ่งที่จัดเก็บข้อมูลชนิดเดียวกันอย่างต่อเนื่องกัน โดยจัดอยู่ในบล็อกของหน่วยความจำเดียวกัน และใช้ชื่อตัวแปรร่วมกันในการอ้างถึง v[2] v[3] v[0] v[1] v[4] v[5]
การประกาศตัวแปรแบบอาร์เรย์การประกาศตัวแปรแบบอาร์เรย์ • อาร์เรย์ 1 มิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด n x 1 • การประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [] ล้อมค่าตัวเลขจำนวนเต็ม เพื่อบอกจำนวนสมาชิกที่ต้องการ • รูปแบบการประกาศตัวแปรอาร์เรย์ 1 มิติ: ชนิดของตัวแปร ชื่อตัวแปร[จำนวนสมาชิกที่ต้องการ] • เช่นint v[6] float data[10]
การประกาศตัวแปรแบบอาร์เรย์การประกาศตัวแปรแบบอาร์เรย์ • อาร์เรย์ 2 มิติ มีโครงสร้างคล้ายกับเมตริกซ์สองมิติ มีการอ้างถึงข้อมูลโดยใช้ค่าเลขดัชนี 2 ค่า ซึ่งประกอบค่าดัชนีที่ใช้ในการอ้างอิงในแนวแถว (rows) และค่าดัชนีที่ใช้อ้างอิงในแนวคอลัมน์ (columns) • รูปแบบการประกาศตัวแปรอาร์เรย์ 2 มิติ: ชนิดข้อมูล ชื่อตัวแปร[จำนวนแถว][จำนวนคอลัมน์] • เช่น int val[2][3] float[5][10]
การเข้าถึงตัวแปรอาร์เรย์การเข้าถึงตัวแปรอาร์เรย์ • รูปแบบการเข้าถึงตัวแปรอาร์เรย์ 1 มิติ ชื่อตัวแปร[ตัวชี้] • รูปแบบการเข้าถึงตัวแปรอาร์เรย์ 2 มิติ ชื่อตัวแปร[ตัวชี้แนวแถว][ตัวชี้แนวคอลัมน์] • ตัวชี้อาจป้อนอยู่ในรูปของตัวแปร นิพจน์ หรือฟังก์ชันที่ให้ค่าเป็นค่าจำนวนเต็มได้
ตัวอย่างการเข้าถึงตัวแปรอาร์เรย์ตัวอย่างการเข้าถึงตัวแปรอาร์เรย์ • read mark[0] • write mark[i] • tol tol + v[i] • v[0] 78 • v[i] v[i-1] + 5 • x[i][j] i*j
การใช้คำสั่ง for ในการเข้าถึงอาร์เรย์ 1 มิติ • ตัวอย่าง ถ้าต้องการหาผลรวมของตัวแปร score 5 อิลิเมนต์ ทำได้ดังนี้ sum score[0] + score[1] + score[2] + score[3] + score[4] • เปลี่ยนเป็นใช้ for loop ได้ดังนี้ sum 0 for i0 to 4 sum sum + score[i]
ตัวอย่างการรับค่าและแสดงผลลัพธ์ของอาร์เรย์ตัวอย่างการรับค่าและแสดงผลลัพธ์ของอาร์เรย์ #include<stdio.h> main() { intsal[4] for(i=0;i<4;i++) {printf(“Enter sal[%d]: ”,i); scanf(“%d”, sal[i]); //การรับค่า } for(i=1;i<4;i++) {sal[i] = sal[i]*sal[i-1]; printf(“sal[%d] = %d\n” , i, sal[i]); //การแสดงผลลัพธ์ } } Enter[0]: 1 Enter[1]: 1 Enter[2]: 2 Enter[3]: 5 …………………………………………………………………………… ……………………………………………………………………………. ……………………………………………………………………………..
การใช้คำสั่ง for ในการเข้าถึงอาร์เรย์ 2 มิติ • ใช้ลูป for 2 ชั้น โดยลูปชั้นนอกวนรอบตามจำนวนแถว และลูปชั้นในวนรอบตามจำนวนคอลัมน์ • ตัวอย่างเช่น ตัวการหาผลรวมของคะแนนเก็บ คะแนนสอบกลางภาค คะแนนสอบปลายภาคของนักศึกษาแต่ละคน จำนวน 5 คน 1. for i0 to 4 1.1 stu[i]0 1.2 for j 0 to 2 1.2.1 stu[i] stu[i] + score[i][j]
ตัวอย่างการรับค่าและแสดงผลลัพธ์ของอาร์เรย์ 2 มิติ #include<stdio.h> main() { float score[5][3], stu[5]; for(i=0;i<5;i++) { stu[i]=0; for(j=0;j<3;j++) { scanf(“%f”, &score[i][j]); //การรับค่า stu[i] = stu[i] + score[i][j]; } } for(i=0;i<5;i++) { for(j=0;j<3;j++) printf(“%.2f\t”, score[i][j]); //การแสดงผลลัพธ์ printf(“\t%.2f\n”, stu[i]); } }
การส่งผ่านอาร์เรย์ไปยังฟังก์ชันการส่งผ่านอาร์เรย์ไปยังฟังก์ชัน • ตัวอย่างการส่งค่าแต่ละอิลิเมนต์ในอาร์เรย์ให้กับฟังก์ชัน #include<stdio.h> void chk_v(int num) { if(num%2==0) printf(“%d is an even number\n”, num); else printf(“%d is an odd number\n”,num); } main() { int i; int val[5] = {2,7,4,1,9}; for(i=0;i<5;i++) chk_v(val[i]); //ส่งไปที่ค่า (call by value) } Output???
การส่งผ่านอาร์เรย์ไปยังฟังก์ชันการส่งผ่านอาร์เรย์ไปยังฟังก์ชัน • ตัวอย่างการส่งค่าทุกอิลิเมนต์ในอาร์เรย์ให้กับฟังก์ชัน #include<stdio.h> void chk_v(int num[5]) { int i; for(i=0;i<5;i++) { if(num[i]%2==0) printf(“%d is an even number\n”, num); else printf(“%d is an odd number\n”,num); } } main() { int val[5] = {2,7,4,1,9}; chk_v(val); //ส่งไปทุกค่าในอาร์เรย์ (call by reference) } Output???
แบบฝึกหัด • เขียนขั้นตอนวิธีด้วยรหัสจำลองเพื่อรับ 2 เมตริกซ์ ขนาด 4 x 3 แล้วเรียกใช้ 2 ฟังก์ชัน • ทำการบวกกัน • ทำ transpose
ข้อมูลชนิดโครงสร้าง • การประกาศข้อมูลชนิดโครงสร้าง struct ชื่อแบบข้อมูลชนิดโครงสร้าง { ชนิดข้อมูล ชื่อตัวแปรสมาชิก ; ชนิดข้อมูล ชื่อตัวแปรสมาชิก ; .... }ชื่อตัวแปรโครงสร้าง;
ข้อมูลชนิดโครงสร้าง • ตัวอย่าง การประกาศข้อมูลชนิดโครงสร้าง structstudent_history { charid[10]; char name[30]; int age; char faculty[20]; }student[50];
ข้อมูลชนิดโครงสร้าง • การเรียกใช้ การเข้าถึง และการกำหนดค่า การรับค่า และการกำหนดค่าเริ่มต้น สามารถทำได้เช่นเดียวกับตัวแปรทั่วไป เพียงแต่การอ้างถึงแต่กต่างกันเท่านั้น ซึ่งการอ้างถึงตัวแปรที่เป็นสมาชิกในตัวแปรโครงสร้างนั้น สามารถทำได้โดยการระบุชื่อตัวแปรโครงสร้าง ตามด้วยจุด (.) และตามด้วยชื่อตัวแปรสมาชิกที่ต้องการอ้างถึง • เช่นstudent[0].id student[0].name student[0].age student[0].faculty
#include<stdio.h> void print(struct history); struct history { int id; char name[20]; char faculty[25]; } student; int main () { printf ("Enter id :"); scanf ("%d",&student.id); printf ("Enter name :"); scanf ("%s",student.name); printf ("Enter faculty :"); scanf ("%s",student.faculty); printf ("\nstudent detail"); print(student); return 0; } void print(struct history std) { printf ("\n\t ID :%d \n\t Name : %s \n\t Faculty:%s",std.id,std.name,std.faculty); } การส่งผ่านข้อมูลแบบ struct เป็น argument created by DararatSaeleee , 344-211 Algorithmic Process & Programming Struct1_2.c
typedef struct { int roomno ; char name [15]; int age ; char sex ; } Detail; #define size 4 Detailcustomer [size] ; void range(Detail c[]); void main() { ….. range(customer); …} void range (Detailc[ ]) { int i, minage=999, maxage=0; for(i=0;i<size;i++) { if (c[i].age < minage) minage = c[i].age; if (c[i].age > maxage) maxage = c[i].age; } printf("age range = %d -%d\n",minage,maxage); } การส่งผ่านข้อมูลแบบ struct เป็น argument created by DararatSaeleee , 344-211 Algorithmic Process & Programming Demo struct2_2.c
Class Exercise • เขียนโปรแกรมภาษาซีเพื่อพิมพ์รายงานผลการเรียน ดังนี้ 344-201 C programming 3 B+ 322-212 Basic Math 4 C 890-200 English 1 3 A GPA = 3.05 Status = Pass created by DararatSaeleee , 344-211 Algorithmic Process & Programming