Giáo trình Lập trình nâng cao trên ngôn ngữ Pascal - Chương 2: Các kiểu dữ liệu có cấu trúc

Trong chương này không trình bày chi tiết các kiểu dữliệu có cấu trúc ñơn giản như

kiểu mảng, chuỗi. Nội dung trọng tâm của chương là kiểu bản ghi (Record) có cấu trúc thay

ñổi, kiểu tệp và kiểu tập hợp. Chương này bạn ñọc cần nắm ñược các vấn ñềsau:

 Cách thức ñịnh nghĩa một kiểu dữliệu mới

 Khai báo biến với các kiểu dữliệu do người lập trình tự ñịnh nghĩa

 Cách sửdụng toán tửCASE khi khai báo bản ghi có cấu trúc thay ñổi

 Cách thức ghi và ñọc dữliệu cho ba loại tệp: tệp văn bản, tệp có kiểu và tệp

không kiểu, chú trọng cách ghi dữliệu kiểu sốvào tệp văn bản và lấy sốliệu ra

ñểxửlý

 Xửdụng dữliệu kiểu tập hợp trong lập trình

pdf49 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 2272 | Lượt tải: 4download
Tóm tắt nội dung Giáo trình Lập trình nâng cao trên ngôn ngữ Pascal - Chương 2: Các kiểu dữ liệu có cấu trúc, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
hông chứa một phần tử nào cả thì nó ñược gọi là tập rỗng và ñược 
ký hiệu là []. Trong ví dụ 2.28, a là một biến tập hợp rỗng. 
Tập hợp rỗng ñược xem là cùng kiểu với mọi kiểu tập hợp. 
3.3 Các phép tính trên tập hợp 
Các phép tính giới thiệu sau ñây chỉ thực hiện ñược trên các tập hợp cùng kiểu, nghĩa 
là các phần tử của mọi tập hợp phải cùng thuộc một kiểu cơ bản. 
a. Phép gán 
Phép gán ñược dùng ñể hình thành nên một tập hợp. Có thể gán một tập hợp cho một 
biến tập hợp cùng kiểu hoặc gán một biến tập hợp cho một biến tập khác cùng kiểu. (xem ví 
dụ 2.28) 
b. Phép hợp 
Phép hợp ñược ký hiệu bởi toán tử " + ". Hợp của hai tập hợp A và B khi ñó có thể 
viết là A + B 
Hợp của hai tập A và B là một tập hợp gồm các phần tử thuộc A hoặc thuộc B. 
Giả sử các tập A, B, C ñược hình thành như sau: 
A := [1..8,10..15]; 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 63 
B := [5..9, 20,30]; 
C := A + B; 
Tập C ñược hình thành bởi phép hợp A và B nên sẽ gồm các phần tử [1..15,20,30] 
c. Phép giao 
Giao của hai tập A và B ký hiệu là A*B là một tập hợp gồm các phần tử ñồng thời 
thuộc cả A và B. 
C := A*B; tập C sẽ có các phần tử [5, 6, 7, 8] 
d. Phép trừ 
Phép trừ hai tập hợp A và B ký hiệu là A - B cho ta một tập gồm các phần tử thuộc A 
nhưng không thuộc B 
C := A - B; tập C sẽ có các phần tử [1..4, 10..15] 
còn [1..5] - [1..10] = [ ] 
e. Phép thuộc về 
Phép thuộc về ký hiệu là IN là một phép thử xem một giá trị hay một biến (không phải 
là biến tập) có thuộc về một tập khác hay không? Nếu có giá trị phép thử là True, ngược lại 
phép thử cho kết quả False. 
Ví dụ 2.28 
T1:= ['a'..'z']; 
T2:= [true,false]; 
T3 := 'c'; 
Write( T3 in T1); cho kết quả True 
Write(false in T2); cho kết quả True 
Wite('1' in T1 ); cho kết quả False 
 3.4. Các phép so sánh trên tập 
Các phép so sánh nói trong mục này chỉ ñược thực hiện trên các tập cùng kiểu. Kết 
quả của phép so sánh thuộc kiểu Boolean nghĩa là cho ra một trong hai giá trị True hoặc 
False. 
a. Phép bằng, ký hiệu là = 
Hai tập A và B gọi là bằng nhau nếu mọi phần tử của A ñều thuộc B và mọi phần tử 
của B ñều thuộc A không phụ thuộc vào thứ tự các phần tử. 
Ví dụ phép so sánh 
[1..6] = [1,2,4,5,3,6] cho kết quả True 
['a', 'b', 'c'] = ['A', 'B', 'C'] cho kết quả False 
b. Phép không bằng, ký hiệu là 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 64 
Hai tập A và B gọi là không bằng nhau nếu tập A có ít nhất một phần tử không thuộc 
tập B hoặc tập B có ít nhất một phần tử không thuộc tập A. 
[1..6] [1,2,4,5,3,6] cho kết quả False 
['a', 'b', 'c'] ['A', 'B', 'C'] cho kết quả True 
c. Phép nhỏ hơn hoặc bằng, ký hiệu là <= 
Tập A gọi là nhỏ hơn hoặc bằng tập B nếu mọi phần tử của tập A ñều thuộc tập B. 
[1..6] <= [1,2,4,5,3,6,8,9] cho kết quả True 
[1..6] <= [1,2,4,5,3] cho kết quả False 
d. Phép lớn hơn hoặc bằng, ký hiệu là >= 
Tập A gọi là lớn hơn hoặc bằng tập B nếu mọi phần tử của tập B ñều thuộc tập A. 
[1..6] >= [1,2,4,5] cho kết quả True 
[1,5] >= [1,2,4,5] cho kết quả False 
Chú ý: Trong Pascal không tồn tại các phép so sánh nhỏ hơn 
Các ví dụ về dữ liệu kiểu tập hợp 
Ví dụ 2.29 : Tìm số nguyên tố 
Ta ñã biết số nguyên tố là các số chỉ chia hết cho 1 và chính nó (ngoại trừ số 1) ñể tìm 
các số nguyên tố trong khoảng từ 1 ñến n chúng ta sử dụng nguyên lý sàng Eratosthène. 
Nguyên lý này có thể phát biểu như sau: nếu a là một số nguyên tố trong tập [1..n] thì không 
thể tồn tại một số b thuộc tập [1..n] mà b là bội số của a. Nói cách khác nếu ta ñã tìm ñược a là 
một số nguyên tố thì ta phải loại trừ khỏi tập [1..n] tất cả các số là bội số của a. 
Program Tim_so_nguyen_to; 
Uses crt; 
Const n=255; 
Type Songuyen = 1..n; {ñịnh nghĩa kiểu dữ liệu Songuyen gồm n số} 
Var snt,sang: set of songuyen; 
 so:songuyen; i:integer; 
Begin 
 clrscr; 
 Writeln('Cac so nguyen to tu 2 den ',n); 
 snt:=[];{Tập snt ban ñầu là tập rỗng} 
 sang:=[2..n]; {Xác lập tập Sang gồm số nguyên tố ñầu tiên (2) và các số khác} 
 so:=2; {Gán vào biến So số nguyên tố ñầu tiên = 2} 
Repeat 
 While not (so in sang) do so:=so+1; 
 snt:=snt+[so]; {Bổ xung số nguyên tố vừa tìm ñược vào tập Snt} 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 65 
 i:=so; 
 Write(so,' '); {Viết số nguyên tố vừa tìm ñược ra màn hình} 
 While i<=n do 
 Begin 
 sang:=sang-[i]; i:=i+so; {Xoá các số là bội số của số nguyên tố vừa tìm ñược} 
 End; 
Until sang = []; 
Readln; 
End. 
Ví dụ 2.30 
Trò chơi gieo xúc xắc: nguyên tắc chơi như sau: người chơi chọn một số trong khoảng 
từ 1 ñến 6, máy sẽ gieo 3 con xúc xắc ñể ñược 3 số. Nếu số của người chơi nằm trong tập số 
mà máy ñã gieo thì người chơi thắng, ngược lại người chơi thua. Nếu ba lần chơi mà người 
chơi ñều thắng thì tuyên bố người chơi trúng số ñộc ñắc. 
 Program xuc_xac; 
 Uses crt; 
 Var xucxac: set of 1..6; 
 So,i,dem,a,b,c:1..6;tl:char; 
 Begin 
 Clrscr; 
 Repeat 
 clrscr; 
 For i:= 1 to 3 do 
 Begin 
 Textcolor(5); 
 Write('Moi ban chon mot so tu 1 den 6 '); readln(so); 
 a:=random(6); b:=random(6); c:=random(6); 
 xucxac:=[a,b,c]; 
 Writeln('So ma ban da chon ',so); 
 Writeln('So ma may da gieo ',a,' ',b,' ',c); 
 If so in xucxac then 
 Begin 
 textcolor(14); 
 writeln('Ban thang van thu ',i); 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 66 
 dem:=dem+1; 
 End 
 else 
 Writeln('Ban thua van thu ',i); 
 If dem = 3 then Writeln('Ban trung doc dac - Xin chuc mung'); 
 End; 
 Writeln; 
 Write('Choi tiep hay thoi? C/K '); 
 Readln(tl); 
 Until upcase(tl)='K'; 
 End. 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 67 
Bài tập ứng dụng chương 2 
1. Nhập vào thư viện n ñầu sách (n<=50), các thông số cần ñưa vào là: Tên sách, Tên 
tác giả, Năm xuất bản, Tên nhà xuất bản, Số trang, Giá tiền. Hiện danh mục sách ñã nhập lên 
màn hình. 
2. Dữ liệu tuyển sinh gồm các trường: SBD, HOTEN, TOAN, LY, HOA, TONG, 
KETQUA. 
Lập chương trình nhập dữ liệu cho một phòng thi không quá 40 thí sinh, số liệu trong 
trường Tong = Toan+Ly+Hoa, trường Ketqua ñiền vào chữ "DO" nếu tổng >=20, còn lại là 
"TRUOT". 
Hiện lên màn hình những người DO 
3. Dữ liệu quản lý hàng hoá bao gồm: Mã hàng, Tên hàng, Số lượng, ðơn giá, Ngày 
nhập, Số chứng từ. 
Lập chương trình nhập hàng vào kho, sau mỗi mặt hàng nhập lại hỏi: "Nhap tiep hay 
thoi? C/K ". Nếu bấm "K" thì kết thúc nhập và hiện danh mục hàng ñã nhập lên màn hình. 
4. TOADO là kiểu bản ghi chứa toạ ñộ (cột,dòng) của ba ñiểm trên màn hình. Lập 
chương trình kiểm tra xem ba ñiểm này có thẳng hàng không, nếu không thẳng hàng thì tạo 
nên tam giác gì (Vuông, Cân, ...) 
5. Dữ liệu quản lý vé xe lửa gồm: Số toa, số ghế, giá vé, ga ñi, ga ñến, ðã bán vé 
chưa. Mỗi toa tầu có 50 ghế ñánh số thứ tự từ 1 ñến 50. 
Lập chương trình nhập vào những ghế ñã bán vé, thông báo còn bao nhiêu chỗ chưa 
bán vé. 
6. Dữ liệu quản lý hàng hoá bao gồm: Mã hàng, Tên hàng, Số lượng, ðơn giá, Ngày 
nhập, Số chứng từ. Ngày nhập bao gồm Ngay, Thang, Nam. 
Lập chương trình nhập hàng vào kho, kết thúc nhập khi mã hàng bằng dấu "*" . 
Cho một tháng nào ñó, hiện những hàng ñã nhập trong tháng ñó. 
7. Dữ liệu quản lý ñất ñai bao gồm hai trường Chủ ñất và ðất. Chủ ñất bao gồm: Mã 
hồ sơ, Họ tên, Mã ñất, ðịa chỉ. ðất bao gồm: Mã ñất, Diện tích, Loại ñất, Mục ñích sử dụng. 
Nếu mục ñích sử dụng là trồng trọt thì có thuế nông nghiệp 
Nếu mục ñích sử dụng là công ích (trường học, bệnh viện, sân vận ñộng) thì không 
phải nộp thuế. 
Nếu mục ñích sử dụng là kinh doanh bất ñộng sản thì có thuế ñất và thuế môn bài. 
Nhập dữ liệu cho n người (n<=30) sau ñó hiện lên màn hình 10 người sử dụng nhiều 
ñất nhất. 
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 68 
8. Viết chương trình nhập vào tệp văn bản F một số dòng văn bản, ñếm xem trong tệp 
các ký tự a,b,....z mỗi ký tự xuất hiên bao nhiêu lần? 
9. Thông tin về thí sinh thi ñại học bao gồm Hoten, namsinh, diemthi, ketqua. Thông 
tin trên ñược ghi trong một tệp văn bản, mỗi trường trên một dòng. Lập chương trình in ra 
màn hình mỗi thí sinh trên một dòng 
Ví dụ: 
Trong tệp In ra màn hình 
Tran Tam 
1980 
8 
Kha 
Tran Tam 1980 8 Kha 
10. Dữ liệu quản lý hàng hoá bao gồm: Mã hàng, Tên hàng, Số lượng, ðơn giá, Ngày 
nhập, Số hoá ñơn. Lập chương trình nhập dữ liệu từ bàn phím và ghi vào tệp có kiểu. Cho biết 
một số hoá ñơn, hiện lên màn hình số liệu ứng với hoá ñơn ñó. 
11. T1 và T2 là các tệp văn bản, nội dung T1, T2 nhập từ bàn phím, hãy nối T1 với T2 
thành T3, hiện T3 lên màn hình. 
12. T1 là tệp văn bản chứa 15 ký tự dạng số Integer. Lập chương trình chuyển T1 
thành tệp số nguyên T2, tính tổng các số và viết kết quả lên màn hình. 
13. Giả sử thư mục hiện hành là C:\TP\BIN. Cho biết một tên tệp từ bàn phím, kiểm 
tra xem trong thư mục hiện hành có tệp ñó chưa, nếu có thì hiện nội dung tệp, nếu chưa thì 
mở tệp mới ñể ghi dữ liệu. 
14. Hai tập A và B gọi là liên thông nếu chúng có ít nhất một phần tử chung. Nếu các 
cặp tập hợp sau là liên thông (A,B), (B,C), (C,D), (D,E) thì ta nói có một ñường nối từ A ñến 
E. 
Lập chương trình tìm ñường nối giữa n ñiểm A1, A2, ... An trên màn hình biết rằng toạ 
ñộ giữa các các ñiểm lần lượt là (x1, y1), (x2, y2), ... (xn, yn). In ra tất cả ñường nối theo mẫu: 
A1 -> A2 ->... -> An 
Nếu giữa các cặp ñiểm Ai, Aj
 không có ñường nối thì trả lời không có. 
Ví dụ: 
A1(1,2) , A2(2,3) ,A3(3,4), A4(4,1), A5(5,6) 
A1 -> A5 không có ñường nối 
A1 -> A2 có hai ñường nối 
A1 -> A2 
A1 -> A4 -> A3 ->A2 

File đính kèm:

  • pdfGiáo trình Lập trình nâng cao trên ngôn ngữ Pascal - Chương 2_Các kiểu dữ liệu có cấu trúc.pdf
Tài liệu liên quan