Bài giảng Đặc tả hình thức - Chương 4: Số và kiểu mảng cung cấp cho người học các kiến thức: Số và mảng là khái niệm quan trọng của Đặc tả hình thức, ngôn ngữ Z mô tả các dạng số - Đặc biệt là số tự nhiên dùng tương ứng với mảng.
Trường Đại học Công Nghệ Thông Tin, ĐHQG-HCM Khoa Công Nghệ Phần Mềm Chương 4: Số Kiểu mảng Giảng viên: PGS.TS Vũ Thanh Nguyên 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội Dung Số mảng khái niệm quan trọng Đặc tả hình thức Ngơn ngữ Z mơ tả dạng số - đặc biệt số tự nhiên dùng tương ứng với mảng 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu Số Tập số nguyên Z = {…, -2,-1,0,1,2,…} Tập số tự nhiên N = {n:Z|n 0} = {0,1,2,…} Tập số nguyên dương N1 = {n:Z|n>0} = {1,2,…} 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu Số Tập số hữu tỉ Q = {x|x=m/n, m Z, n Z\{0}} Tập số vô tỉ I = {x|x m/n, m Z, n Z\{0}} Tập số thực R=Q I 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu Số Các phép toán tập số nguyên 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu Số Các phép toán số 4/5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu Số Ví dụ hàm trả lại giá trị tuyệt đối số nguyên sử dụng miêu tả rỏ ràng sau: abs Z Z n:Z n abs n = -n n abs n = n 4/5/2019 Hàm successor (succ) trả lại giá trị số số tự nhiên Succ = { ↦ 1, ↦ 2, ↦ 3,…} Hàm predecessor (pred) trả lại giá trị số phía trước pred == succ∼ CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Kiểu Số Miền xác định số Miền xác định số a, b: Z xác định sau: a b = {a, a+1, a+2,…, b-2, b-1, b} Hoặc a b = {n:Z| a n b} Nếu a > b a b = ∅ a a = {a} 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Kiểu Số Cardinality Số phần tử tập (số nguyên) Xác định card hay # (ngơn ngữ z) Ví dụ: #∅ (hay #{}) = 0, #{a} = 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Kiểu Số Cardinality Đối với miền xác định a b #a b = 1+b-a a = a > b b #a b = max {0, 1+b-a} Vậy tương ứng … b-a 1+b-a ↧ ↧ ↧ … ↧ ↧ a a+1 a+2 … b-1 b 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 10 Các hàm thao tác mảng/chuỗi 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Các hàm thao tác mảng/chuỗi 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Các hàm thao tác mảng/chuỗi Cập nhật phần tử mảng † 4/5/2019 Ví dụ: [1, 2, 3, 4] (3) †11 = [1, 2, 11, 4] CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Các hàm thao tác mảng/chuỗi Lưu ý (ứng dụng cho tiếp đầu ngữ (prefix) mảng): (s t t s) s = t (r s s t) r t (r t s t) (r s s r) 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 25 Các hàm thao tác mảng/chuỗi Phép tốn phân bố (ngơn ngữ Z) ⃕/[] = [] ⃕/[a,b,…,n] = a⃕b⃕ … ⃕n ⃕/([a]⃕s) = [a]⃕(⃕/s) ⃕/(s⃕[a]) = (⃕/s)⃕[a] 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 26 Các hàm thao tác mảng/chuỗi Hàm Head (hd) Tail (tl) Ví dụ: hd [„p‟, „q‟, „r‟] = „p‟ Hàm head mảng khơng rổng định nghĩa sau: hd (s: X*) r:X pre s [] post r = s(1) 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 27 Các hàm thao tác mảng/chuỗi Hàm tail mảng khơng rổng định nghĩa sau: tl (s: X*) rs:X pre s [] post s = [hd s]⃕rs Ví dụ tl [„p‟, „q‟, „r‟] = [„q‟, „r‟] tl [42] = [] Ví dụ: hd s1 = b hd s2 = a tl s1 = [b,c] tl s2 = [] 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 28 Các hàm thao tác mảng/chuỗi Chèn phần tử vào đầu mảng (cons) Ví dụ: cons (6, [2, 3]) = [6, 2, 3] 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 29 Các hàm thao tác mảng/chuỗi Hàm inds: trả tập số phần tử mảng inds s = {i | i len s} Ví dụ: inds [12, 4, 6, 38, 12] = {1, 2, 3, 4, 5} inds s = {1,…,len s} inds s1 = {1,2,3} inds s2 = {1} inds [] = {} 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt Các hàm thao tác mảng/chuỗi Hàm elems: trả tập hợp giá trị phần tử mảng elems s = {s(i) | i inds s} Ví dụ: elems [12, 4, 6, 12, 4, 6, 38, 12] = {4, 6, 12, 38} elems s2 = {a} elems s1 = {b,c} elems [] = {} 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 31 Các hàm thao tác mảng/chuỗi Hai mảng sa = s b len sa = len sb i inds sa sa (i) = sb (i) Các mảng liên kết hàm concat(sa:X* , sb:X*) rs:X* post len rs = len sa + len sb ( i inds sa rs(i) = sa(i)) ( i inds sb rs(i+len sa) = sb(i)) Hoặc dùng phép nối ⃕ (người ta thường dùng phép nối sa⃕sb hàm concat(sa,sb) 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 32 Các hàm thao tác mảng/chuỗi Các mảng liên kết nhờ phép liên kết phân bố tất mảng mảng hàm đệ quy sau: dconc : (X*)* → X* Dconc(ss) ≜ if ss = [] then [] else (hd ss)⃕dconc(tl ss) Ví dụ: dconc[s1, [],s2,s2] = [b,b,c,a,a] 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 33 Các hàm thao tác mảng/chuỗi Xác định độ dài mảng mảng đả cho có kích thước từ i tới j subseq(s:X*, i:N1, j:N) rs:X* pre i j+1 i len s + j len s post s1,s2 X* len s1 = i-1 len s2 = len s – j s= s1⃕rs⃕s2 Có thể thấy rằng: len rs = len s – (i-1 + (len s -j)) = (j – i) + 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 34 Các hàm thao tác mảng/chuỗi Thường hàm subseq(i,j,q) viết s(i,…,j) Ví dụ: s1(2,…,2)=[b] s1(1,…,3)=[b,b,c] s1(1,…,0)=[] s1(4,…,3)=[] 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 35 Các hàm thao tác mảng/chuỗi Sơ đồ phép toán mảng 4/5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 36 ...Nội Dung Số mảng khái niệm quan trọng Đặc tả hình thức Ngơn ngữ Z mơ tả dạng số - đặc biệt số tự nhiên dùng tương ứng với mảng 4/ 5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com https://fb.com/tailieudientucntt... x2,…,xn] 4/ 5/2019 CuuDuongThanCong.com Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt 12 Kiểu mảng Ví dụ: [4, 2, 7, 1, 5, 6, 3] [7, 2, 1, 4, 3, 6, 5] [„C‟, „O‟, „N‟] [42 .0, 343 .0, 42 .0]... https://fb.com/tailieudientucntt Kiểu Số Tập số nguyên Z = {…, -2 ,-1 ,0,1,2,…} Tập số tự nhiên N = {n:Z|n 0} = {0,1,2,…} Tập số nguyên dương N1 = {n:Z|n>0} = {1,2,…} 4/ 5/2019 Prof.Dr.Vu Thanh Nguyen CuuDuongThanCong.com