Bài giảng Đặc tả hình thức: Chương 4 - PGS.TS. Vũ Thanh Nguyên
Số trang: 28
Loại file: pdf
Dung lượng: 382.95 KB
Lượt xem: 21
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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 đọc những kiến thức như: Số và mảng; ngôn ngữ Z mô tả các dạng số; các hàm và thao tác trên mảng/chuỗi. Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Đặc tả hình thức: Chương 4 - PGS.TS. Vũ Thanh Nguyên 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ố và Kiểu mảng Giảng viên: PGS. TS. Vũ Thanh Nguyên 1 Nội Dung 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 2 Kiểu Số Tập số nguyên Z = {…, -2,-1,0,1,2,…} Tập số tự nhiên N = {n:Z|n0} = {0,1,2,…} Các phép toán trên số 3 Kiểu Số Các phép toán trên số 4 Kiểu Số Các phép toán trên số 5 Kiểu Số Ví dụ về hàm trả lại giá trị tuyệt đối của một số nguyên sử dụng sự miêu tả rỏ ràng như sau: abs Z Z n:Z n 0 abs n = -n n 0 abs n = n Hàm successor (succ) trả lại giá trị của số tiếp theo của số tự nhiên Succ = { 0 ↦ 1, 1 ↦ 2, 2 ↦ 3,…} Hàm predecessor (pred) trả lại giá trị của số phía trước pred == succ∼ 6 Kiểu Số Miền xác định của số Miền xác định giữa 2 số a, b: Z được xác định 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 khi đó a..b = ∅ và a..a = {a} 7 Kiểu Số Cardinality Số phần tử của tập (số nguyên) Xác định là card hay # (ngôn ngữ z) Ví dụ: #∅ = 0, #{a} = 1 Đối với miền xác định a..b #a..b = 1+b-a nếu a b = 0 nếu a > b #a..b = max {0, 1+b-a} Vậy nó tương ứng là 1 2 3 … b-a 1+b-a ↧ ↧ ↧ … ↧ ↧ a a+1 a+2 … b-1 b 8 Kiểu mảng Mảng (sequence): Gồm hữu hạn phần tử (0 hay nhiều phần tử) Có thứ tự Một phần tử có thể xuất hiện nhiều lần trong mảng Có cùng kiểu dữ liệu 9 Kiểu mảng Mảng: Mảng chỉ chứa một phần tử s = {1 ↦ x} có #s=1 và được viết là [x] còn gọi là mảng đơn Tổng quát một mảng {1 ↦ x1, 2 ↦ x2, …,n ↦ xn} được viết ngắn gọn [x1, x2,…,xn] 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] [] (không giống tập mảng rổng xác định một kiểu dữ liệu) 10 Mảng Cho trước kiểu T Định nghĩa kiểu mảng mà mỗi phần tử thuộc kiểu T T* Ví dụ: Word = Char* Smallstring = {‘a’, ‘b’, ‘c’}* Smallstring = { [], [‘a’], [‘b’], [‘c’], [‘a’, ‘a’], [‘a’, ‘b’], …, [‘a’,’a’, ‘c’], … } Paragraph = Word* Chapter = Paragraph* 11 Chuỗi Chuỗi có thể xem là 1 mảng các ký tự Ví dụ: [‘D’, ‘i’, ‘s’, ‘k’, ‘ ‘, ‘f’, ‘u’, ‘l’, ‘l’] “Disk full” Lưu ý: ‘a’ Char “hello” Char* “a” Char* 12 Các hàm và thao tác trên mảng/chuỗi Hàm len len [] = 0 len [1, 2, 3, 4, 1] = 5 Tổng quan len s = card dom s Một số ví dụ về mảng [a,b] [b,a] [a,b] [a,b,b] Giả sử s1= [b,b,c] s2= [a] Khi đó len s1= 3, len s2= 1 13 Các hàm và thao tác trên mảng/chuỗi Truy xuất phần tử trong mảng theo chỉ số (tính từ 1) sq = [2, 19, 13, 5, 17] sq(1) = 2 sq(4) = 5 Tổng quát s X* 1 i len s s(i) X s1(1) = s1(2) = b 14 Các hàm và thao tác trên mảng/chuỗi Mảng/chuỗi con [‘a’, ‘a’, ‘d’, ‘c’, ‘a’, ‘b’] (2, …, 4) = [‘a’, ‘d’, ‘c’] “Hello” (2, …, 2) = “e” s(1,…, len s) = s 15 Các hàm và thao tác trên mảng/chuỗi Phép nối ⃕ s ⃕ t Ví dụ: “Hello” ⃕ “ ” ⃕ “World” = “Hello World” Cập nhật phần tử trong mảng † Ví dụ: [1, 2, 3, 4] (3) †11 = [1, 2, 11, 4] Một số quy tắc []⃕s=s⃕[]=s r⃕(s⃕t) = (r⃕s)⃕t (r⃕s = r⃕t) s = t Lưu ý * * Nếu s,tT , st r:T s⃕r = t 16 Các hàm và thao tác trên mảng/chuỗi Lưu ý (ứng dụng cho tiếp đầu ngữ (prefix) của mảng): (st ts) s = t (rs st) rt (rt st) (rs sr) 17 Các hàm và thao tác trên mảng/chuỗi Phép toán phân bố (ngôn ngữ Z) ⃕/[] = [] ⃕/[a,b,…,n] = a⃕b⃕ … ⃕n ⃕/([a]⃕s) = [a]⃕(⃕/s) ⃕/(s⃕[a]) = (⃕/s)⃕[a] 18 Các hàm và thao tác trên mảng/chuỗi Hàm Head (hd) và Tail (tl) Ví dụ: hd [‘p’, ‘q’, ‘r’] = ‘p’ Hàm head của một mảng không rổng có thể định nghĩa như sau: hd (s: X*) r:X pre s[] post r = s(1) 19 Các hàm và thao tác trên mảng/chuỗi Hàm tail của một mảng không rổng có thể định nghĩa như sau: tl (s: X*) rs:X pre s[] post s = [hd s] ...
Nội dung trích xuất từ tài liệu:
Bài giảng Đặc tả hình thức: Chương 4 - PGS.TS. Vũ Thanh Nguyên 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ố và Kiểu mảng Giảng viên: PGS. TS. Vũ Thanh Nguyên 1 Nội Dung 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 2 Kiểu Số Tập số nguyên Z = {…, -2,-1,0,1,2,…} Tập số tự nhiên N = {n:Z|n0} = {0,1,2,…} Các phép toán trên số 3 Kiểu Số Các phép toán trên số 4 Kiểu Số Các phép toán trên số 5 Kiểu Số Ví dụ về hàm trả lại giá trị tuyệt đối của một số nguyên sử dụng sự miêu tả rỏ ràng như sau: abs Z Z n:Z n 0 abs n = -n n 0 abs n = n Hàm successor (succ) trả lại giá trị của số tiếp theo của số tự nhiên Succ = { 0 ↦ 1, 1 ↦ 2, 2 ↦ 3,…} Hàm predecessor (pred) trả lại giá trị của số phía trước pred == succ∼ 6 Kiểu Số Miền xác định của số Miền xác định giữa 2 số a, b: Z được xác định 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 khi đó a..b = ∅ và a..a = {a} 7 Kiểu Số Cardinality Số phần tử của tập (số nguyên) Xác định là card hay # (ngôn ngữ z) Ví dụ: #∅ = 0, #{a} = 1 Đối với miền xác định a..b #a..b = 1+b-a nếu a b = 0 nếu a > b #a..b = max {0, 1+b-a} Vậy nó tương ứng là 1 2 3 … b-a 1+b-a ↧ ↧ ↧ … ↧ ↧ a a+1 a+2 … b-1 b 8 Kiểu mảng Mảng (sequence): Gồm hữu hạn phần tử (0 hay nhiều phần tử) Có thứ tự Một phần tử có thể xuất hiện nhiều lần trong mảng Có cùng kiểu dữ liệu 9 Kiểu mảng Mảng: Mảng chỉ chứa một phần tử s = {1 ↦ x} có #s=1 và được viết là [x] còn gọi là mảng đơn Tổng quát một mảng {1 ↦ x1, 2 ↦ x2, …,n ↦ xn} được viết ngắn gọn [x1, x2,…,xn] 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] [] (không giống tập mảng rổng xác định một kiểu dữ liệu) 10 Mảng Cho trước kiểu T Định nghĩa kiểu mảng mà mỗi phần tử thuộc kiểu T T* Ví dụ: Word = Char* Smallstring = {‘a’, ‘b’, ‘c’}* Smallstring = { [], [‘a’], [‘b’], [‘c’], [‘a’, ‘a’], [‘a’, ‘b’], …, [‘a’,’a’, ‘c’], … } Paragraph = Word* Chapter = Paragraph* 11 Chuỗi Chuỗi có thể xem là 1 mảng các ký tự Ví dụ: [‘D’, ‘i’, ‘s’, ‘k’, ‘ ‘, ‘f’, ‘u’, ‘l’, ‘l’] “Disk full” Lưu ý: ‘a’ Char “hello” Char* “a” Char* 12 Các hàm và thao tác trên mảng/chuỗi Hàm len len [] = 0 len [1, 2, 3, 4, 1] = 5 Tổng quan len s = card dom s Một số ví dụ về mảng [a,b] [b,a] [a,b] [a,b,b] Giả sử s1= [b,b,c] s2= [a] Khi đó len s1= 3, len s2= 1 13 Các hàm và thao tác trên mảng/chuỗi Truy xuất phần tử trong mảng theo chỉ số (tính từ 1) sq = [2, 19, 13, 5, 17] sq(1) = 2 sq(4) = 5 Tổng quát s X* 1 i len s s(i) X s1(1) = s1(2) = b 14 Các hàm và thao tác trên mảng/chuỗi Mảng/chuỗi con [‘a’, ‘a’, ‘d’, ‘c’, ‘a’, ‘b’] (2, …, 4) = [‘a’, ‘d’, ‘c’] “Hello” (2, …, 2) = “e” s(1,…, len s) = s 15 Các hàm và thao tác trên mảng/chuỗi Phép nối ⃕ s ⃕ t Ví dụ: “Hello” ⃕ “ ” ⃕ “World” = “Hello World” Cập nhật phần tử trong mảng † Ví dụ: [1, 2, 3, 4] (3) †11 = [1, 2, 11, 4] Một số quy tắc []⃕s=s⃕[]=s r⃕(s⃕t) = (r⃕s)⃕t (r⃕s = r⃕t) s = t Lưu ý * * Nếu s,tT , st r:T s⃕r = t 16 Các hàm và thao tác trên mảng/chuỗi Lưu ý (ứng dụng cho tiếp đầu ngữ (prefix) của mảng): (st ts) s = t (rs st) rt (rt st) (rs sr) 17 Các hàm và thao tác trên mảng/chuỗi Phép toán phân bố (ngôn ngữ Z) ⃕/[] = [] ⃕/[a,b,…,n] = a⃕b⃕ … ⃕n ⃕/([a]⃕s) = [a]⃕(⃕/s) ⃕/(s⃕[a]) = (⃕/s)⃕[a] 18 Các hàm và thao tác trên mảng/chuỗi Hàm Head (hd) và Tail (tl) Ví dụ: hd [‘p’, ‘q’, ‘r’] = ‘p’ Hàm head của một mảng không rổng có thể định nghĩa như sau: hd (s: X*) r:X pre s[] post r = s(1) 19 Các hàm và thao tác trên mảng/chuỗi Hàm tail của một mảng không rổng có thể định nghĩa như sau: tl (s: X*) rs:X pre s[] post s = [hd s] ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Đặc tả hình thức Đặc tả hình thức Kiểu dữ liệu Hàm successor Tập số tự nhiên Tập số nguyênTài liệu có liên quan:
-
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 242 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 148 0 0 -
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 1 - Trần Hạnh Nhi
98 trang 122 0 0 -
Bài giảng Đặc tả hình thức: Chương 1 - PGS.TS. Vũ Thanh Nguyên
21 trang 80 0 0 -
Bài giảng Lập trình C căn bản: Chương 3 - Phạm Thế Bảo
68 trang 69 0 0 -
Đề thi học kì 2 môn Quản trị cơ sở dữ liệu với Access 1 năm 2022 - Trường Cao đẳng nghề Điện Biên
3 trang 66 1 0 -
Bài giảng học phần Tin học cơ sở - Chương 7: MS Excel
2 trang 51 0 0 -
Giáo án Tin học lớp 8 bài 13: Biểu diễn dữ liệu
5 trang 48 0 0 -
263 trang 48 0 0
-
Bài giảng lập trình c căn bản - Trường Apptech - Chương 2
22 trang 44 0 0