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

7.10 Bài t p

Bài t p 1

Xét đo n mã l nh sau:

public static void

main(String[] args) {

loop(10);

}

public static void

loop(

int

n) {

int

i = n;

while

(i > 0) {

System.out.println(i);

if

(i%2 == 0) {

i = i/2;

}

else

{

i = i+1;

}

}

}

1.

Hãy k m t b ng đ ch ra giá tr c a các bi n

ẻ ộ ả

ể ỉ

ị ủ

ế i và n trong quá trình th c thi

loop. B ng ch đ

c phép

ỉ ượ

ch a m t c t cho m i bi n và m t hàng cho m i vòng l p.

ộ ộ

ế

2. K t qu c a ch

ng trình này là gì?

ế

ả ủ

ươ

Bài t p 2

Gi s b n có m t s ,

ả ử ạ

ộ ố a, và b n mu n tính căn b c hai c a nó. M t cách làm đi u này là kh i

đ u b ng m t ph ng đoán s l

c v đáp s ,

ơ ượ ề

ố x

0

, và r i c i thi n ph ng đoán này theo công th c sau:

ồ ả

x

1

=(x

0

+ a/x

0

) / 2

Ch ng h n, n u ta mu n tìm căn b c hai c a 9, và b t đ u v i

ế

ắ ầ

ớ x

0

= 6, thì x

1

=(6 + 9/6) /2 = 15/4 = 3.75,

giá tr này đã sát h n. Ta có th l p l i quy trình này, dùng

ơ

ể ặ ạ

x

1

đ tính ra

x

2

, và c nh v y. Trong tr

ng

ư ậ

ườ

h p này,

x

2

= 3.075 và x

3

= 3.00091. Nh v y nó h i t r t nhanh v đáp s đúng (v n b ng 3).

ư ậ

ộ ụ ấ

Hãy vi t m t ph

ng th c có tên

ế

ươ

squareRoot nh n vào tham s là m t

ộ double và tr l i m t giá tr x p

ả ạ

ị ấ

x cho căn b c hai c a tham s đó, theo kĩ thu t tính nêu trên. B n không đ

c phép dùng

ượ

Math.sqrt.

V i giá tr ban đ u, b n nên l y

ấ a/2. Ph ng th c b n vi t c n ph i l p l i đ n khi nó đ t đ c hai giá

ươ

ứ ạ

ế ầ

ả ặ ạ ế

ạ ượ

tr

c tính liên ti p ch sai khác nhau ch a đ n 0.0001; nói cách khác, là đ n khi giá tr tuy t đ i

ị ướ

ế

ư

ế

ế

ệ ố

c a

ủ x

n

− x

n−1

nh h n 0.0001. B n có th dùng

ỏ ơ

Math.abs đ tính giá tr tuy t đ i này.

ệ ố

Bài t p 3

Bài t p

ậ 9 ta đã vi t m t d ng đ quy c a

ế

ộ ạ

ủ power, trong đó nh n m t bi n double có

ế

tên x cùng m t bi n nguyên

ế

n and r i tr l i

ồ ả ạ x

n

. Bây gi hãy vi t m t ph

ng th c l p đ th c hi n tính

ế

ươ

ứ ặ

ể ự

toán nh v y.

ư ậ

Bài t p 4

M c

ụ 6.8 có trình bày m t ph ng th c đ quy đ tính hàm giai th a. Hãy vi t m t d ng

ươ

ứ ệ

ế

ộ ạ

tính l p cho

factorial.

Bài t p 5

M t cách đ tính

e

x

là dùng khai tri n chu i vô h n

e

x

= 1 + x + x

2

/ 2! + x

3

/ 3! + x

4

/ 4! + …

N u bi n vòng l p có tên

ế

ế

i, thì s h ng th i s là

ố ạ

ứ ẽ x

i

/ i!.

1.

Hãy vi t m t ph

ng th c có tên

ế

ươ

myexp đ tính t ng c a

ủ n s h ng đ u tiên trong dãy này. B n có th

ố ạ

dùng ph

ng th c

ươ

ứ factorial M c

ở ụ 6.8 ho c dùng phiên b n tính l p nh bài t p tr c.

ư ở

ướ

2.

B n có th khi n ph

ng th c này hi u qu h n nhi u n u nh n th y r ng m i l n l p, t s c a s

ế

ươ

ả ơ

ế

ấ ằ

ở ỗ ầ ặ

ử ố ủ ố

h ng thì đúng b ng t s c a s h ng li n tr

c đó nhân v i

ử ố ủ ố ạ

ướ

ớ x còn m u s thì đúng b ng m u c a s

ẫ ố

ẫ ủ ố

h ng tr

c đó nhân v i

ướ

ớ i. Hãy t n d ng k t qu c a quan sát này đ tránh dùng

ế

ả ủ

c

ả Math.pow l n

ẫ factorial, r i ki m tra r ng b n v n có th đ t đ c k t qu y h t.

ể ạ ượ ế