Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
ETE183การเขียนโปรแกรมคอมพิวเตอร์สำหรับ
วิศวกรรมไฟฟ้า
ผศ.ดร.วชิราพรรณ แก้วประพนัธ์
อ.ชนกชนม์ สงัวรโยธิน
บทที่ 8(ส่วนที่ 1)
ลำดับแถว Array
บทที่ 8(ส่วนที่ 1)
1. ความหมายและลักษณะของตัวแปรลำดับแถว Array
2. การประกาศตัวแปร array 1 มิติและกำหนดค่าเริ่มต้น
3. การเก็บค่าลงตัวแปร array 1 มิติ
4. การใช้งานตัวแปร array 1 มิติ
5. การประยุกต์ใช้ตัวแปร array กับ for
การเขียนโปรแกรมสาํหรับบางกรณี เราจําเป็นท่ีจะต้องประกาศตวัแปรทีFเป็นข้อมลูชนิดเดียวกนัหลายๆ ตวัเพืFอใช้ในการเก็บกลุม่ของข้อมลูทีFเหมือนกนั เชน่ การเก็บข้อมลูอาย ุ และข้อมลูความสงูของนกัศกึษา เป็นต้น ซึFงการทีFจะตั QงชืFอให้เป็นตวัแปร 100 ตวั จะเป็นการลาํบาก ดงันั Qนในภาษาซีจงึมีโครงสร้างในลกัษณะทีFเรียกวา่อาร์เรย์ขึ QนเพืFออํานวยความสะดวกในจดุนี Q โดยจดัข้อมลูอยูใ่นบลอ็กของหนว่ยความจําเดียวกนัและมีการจดัเรียงของข้อมลูแตล่ะตวักนัอยา่งตอ่เนืFอง และใช้ชืFอตวัแปรร่วมกนัในการอ้างอิงถงึ
Array
ลกัษณะสาํคญัของอาร์เรย์คือการรวบรวมข้อมลูแบบเดียวกนัไว้ด้วยกนั โดยข้อมลูแตล่ะตวัของอาร์เรย์จะเรียกวา่ อีลเีมนต์ (Element) ข้อมลูแตล่ะอีลเีมนต์จะมีหมายเลขเพืFอใช้ในการอ้างอิงถงึเรียกตวัเลขนี Qวา่ เลขดชันี (Index) ดงันั Qนในการอ้างอิงถงึข้อมลูแบบอาร์เรย์จงึทําได้โดยการระบุชืFอของอาร์เรย์นั Qนๆ ประกอบกบัคา่เลขดชันี เพืFอให้สามารถเข้าถงึอีลเีมนต์ทีFเก็บข้อมลูภายในอาร์เรย์นั Qนๆ ได้
Array
ตวัแปรแบบอาร์เรย์ ทีFใช้ในการเก็บข้อมลูโดยมีการอ้างอิงทีFใช้เลขดชันีเพียงหนึFงคา่จะเรียกวา่ ตวัแปรแบบอาร์เรย์ 1 มิต ิเชน่ การเก็บข้อมลูคะแนน ทีFอ้างอิงด้วยรหสันกัศกึษา
ตวัอยา่ง : int age[10];เป็นการประกาศตวัแปรแบบอาร์เรย์เพืFอเก็บ
ข้อมลูอาย ุเมืFอต้องการเก็บข้อมลูอายขุองนกัศกึษาคนทีF 1 สามารถทําได้ดงันี ้
age[0]=18;
Array1 มิติ
การประกาศตวัแปรแบบอาร์เรย์สามารถทําได้คล้ายกบัการประกาศตวัแปรอืFนๆ ทัFวไป โดยการกําหนดซืFอของตวัแปร ชนิดของข้อมลู และขนาดของข้อมลู
การประกาศArray 1 มิติ
int student1;
int student2;
int student3;
int student4;
int student5;
int student6;
int student7;
int student8;
int student9;
int student10;
int student[10];
0 1 2 3 4 5 6 7 8 9
int student[10];
การประกาศตวัแปร Array
int grades[5]; /*Arrayขนาด 5 ของ int */เป็นการประกาศตวัแปรแบบอาร์เรย์ 1 มิตชืิFอ gradesให้เป็นข้อมลูแบบคา่ตวั
เลขทีFเป็นจํานวนเตม็โดยมีขนาดเทา่กบั 5 อีลเีมนต์ ซึFงการประกาศตวัแปรนี Qจะจองหนว่ยความจําเทา่กบั 2 byte*5=10byte
charcodes[5]; /*Arrayขนาด 5 ของ char*/การประกาศตวัแปร codesเป็นข้อมลูแบบคา่ตวัอกัษรจะใช้หนว่ยความจํา
เทา่กบั 1 byte*5=5bytefloatprices[100]; /*Arrayขนาด 100 ของ float*/
การประกาศตวัแปร priceเป็นข้อมลูเลขทศนิยม จะใช้หนว่ยความจําเทา่กบั 4 byte*100=400byte
การกําหนดคา่เริFมต้นของตวัแปรแบบอาร์เรย์ 1 มิต ิสามารถกําหนดได้สาํหรับทกุชนิดข้อมลู
int grades[5] = {98,87,92,79,85};
char codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};
float temp[4] = {98.6, 97.2, 99.0 , 101.5};
การเรียงข้อมลูคือคา่แรกจะถกูกําหนดให้กบัอีลีเมนต์ดชันีทีF 0 และ คา่ทีFสองจะถกูกําหนดให้อีลเีมนต์ดชันีทีF 1 และ ถดั ๆ ไป
การให้ค่าเริ่มต้น
Array 1 มิติ
ถ้ามีการกำหนดค่าเริ่มต้นให้กับตัวแปรอาร์เรย์ไม่ครบ ก็จะทำการให้ค่าเริ่มต้นเฉพาะค่าที่มีการกำหนดส่วนที่เหลือจะกำหนดให้เป็นศูนย์ เช่น
float length[7] = {7.8, 6.4, 4.9, 11.2};
จะได้ว่าสี่ค่าแรกคือ length[0] ถึง length[3] จะมีค่าเริ่มต้น ส่วน length[4] ถึง length[6] จะถูกกำหนดให้มีค่าเป็นศูนย์
การให้ค่าเริ่มต้น
Array 1 มิติ
ในการประกาศตัวแปรแบบอาร์เรย์พร้อมทั้งกำหนดค่าเริ่มต้น สามารถทำได้โดยไม่จำเป็นต้องกำหนดขนาดของอาร์เรย์ ก็ได้เช่น
char codes[5] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’};
char codes[] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’};
ทั้งสองบรรทัดทำงานเหมือนกัน โดยตัวแปลภาษา จะทราบด้วยตัวเองว่าขนาดของ อาร์เรย์จะมีขนาดเป็น 6
การให้ค่าเริ่มต้น
Array 1 มิติ
char code[] = “sample”;
สายตัวอักษร หรือเรียกว่า สตริง (String) คือลำดับของตัวอักษรที่เรียงต่อกันนั้นเอง แต่ในกรณีที่เป็นการให้ค่าแบบใช้เครื่องหมายคำพูด หรือแบบสายอักษรนี้ จะทำให้ขนาดของอาร์เรย์มีขนาดเพิ่มจากเดิมมาหนึ่งค่า (ดังรูป) เพื่อใช้ในการเก็บ “\0” หรือเรียกว่า “null character” ซึ่งจะถูกเพิ่มเข้าไปโดยอัตโนมัติในส่วนท้ายของสายอักษรซึ่งมีค่าเท่ากับ 0 ทำหน้าที่ในการบอกการสิ้นสุดของสายอักษร
การให้ค่าเริ่มต้น
Array 1 มิติแบบ
เก็บข้อความ(String)
สมมตวิา่ประกาศ int grade[5];
วิธีการกําหนดคา่ จะต้องกําหนดคา่
ตั Qงแตช่อ่งทีF 0 ถงึ ชอ่งทีF 4 รวมทั Qงหมด 5 ชอ่ง
grades[0] = 98;
grades[1] = grades[0] – 11;
grades[2] = 2 * (grades[0] – 6);
grades[3] = 79;
grades[4] = (grades[2] + grades[3] – 3) / 2;
นัFนคือข้อมลูในอาร์เรย์ grades [2] คือ184
การเก็บค่าลงArray 1 มิติ
สมมตวิา่ต้องการหาผลรวม
total = grades[0] + grades[1] + grades[2] + grades[3] + grades[4];
สามารถเปลีFยนเป็น
total = 0;
for ( i = 0; i <= 4, ++i)
{ total += grades[i]; }
จะเหน็วา่จะมีการเก็บคา่ใน grades แตล่ะอีลเีมนต์ตามลาํดบัเชน่กนั และสามารถใช้ i ซึFงใช้เป็นตวันบัของลปู for ในขณะเดียวกนัก็เป็นตวัชี Qให้กบัอาร์เรย์ด้วย จะเหน็วา่จะมีประโยชน์มาก เมืFอมีการกระทําทีFมีจํานวนครั Qงมากกวา่นี ้
การประยุกต์ใช้For - Array
ตวัอย่างการใช้ for กับ array
กรณีทีFต้องการหาคา่มากทีFสดุ (Maximum)ของคา่ในตวัแปรอาร์เรย์จํานวน 100 คา่คือ prices[100]สามารถกระทําได้ด้วยวิธีการดงันี Qคือ ใช้การวนรอบ forและ เงืFอนไข ifเพืFอการตรวจสอบซึFงจะทําให้ได้โปรแกรมดงันี ้
maximum=price[0];for(i =1;i <=999;++i){
if(price[i]>maximum){ maximum=price[i]; }
}
ในการให้คา่แก่ตวัแปรสามารถทําได้ด้วยการกําหนดให้โดยตรงหรือจะให้ผู้ใช้กรอกโดยการรับคา่จากคีย์บอร์ด โดยใช้ร่วมกบัคําสัFง scanf()
การรับค่าของ array
ตวัอย่างการรับค่าจาก array
price[5] = 10.69;
scanf(“%d %lf”, &grades[0], &price[2])
scanf(“%c”, &code[0]);
scanf(“%d %d %d”, &grades[0], &grades[1], &grades[2]);
หรืออาจใช้การวนรอบเพื่อรับค่าจากผู้ใช้ก็เป็นได้ดังตัวอย่าง
for(i = 0; i <=4; ++i)
{ printf(“Enter a grade: “);
scanf(“%d”, &grades[i]); }
จะเป็นการวนรอบรับค่า grades จากผู้ใช้จำนวน 5 ค่า
การแสดงคา่ของอาร์เรย์ในแตล่ะอีลีเมนต์สามารถใช้งานร่วมกบัคําสัFงเชน่ printf()ซึFงทํางานร่วมกบัการวนรอบ forจะทําให้สะดวกมากยิFงขึ Qน
การแสดงค่าของ array
ตวัอย่างการแสดงค่าจาก array
printf(“%f”, price[6]);
แสดงค่าของ price ที่อีลีเมนต์ที่ 6
printf(“The value of element %d is %d”, i, grades[i]);
แสดงค่าของ i และ ค่า grades ที่ i
for( n = 5; n <= 20; ++n)
printf(“%d %lf”, n, price[n]);
แสดงค่าของ price ที่อีลีเมนต์ที่ 5 ถึง 20 โดยการใช้งานการวนรอบ
-
EXAMPLEArray
1.จงเขียนโปรแกรมรับคา่
จํานวนเตม็มาสบิจํานวน
แล้วแสดงผลวา่ทั Qงสบิจํานวนนั Qน
คา่ไหนมีคา่สงูสดุคา่ไหนมีคา่ตํFาสดุ
-
EXAMPLEArray
2. จงเขียนโปรแกรมแคชเชียร์สาํหรับคํานวณราคาสนิค้า 10 ชนิด โดยแต่
จะชนิดจะต้องใสข้่อมลูทั Qง ราคา และ
จํานวนได้ จากนั Qนหาวา่ ราคาสนิค้า
ทกุชิ Qนรวมกนัทั Qงหมด มีราคาเทา่ไร
แล้วแสดงผล
-
EXAMPLEArray
3. จงเขียนโปรแกรมรับคา่จํานวนเตม็ฐานสบิ แล้วนํามาแปลงแล้วแสดงผล
เป็นเลขฐานสอง โดยใช้ for และ
Array ชว่ยในการแปลง
Research
ทบทวนการประยุกต์ใช้ for กับ arrayทั้งการรับค่า การคำนวณและการแสดงผล
ปล.ใช้ตอบคำถามใน Quiz
-
QuizQuiz บทที4 8
ส่วนที4 1 ก่อนเข้าเรียนครั9งต่อไป
-
Homework
ตดิตามได้ใน
FACEBOOKสง่ภายใน
18 กนัยายน 2560เวลา 16.30 น.