• Đếm trong một dãy bấy kỳ có bao nhiêu phần tử là số nguyên (sử dụng phương thức isInteger)
• Đếm trong một chuỗi có bao nhiêu ký tự có mã asci nằm giữa hai số nguyên n,m (n, m là hai số nguyên cho trước, sử dụng phương thức between:and: ) • Tính hiệu giữa tổng ascii các ký tự nguyên âm và các ký tự phụ âm trong một
chuỗi (sử dụng phương thức isVowel).
• Cho a là một dãy số nguyên. Tính tổng các phần tử có giá trị lớn hơn số phần tử của a.
• Mã hóa một chuỗi thành một số nguyên x = a*100 + b*10 + c trong đó a là số ký tự nguyên âm, b là số ký tự phụ âm, c là số ký tự còn lại trong chuỗi (sử dụng phương thức isLetter)
III.2 Sử dụng phương thức select: hoặc reject:
1. Ví dụ:
• Đếm trong một dãy số nguyên xem có bao nhiêu phần tử là số chính phương. Giải
|s|
s := #(2 3 4 5 6 7 8 9).
^(s select: [:i| i sqrt - i sqrt rounded = 0]) size. hoặc
|s|
s := #(2 3 4 5 6 7 8 9).
^(s reject: [:i| i sqrt - i sqrt rounded ~= 0]) size. • Tính dãy ước số chung giữa hai số nguyên m và n
Giải |tmp n m| n:= 25. m := 125. tmp := 1 to: n. “tmp = #(1 2 3 …. 25)” ^ tmp select: [: i| (n \\ i = 0) & (m \\ i = 0)] 2. Bài tập đề nghị
• Đếm xem trong một chuỗi có bao nhiêu ký tự có mã ascii chia hết cho n (với n là một số nguyên nào đó.)
• Đếm trong một dãy a có các phần tử là các dãy số nguyên (dãy con) có bao nhiêu dãy con có tổng lớn hơn n.
• Tạo ra danh sách các bội số của một số nguyên a có giá trị nằm giữa hai số nguyên n và m.
• Tạo ra một dãy gồm n phần tử đầu tiên là số nguyên của một dãy bất kỳ (sử dụng phương thức copyFrom:to:)
• Kiểm tra xem một số n có phải là số nguyên tố hay không.
III.3 Sử dụng phương thức collect:
1. Ví dụ:
• Tạo một dãy n số là m0.. m1... m2… mn với m, n là hai số nguyên Giải:
m := 2.
(1 to: n) collect: [:i| i:= m raisedTo: i].
• Đổi các phần tử là phụ âm của một chuỗi thành chữ thường và các phần tử là nguyên âm của một chuỗi thành chữ hoa
Giải |a|
a:= 'ABCDabcd'.
a:= a collect: [:c| c isVowel ifTrue: [c:= c asLowerCase] ifFalse: [c:= c asUpperCase]
]. ^a