– Giạo trçnh Láûp trçnh Pascal càn bn — – 34 — Trang 3 4 BI 5. DỈỴ LIÃÛU KIÃØU VÄ HỈÅÏNG LIÃÛT KÃ V KIÃØU ÂOẢN CON I. Kiãøu liãût kã: Kiãøu liãût kã âỉåüc âënh nghéa bàòng cạch liãût kã táút c cạc giạ trë ca kiãøu thäng qua cạc tãn do ngỉåìi láûp trçnh âàût ra v danh sạch cạc giạ trë trãn âỉåüc âàût trong càûp ngồûc âån ( ) . 4 Vê dủ: Type Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); Viec = (DiHoc, LamBai, ThiNghiem, Nghi); Khi âọ, ta cọ thãø khai bạo biãún nhỉ sau: Var HomQua, HomNay : Days; Lam : Viec; Hồûc ta cọ thãø khai bạo trỉûc tiãúp våïi mä t kiãøu dỉỵ liãûu nhỉ sau: Var GioiTinh : (Nam, Nu); Color : (Red, Blue, Green, White, Black); Ư Chụ : (1). Cọ thãø thỉûc hiãûn phẹp gạn trãn cạc trë kiãøu liãût kã, vê dủ: Lam := Nghi; Color := Blue; (2). Cạc giạ trë ca cạc kiãøu liãût kã cọ thãø so sạnh våïi nhau theo quy âënh: Giạ trë âỉïng trỉåïc nh hån giạ trë âỉïng sau. Ta chè sỉí dủng toạn tỉí so sạnh cho kiãøu liãût kã v cng l toạn tỉí duy nháút dng cho kiãøu ny. 4 Vê dủ: Theo nhỉ khai bạo trãn, nãúu so sạnh Thu < Fri cho kãút qu True , hồûc Red >= Blue cho kãút qu False . (3). Cạc hm chøn ạp cho kiãøu liãût kã: - Hm ORD : Cho thỉï tỉû trë ca âäúi säú trong kiãøu liãût kã. 4 Vê dủ: theo nhỉ khai bạo trãn, ORD(Sun) = 0, ORD(Mon) = 1. - Hm PRED : Cho trë âỉïng trỉåïc ca âäúi säú trong kiãøu liãût kã. Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 35 Trang 3 5 4 Vờ duỷ: theo nhổ khai baùo trón, PRED(Sat) = Fri, PRED(LamBai) = DiHoc. PRED(Sun) lọựi chổồng trỗnh. - Haỡm SUCC : Cho trở õi sau õọỳi sọỳ trong kióứu lióỷt kó. 4 Vờ duỷ: theo nhổ khai baùo trón, SUCC(Fri) = Sat. SUCC(Sat) lọựi chổồng trỗnh. (4). Khọng thóứ nhỏỷp, xuỏỳt õọỳi vồùi dổợ lióỷu kióứu lióỷt kó . Giaù trở thuọỹc kióứu lióỷt kó thổồỡng õổồỹc duỡng õóứ laỡm chố sọỳ cho voỡng lỷp FOR, caùc trổồỡng hồỹp lổỷa choỹn trong lóỷnh CASE , chố sọỳ cho caùc maớng (Array). 4 Vờ duỷ: Chổồng trỗnh õọứi thổù trong tuỏửn ra sọỳ. Chuớ nhỏỷt ổùng vồùi sọỳ 0, Thổù hai ổùng vồùi sọỳ 1, . Type Thu = (ChuNhat, ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay); Var Ngay : Thu; Begin Writeln( Chuong trinh doi thu ra so ); For Ngay := ChuNhat to ThuBay do Write(Ord(Ngay)); Readln; End. II. Kióứu õoaỷn con: Kióứu õoaỷn con õổồỹc õởnh nghộa do ngổồỡi duỡng dổỷa trón cồ sồớ caùc kióứu vọ hổồùng õóỳm õổồỹc (Nguyón, Logic, Kyù tổỷ, Lióỷt kó) theo daỷng: Tón_kióứu_õoaỷn_con = Hũng_dổồùi Hũng_trón; Trong õoù: Hũng _ dổồùi, Hũng _ trón laỡ caùc giaù trở hũng coù cuỡng kióứu giaù trở vaỡ thoaớ maợn õióửu kióỷn: Hũng _ dổồùi < Hũng _ trón . Khi õoù, caùc giaù trở cuớa kióứu õoaỷn con seợ xaùc õởnh trong khoaớn tổỡ Hũng _ dổồùi õóỳn Hũng _ trón . 4 Vờ duỷ: Type Ky_so = 0 9; { Kióứu gọửm caùc kyù tổỷ sọỳ tổỡ 0 õóỳn 9} Ngay = (Hai, Ba, Tu, Nam, Sau, Bay, ChuNhat); Ngay_Lam_Viec = Hai Bay; {Kióứu Ngay_Lam_Viec laỡ khoaớn con cuớa kióứu Ngay } – Giạo trçnh Láûp trçnh Pascal càn bn — – 36 — Trang 3 6 ChiSo = 1 50; { Kiãøu ChiSo gäưm cạc säú ngun tỉì 1 âãún 50 } Tuoi_Lam_Viec = 18 50; Kiãøu miãưn con giụp cho chỉång trçnh dãù âc, dãù kiãøm tra v tiãút kiãûm bäü nhåï. _________ o ² o _________ BI 6. KIÃØU TÁÛP HÅÜP V KIÃØU MNG I. Kiãøu táûp håüp: 1. Âënh nghéa: Dỉỵ liãûu kiãøu táûp håüp l mäüt táûp håüp ca nhỉỵng dỉỵ liãûu cng thüc mäüt kiãøu vä hỉåïng âãúm âỉåüc. Mäüt kiãøu táûp håüp âỉåüc khai bạo theo dảng sau: SET OF Kiãøu_cå_såí; 4 Vê dủ: Type Chu_so = Set of 0 9; Chu_hoa = Set of ‘A’ ‘Z’; Var So : Chu_so; Chu : Chu_hoa; Mau : Set of (Xanh, Vang, Tim); Ư Chụ : - Cạc giạ trë âỉåüc âỉa vo táûp håüp cáưn cọ säú thỉï tỉû trong khon tỉì 0 âãún 255. - Nhỉ váûy, våïi khai bạo: Type Tap_so = Set of 10 256; 1 Kãút qu khi dëch mạy s thäng bạo läùi: Set base type out of range. - Mäüt dỉỵ liãûu kiãøu táûp håüp cọ dảng cạc pháưn tỉí nàòm trong hai dáúu ngồûc [ ] . Vê dủ: [‘A’, ‘D’, ’E’ ], [3,5 9]; - Táûp håüp räùng k hiãûu l [ ]. - Biãún táûp håüp cho phẹp cọ tỉì 0 âãún 256 pháưn tỉí. - Cọ thãø thỉûc hiãûn phẹp gạn trãn kiãøu táûp håüp. Vê dủ: So := [0, 4, 9]; Chu := [ ]; {Táûp håüp räùng} – Giạo trçnh Láûp trçnh Pascal càn bn — – 37 — Trang 37 Mau := [Vang, Tim]; 2. Cạc phẹp toạn trãn táûp håüp: a. Phẹp toạn quan hãû: Phẹp toạn = ð cho giạ trë True nãúu hai táûp håüp bàòng nhau. Phẹp toạn < > ð cho giạ trë True nãúu hai táûp håüp khạc nhau. Phẹp toạn <= ð A <= B cho giạ trë True nãúu A l táûp con ca B. Phẹp toạn >= ð A >= B cho giạ trë True nãúu B l táûp con ca A. Ư Chụ : Khäng cọ phẹp toạn < v > cho kiãøu táûp håüp. Âãø kiãøm tra táûp håüp A cọ tháût sỉû nàòm trong B hay khäng ta dng cáu lãûnh: If (A< > B) and (A<=B) then Write( ‘A la tap con that su cua B ‘); b. Phẹp toạn IN: Phẹp toạn IN dng âãø xem xẹt mäüt pháưn tỉí no âọ cọ nàòm trong táûp håüp khäng ? Nãúu pháưn tỉí âọ cọ trong táûp håüp thç phẹp toạn s tr vãư giạ trë True , ngỉåüc lải cho giạ trë False. Vê dủ: ‘C’ In [‘A’, ’C’, ‘D’] cho kãút qu True. ‘E’ In [‘A’, ’C’, ‘D’] cho kãút qu False. c. Phẹp toạn håüp, giao, hiãûu: Gi A, B l hai táûp håüp cng kiãøu dỉỵ liãûu. A + B l håüp ca A v B : táûp håüp cạc pháưn tỉí thüc A hồûc thüc B. A * B l giao ca A v B : táûp håüp cạc pháưn tỉí thüc A v thüc B. A - B l hiãûu ca A v B : táûp håüp cạc pháưn tỉí thüc A v khäng thüc B. 4 Vê dủ: A := [1, 3, 9]; B := [9, 2, 5]; Váûy: A * B cọ giạ trë l [9]. A - B cọ giạ trë l [1, 3]. 4 Vê dủ: Viãút chỉång trçnh nháûp vo mäüt chỉỵ cại. Xẹt xem chỉỵ cại âọ l ngun ám hay phủ ám. Var ChuCai, NguyenAm : Set of Char; Ch : char; Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 38 Trang 3 8 Begin ChuCai := [A Z, a z]; NguyenAm := [A, E, I, O, U]; Repeat Write( Nhap mot chu cai de kiem tra: ); Readln(Ch); Until Ch IN ChuCai; If Upcase(Ch) IN NguyenAm then Writeln(Ch, la nguyen am. ) Else Writeln(Ch, la phu am. ); Readln; End. II. Kióứu maớng: 1. Khaùi nióỷm: Maớng (Array) laỡ mọỹt kióứu dổợ lióỷu coù cỏỳu truùc bao gọửm mọỹt sọỳ cọỳ õởnh caùc thaỡnh phỏửn coù cuỡng kióứu, coù cuỡng mọỹt tón chung. Caùc thaỡnh phỏửn cuớa maớng õổồỹc truy xuỏỳt thọng qua caùc chố sọỳ. 4 Vờ duỷ: Maớng A gọửm nm phỏửn tổớ: A[1]=7, A[2]=9, A[3]=0, A[4]= -2, A[5]=3: Cọng duỷng cuớa maớng laỡ duỡng õóứ lổu trổợ mọỹt daợy sọỳ lióỷu coù cuỡng mọỹt tờnh chỏỳt naỡo õoù. Vờ duỷ: caùc õióứm kióứm tra mọỹt mọn hoỹc naỡo õoù cuớa mọỹt hoỹc sinh, caùc giaù trở cuớa mọỹt daợy sọỳ õổồỹc nhỏỷp tổỡ baỡn phờm. 2. Khai baùo maớng mọỹt chióửu: Type Tón _ kióứu _ maớng = ARRAY [Chố _ sọỳ] OF Kióứu _ phỏửn _ tổớ; Var Tón _ bióỳn _ maớng : Tón _ kióứu _ maớng; A[2]=9 A[5]=3 A[3]=0 A[4]=-2 A[1]=7 Maớng A Caùc chố sọỳ õóứ truy cỏỷp Caùc giaù trở cuớa maớng coù cuỡng kióứu dổợ lióỷu Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 39 Trang 39 Trong õoù: - Kióứu _ phỏửn _ tổớ laỡ kióứu dổợ lióỷu cuớa mọựi phỏửn tổớ trong maớng (laỡ kióứu bỏỳt kyỡ). - Chố _ sọỳ laỡ danh saùch caùc chố sọỳ õóứ truy cỏỷp õóỳn caùc thaỡnh phỏửn cuớa maớng. Caùc chố sọỳ coù thóứ laỡ: + Mọỹt õoaỷn con, vờ duỷ: Type Ho _ Ten = Array[1 100] of String[30]; He _ so _ luong = Array[1 100] of Real; + Mọỹt danh saùch lióỷt kó, vờ duỷ: Type Toc _ do = Array[(Oto, Tai, Buyt, GanMay)] of Integer; + Mọỹt kióứu dổợ lióỷu, vờ duỷ: Type ASCIIType = Array[Byte] of Char; Xe = (Oto, Tai, Buyt, GanMay); Toc _ do = Array[Xe] of Integer; Vồùi caùc kióứu maớng trón, ta coù thóứ khai baùo caùc bióỳn maớng sau: Var HeSo : He _ so _ luong; HT : Ho _ Ten; Speed : Toc _ do; Ngoaỡi caùch õởnh nghộa Tón _ kióứu _ maớng nhổ ồớ trón ta cuợng coù thóứ khai baùo mọỹt bióỳn maớng trổỷc tióỳp sau lóỷnh VAR : Var ch : Array[0 25] of Char; Th : Array[-2 4] of Real; 3. Truy cỏỷp caùc phỏửn tổớ cuớa maớng: Vióỷc truy nhỏỷp vaỡo mọỹt phỏửn tổớ naỡo õoù cuớa bióỳn maớng õổồỹc thổỷc hióỷnh qua tón bióỳn maớng, theo sau laỡ giaù trở chố sọỳ õỷt trong dỏỳu [ ]. Vờ duỷ: Ch[2] := B; Th[1] := 12.5; HT[1] := Vu Duc Dung; Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 40 Trang 40 4 Vờ duỷ 1: Nhỏỷp n sọỳ thổỷc tổỡ baỡn phờm vaỡo mọỹt maớng, tờnh trung bỗnh cọỹng cuớa caùc sọỳ naỡy. Uses CRT; Var i,n : Integer; s : Real; a : Array[1 100] of Real; Begin ClrScr; Write( Ban muon nhap bao nhieu PT cho mang : ); Readln(n); For i := 1 to n do Begin Write( PT A[ , i , ]= ); Readln(a[i]); End; s := 0; For i := 1 to n do s := s + a[i]; Write( Trung binh cong cua day so = , s / n : 0 : 4 ); Readln; End. 4 Vờ duỷ 2: Nhỏỷp tổỡ baỡn phờm n phỏửn tổớ thổỷc cuớa mọỹt maớng, sừp xóỳp daợy theo thổù tổỷ tng dỏửn, xuỏỳt giaù trở cuớa maớng lón maỡn hỗnh. Var a : array[1 10] of Real; b : array[1 10] of Real; temp : Real; i, j, n : integer; Begin n:=10; For i := 1 to n do Begin Write( ' PT thu ' , i , ':' ); Readln( a[i] ); End; Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 41 Trang 41 For i := 1 to n - 1 do For j := n downto i do If a[i] > a[j] then Begin temp := a[i]; a[i]:=a[j]; a[j]:=temp; End; For i := 1 to n do Write( a[i] : 0 : 3 , ' ' ); Readln; End. 4. Maớng nhióửu chióửu: Phỏửn naỡy chuớ yóỳu trỗnh baỡy caùc maớng hai chióửu. Caùc maớng nhióửu hồn hai chióửu õổồỹc suy dióựn mọỹt caùch tổỷ nhión. Vióỷc khai baùo maớng hai chióửu cuợng giọỳng nhổ maớng mọỹt chióửu, chố coù õióửu khaùc laỡ noù coù hai tỏỷp chố sọỳ õổồỹc vióỳt caùch nhau bồới dỏỳu ,. 4 Vờ duỷ: Type Mang1 = Array[1 30, 1 50] of Integer; Mang2 = Array[1 3, 0 2] of Real; Var A : Mang1; B : Mang2; Trong õoù, sọỳ phỏửn tổớ cuớa maớng sọỳ thổỷc B laỡ 3 x 3 = 9 (phỏửn tổớ), sừp õỷt trong bọỹ nhồù theo thổù tổỷ nhổ sau: B[1, 0] B[1, 1] B[1 ,2] B[2, 0] B[2, 1] B[2 ,2] B[3, 0] B[3, 1] B[3 ,2] ệ Chuù yù: Maớng hai chióửu coỡn goỹi laỡ ma trỏỷn. Trong vờ duỷ trón, B laỡ ma trỏỷn cỏỳp 3 x 3 . Trong maớng hai chióửu, chố sọỳ sau truy cỏỷp nhanh hồn chố sọỳ trổồùc. óứ truy cỏỷp õóỳn phỏửn tổớ haỡng thổù i, cọỹt thổù j cuớa maớng hai chióửu B ta duỡng caùch vióỳt: B[ i ][ j ] Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 42 Trang 42 hoỷc B[ i , j ] 4 Vờ duỷ: Nhỏỷp mọỹt ma trỏỷn m haỡng, n cọỹt tổỡ baỡn phờm. Tờnh vaỡ in ra maỡn hỗnh tọứng cuớa mọựi cọỹt vaỡ tọứng cuớa mọựi haỡng. Const mMax = 30, nMax = 30; Type Mang = Array[1 mMax, 1 nMax] of Real; Var n, m, i, j : Integer; sum : Real; a : Mang; Begin Write( Ban muon nhap ma tran bao nhieu hang va cot ? ); Readln( m, n ); For i := 1 to m do For j := 1 to n do Begin Write( ' PT thu [ ' , i , ' , , j, ] = ' ); Readln( a[ i, j ] ); End; For j := 1 to n do Begin sum := 0; For i := 1 to m do Sum := sum + a[ i, j ]; Write( Tong cot , j , = , sum : 0 : 5 ); End; For i := 1 to m do Begin sum := 0; For j := 1 to n do Sum := sum + a[ i, j ]; Write( Tong hang , i , = , sum : 0 : 5 ); End; Readln; . ChuNhat to ThuBay do Write(Ord(Ngay)); Readln; End. II. Kióứu õoaỷn con: Kióứu õoaỷn con õổồỹc õởnh nghộa do ngổồỡi duỡng dổỷa trón cồ sồớ caùc kióứu vọ. A <= B cho giạ trë True nãúu A l táûp con ca B. Phẹp toạn >= ð A >= B cho giạ trë True nãúu B l táûp con ca A. Ư Chụ : Khäng cọ phẹp toạn <