Thông tin tài liệu
Phần 3- Ngôn ngữ lập trình Pascal ngôn ngữ lập trình pascal (tip theo) Chơng 11 Kiểu tập hợp kiểu mảng 11.1 Kiểu tập hợp (set type) 11.1.1 Định nghĩa khai báo : Dữ liệu kiểu tập hợp tập hợp liệu thuộc kiểu vô hớng đếm đợc Một kiểu tập hợp đợc định nghĩa dạng sau : TYPE Tên_kiểu = SET OF kiểu_phần_tử; kiểu_phần_tử kiểu liệu phần tử tập hợp Khai báo biến kiểu tập hợp : Cách : Khai báo qua tên kiểu đà đợc định nghĩa : Ví dô 1: Type Chu_so = Set of 9; Chu_cai_lon = Set of 'A' 'Z'; Var TapA : Chu_so; TapH : Chu_cai_lon; C¸ch : Khai b¸o trùc tiÕp : VÝ dô : Var TapS : Set Of Byte; T1, T2 : Set Of (Xanh,Vang,Tim); Ghi chó : Biến tập hợp cho phép có tối đa 256 phần tử Nếu kiểu_cơ_sở kiểu nguyên giá trị phải nằm đoạn từ đến 255 Chẳng hạn, Víi khai b¸o : Type Tap_so = Set of 100 256; Khi dịch máy thông báo lỗi : Set base type out of range H»ng kiĨu tËp hỵp đợc biểu diễn dới dạng liệt kê phần tử nằm hai dấu ngoặc vuông [ ] Chẳng hạn : ['A','D','E'], [3,5 8] (tập số nguyên 3, 5, 6, 7, 8) kiểu tập hợp (Vị trí phần tử tập hợp ý nghĩa : [1,2]=[2,1]) Tập hợp rỗng đợc kí hiệu [] Có thể thực phép gán biến kiểu tập hợp Ví dụ : Với biến đợc khai báo ví dụ trên, ta cã thĨ g¸n : TapA := [1,2,7]; TapH := []; {Tập hợp rỗng} T1 := [Vang,Tim]; 11.1.2 Các phép toán tập hợp : 54 Giáo trình tin học đại cơng Phép toán quan hệ : - Phép toán = (bằng) : Cho giá trị True tập hợp - Phép toán (khác) : Cho giá trị True tập hợp khác - Phép toán = B cho giá trị True B tập A Chú ý : Không có phép toán < (nhỏ hơn) > (lớn hơn) Để kiĨm tra tËp hỵp A cã thËt sù n»m tập hợp B không ta sử dụng phép toán AND nh câu lệnh sau : If (AB) and (A0) and (n a[j] then { đổi chỗ a[j-1] a[j] } 59 Phần 3- Ngôn ngữ lập tr×nh Pascal Begin Tam := a[j-1]; a[j-1] := a[j]; a[j] := Tam; End; (* In kÕt qu¶ *) Writeln('D·y sau đà xếp : '); For i:=1 to N Write(a[i]:6); Readln; End Giải thuật xếp viết theo vòng lặp REPEAT nh sau: i := 2; Repeat doi := false; For j := N downto i if a[j-1] > a[j] then Begin Doi :=true; Tam := a[j-1]; a[j-1] := a[j]; a[j] := Tam; End; i:=i+1; Until Not Doi; {doi lµ biÕn Boolean } Kết chạy chơng trình hình : PP BUBBLE SORT SAP XEP MANG THANH DAY TANG DAN - a[1] = 44 a[2] = 55 a[3] = 12 a[4] = 42 a[5] = 94 a[6] = 18 a[7] = a[8] = 67 D·y sau ®· s¾p xÕp : 12 18 42 44 55 67 94 Ta có giải thuật tơng tự cho việc xếp mảng theo thứ tự giảm dần Bài toán : Tìm kiếm phần tử mảng đà đợc có thứ tự Giải thuật Binary Search (Tìm kiếm nhị phân) : Giả sử ta có mảng đà xếp theo thứ tự tăng dần, cần tìm phần tử x có mảng không ? Giải thuật đợc thực nh sau : Bớc 1: Phạm vi tìm kiếm toàn mảng 60 Giáo trình tin học đại cơng Bớc 2: Lấy phần tử phạm vi cần tìm kiếm (gọi y) so sánh với x Nếu x = y giải thuật kết thúc thông báo đà tìm thấy Nếu x < y phạm vi tìm kiếm phần tử nằm trớc y Nếu x > y phạm vi tìm kiếm phần tử nằm sau y Bớc 3: Nếu tồn phạm vi tìm kiếm lặp lại bớc 2, ngợc lại thông báo không tìm thấy, giải thuật kết thúc không thành công Sau ví dụ minh hoạ ý tởng giải thuật : Cần tìm phần tử x = mảng : l 5* 10 12 15 j r l j r 3* 4 10 l j ==> T×m thÊy r * Chơng trình minh hoạ Program BINARY_SEARCH; Uses Crt; Const N = 8; Var a : Array[1 N] Of Integer; l,r,i,j : Byte; x : Integer; Timco : Boolean; Begin Clrscr; Writeln('Nhap day theo thu tu tang : '); For i:=1 to N Begin Write('Phan tu thu ',i,': '); Readln(a[i]); End; Writeln(' * * *'); Write('Nhap x = '); Readln(x); Timco:=False; l:=1; r:=n; {l, r cho phạm vi tìm kiếm} While Not(Timco) and (l x then r:=j-1; If a[j] = x then Timco:=True; End; Writeln(' '); If Timco then Write('Da tim co phan tu thu ',j,' bang ',x) Else Write('Khong co phan tu nao day bang ',x); End 61 12 15 Phần 3- Ngôn ngữ lập trình Pascal 11.2.2 Mảng hai chiều (ma trận) : Định nghĩa mảng hai chiều : Mảng hai chiều, gọi ma trận, mở rộng trực tiếp mảng chiều Một kiểu mảng hai chiều đợc định nghĩa dạng sau : TYPE tên_kiểu_mảng = ARRAY[ n1 n2, m1 m2 ] OF kiểu_phần_tử; Trong : n1, n2 (n1 n2) xác định phạm vi số thứ nhất, gọi số dòng Tơng tự m1, m2 (m1 m2) xác định phạm vi số thø hai, gäi lµ chØ sè cét Gièng nh mảng chiều, kiểu liệu số không đợc kiểu thực hay chuỗi Ví dụ 13 : Type mang1 = Array[1 2, 2] Of Integer; mang2 = Array[’a’ ’c’,1 3] Of String[10]; Khai b¸o mảng hai chiều : Cách : Khai báo thông qua kiểu mảng hai chiều đà đợc định nghĩa : Ví dụ 14 : Với hai kiểu mảng đà đợc định nghĩa ví dụ 13, khai b¸o : Var X : mang1; Y : mang2; KÕt ta nhận đợc hai mảng hai chiều : - Mảng X gồm phần tử kiểu liệu nguyên : X[1,0], X[1,1], X[1,2] X[2,0], X[2,1], X[2,2] - Mảng Y gồm phần tử kiểu chuỗi String[10] : Y[‘a’,1], Y[‘a’,2], Y[‘a’,3] Y[‘b’,1], Y[‘b’,2], Y[‘b’,3] Y[‘c’,1], Y[‘c’,2], Y[‘c’,3] C¸ch : Khai b¸o trùc tiÕp : VÝ dơ 15 : Hai mảng X Y ví dụ 14 đợc khai báo trực tiếp nh sau : Var X : Array[1 2,0 2] Of Integer; Y : Array[a c,1 3] Of String[10]; Các thao tác mảng hai chiều : Để xác định phần tử mảng hai chiều, ta viết : tên_biến_mảng[chỉ_số_1, chỉ_số_2] VÝ dơ 16 : Víi hai m¶ng X, Y ë vÝ dơ 14, ta cã thĨ dïng c¸c lƯnh g¸n sau : X[1,0] := 5; X[2,1] := X[1,1] - 20; 62 Giáo trình tin học đại cơng Y[a,1] :=TOAN; Để nhập liệu cho mảng hai chiều, ta phải dùng hai vòng lặp duyệt theo hai số, chẳng hạn muốn nhập liệu cho mảng X vÝ dô 1, ta viÕt : For i:=1 to for j:=0 to Begin Write(’NhËp phÇn tư hàng ,i, cột ,j, : ); Readln(X[i,j]); End; Để in mảng X lên hình, trình bày giống nh cách viết ma trận, hàng in dòng, ta dïng lÖnh : For i:=1 to Begin {in hµng thø i} for j:=0 to write(X[i,j]:3); {xuống dòng, chuẩn bị in dòng tiếp theo} Writeln; End; Ví dụ 17 : Viết chơng trình đọc số liệu vào bảng chiều tính in tổng cột tổng bảng Program Vidu_17; Uses Crt; Type Matrix = Array[1 3,1 4] Of Integer; Var a : Matrix; i : 3; j: 4; tong_cot, tong: Integer; Begin Clrscr; (* NhËp sè liệu vào bảng *) For i:=1 to (* Vòng lặp cho hàng (chiều thứ 1) *) For j:=1 to (* Vòng lặp cho cột (chiỊu thø 2) *) Begin Write('H·y cho biÕt phÇn tư a[', i , ',' , j ,'] = '); Readln(a[i,j]); End; (* Tính in tổng *) Tong:=0; For j:=1 to Begin Tong_cot:=0; For i:=1 to Tong_cot:=Tong_cot + a[i,j]; Writeln('Tổng số cột ',j,' lµ: ',Tong_cot); Tong:=Tong + Tong_cot; 63 ... chơng trình tạo in hình ma trận đơn vị cấp 10 [11.11] Viết chơng trình nhập vào từ bàn phím ma trận vuông xuất hình tổng phần tử đờng chéo 65 Phần 3- Ngôn ngữ lập trình Pascal Chơng 12 Chơng trình. .. Phần 3- Ngôn ngữ lập trình Pascal - LastMode=-1; {Khi khai TextMode(LastMode) Chơng trình tự động text xem mode hình trớc lấy mode khai cho Chơng trình Điều đặc biệt thuận lợi ta muốn Chơng trình. .. riêng rẽ chơng trình (sub-routine hay sub-program) Các lập trình viên làm việc độc lập với chơng trình con, ngời quản lý chung cần tập hợp sử dụng chơng trình để phát triển chơng trình Phơng pháp
Ngày đăng: 05/07/2013, 01:26
Xem thêm: Giáo trình dạy học Ngôn ngữ lập trình Pascal (tiếp theo), Giáo trình dạy học Ngôn ngữ lập trình Pascal (tiếp theo), KiĨu tËp hỵp set type., Khai báo mảng hai chiều : Các thao tác trên mảng hai chiều :, . Dạng tổng quát của khai báo hàm : Lời gọi hàm :, Các hàm :, Cách dùng HàmThủ tục : Thủ tục và hàm đệ qui recursion :, Truy nhập vào từng phần tử của chuỗi. Các thủ tục trên chuỗi ký tự., Sư dơng b¶n ghi., Câu lệnh With. Bản ghi có cấu trúc thay đổi., Khái niệm và định nghĩa., Cấu trúc và phân loại tập tin., Mở tập tin mới để cất dữ liệu : Ghi các giá trị vào tập tin với thủ tục WRITE : Đóng tập tin :, Mở tập tin để đọc : Dùng cặp thủ tục : Đọc dữ liệu từ tập tin : Dùng thủ tục READ dạng nh sau:, So_pt : Byte; FB Tập tin truy nhập trực tiếp. Các thủ tục và hàm xử lý tập tin của TP., KiÓm tra tËp tin khi më., h,ma: Integer; ktra1,ktra2: Boolean; =1;h:=h+1; While in And Not Ktra1 And Not Ktra2 Do =i+1;h:=h+1; End; =1;h:=h+1; While in and Not Ktra Do, Các tập tin thiết bị