Bài Tập Đặc Tả Hình Thức
Trang 11 Đặc tả tập hợp X gồm các số tự nhiên lẻ trong khoảng từ 100 đến 1000
2 Đặc tả tập hợp X gồm các số tự nhiên chẵn trong khoảng từ 100 đến 1000 (không xét 100
và 1000)
3 Đặc tả tập hợp P các số nguyên tố lớn hơn 100 và nhỏ hơn 65537
P = {x ∈ N | x > 100 ∧ x < 65537 ∧ IsPrime(x)}
4 Đặc tả phát biểu: Với bất kỳ số tự nhiên x, luôn tìm được số nguyên lẻ y không vượt quá x
5 Đặc tả phát biểu: Với bất kỳ số tự nhiên x, luôn tìm được số tự nhiên lẻ y không vượt quá x
6 Đặc tả phát biểu: Với bất kỳ số tự nhiên x, luôn tìm được số nguyên y nhỏ hơn x
7 Đặc tả phát biểu: Tồn tại số tự nhiên x sao cho x > 1000
8 Đặc tả phát biểu: Tồn tại số tự nhiên x sao cho x là số chẵn và x là số nguyên tố
9 Đặc tả phát biểu: Với bất kỳ số tự nhiên x và y, tìm được số tự nhiên z sao cho x + y < z
10 Đặc tả phát biểu: Với bất kỳ số tự nhiên x và y, luôn tìm được số tự nhiên z < x + y
∀ x ∈ N • ∀ y ∈ N • ∃ z ∈ N • z < x + y
Ghi chú: đối với các bài tập từ 4 đến 10, chỉ yêu cầu đặc tả đúng theo phát biểu, không xét
đến tính hợp lý của nội dung phát biểu
Trang 2BÀI TẬP ĐẶC TẢ HÌNH THỨC #2
11 Đặc tả hàm kiểm tra số thực a lớn hơn hay bằng số thực b hay không
12 Đặc tả hàm trả về giá trị lớn nhất trong 3 số thực a, b, c
13 Đặc tả hàm trả về số nguyên tố lớn nhất không vượt quá số tự nhiên n cho trước hoặc trả
về -1 nếu không tìm được giá trị cần thiết
14 Đặc tả hàm kiểm tra năm n > 0 là năm nhuận hay không
15 Đặc tả hàm trả về số ngày tối đa của một tháng trong 1 năm nhuận
16 Đặc tả hàm trả về số ngày tối đa của tháng t trong 1 năm n > 0
17 Đặc tả hàm trả về số ngày chênh lệch từ ngày n1/t1 đến n2/t2 trong cùng năm (ví dụ: từ ngày 1/1 đến ngày 2/1 chênh lệch nhau 1 ngày)
18 Đặc tả hàm chuyển đổi từ milimetre sang metre
19 Đặc tả hàm trả về số dư khi thực hiện phép chia a/b (xét trên số tự nhiên)
20 Đặc tả hàm tính căn bậc 2 không âm của số thực x
Trang 321 Đặc tả hàm kiểm tra trong mảng a các số nguyên có tồn tại số không âm hay không
22 Đặc tả hàm tính tổng giá trị của 1 mảng a các số thực
23 Đặc tả hàm tính tổng các phần tử dương trong 1 mảng a các số thực
24 Đặc tả hàm tính tổng các số nguyên tố có trong mảng a các số tự nhiên
25 Đặc tả hàm kiểm tra 1 số tự nhiên x có xuất hiện trong mảng a các số tự nhiên hay không
26 Đặc tả hàm trả về chỉ số đầu tiên (nếu có) của giá trị x trong mảng a các số thực, hoặc trả
về giá trị 0 nếu không tồn tại giá trị x trong mảng a
27 Đặc tả hàm tính tổng các phần tử ở vị trí chẵn của mảng a các số thực
28 Đặc tả hàm trả về giá trị lớn nhất trong mảng a gồm các số thực
29 Đặc tả hàm trả về số chẵn lớn nhất trong mảng các số nguyên hoặc -1 nếu không có số chẵn
30 Đặc tả hàm kiểm tra xem mảng a có phần tử trùng nhau hay không
Trang 4BÀI TẬP ĐẶC TẢ HÌNH THỨC #4
31 Giả sử không dùng hàm elems Hãy đặc tả hàm trả về tập hợp các giá trị có xuất hiện
trong mảng a
32 Đặc tả hàm trả về chỉ số của phần tử lớn nhất không dương trong mảng a hoặc trả về giá
trị 1 nếu mọi phần tử đều là số dương
33 Đặc tả hàm trả về chỉ số của phần tử nhỏ nhất không âm trong mảng a hoặc trả về giá trị
-1 nếu mọi phần tử đều là số âm
34 Đặc tả hàm trả về số chính phương lớn nhất không vượt quá số nguyên dương x cho trước
35 Đặc tả hàm trả về số nguyên tố nhỏ nhất lớn hơn hay bằng số tự nhiên n cho trước
36 Đặc tả hàm đếm số lượng năm nhuận từ năm a đến năm b (kể cả năm a và năm b) Chỉ xét
0 < a≤ b
37 Đặc tả hàm đếm số lượng số nguyên tố từ số tự nhiên a đến số tự nhiên b (tính luôn a và b với a ≤ b)
38 Đặc tả hàm tìm USCLN của các phần tử trong mảng a các số nguyên dương
39.Đặc tả hàm tìm BSCNN của các phần tử trong mảng a các số nguyên dương
40.Đặc tả hàm sắp xếp tăng dần mảng a các số thực.
Trang 541 Hãy đặc tả hàm trả sắp xếp mảng số thực A theo thứ tự giảm dần
42 Hãy đặc tả hàm sắp xếp mảng số thực A theo thứ tự giá trị tuyệt đối tăng dần
43 Hãy đặc tả hàm sắp xếp mảng số thực A theo quy luật sau:
- các số dương (nếu có) ở đầu mảng và có thứ tự giảm dần,
- các số âm (nếu có) ở cuối mảng và có thứ tự tăng dần
44 Hãy đặc tả hàm sắp xếp mảng số nguyên A theo quy luật:
- các số chẵn (nếu có) ở đầu mảng và có thứ tự tăng dần,
- các số lẻ (nếu có) ở cuối mảng và có thứ tự giảm dần
45 Hãy đặc tả hàm sắp xếp mảng số nguyên A theo quy luật:
- các số chẵn (nếu có) có thứ tự tăng dần,
- các số lẻ (nếu có) có thứ tự giảm dần
- tính chất chẵn/lẻ tại mỗi vị trí trong mảng A không thay đổi sau khi sắp xếp (tức là trước khi sắp xếp, tại vị trí i của mảng A là số chẵn/lẻ thì tại vị trí i của
mảng sau khi sắp xếp cũng là số chẵn/lẻ)
!Ví dụ: A = (1, 1, 2, 3, 4, 5, 6, 7)
Kết quả kq = (1, 1, 6, 3, 4, 5, 2, 7)
46 Hãy đặc tả hàm kiểm tra một chuỗi s có phải là chuỗi con của chuỗi t hay
không?
47 Hãy đặc tả hàm tạo ra chuỗi ký tự đảo ngược của chuỗi ký tự s
! Ví dụ: s = “123”, kết quả là kq = “321”
48 Một tiếng (word) là một chuỗi ký tự không có ký tự khoảng trắng Đặc tả hàm
chuẩn hóa một chuỗi ký tự s: xóa bỏ các ký tự khoảng trắng ở đầu và cuối chuỗi,
giữa các tiếng (word) có duy nhất một ký tự khoảng trắng
! Ví dụ: chuỗi s = “ Hello World” Kết quả kq = “Hello World”
49 Hãy đặc tả hàm đếm số tiếng (word) của một chuỗi ký tự s đã chuẩn hóa (chuỗi s không có ký tự khoảng trắng ở đầu và cuối chuỗi, giữa các tiếng (word)
chỉ có duy nhất một ký tự khoảng trắng)
! Ví dụ: s = “Hello World” gồm 2 tiếng
50 Hãy đặc tả hàm đếm số tiếng (word) của một chuỗi ký tự s chưa chuẩn hóa
Ghi chú: đặc tả theo 2 cách: sử dụng hàm phụ (ở câu 48) và không sử dụng hàm phụ (ở câu 48)
! Ví dụ: s = “University of Natural Sciences ” gồm 4 tiếng (word)
Trang 6BÀI TẬP ĐẶC TẢ HÌNH THỨC #6
51 Đặc tả lại bài 48 với phương án sử dụng biến tạm để xóa ký tự khoảng trắng đầu chuỗi nếu có
52 Đặc tả yêu cầu bài 48 bằng phương pháp không tường minh mô tả tính chất của chuỗi kết quả
53 Đặc tả hàm trả về tiếng có độ dài lớn nhất (đầu tiên) trong một chuỗi ký tự s Nếu trong chuỗi s không có tiếng nào thì trả về chuỗi rỗng
54 Đặc tả hàm kiểm tra mảng số thực B là mảng con (gồm các phần tử liên tiếp nhau) của mảng số thực A
! Ví dụ: mảng B = [1, 2, 3] là mảng con của mảng A = [4, 5, 1, 2, 3, 7, 8]
mảng B = [1, 2, 3] không phải là mảng con của mảng A = [1, 4, 2, 5, 3, 8]
55 Đặc tả hàm trả về mảng con (gồm các phần tử liên tiếp nhau) tăng dần dài nhất trong
mảng số thực A
56a Đặc tả kiểu dữ liệu PHÂN-SỐ và hàm inv-PHÂN-SỐ kiểm tra tính hợp lệ của phân số
b Đặc tả hàm tính tổng (và rút gọn kết quả) của một mảng gồm các phân số
58a Đặc tả kiểu dữ liệu ĐIỂM và ĐƯỜNG-THẲNG trong không gian 2 chiều
b Đặc tả hàm kiểm tra một điểm có thuộc về một đường thẳng hay không (sử dụng kiểu dữ liệu đã định nghĩa)
59a Đặc tả kiểu dữ liệu ĐIỂM và TAM-GIÁC trong không gian 2 chiều
b Đặc tả hàm kiểm tra điều kiện tạo thành của một tam giác (3 đỉnh không thẳng hàng)
60a Đặc tả kiểu STACK chứa các số tự nhiên
b Đặc tả các thao tác sau:
POP: lấy phần tử ở đỉnh stack ra khỏi stack, trả về -1 nếu stack rỗng
PUSH: thêm 1 phần tử vào đỉnh stack, trả về TRUE nếu thành công và FALSE nếu
ngược lại
TOP: trả về giá trị của phần tử ở đỉnh stack (không xóa phần tử này ra khỏi stack), hoặc
trả về -1 nếu stack rỗng
ISEMPTY: kiểm tra stack rỗng hay không
ISFULL: kiểm tra stack đầy hay không
EMPTY: khởi tạo stack về trạng thái rỗng
Trang 761 Cho các kiểu dữ liệu sau:
Sinh-Viên ::
mã-SV: Mã-SV
họ-tênSV: Họ-Tên
Môn ::
mã-Môn: Mã-Môn tên-Môn: Tên-Môn hệ-số: ℕ
Học::
mã-SV: Mã-SV mã-Môn: Mã-Môn học-kỳ: {1, 2, 3, 4} năm-học: ℕ1
điểm: ℝ
Hãy đặc tả hàm trả về danh sách các mã môn học mà sinh viên có mã sinh viên là mã-SV đã
học
DanhSáchMãHọcPhần (mã-SV: Mã-SV ) kq: Mã-Môn-set
ext rd ds-học: Học*
pre
post kq = XLĐệQuy (mã-SV, ds-học)
XLĐệQuy (mã-SV: Mã-SV , ds-học: Học* ) kq: Mã-Môn-set
pre
post ((len ds-học = 0) ∧ (kq = {}))
∨ ((len ds-học > 0) ∧ (ds-học(1).mã-SV = mã-SV) ∧
(kq = {ds-học(1).mã-Môn} ∪ XLĐệQuy (mã-SV, tl ds-học)))
∨ ((len ds-học > 0) ∧ (ds-học(1).mã-SV ≠ mã-SV) ∧
(kq = XLĐệQuy (mã-SV, tl ds-học)))
62 Cho các kiểu dữ liệu sau:
Sinh-Viên ::
mã-SV: Mã-SV
họ-tênSV: Họ-Tên
Môn ::
mã-Môn: Mã-Môn tên-Môn: Tên-Môn hệ-số: ℕ
KQ-Học ::
mã-Môn: Mã-Môn học-kỳ: {1, 2, 3, 4} năm-học: ℕ1
điểm: ℝ
Cho trước ánh xạ kq-Học: Mã-SV ⎯⎯→m KQ-Học* thể hiện tất cả kết quả học tập của sinh viên (nếu sinh viên đã học một môn nhiều lần thì tất cả kết quả học của sinh viên trong môn học này đều được ghi nhận lại)
Hãy đặc tả hàm trả về danh sách các mã học phần mà sinh viên có mã sinh viên là mã-SV đã
học
DS-Mã-Môn-Đã-Học
(mã-SV: Mã-SV , kq-Học: Mã-SV⎯⎯→m KQ-Học* ) dsMãMôn : Mã-Môn-set
pre
post
dsMãMôn = {mã-Môn | ∃ ct-kq ∈ ( {mã-SV} ⊲ kq-Học ) • ct-kq(mã-SV).mã-Môn = mã-Môn }
Trang 8Câu 63 đến 65 :
Cho các kiểu dữ liệu
Học-Phần ::
mã-Học-Phần: char*
tên-Học-Phần: char*
số-TC :: ℕ1
Tên-Chuyên-Ngành = char*
DSHọcPhần-ChuyênNgành = Tên-Chuyên-Ngành ⎯⎯→m Học-Phần* cho biết danh sách các học phần (bắt buộc và tự chọn) của mỗi chuyên ngành
Cho trước ánh xạ ds-HọcPhần-ChuyênNgành ∈ DSHọcPhần-ChuyênNgành.
63 Hãy đặc tả hàm trả về số lượng học phần của chuyên ngành có tên là X cho trước
SL-Học-phần-của-Chuyên-ngành
(X : Tên-Chuyên-Ngành,
ds-HọcPhần-ChuyênNgành : Tên-Chuyên-Ngành ⎯⎯→m Học-Phần*) sl-Học-Phần : ℕ
64 Hãy đặc tả hàm kiểm tra xem chuyên ngành X và chuyên ngành Y có học phần nào chung
hay không
Kiểm-tra-Có-chung-Học-phần
(X : Tên-Chuyên-Ngành , Y : Tên-Chuyên-Ngành,
ds-HọcPhần-ChuyênNgành : Tên-Chuyên-Ngành ⎯⎯→m Học-Phần*) kq : B
65 Hãy đặc tả hàm trả về tên của chuyên ngành có số lượng học phần nhiều nhất (ghi chú : trong trường hợp có nhiều chuyên ngành có cùng số lượng học phần nhiều nhất, chỉ cần trả tên của một chuyên ngành trong số này)
Chuyên-Ngành-Nhiều-Học-Phần-Nhất
(ds-HọcPhần-ChuyênNgành : Tên-Chuyên-Ngành ⎯⎯→m Học-Phần*) tênHP : char*
Trang 9Cho các kiểu dữ liệu sau :
Sinh-Viên ::
mã-SV: Mã-SV
họ-tênSV: char*
khóa-tuyển: ℕ1
Khoa::
mã-Khoa : Mã-Khoa tên-Khoa: char*
Cho các ánh xạ sau:
ds-Khoa : Mã-Khoa ⎯⎯→m Khoa
ds-SV : Mã-SV ⎯⎯→m Sinh-Viên
ds-SV-Thuộc-Khoa : Mã-Khoa ⎯⎯→m Mã-SV-set cho biết d/sách sinh viên thuộc từng Khoa
Lưu ý: trong các đặc tả dưới đây (từ câu 66 đến 70), có thể sử dụng các ánh xạ trên dưới dạng
các biến toàn cục (nếu cần)
66 Hãy đặc tả hàm trả về tổng số sinh viên thuộc một khóa tuyển cho trước
Tổng-Số-SV-Khoa (khóa-tuyển: ℕ) tổng-số-SV: ℕ
67 Hãy đặc tả hàm trả về số lượng sinh viên của Khoa với mã khoa là mã-Khoa cho trước
SL -SV-Khoa (mã-Khoa: Mã-Khoa) kq: ℕ
68 Hãy đặc tả hàm trả về ánh xạ số-lượng-SV-Khoa: Mã-Khoa ⎯⎯→m ℕ cho biết tổng số sinh viên theo từng Khoa
Tính-SL -SV-Khoa () số-lượng-SV-Khoa: Mã-Khoa ⎯⎯→m ℕ
69 Giả sử các khoa đều có tên phân biệt Hãy đặc tả hàm trả về mã khoa tương ứng với tên khoa cho trước
Tìm-Mã-Khoa-Theo-Tên (tên-Khoa: char* ): mã-Khoa: Mã-Khoa
70 Hãy đặc tả hàm trả về số lượng sinh viên trong khóa tuyển khóa-tuyển thuộc Khoa với tên Khoa là tên-Khoa cho trước Giả sử các khoa đều có tên phân biệt
SL-SV-Khoa-Trong-Khóa-Tuyển (tên-Khoa: char* , khóa-tuyển:ℕ1 ) sốlượngSV: ℕ
Trang 10BÀI TẬP ĐẶC TẢ HÌNH THỨC #8
Bài 71 : Đặc tả kiểu dữ liệu NGAY Đặc tả điều kiện của một ngày hợp lệ
Bài 72: Đặc tả hàm trả về ngày tiếp theo sau 1 ngày cho trước
Bài 73: Đặc tả hàm trả về ngày thứ n (n >= 0) tiếp theo sau ngày cho trước
Bài 74: Đặc tả hàm trả về số ngày chênh lệch giữa 2 ngày cho trước
(ví dụ : ngày 1 : 1/1/2007, ngày 2 : 1/1/2006 " Kết quả : -365)
Bài 75: Cho biết ngày 12/5/2007 là ngày thứ bảy.Hãy đặc tả hàm trả về thứ của 1 ngày cho trước(trả về chuỗi ký tự)
Bài 76: Hãy đặc tả kiểu ĐƠN-THỨC & ĐA-THỨC
Bài 77: Đặc tả hàm tính đạo hàm (cấp 1) của 1 đa thức
Bài 78: Đặc tả hàm tìm tất cả các nghiệm (phân biệt) của 1 đa thức
Tập-Nghiệm ::
sốNghiệm: ℕ
Bài 79: Đặc tả hàm tính giá trị đa thức với giá trị x0 cho trước
Bài 80: Đặc tả hàm tính tích phân xác định của 1 đa thức trên đoạn [x1, x2]
Trang 11Cho trước các đặc tả kiểu dữ liệu sau:
VERTEX = ℕ
GRAPH ::
n: ℕ
A: ℝ**
Giải thích:
n:là số lượng đỉnh trong đồ thị
A là ma trận kề, với quy ước: A(i)(j) = 0 nếu không có cung từ đỉnh i đến đỉnh j
A(i)(j) ≠ 0 là trọng số của cung từ đỉnh i đến đỉnh j
Bài 81: Đặc tả hàm kiểm tra đồ thị G có phải là đồ thị vô hướng hay không
Bài 82: Đặc tả hàm kiểm tra đồ thị G có chứa cạnh có trọng số âm hay không
Bài 83: Đặc tả hàm tính bậc của một đỉnh v trong đồ thị G cho trước
Degree (G: GRAPH, v: VERTEX) deg : ℕ
Bài 84: Tự đặc tả kiểu dữ liệu PATH để lưu trữ được một đường đi trên đồ thị Đặc tả hàm
tính độ dài một đường đi cho trước Lưu ý: đường đi bao gồm các cung liên tiếp nhau (và
phải tôn trọng hướng của cung)
Bài 85: Đặc tả hàm kiểm tra có tồn tại dây chuyền từ đỉnh u đến đỉnh v trong đồ thị G hay không Lưu ý:
- Các cung trên dây chuyền KHÔNG cần tôn trọng hướng
- Đồ thị G có thể vô hướng hoặc có hướng
Bài 86: Đặc tả hàm kiểm tra một đồ thị G có liên thông hay không Gợi ý: Trong đồ thị liên
thông, luôn tồn tại dây chuyền nối liền hai đỉnh phân biệt bất kỳ
Bài 87: Đặc tả hàm kiểm tra một đồ thị G có phải là cây hay không Gợi ý: cây là đồ thị liên
thông có đúng n-1 cạnh (với n là số lượng đỉnh của đồ thị)
Bài 88: Tự đặc tả kiểu dữ liệu SPANNING-TREE để lưu trữ một cây khung của đồ thị Đặc tả điều kiện hợp lệ inv-SPANNING-TREE cho kiểu dữ liệu này
Bài 89: Đặc tả hàm tính trọng số của một cây khung cho trước Đặc tả hàm xác định cây
khung nhỏ nhất (có tổng trọng số nhỏ nhất) của một đồ thị vô hướng G cho trước (không xử
lý khi đồ thị không liên thông)
Bài 90: Đặc tả hàm kiểm tra một đồ thị vô hướng G có tồn tại đường đi Euler hay không? Gợi
ý: đồ thị G có tồn tại đường đi Euler nếu G có 0 hoặc 2 đỉnh bậc lẻ.
Trang 12BÀI TẬP ĐẶC TẢ HÌNH THỨC #10
Sử dụng các kiểu dữ liệu sau cho các câu từ 91 đến 95:
SÂN-VẬN-ĐỘNG ::
tên-Sân: char*
sức-chứa: ℕ1
TỶ-SỐ ::
số-bàn-thắng-đội-nhà : ℕ
số-bàn-thắng-đội-khách : ℕ
ĐỘI-BÓNG ::
tên-Đội: char*
sân-nhà : SÂN-VẬN-ĐỘNG
TRẬN-ĐẤU ::
đội-nhà : ĐỘI-BÓNG
đội-khách : ĐỘI-BÓNG
vòng-thi-đấu: ℕ1
tỷ-số : TỶ-SỐ
Ghi chú: Mỗi đội bóng thi đấu đúng 2 trận với các đội còn lại (một trận lượt đi trên sân khách, một trận lượt về trên sân nhà của
chính mình)
91 Đặc tả hàm tính số trận thắng của một đội bóng trong giải vô địch
92 Đặc tả hàm tính số trận hòa của một đội bong trong giải vô địch
93 Đặc tả hàm tính điểm của một đội bóng với quy định: mỗi trận thắng được 3 điểm, mỗi trận hòa được 1 điểm, mỗi trận thua không có điểm
94 Đặc tả hàm tính hiệu số bàn thắng bại của một đội bong
95 Đặc tả hàm sắp hạng các đội bóng theo điểm giảm dần Nếu nhiều đội cùng điểm thì xét tiếp các tiêu chí sau: hiệu số bàn thắng bại (giảm dần), số bàn thắng (giảm dần), kết quả trận đối kháng trực tiếp
Sử dụng kiểu dữ liệu dưới đây cho câu 96 và 97:
Xét một hệ điều hành đơn giản Cho trước đặc tả các kiểu dữ liệu biểu diễn thông tin của 1 tiến trình và ReadyList như sau:
PROCESS_ID = ℕ
PROCESS_INFO ::
pID : PROCESS_ID
CPUBurstTime: ℝ
READY_LIST = PROCESS_INFO*
Cho trước biến toàn cục ready-List : READY-LIST
96 Hãy đặc tả hàm FIFOScheduler cho phép chọn ra tiến trình theo chiến lược FIFO với
thông tin các tiến trình đang chờ sử dụng CPU trong ready-List