Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
30,83 MB
Nội dung
Dành cho sinh viên quy chuyên ngành Công Nghệ Thông Tin ThS Nguyễn Cao Trí caotri@dit.hcmut.edu.vn www.dit.hcmut.edu.vn/~caotri Các kiểu liệu rời rạc Các kiểu liệu có cấu trúc Một số giải thuật aray Khái niệm cấu trúc liệu Bài tập Các tập sách giáo trình Bài tập nhân ma trận Bài tập xác định ma trận đối xứng Bài tập quản lý điểm sinh viên dùng array record Các tập khác chươgnt rình Pascal Kiểu người dùng định nghĩa Kiểu người dùng định nghĩa: Được xây dựng từ kiểu Do ngôn ngữ lập trình quy định sẳn cấu trúc phương thức truy cập Người dùng định nghĩa cách xác định cụ thể giá trị thông số Bao gồm Các kiểu rời rạc: liệt kê, miền Các kiểu có cấu trúc: Array, Record, String Kiểu miền Định nghĩa: Kiểu miền kiểu rời rạc miền trị kiểu rời rạc (kiểu chủ) xác định cận giá trị kiểu chủ Một giá trị thuộc kiểu miền nằm phạm vi cận Mục tiêu sử dụng: Đối với số compiler cho phép sinh mã tự động kiểm tar tính hợp lý dự liệu thay phải tự kiểm tra dòng lệnh ( thị {$R+} vối Turbo Pascal) Tiết kiệm nhớ số trường hợp Dùng khia báo kiểu liệu có cấu trúc khác Array Áp dụng phép toán kiểu chủ cho kiểu miền Cần ý đến vùng giá trị kết để tránh runtime error Cú pháp : Tenkieu = canduoi Cantrên; diem = 10; chu = ‘a’ ‘z’ Kiểu liệt kê Kiểu liệt kê định nghĩa liệt kê giá trị kiểu Các giá trị danh hiệu Ví dụ: = (sun, mon, tue, wed, thu, fri, sat) Var homqua, homnay, ngaymai : Các phép toán: Có thể gán biễu thức liệt kê kiễu cho biến tương ứng Ví dụ: homqua := mon; Thực phép so sánh dự thứ tự index thứ tự liệt kê bằt đầu từ tằng dần Ví dụ tue < wed Hàm ORD (), hàm SUCC() , hàm PRED() Không dùng thao tác xuất nhập với kiểm liệt kê Kiểu liệu ARRAY Định nghĩa: Array dãy gồm nhiều phần tử kiểu Hay nói cách khác dự liệu kiểu array dãy nhiều liệu thuộc kiểu Các phần tử dãy phải có kiểu gọi kiểu sở Kiểu sở kiểu Pascal Các phần tử có mối quan hệ vị trí dãy xác định số (index) Chính thứ tự vị trí dãy Khai báo dãy: tenkieuday = array[kieuchiso] of kieucoso Số phần tử dãy số giá trị có kiểu số Index có giá trị từ giá trị nhỏ đến giá trị lớn kiểu số Vi dụ : daynguyen = array [1 100] of integer; dayreal = array [char] of real; Dãy nguyên có 100 phần tử kiểu integer;index từ đến 100 Dãy dayreal có 256 phần tử kiểu real; index từ ký tự có chr(0) đến chr(255) Các phép toán ARRAY Có thể thực phép gán giá trị biến kiểu array cho Ví dụ var a ,b : daynguyen; ta gán a:= b; Phát biểu gán giá trị phần tử dãy b sang phần tử tương ứng dãy a Có thể truy xuất đến phần tử dãy trực tiếp cách dùng tenbien[index] Ví dụ: a[5] := b[8] Có thể sử dụng phần tử dãy biến kiểu liệu sở Ví dụ for i:= to 100 readln(a[i]) Một số đặc tính kiểu array Số phần tử kiểu array cố định từ khai báo Dù ta dùng phần tử chiếm số nhớ mà dãy khai báo Do thông thường phải khai báo dư số thường dùng để tránh bị thiếu => lãng phí nhớ Các phần tử dãy xếp liên tục nhớ đó: Cho phép khả truy xuất ngẫu nhiên => nhanh Cần có vùng nhớ trống liên tục đủ lớn cấp phát nhớ cho dãy => khó cấp phát Một số giải thuật array Khi tổ chức lưu trữ array nhiều phần tử, thao tác thường phải thực tìm kiếm (search) xếp (sort) phần tử dãy Việc tìm kiếm (search) dùng để truy vấn thống tin Việc xếp (sort) dùng để trình bày thông tin giúp cho thao tác search hiệu Một số giải thuật: Linear search có chưa sort, Binary search Buble sort, quick sort Linear search Xem xét phần tử xem có phải giá trị cần tìm hay không tìm thấy hết số phần tử array kết luận có Timthay := 0; For i:= to n if a[i]=giatricantim then timthay:= i; if timthay= then writeln(‘Không có’) else writeln(‘Có ‘, timthay); i:=1 while (i n-1 Nếu phần tử a[i] >a[j] hoán đỗi phần tử Lặp lâi bước với số phần tử củ dãy lại giảm dần từ n -> Khi hoàn tất dãy có thứ tự tăng dần Ưu điểm giải thuật đơn giản Tuy nhiên tốc độ thứ tự không cao Có giải thuật khác mạnh QuickSort Bubble Sort – giải thuật Giải thuật bubble Sort cho dãy có n phần tử tăng dần For i:= to n For j:= to n-i So sánh hoán if A[j]>A[j+1] then đổi giá trị phần Begin tử Biến t có dùng t:= a[i]; kiểu liệu với a[j]:=a[j+1]; kiểu sở array a[j+1]:=t; End; Array nhiều chiều Kiểu sở array array khác, hình thành nên cấu trúc array of array Trong Pascal hổ trợ sẵn kiển trúc với kiểu liệu array nhiều chiều (multi-dimension array) Khai báo tenkieu= array [index1, index2, , indexN] of kieucoso; Ví dụ: matran = array[1 10, 20] of real; table = array [1 100, ‘a’ ’z’] of integer; Từng phần tử array nhiều chiều truy cập trực tiếp cách rõ index chiều Ví dụ : a[3,5] hay b[11,’h’] Các phần tử sử dụng biến kiểu sở Kiểu RECORD Record kiểu liệu gồm nhiều thành phần, thành phần thuộc kiểu liệu khác Khai báo tênkieu = Record tênfield:kieudulieu_cua_field; …… tênfield:kieudulieu_cua_field; end; Kiểu Record (tt) Các phép toán Có thể gán giá trị biến record thuộc kiểu cho Khi gán field tương ứng Có thể truy cập đến thành phần (field) record cách dùng cấu trúc biênrecord.tênfield Mỗi field dùng biến thuộc kiểu liệu tương ứng Record record Trong cấu trúc field record record khác Khi dield record tương ứng record đề truy cập đến field bên dạng recordname.fieldrecord.field Phát biểu WITH WITH phát biểu dùng với kiểu liệu record Phát biểu WITH có dạng WITH recordname Statement; record name biến record, Statement phát biểu Ý nghĩa phát biểu WITH Trong phần thân phát biểu WITH, muôn truy cập đến field record tương ứng ta cần dùng tên filed mà không cần dùng Tênrecord.tênfield thông thường Kiểu tập hợp Định nghĩa: Dữ liệu kiểu tập hợp tập hợp nhiều liệu thuộc kiều rời rạc Khai báo: Tênkieu = set of kiểu sở Ví dụ: tapnguyen = setof integer; Một liệu kiểu tập hợp tập hợp biểu diễn dạng [phantu, phantu, ] Có thể gán tập hợp cho tập hợp chúng có kiểu sở Ví dụ: t1 := [1,3,5,8] hay t2:=t1 Các phép toán tập hợp Với biến kiểu tập hợp ta có phép toán Phép toán = : cho giá trị TRUE hai tập hợp Phép toán : cho giá trị TRUE hai tập hợp khác Phép toán =B TRUE A chứa B Phép toán IN : X IN A cho giá trị TRUE A phần tử X Phép hợp + : A+B hợp hai tập A, B Phép giao +*: A*B giao hai tập A, B Phép hiệu - : A-B hiệu hai tập A,B [...]... thực hiện số phép so sánh tối thiểu bằng cách lấy phần tử giữa so sánh với giá trị cần tìm: nếu bằng có nghĩa là tìm thấy tại vị trí đó nếu không bằng thì phân nữa số phần tử sẽ được loại bỏ không cần xét vì chắc chắn không thể bằng Giải thuật này cho tốc độ tìm kiếm rất cao Ví dụ dãy có 1 triệu phần tử chỉ tốn không đến 20 phép so sánh là đã xác định được trong khi với linear search là 1 triệu phép... Nguyên tắc : Tìm phần tử lớn nhất đặt vào vị trí cuối cùng A[n] bằng cách so sánh lần lượt các cặp từ a[j], a[j+1] với j từ 1=> n-1 Nếu phần tử a[i] >a[j] thì hoán đỗi 2 phần tử này Lặp lâi bước trên với số phần tử củ dãy còn lại giảm dần từ n -> 2 Khi hoàn tất dãy sẽ có thứ tự tăng dần Ưu điểm của giải thuật là đơn giản Tuy nhiên tốc độ sắp thứ tự không cao Có một giải thuật khác khá mạnh là ... trúc Một số giải thuật aray Khái niệm cấu trúc liệu Bài tập Các tập sách giáo trình Bài tập nhân ma trận Bài tập xác định ma trận đối xứng Bài tập quản lý điểm sinh viên dùng array record... Kiểu người dùng định nghĩa Kiểu người dùng định nghĩa: Được xây dựng từ kiểu Do ngôn ngữ lập trình quy định sẳn cấu trúc phương thức truy cập Người dùng định nghĩa cách xác định cụ thể... phải có kiểu gọi kiểu sở Kiểu sở kiểu Pascal Các phần tử có mối quan hệ vị trí dãy xác định số (index) Chính thứ tự vị trí dãy Khai báo dãy: tenkieuday = array[kieuchiso] of kieucoso Số phần tử