Java-Chapter 07 One Dimensional Arrays

Post on 25-May-2015

2.064 views 5 download

description

Chapter 07 One Dimensional Arrays

Transcript of 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

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];

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

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 (วนตาแหนงของอาเรย ไมใชวนลาดบ)

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 };

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

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 คะแนน)

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

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; } } }

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

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

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

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

จา

จา

86

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

Computer Programming using Java 07 - One Dimensional Arrays

รอบท 3

รอบท 4

รอบท 5

รอบท 6

รอบท 7

รอบท 8

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

รอบท 2

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

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 ...

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 ทายแฟมขอมล

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 คะแนน)

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 คะแนน)

92

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

Computer Programming using Java 07 - One Dimensional Arrays

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

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

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