THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 115

Th t không d th y đi m kh i đ u c a quá trình, nh ng m t cách h p lý là tìm ki m nh ng bài toán

ễ ấ

ở ầ ủ

ư

ế

nh kh p v i m t d ng m u mà b n đã bi t tr

c.

ộ ạ

ế

ướ

M c

Ở ụ 8.7 ta đã th y m t vòng l p duy t qua m t chu i r i đ m s l n xu t hi n m t ch cái cho tr c.

ỗ ồ ế

ố ầ

ướ

B n có th coi ch

ng trình này nh m t ví d v m t m u có tên g i “duy t và đ m.” Nh ng y u t t o

ươ

ư ộ

ụ ề ộ

ế

ế ố ạ

nên d ng m u này là:

M t t p h p ho c t p d li u có th duy t đ

c, nh m t m ng ho c chu i.

ộ ậ

ặ ậ

ữ ệ

ệ ượ

ư ộ

M t phép th mà b n có th áp d ng cho t ng ph n t trong t p đó.

ầ ử

M t con tr đ theo dõi xem có bao nhiêu ph n t đ t đ

c phép th này.

ỏ ể

ầ ử ạ ượ

Trong tr

ng h p đang xét, t p h p là m t m ng các s nguyên. Phép th là li u r ng m t đi m s cho

ườ

ệ ằ

tr

c có r i vào m t kho ng giá tr cho tr

c hay không.

ướ

ơ

ướ

Sau đây là m t ph

ng th c có tên

ươ

inRange đ đ m s ph n t trong m ng r i vào m t kho ng cho

ể ế

ầ ử

ơ

tr

c. Các tham s bao g m m ng và hai s nguyên đ quy đ nh gi i h n d

i và trên c a kho ng này.

ướ

ớ ạ

ướ

public static int

inRange(

int

[] a,

int

low,

int

high) {

int

count = 0;

for

(

int

i = 0; i < a.length; i++) {

if

(a[i] >= low && a[i] < high)

count++;

}

return

count;

}

Tôi đã không c th hóa r ng li u vi c giá tr nào đó đúng b ng

ụ ể

ằ low ho c

ặ high thì s đ c coi là r i vào

ẽ ượ

ơ

kho ng hay không, nh ng t mã l nh b n có th th y r ng

ư

ể ấ ằ low đ c coi là r i vào trong còn

ượ

ơ

high thì

không. Đi u này giúp ta tránh đ

c vi c đ m ph n t hai l n.

ượ

ệ ế

ầ ử

Bây gi ta có th đ m s đi m trong nh ng kho ng c n quan tâm:

ể ế

ố ể

int

[] scores = randomArray(30);

int

a = inRange(scores, 90, 100);

int

b = inRange(scores, 80, 90);

int

c = inRange(scores, 70, 80);

int

d = inRange(scores, 60, 70);

int

f = inRange(scores, 0, 60);

12.9 Histogram

Mã l nh này có s l p l i, nh ng cũng ch p nh n đ

c khi có ít kho ng khác nhau. Nh ng th t

ng

ự ặ ạ

ư

ượ

ư

ử ưở

t

ng n u ta mu n theo dõi s l n xu t hi n c a t ng đi m s , nghĩa là 100 giá tr có th . Lúc đó li u

ượ

ế

ố ầ

ệ ủ ừ

b n còn mu n vi t mã l nh n a không?

ế

int

count0 = inRange(scores, 0, 1);

int

count1 = inRange(scores, 1, 2);

int

count2 = inRange(scores, 2, 3);