Java-Chapter 07 One Dimensional Arrays

16
77 © สงวนลิขสิทธิพฤศจิกายน 2553 (ปรับปร ุงครั้งที7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์ ) Computer Programming using Java One Dimensional Arrays - 07 CHAPTER 07 <ประเภทข้อมูล> <ชื่ออาเรย>[] = { สมาชิก ,..., สมาชิก }; อาเรย์หนึ่งมิติ (One Dimensional Arrays) 1. ความร้เบื ้องต ้นเกี ่ยวกับอาเรย์ (Introduction to Arrays) 1. นิยามของอาเรย์ 1) อาเรย์ (Arrays) คือ โครงสร้างข้อมูล ประเภทหนึ่งที่ใช้เก็บรายการของข้อมูลประเภทเดียวกัน โดยเก็บ ข้อมูลทั ้งหมดเรียงต่อกันไปในหน่วยความจํา เสมือนนําข้อมูลเก็บไว้ใน "ช่อง" ที่วางเรียงกัน เช่น 2) ตําแหน่งของอาเรย์ อาเรย์แต่ละชุดจะมีชื่อของอาเรย์ และหมายเลขช่องที่ระบุตําแหน่ง (Index) ของข้อ- มูลในอาเรย์แต่ละตัว ซึ่งจะเริ่มต้นที่ตําแหน่งที0 (Zero Index) เสมอ (เหมือนกับสตริง) 3) ขนาดหรือความยาวของอาเรย์ คือ จํานวนสมาชิก หรือจํานวนข้อมูล ที่เก็บอยู ่ในอาเรย์ชุดนั้น 4) มิติของอาเรย์ สามารถมีได้ไม่จํากัด เช่นอาเรย์หนึ่งมิติ สองมิติ สามมิติ หรือ n มิติ แต่โดยทั่วไปแล้วเรา นิยมใช้อาเรย์หนึ่งมิติและอาเรย์สองมิติ ซึ่งในบทนี้จะนําเสนออาเรย์หนึ่งมิติ 2. การประกาศและสร้างอาเรย์หนึ ่งมิติ 1. การประกาศและสร้างอาเรย์หนึ ่งมิติโดยใช้ Initialized List การประกาศและสร้างอาเรย์หนึ่งมิติโดยใช้ Initialized List เป็นการสร้างอาเรย์แบบง่าย ซึ่งจะประกาศใช้ได้ก็ ต่อเมื่อทราบค่าทุกค่าที่จะเก็บลงไปในอาเรย์ แล้ว โดยมีรูปแบบคําสั่งดังนี ้ เช่น int a[] = {34, 56, 52, 12, 90, 0, 75, 23, 45, 8}; ซึ่งจะได้เป็นโครงสร้างดังนี 0 1 2 3 4 5 6 7 8 9 34 56 52 12 90 0 75 23 45 8 6 1 7 9 'C' 'U' ไม่สนใจว่าช่องของอาเรย์ จะวางเรียงกันในแนวตั้ง หรือแนวนอน ซึ่ง จะเรียกว่าอาเรย์ ทั้งหมด โดยแต่ละช่องจะเก็บข้อมูลได้เพียง 1 ค่า 6 1 7 9 0 1 2 3 ตําแหน่ง (Index) เริ่มที0 แต่ลําดับ (Order) เริ่มที1 6 1 7 9 อาเรย์ยาว 4 (มีสมาชิก 4 ตัว) 0 1 2 3 6 1 2 1 7 0 9 4 5 3 หนึ่งมิติ สองมิติ สามมิติ หลังชื่ออาเรย์ ต้องมีสัญลักษณ์ [] สมาชิกแต่ละตัวคั่นด้วย Comma มีสมาชิก 10 ตัว แต่ตําแหน่งสูงสุดคือ 9

description

Chapter 07 One Dimensional Arrays

Transcript of Java-Chapter 07 One Dimensional Arrays

Page 1: Java-Chapter 07 One Dimensional Arrays

77

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

CHAPTER 07

<ประเภทขอมล> <ชออาเรย>[] = { สมาชก ,..., สมาชก };

อาเรยหนงมต

(One Dimensional Arrays)

1. ความรเบองตนเกยวกบอาเรย (Introduction to Arrays)

1. นยามของอาเรย 1) อาเรย (Arrays) คอ โครงสรางขอมลประเภทหนงทใชเกบรายการของขอมลประเภทเดยวกน โดยเกบ

ขอมลทงหมดเรยงตอกนไปในหนวยความจา เสมอนนาขอมลเกบไวใน "ชอง" ทวางเรยงกน เชน

2) ตาแหนงของอาเรย อาเรยแตละชดจะมชอของอาเรยและหมายเลขชองทระบตาแหนง (Index) ของขอ-

มลในอาเรยแตละตว ซงจะเรมตนทตาแหนงท 0 (Zero Index) เสมอ (เหมอนกบสตรง)

3) ขนาดหรอความยาวของอาเรย คอ จานวนสมาชกหรอจานวนขอมลทเกบอยในอาเรยชดนน

4) มตของอาเรย สามารถมไดไมจากด เชนอาเรยหนงมต สองมต สามมต หรอ n มต แตโดยทวไปแลวเรา

นยมใชอาเรยหนงมตและอาเรยสองมต ซงในบทนจะนาเสนออาเรยหนงมต

2. การประกาศและสรางอาเรยหนงมต

1. การประกาศและสรางอาเรยหนงมตโดยใช Initialized List การประกาศและสรางอาเรยหนงมตโดยใช Initialized List เปนการสรางอาเรยแบบงาย ซงจะประกาศใชไดก

ตอเมอทราบคาทกคาทจะเกบลงไปในอาเรยแลว โดยมรปแบบคาสงดงน

เชน int a[] = {34, 56, 52, 12, 90, 0, 75, 23, 45, 8}; ซงจะไดเปนโครงสรางดงน

0 1 2 3 4 5 6 7 8 9

34 56 52 12 90 0 75 23 45 8

6 1 7 9 'C'

'U' ไมสนใจวาชองของอาเรยจะวางเรยงกนในแนวตงหรอแนวนอน ซง

จะเรยกวาอาเรยทงหมด โดยแตละชองจะเกบขอมลไดเพยง 1 คา

6 1 7 9

0 1 2 3 ตาแหนง (Index) เรมท 0 แตลาดบ (Order) เรมท 1

6 1 7 9 อาเรยยาว 4 (มสมาชก 4 ตว) 0 1 2 3

6 1 2 1

7 0 9 4

5 3

หนงมต สองมต

สามมต

หลงชออาเรยตองมสญลกษณ []

สมาชกแตละตวคนดวย Comma

มสมาชก 10 ตว แตตาแหนงสงสดคอ 9

Page 2: Java-Chapter 07 One Dimensional Arrays

78

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

<ชออาเรย> = new <ประเภทขอมล>[<ขนาด>];

<ประเภทขอมล> <ชออาเรย>[] = new <ประเภทขอมล>[<ขนาด>];

<ประเภทขอมล> []<ชออาเรย> = new <ประเภทขอมล>[<ขนาด>];

คาสมาชกแตละตวของอาเรยสามารถอางองหรอเรยกชอไดโดยใชคาสง <ชออาเรย>[<ตาแหนง>] เชน

0 1 2 3 4 5 6 7 8 9

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

โจทยขอท 1 [ระดบงาย] จงหาผลลพธจากสวนของโปรแกรมตอไปน โดยกาหนดใหโปรแกรมสามารถทางานจนจบไดแมม Error พรอมทงแสดงผลลพธสดทายของสมาชกในอาเรยแตละชอง (8 คะแนน)

0 1 2 3 4 5 6 7 8 9

2. การประกาศและสรางอาเรยหนงมตโดยการ new การประกาศและการสรางอาเรยโดยการ new นจะเปนวธแบบทวไปทใชในการเขยนโปรแกรมภาษาจาวา ซงม

ขนตอนดงตอไปน

1) การประกาศตวแปรอาเรยหนงมต

เชน int a[];

2) การสรางอาเรยหนงมต

เชน a = new int[3];

3) อาเรยหนงมตทไดหลงจากการประกาศและการสราง

4) การประกาศและการสรางอาเรยหนงมตโดยรวมขนตอนท 1 และ 2 เขาดวยกน (ม 2 วธใหเลอกใช)

เชน

a[0] a[1] a[2]

a

คาของสมาชกแตละชองคอ

1 2 3 4 5 6 7 8 9 10

int i = 3; int a[] = { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 }; System.out.println(a[0] + a[6]); System.out.println(a[1] * --a[4]); System.out.println(a[9]++); System.out.println(a[10] + a[4]); System.out.println(a[1]++ + a[0]); System.out.println(a[5 + 3]); System.out.println(--a[2*i] + a[1]++); System.out.println(a[1] + a[4] + a[9]);

0 0 0

0 1 2

<ประเภทขอมล> <ชออาเรย>[];

a

ระบขนาดหรอจานวนชองของอาเรย

(ไมใชตาแหนง)

หลงชออาเรยตองมเครองหมาย []

หลงชออาเรยไมตองมเครองหมาย []

เครองหมาย []

จะอยหนาหรอหลง

ชออาเรยกได

มคาเรมตนของทกชองเปน 0 (ประเภท int)

int a[] = new int[3];

Page 3: Java-Chapter 07 One Dimensional Arrays

79

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

<ชออาเรย>.length

5) ขอสงเกตในการประกาศและสรางอาเรยหนงมต

ขนาดของอาเรยถกระบตอนสรางอาเรย ถาตองการใหอาเรยมกชองกใหระบจานวนชองลงไป ซงสวนน

ไมใชตาแหนงของอาเรย (อยาสบสน) ลาดบของอาเรยเรมนบท 1 แตตาแหนงของอาเรยเรมนบท 0

ขนาดของอาเรยเปนคาของนพจนได เชน int data[] = new int[3 * n + 1]; เปนตน

อาเรยทสรางขน ไมสามารถเพมหรอลดขนาดได (สรางแลวตองใชอยางเดมตลอดไป)

ระบบจะตงคาเรมตนของขอมลใหกบอาเรยทกชองโดยอตโนมตเมอเรมสรางอาเรยตามชนดของอาเรย

เชน double a[] = new double[5]; จะไดอาเรย 5 ชองโดยมคาเรมตนของทกชองเปน 0.0

3. การหาขนาดและความยาวของอาเรยหนงมต การหาขนาดของอาเรยจะใชคาสง .length โดยระบเขาไปหลงชออาเรยโดยไมตองใสวงเลบ ดงรปแบบตอไปน

อยาจาสบสนกบเมทอดทใชหาความยาวของสตรงซงใช .length() เชนเดยวกน ดงตวอยาง

โจทยขอท 2 [ระดบงาย] จงเขยนคาสงภาษาจาวาเพอประกาศและสรางอาเรยตอไปน (12 คะแนน)

1) สรางอาเรยชอ num เกบขอมลตวเลขจานวนเตมทยาว 15 หลกขนไป จานวน 200 คา (2 คะแนน)

2) สรางอาเรยชอ dice เกบหมายเลขหนาของลกเตา (2 คะแนน)

3) สรางอาเรยชอ avgGrade เกบผลการเรยนเฉลยของนสตจานวน 451 คน (2 คะแนน)

4) สรางอาเรยชอ grade เกบผลการเรยนรายวชา 2110101 ของนสตจานวน 369 คน (2 คะแนน)

5) สรางอาเรยชอ x เกบคาความจรง ซงมตาแหนงสงสดของชองสมา ชกคอตาแหนงท 10 (2 คะแนน)

6) สรางอาเรยชอ merge เกบขอมลทไดจากการนาอาเรยในขอท 1 มาตอกบอาเรยในขอท 2 (2 คะแนน)

1 2 3 4 5 6

int a[] = new int[5]; System.out.println(a.length); String s = "JAVA!"; System.out.println(s.length()); int b[] = new int[12]; System.out.println(b.length());

หลง length ไมใสวงเลบ

หลง length ใสวงเลบ

Error

Page 4: Java-Chapter 07 One Dimensional Arrays

80

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

<ประเภทขอมล> <ชอตวแปร> = <ชออาเรย>[<ตาแหนง>];

<ชออาเรย>[<ตาแหนง>] = <คาขอมล>;

4. การอางองคา การกาหนดคา และการแสดงผลของอาเรยหนงมต 1) การอางองคาจากอาเรย มรปแบบคาสงดงน

เชน int n = num[0]; (ใหตวแปร n ประเภทจานวนเตม เกบคาจากอาเรย num ตาแหนงท 0)

2) การกาหนดคาลงไปในอาเรย มรปแบบคาสงดงน

เชน num[0] = 13; (ใหอาเรย num ตาแหนงท 0 มคาเทากบ 13)

3) การแสดงผลของอาเรย จะใชคาสง for ในการเขาไปยงสมาชกแตละตวในอาเรยตงแตตวแรก (ตาแหนงท

0) จนถงตวสดทาย (ตาแหนงท length - 1) ดงตวอยางตอไปน

โจทยขอท 3 [ระดบงาย] จงเขยนคาสงภาษาจาวาเพออางองและกาหนดคาจากอาเรยตอไปน โดยสมมตใหอาเรยในทกขอมการประกาศและสรางเรยบรอยแลวพรอมทงมคาขอมลครบทกชอง (12 คะแนน)

1) ประกาศตวแปร x เพอเกบขอมล ประเภทจานวนเตมทไดจากอาเรย num ตวท 50 (2 คะแนน)

2) ประกาศตวแปร y เพอเกบขอมล ประเภทจานวนเตมทไดจากอาเรย num ตาแหนงท 50 (2 คะแนน)

3) ประกาศตวแปร c เพอเกบขอมล ประเภทอกขระทไดจากอาเรย code ตาแหนงสดทาย (2 คะแนน)

4) ใหคาสมาชกตาแหนงท 12 ของอาเรย bank เกบขอมล ประเภทตรรกะจากตวแปร var1 (2 คะแนน) boolean var1 = 5 > 6;

5) ใหคาสมาชกตวท 1 ของอาเรย bank เกบขอมลประเภทจานวนจรงจากตวแปร var2 (2 คะแนน) double var2 = kb.nextDouble();

6) ใหคาสมาชกตวรองสดทายของอาเรย bank เกบขอมล ประเภทอกขระจากตวแปร var3 (2 คะแนน) char var3 = "java".charAt(3);

1 2 3 4

int a[] = new int[5]; for(int i = 0; i < a.length; i++) { a[i] = 100; }

ตองเขยน a.length ไมควรเขยนเปนตว

เลข และตองเปนเครองหมาย < ไมใช <=

i ตองเรมท 0 ไมใช 1 (วนตาแหนงของอาเรย ไมใชวนลาดบ)

Page 5: Java-Chapter 07 One Dimensional Arrays

81

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

โจทยขอท 4 [ระดบงาย–ปานกลาง] จงเขยนสวนของโปรแกรมภาษาจาวาตามคาสงตอไปน (55 คะแนน) 1) สรางอาเรยชอ n แบบ Initialed List เพอเกบเลขคทอยในชวง 1 ถง 20 พรอมทงแสดงคาของตวเลข

ทกตวในอาเรย n ขนบนจอภาพทละบรรทด (5 คะแนน)

2) สรางอาเรยชอ m ขนาด 1000 ชอง พรอมทงกาหนดคาใหกบสมาชกทกตวในอาเรย m ใหมคาเปนตวเลขตงแต 1-1000 เรยงลาดบจากสมาชกตวแรกจนถงสมาชกตวสดทายของอาเรย m (5 คะแนน)

3) สรางอาเรยชอ a เพอเกบตวเลขจานวนจรงใดๆ ทรบมาจากแปนพมพจานวน 100 ตว (5 คะแนน) Scanner kb = new Scanner(System.in);

4) นบจานวนเลขคและคทเกบอยในอาเรย x วามอยางละกจานวนแลวแสดงผลขนบนจอภาพ (10 คะแนน) int x[] = { 7, 9, -1, 4, 12, 9, 3, 2, -7, 2, 1, 9, -15, 24, 11, 13 };

Page 6: Java-Chapter 07 One Dimensional Arrays

82

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

5) รบตวเลขจานวนเตมจากแปนพมพเกบไวในตวแปร x แลวคนหาวา คาสมาชกตาแหนงแรกในอาเรย num ทมคาเทา x คอตาแหนงใด พรอมทงแสดงผลลพธขนบนจอภาพ (10 คะแนน) int num[] = { 3, 2, 1, 10, 2, 8, 3, 2, 1, 1, 8, 5, 10, 11, 7, 6, 10 }; Scanner kb = new Scanner(System.in);

โจทยขอท 5 [ระดบปานกลาง] จงเขยนโปรแกรมภาษาจาวาใหสมบรณ เพอทาการผสาน (Merge) ขอมลในอาเรย a และอาเรย b ซงเปนจานวนเตมเขาเปนอาเรยเดยวกนในอาเรยชอ ab พรอมทงแสดงคาสมาชกของอาเรย ab (10 คะแนน)

import java.util.Scanner; public class MergeArrays { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int b[] = { 1, 4, 6, 8, 10, 12 };

} //End of main } //End of class โจทยขอท 6 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณ เพอรบตวเลขจานวนเตมจากแปนพมพเกบไวในตวแปร x แลวทาการแบง (Split) คาสมาชกในอาเรย num ออกเปนอาเรยใหม โดยถาคาสมาชกมคามากกวาหรอเทากบ x ใหเกบไวในอาเรย upper ไมเชนนนใหเกบไวในอาเรย lower (10 คะแนน)

import java.util.Scanner; public class SplitArray { public static void main(String[] args) {

ถาคนหาไมเจอใหแสดงผลลพธเปนคา -1

Page 7: Java-Chapter 07 One Dimensional Arrays

83

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

int num[] = {95, 1, 6, 34, 5, 9, 123, -2, 57, 82, 12, 79, 45, 34, 1};

} //End of main } //End of class

โจทยขอท 7 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณ เพอทาการกลบคาสมาชกในอาเรย (Reverse Array) ทชอ num จากหลงมาหนา แลวเกบคาไวในอาเรยตวเดม โดยในการเขยนโปรแกรมหามประกาศอาเรยตวใหมเพมโดยเดดขาด (10 คะแนน)

import java.util.Scanner; public class ReverseArray { public static void main(String[] args) { int num[] = {95, 1, 6, 34, 5, 9, 123, -2, 57, 82, 12, 79, 45, 34, 1};

} //End of main } //End of class

โจทยขอท 8 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณ เพอตรวจสอบและแสดงขอความวาอาเรย a และอาเรย b เทากนหรอไม โดยการเทากนของอาเรยคอ ความยาวของอาเรยตองเทากน และสมาชกทกตวตาแหนงตอตาแหนงตองเทากน (10 คะแนน)

Page 8: Java-Chapter 07 One Dimensional Arrays

84

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

import java.util.Scanner; public class EqualityOfArrays { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5, 6, 7 }, b[] = { 1, 2, 3, 5, 5, 7, 7 };

} //End of main } //End of class

โจทยขอท 9 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอทาการรบคาตวเลขจานวนเตมจากแปนพมพเกบไวในตวแปร key เพอคนหาวาคาของตวแปร key ปรากฏเปนลาดบรองสดทายทตาแหนงใดในอาเรย num โดยถาคนเจอใหแสดงตาแหนงนน แตถาไมเจอใหแสดงคา -1 (10 คะแนน)

import java.util.Scanner; public class LastSecondSearch { public static void main(String[] args) { int num[] = { 3, 2, 1, 10, 2, 8, 3, 2, 1, 1, 8, 5, 10, 11, 7, 6, 10 };

} //End of main } //End of class

Page 9: Java-Chapter 07 One Dimensional Arrays

85

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

3. การประยกตใชอาเรย (Applications of Array)

1. การเรยงลาดบแบบเลอก (Selection Sort) (ดการสาธตตวอยางการจดเรยงในโจทยขอท 10)

คาสง for i ชนนอก เปนการกาหนดชองหรอเลอกชองตาแหนงท i ทตองการจะเรยงลาดบ

คาสง for j ชนใน เปนการหาคาสมาชกทสงสดตงแตชองแรกจนถงชองตาแหนงท i ทเลอกไว เพอจะได

สลบคาสงสดไปไวในชองตาแหนงท i นน

2. การเรยงลาดบแบบฟอง (Bubble Sort) (ดการสาธตตวอยางการจดเรยงในโจทยขอท 10)

คาสง for i ชนนอก เปนการกาหนดชองตาแหนงท i ทตองการจะเรยงลาดบ

คาสง for j ชนใน เปนการเปรยบเทยบคาเปนคๆ เรมตงแตชองแรกจนถงชองตาแหนงท i ทกาหนดไว

เพอจะขยบคาหรอดนคาสมาชกทสงสดไปไวในชองตาแหนงท i นน (เหมอนฟองสบทลอยขนไปเรอยๆ)

โจทยขอท 10 [ระดบงาย] จงแสดงรายละเอยดในแตละรอบของการจดเรยงแบบเลอก (Selection Sort) และรายละเอยดของรอบท 1 และรอบท 2 ของการจดเรยงแบบฟอง (Bubble Sort) จากชดขอมลในอา -เรย x ตอนใหถกตอง โดยใหจดเรยงขอมลจาก นอยไปมาก (20 คะแนน)

int x[] = {30, 45, 23, 2, 19, 14, 5, 99, 9};

30 45 23 2 19 14 5 99 9

การจดเรยงแบบเลอก รอบท 1

รอบท 2

1 2 3 4 5 6 7 8

for (int i = data.length - 1; i >= 1; i--) { int maxIndex = 0; for (int j = 0; j <= i; j++) if (data[j] > data[maxIndex]) maxIndex = j; int temp = data[i]; data[i] = data[maxIndex]; data[maxIndex] = temp; }

เลอกคาทสนใจในแตละรอบ ซงอาจจะเปนคามาก

ทสดหรอคานอยทสดในรอบนน เพอจดเรยง

1 2 3 4 5 6 7 8 9

for (int i = data.length - 1; i >= 1; i--) { for (int j = 0; j < i; j++) { if (data[j] > data[j + 1]) { int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } }

จบคและขยบคาทสนใจในแตละรอบ อาจจะเปนคา

มากหรอคานอยของคนน เพอจดเรยง

เรยงจากนอยไปหามาก

เรยงจากนอยไปหามาก

จา

จา

Page 10: Java-Chapter 07 One Dimensional Arrays

86

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

รอบท 3

รอบท 4

รอบท 5

รอบท 6

รอบท 7

รอบท 8

การจดเรยงแบบฟอง รอบท 1

รอบท 2

Page 11: Java-Chapter 07 One Dimensional Arrays

87

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

3. การสบคนแบบทวภาค (Binary Search) เปนการคนขอมลโดยการแบงครงขอมลในอาเรย แลวพจารณาเพอตดขอมลออกไปครงหนง (ครงซายหรอครง

ขวาของอาเรย) โดยขอมลตองจดเรยงกอนเสมอ ซงมอลกอรทมในการสบคนดงน (กาหนดใหอาเรยชอ data)

โจทยขอท 11 [ระดบงาย] จงเขยนลาดบการทางานและนบจานวนรอบจากการสบคนขอมล แบบทวภาคของขอมลทเกบอยในอาเรย x ตอไปน เพอคนหาคาวา 14 อย ณ ตาแหนงใด ในอาเรยชดน และใหเปรยบเทยบคาตอบทไดจากการสบคนน กบการสบคนแบบลาดบ (10 คะแนน)

int x[] = {30, 45, 23, 2, 19, 14, 5, 99, 9};

30 45 23 2 19 14 5 99 9

1 2 3 4 5 6 7 8 9 10 11

int left = 0, right = data.length - 1, mid = 0; while (left <= right) { mid = (left + right) / 2;

if (key == data[mid]) { break;

} else if (key < data[mid]) { right = mid - 1; } else { left = mid + 1; } }

left คอ ตาแหนงทางซายของชดขอมล

right คอ ตาแหนงทางขวาของชดขอมล

mid คอ ตาแหนงตรงกลางของชดขอมล

คาตอบจากการสบคนคอคาของ mid

Page 12: Java-Chapter 07 One Dimensional Arrays

88

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

โจทยขอท 12 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพออาน แฟมขอมลวนเกดท ชอ birthdate.txt ซงเกบขอมล ในรปแบบ dd-mm-yyyy เชน 13-06-1987 เปนตน โดยมขอมลวนเกดของคนทงหมด 200 คน จงทาการจดเรยงเดอนทมคนเกดมากทสดจนถงเดอนทมคนเกดนอยทสด แลวแสดงผลลพธทเปนชอเดอนทง 12 เดอนทถกจดเรยงแลวขนบนจอภาพตามลาดบ (10 คะแนน)

import java.util.Scanner; import java.io.*; public class SortMonthByBirthDate { public static void main(String[] args) throws IOException {

} //End of main } //End of class

birthdate.txt September [25 people] March [22 people] January [21 people] May [19 people] June [19 people] ...

ตวอยางการแสดงผลบนจอภาพ 13-02-2000 01-10-1989 31-01-1999 21-12-1995 17-07-1994 ...

Page 13: Java-Chapter 07 One Dimensional Arrays

89

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

โจทยขอท 13 [ระดบเทพ] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอใชสาหรบประมวลผลคะแนนราย วชา “How To Be Noob” โดยโปรแกรมจะเรมอานเลขประจาตวนสตจากแฟมขอมล student.txt แลวทาการสรางคะแนนของนสตแตละคนขนมาโดยการสม ซงประกอบไปดวย 5 สวนไดแก คะแนนสอบยอย (5%) คะแนนการบาน (10%) คะแนนปฏบตการ (10%) คะแนนสอบกลางภาค (30%) และคะแนนสอบปลายภาค (45%) แลวนากลบไปบนทกไวในแฟมขอมล student.txt อกครง จากนนใหอานคาคะแนนทง 5 สวนของนสตแตละคนจากแฟมขอมลเดม เพอนามาคานวณหาคาคะแนนรวม (100%) พรอมทงตดเกรดรายวชานน แลวนาผลลพธทไดไปบนทกไวในแฟมขอมล totalscore.txt พรอมทงบนทกขอมลสรปตางๆ ไวทายแฟมขอมลนนดวย โดยใหเขยนโปรแกรมตามขนตอนตางๆ ท โจทย กาหนดไวดงรายละเอยดตอไปน (85 คะแนน)

import java.io.*; import java.util.Scanner; public class ScoreCalculator { public static void main(String[] args) throws IOException {

//สรางตวอานชอ in1 เพอเปดอานแฟมขอมล student.txt สาหรบนบจานวนนสตทงหมดทปรากฎในแฟมนน แลวเกบผลลพธไวในตวแปร count (5 คะแนน)

5131000121 5331000221 5231000321 5031000421 4931000521 4931000621 5231000721 ...

student.txt กอนการประมวลผล 5131000121 3 7 3 20 26 5331000221 4 6 9 24 40 5231000321 0 1 8 25 27 5031000421 0 3 10 15 0 4931000521 2 0 7 28 25 4931000621 4 6 7 3 19 5231000721 2 10 3 27 45 ...

student.txt หลงการประมวลผล

5131000121 59 D 5331000221 83 A 5231000321 61 C 5031000421 28 F 4931000521 62 C 4931000621 39 F 5231000721 87 A 5031000821 63 C 5131000921 44 F ...

totalscore.txt หลงการประมวลผล ... Max Score: 87 Max Score Freq: 1 Max Score Year: 2 Min Score: 14 Min Score Freq: 1 Min Score Year: 4 Avg Score: 49.72 Max Freq: 5 List Max Freq Score: 33 60

totalscore.txt ทายแฟมขอมล

Page 14: Java-Chapter 07 One Dimensional Arrays

90

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

//สรางตวอานชอ in2 เพอเปดอานแฟมขอมล student.txt อกครง และสรางอาเรยชอ id แลวทาการอานคาเลขประจาตวนสตแตละคนเกบไวในอาเรย id ทละชอง (5 คะแนน)

//สรางตวเขยนชอ out1 เพอเขยนแฟมขอมล student.txt โดยในแตละบรรทดจะประกอบไปดวยเลขประจาตวนสต ตามดวยขอมลคะแนนทง 5 สวนของของนสตทไดจากการสมตวเลขจา-นวนเตมตามขอบเขตดงตอไปน คะแนนสอบยอย (สมตวเลข 0-5) คะแนนการบาน (สมตวเลข 0-10) คะแนนปฏบตการ (สมตวเลข 0-10) คะแนนสอบกลางภาค (สมตวเลข 0-30) และคะแนนสอบปลายภาค (สมตวเลข 0-45) (10 คะแนน)

//สรางตวอานชอ in3 เพอเปดอานแฟมขอมล student.txt อกครง และสรางอาเรยชอ sc แลวทาการคานวณคะแนนรวมของนสตแตละคนเกบไวในอาเรย sc ทละชอง (10 คะแนน)

Page 15: Java-Chapter 07 One Dimensional Arrays

91

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java One Dimensional Arrays - 07

//สรางตวเขยนชอ out2 เพอเขยนแฟมขอมล totalscore.txt โดยในแตละบรรทดจะประกอบไปดวยเลขประจาตวนสต คะแนนรวม และเกรดของนสตแตละคน โดยเกรดม 5 ระดบไดแก A (ชวงคะแนน 80-100) B (ชวงคะแนน 70-79) C (ชวงคะแนน 60-69) D (ชวงคะแนน 50-59) และ F (ชวงคะแนน 0-49) (10 คะแนน)

//หาคะแนนรวมของนสตทไดคะแนนสงสด (Max Score) และตาสด (Min Score) //หาจานวนนสตทไดคะแนนสงสด (Max Score Freq) และตาสด (Min Score Freq) มอยางละกคน //หาวานสตผทไดคะแนนสงสดและตาสดเปนนสตชนปใด (ถามหลายชนปใหแสดงชนปใดกได) //หาคาเฉลยของคะแนนรวมของนสตทงหมด (Average Score) //หาความถสงสด (Max Freq) ของคะแนน //หาวามคะแนนใดบางทมนสตไดกนมากทสด (List Max Freq Score)

(15 คะแนน)

Page 16: Java-Chapter 07 One Dimensional Arrays

92

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 07 - One Dimensional Arrays

//แสดงผลลพธทไดจากการประมวลผลทงหมดจากขนตอนกอนหนาน ตอทายแฟมขอมล totalscore.txt (10 คะแนน)

//คาสงในการปดแฟมขอมล (5 คะแนน)

} //End of main } //End of class