226101 Computer Programming การเขียนโปรแกรมคอมพิวเตอร์ สัปดาห์ที่ 9 แถวลำดับ
วัตถุประสงค์ เข้าใจหลักการสร้างแถวลำดับ เข้าใจประโยชน์ของการสร้างแถวลำดับ สามารถนำแถวลำดับไปใช้แก้ปัญหาได้
แถวลำดับ (Array) จงเขียนโปรแกรมรับข้อมูลนักเรียน 10 คน โดยรับค่า คำนำหน้า ชื่อ นามสกุล รหัส เกรดเฉลี่ย แล้วถ้าเปลี่ยนคำสั่งเป็น จงเขียนโปรแกรมรับข้อมูลนักเรียน 1000 คน โดยรับค่าดังโจทย์ข้างต้นจะใช้เวลาเขียนเสร็จนานแค่ไหน
แถวลำดับ (Array) ทำให้เกิดโครงสร้างข้อมูลประเภทแถวลำดับ เพื่อเรียกใช้งานตัวแปร เป็นลักษณะของแถวลำดับ ขึ้นกับพารามิเตอร์หรือตัวแปรที่ใช้เป็นตัวชี้ลำดับ ตัวอย่างการประกาศตัวแปร ประเภทตัวอักษร(character) char name = 't'; char name = 'e'; ตัวอย่างการประกาศตัวแปร ประเภทชุดตัวอักษร(string) char name[10] = "name"; char major[10] = "ELECTRICAL"; char faculty[20] = "Engineering"; หมายเหตุ จะแสดงผลอย่างไรถ้า char major[10] = "Engineering ";
แถวลำดับ (Array) ตัวอย่างการประกาศตัวแปร ประเภทชุดตัวอักษร(string) char t[10] = "Test"; char t[10] char major[10] เลข 0 – 9 เราเรียกว่าตัวชี้ตำแหน่ง อาร์เรย์(index) t[0] t[1] t[2] t[3] t[4] t[5] t[6] t[7] t[8] t[9] T e s t E L E C ICT, University of Phayao
แถวลำดับ (Array) การประกาศตัวแปรและกำหนดค่าให้กับแถวลำดับ 1. ประกาศตัวแปรและกำหนดค่าไปด้วย รูปแบบ {data type} {variable name}[{array size}] = “value ”; กรณีเป็นตัวเลขใช้ รูปแบบ {data type} {variable name}[{array size}] = {1,2,3,…,n}; 2. ประกาศตัวแปรและกำหนดค่าทีหลัง รูปแบบ {data type} {variable name}[{ index of array at i }] ; {variable name} = ‘value at i’; รูปแบบ {data type} {variable name}[{index of array at i }] ; {variable name} = 1,2,3,…,n;
แถวลำดับ (Array) การประกาศตัวแปรและกำหนดค่าให้กับแถวลำดับ 1. ประกาศตัวแปรและกำหนดค่าไปด้วย เช่น char name[10] = "Test"; int digit[10] = {1,2,3,4,5,-1,-5,-3-,2,0}; int i[3] = {-1,0,1}; 2. ประกาศตัวแปรและกำหนดค่าทีหลัง เช่น char name[10] ; int i[3] ; i[0] = 1,i[1] = 1, i[2] = 3; ICT, University of Phayao
แถวลำดับ (Array) 2. ประกาศตัวแปรและกำหนดค่าทีหลัง เช่น char name[10] ; name[0] = 'T', name[1] = 'e', name[2] = 's', name[3] = 't'; int digit[5]; digit[0] = 1, digit[1] = 2, digit[2] = 3, digit[3] = 4, digit[4] = 5; int i[3]; i[2] = 1, i[0] = -1, i[1] = 0; ICT, University of Phayao
แถวลำดับ (Array) ตัวอย่างที่ 1 แสดงผลตัวอักษรในแนวตั้ง char faculty[50] = "School of Information and Communication Technology"; Int j; for (j=0; j<50; j++) { printf(" %c \n ",faculty[j] ); } ICT, University of Phayao
แถวลำดับ (Array) ตัวอย่างที่ 2 int i[5] = { 1,2,3,4,5 }; for (int j=0; j<5; j++) { printf(" i[%d] = %d \n ", j, i[j] ); // %d ตัวแรก คือ j และ %d ตัวที่สองคือแถวลำดับของ i ตัวที่ // นั่นคือ j(i[j]) } ICT, University of Phayao
ตัวอย่างที่ 4 รับค่าทีละค่า และแสดงผล int i[5] ; แถวลำดับ (Array) ตัวอย่างที่ 3 กำหนดค่าทีละค่า และแสดงผล int i[5] ; for ( int j=0; j<5; j++) i[j] = j; for ( j=0; j<5; j++) printf(" i[%d] = %d \n", j, i[j]); ตัวอย่างที่ 4 รับค่าทีละค่า และแสดงผล int i[5] ; for ( int j=0; j<5; j++) scanf(“%d”,&i[j]); for ( j=0; j<5; j++) printf(" i[%d] = %d \n", j, i[j]); ICT, University of Phayao
แถวลำดับ (Array) ตัวอย่างที่ 5 โปรแกรมรับคะแนน แสดงผลทีละค่าและสรุปค่าเฉลี่ย ถ้าเปลี่ยนเป็น sum/5 ? ICT, University of Phayao
ข้อควรระวังเรื่อง data type ไม่สามารถแสดงผลด้วย %f สำหรับ ตัวแปรประเภท int ตัวแปรประเภท int*float จะได้ float เสมอ(รวมไปถึง บวก ลบ หาร ) พึงระวัง ค่าน้อยหรือมากสุดของ data type นั้นๆ พึงระวังการใช้ float และ double (สังเกตค่าต่อไปนี้) interest ให้ผลที่แตกต่างกันอย่างไร ทำไมถึงได้ 79.449996948242188 ทำไมไม่ใช่ 79.450000000000000
แถวลำดับ (Array) การบ้าน ส่งก่อนวันอังคารที่ 28 มกราคม 17.00 น. ICT, University of Phayao
แถวลำดับ (Array) char major[10] = “ELEC"; int score[5] = {1,2,3,4,5}; จาก array ที่ผ่านมา เรียกว่าเป็น array 1 มิติ ซึ่งในการเขียนโปรแกรมจริงนั้น อาจมีการใช้งาน array ที่มากกว่า 1 มิติ เรียกอีกอย่างว่า Multidimensional arrays ICT, University of Phayao
แถวลำดับ (Array) array 2 มิติ การประกาศตัวแปร มี 2 วิธี คือ 1. ประกาศแบบไม่กำหนดค่า int i[5][10] ; 2. ประกาศแบบกำหนดค่า int i[2][2] = { {1,2} , {3,4} }; char data[2][100] = { {"Electricity Engineering"},{"School of Engineering"} }; ICT, University of Phayao
แถวลำดับ (Array) ตัวอย่าง array 2 มิติ
การประยุกต์ใช้แถวลำดับ จงเขียนโปรแกรมโดยมีเงื่อนไขต่อไปนี้ รับค่าตัวเลขทีละค่าแล้วเก็บค่าไว้ ถ้าตัวเลขมากกว่า 100 ให้แจ้งผู้ใช้พิมพ์ค่าใหม่เข้ามา รับค่าตัวเลขไปจนกว่าตัวเลขที่พิมพ์เข้ามาน้อยกว่า 0 หรือจำนวนตัวเลขที่เก็บไว้เกิน 5 ค่า ทำการเปรียบเทียบตัวเลขทั้ง 5 ค่าแล้วแสดงผลค่าน้อยไปมาก
การประยุกต์ใช้แถวลำดับ start i = 0; get number[i] i<5 n y number[i] > 100 n A y i = i+1; enter number 1 - 100 y
การประยุกต์ใช้แถวลำดับ A k = 0; n k < 5 y i = 0,j=0, max[k] = 0; i < 5 n y number[i] > max[k] max[k] = number[i]; j = i; i++; n y k++; display max[k] End